From: Don Armstrong Date: Tue, 31 Dec 2013 20:56:31 +0000 (-0800) Subject: Imported Upstream version 2.18.0 X-Git-Tag: upstream/2.18.0^0 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=0ac07f31e0f95fc18e5916ce756b9c746af7cc58;p=lilypond.git Imported Upstream version 2.18.0 --- diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000000..72472a6055 --- /dev/null +++ b/.dir-locals.el @@ -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 index 0000000000..00d0145473 --- /dev/null +++ b/.gitfilelist @@ -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 diff --git a/.gitignore b/.gitignore index e0fae2d1e4..3097acfe26 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/AUTHORS.txt b/AUTHORS.txt index bbb1eec00c..f7fcb0c7db 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -57,7 +57,7 @@ Current Development Team * Neil Puttock: Core developer - * Mike Solomon: , Core developer, Frog meister + * Mike Solomon: , Core developer, Frog meister * Carl Sorensen: , 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: , - `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 ........... diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index b1c47c1f79..c1a194b54b 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -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 diff --git a/Documentation/changes.tely b/Documentation/changes.tely index b59ee7e91f..0815787d3c 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -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 - 4. b - } \\ { - 4. - } >> @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 { 1 } + \layout { indent=0 } } , + cello: \score { \new Staff { \clef "bass" } + \layout { indent=0 } } } @end lilypond +previously looked like +@lilypond[quote] +\markup { + violin: \general-align #Y #UP + \score { \new Staff { 1 } + \layout { indent=0 } } , + cello: \general-align #Y #UP + \score { \new Staff { \clef "bass" } + \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 r r } \\ + { d r a r bes r } >> | + 1 + } + \new Staff \relative + { \clef "treble" \freeBass "1" + r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef "bass" \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 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] +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'' 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 "• † ©right; &OE; &ss; ¶" -@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) - 4 - \once \set fingeringOrientations = #'(right) - - -"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. diff --git a/Documentation/common-macros.itexi b/Documentation/common-macros.itexi index 123c1aa31a..f3dac48c91 100644 --- a/Documentation/common-macros.itexi +++ b/Documentation/common-macros.itexi @@ -18,6 +18,7 @@ \fi @end tex +@include cyrillic.itexi @c ***** Displaying text ***** diff --git a/Documentation/contributor.texi b/Documentation/contributor.texi index 74d03bd1b7..9541883b74 100644 --- a/Documentation/contributor.texi +++ b/Documentation/contributor.texi @@ -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 index c93c9e0624..0000000000 --- a/Documentation/contributor/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/contributor/administration.itexi b/Documentation/contributor/administration.itexi index 6695375807..90fe795a0c 100644 --- a/Documentation/contributor/administration.itexi +++ b/Documentation/contributor/administration.itexi @@ -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 diff --git a/Documentation/contributor/build-notes.itexi b/Documentation/contributor/build-notes.itexi index e00cfc7e7e..b8dff79c1f 100644 --- a/Documentation/contributor/build-notes.itexi +++ b/Documentation/contributor/build-notes.itexi @@ -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 diff --git a/Documentation/contributor/doc-translation-list.itexi b/Documentation/contributor/doc-translation-list.itexi index b0e9b97f06..5f9a4c7f08 100644 --- a/Documentation/contributor/doc-translation-list.itexi +++ b/Documentation/contributor/doc-translation-list.itexi @@ -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 diff --git a/Documentation/contributor/doc-work.itexi b/Documentation/contributor/doc-work.itexi index ff6e0f0721..680522cbc9 100644 --- a/Documentation/contributor/doc-work.itexi +++ b/Documentation/contributor/doc-work.itexi @@ -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}. diff --git a/Documentation/contributor/feta-font.itexi b/Documentation/contributor/feta-font.itexi index 78021ae8d7..002aa895a4 100644 --- a/Documentation/contributor/feta-font.itexi +++ b/Documentation/contributor/feta-font.itexi @@ -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 diff --git a/Documentation/contributor/introduction.itexi b/Documentation/contributor/introduction.itexi index 56b9cb40be..12c62e5bfa 100644 --- a/Documentation/contributor/introduction.itexi +++ b/Documentation/contributor/introduction.itexi @@ -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). diff --git a/Documentation/contributor/issues.itexi b/Documentation/contributor/issues.itexi index 7bea164937..01cce81411 100644 --- a/Documentation/contributor/issues.itexi +++ b/Documentation/contributor/issues.itexi @@ -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 diff --git a/Documentation/contributor/programming-work.itexi b/Documentation/contributor/programming-work.itexi index d72424ab4c..819534b4ad 100644 --- a/Documentation/contributor/programming-work.itexi +++ b/Documentation/contributor/programming-work.itexi @@ -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 diff --git a/Documentation/contributor/quick-start.itexi b/Documentation/contributor/quick-start.itexi index 2172677054..22ea0591b1 100644 --- a/Documentation/contributor/quick-start.itexi +++ b/Documentation/contributor/quick-start.itexi @@ -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. diff --git a/Documentation/contributor/regressions.itexi b/Documentation/contributor/regressions.itexi index 7bca714f2c..365582e87f 100644 --- a/Documentation/contributor/regressions.itexi +++ b/Documentation/contributor/regressions.itexi @@ -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 diff --git a/Documentation/contributor/release-work.itexi b/Documentation/contributor/release-work.itexi index 26a8223584..2bd0b68f8d 100644 --- a/Documentation/contributor/release-work.itexi +++ b/Documentation/contributor/release-work.itexi @@ -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). diff --git a/Documentation/contributor/source-code.itexi b/Documentation/contributor/source-code.itexi index d3f4f3a11b..6a957052da 100644 --- a/Documentation/contributor/source-code.itexi +++ b/Documentation/contributor/source-code.itexi @@ -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. diff --git a/Documentation/cs/GNUmakefile b/Documentation/cs/GNUmakefile index 97300b5296..fc9f99c56a 100644 --- a/Documentation/cs/GNUmakefile +++ b/Documentation/cs/GNUmakefile @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/cs/essay/GNUmakefile +++ /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 index 0000000000..e69de29bb2 diff --git a/Documentation/cs/included/GNUmakefile b/Documentation/cs/included/GNUmakefile deleted file mode 100644 index afe7a4d738..0000000000 --- a/Documentation/cs/included/GNUmakefile +++ /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/cs/learning.tely b/Documentation/cs/learning.tely old mode 100755 new mode 100644 diff --git a/Documentation/cs/learning/GNUmakefile b/Documentation/cs/learning/GNUmakefile deleted file mode 100644 index 425cc1d8e2..0000000000 --- a/Documentation/cs/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/cs/learning/common-notation.itely b/Documentation/cs/learning/common-notation.itely index e60566d22b..258e2ce108 100644 --- a/Documentation/cs/learning/common-notation.itely +++ b/Documentation/cs/learning/common-notation.itely @@ -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'' { diff --git a/Documentation/cs/learning/fundamental.itely b/Documentation/cs/learning/fundamental.itely index a09c282f08..2f8cc035d2 100644 --- a/Documentation/cs/learning/fundamental.itely +++ b/Documentation/cs/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/cs/learning/tweaks.itely b/Documentation/cs/learning/tweaks.itely index 8097ccf4fd..de1f0e9aa7 100644 --- a/Documentation/cs/learning/tweaks.itely +++ b/Documentation/cs/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -403,7 +403,7 @@ mittlere Note eines Akkordes auf diese Weise ändern: @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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) 4 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 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 diff --git a/Documentation/cs/macros.itexi b/Documentation/cs/macros.itexi old mode 100755 new mode 100644 diff --git a/Documentation/cs/texidocs/GNUmakefile b/Documentation/cs/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/cs/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/cs/translations.itexi b/Documentation/cs/translations.itexi index 9cd7e81b06..fc2e13f51f 100644 --- a/Documentation/cs/translations.itexi +++ b/Documentation/cs/translations.itexi @@ -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 -ano +částečně (48 %) @end html @end ifhtml @ifnothtml -ano +částečně (48 %) @end ifnothtml @tab @ifhtml @html -ano +částečně @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 -ano +částečně (35 %) @end html @end ifhtml @ifnothtml -ano +částečně (35 %) @end ifnothtml @tab @ifhtml @html -ano +částečně @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 -částečně +částečně @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 -částečně (98 %) +částečně (50 %) @end html @end ifhtml @ifnothtml -částečně (98 %) +částečně (50 %) @end ifnothtml @tab @ifhtml @html -částečně +částečně @end html @end ifhtml @ifnothtml @@ -192,24 +192,24 @@ ano @item A Předlohy @* -219 +372 @tab Pavel Fric @tab @tab @ifhtml @html -ano +částečně (38 %) @end html @end ifhtml @ifnothtml -ano +částečně (38 %) @end ifnothtml @tab @ifhtml @html -částečně +částečně @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 -částečně +částečně @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 -částečně +částečně @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 -částečně +částečně @end html @end ifhtml @ifnothtml @@ -366,24 +366,24 @@ ano @item Společenství @* -3006 +3073 @tab  Pavel Fric @tab @tab @ifhtml @html -částečně (96 %) +částečně (95 %) @end html @end ifhtml @ifnothtml -částečně (96 %) +částečně (95 %) @end ifnothtml @tab @ifhtml @html -částečně +částečně @end html @end ifhtml @ifnothtml diff --git a/Documentation/cs/usage/GNUmakefile b/Documentation/cs/usage/GNUmakefile deleted file mode 100644 index 425cc1d8e2..0000000000 --- a/Documentation/cs/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/cs/usage/external.itely b/Documentation/cs/usage/external.itely index 073ada5667..90036373b1 100644 --- a/Documentation/cs/usage/external.itely +++ b/Documentation/cs/usage/external.itely @@ -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. diff --git a/Documentation/cs/usage/lilypond-book.itely b/Documentation/cs/usage/lilypond-book.itely index ae2b89ad6f..d041f61620 100644 --- a/Documentation/cs/usage/lilypond-book.itely +++ b/Documentation/cs/usage/lilypond-book.itely @@ -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 diff --git a/Documentation/cs/usage/running.itely b/Documentation/cs/usage/running.itely index 655889565e..c0ab293214 100644 --- a/Documentation/cs/usage/running.itely +++ b/Documentation/cs/usage/running.itely @@ -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 diff --git a/Documentation/cs/usage/updating.itely b/Documentation/cs/usage/updating.itely index 37575f8f66..5f05a50375 100644 --- a/Documentation/cs/usage/updating.itely +++ b/Documentation/cs/usage/updating.itely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/cs/web/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/cs/web/community.itexi b/Documentation/cs/web/community.itexi index 1c74701216..c4e37ed8d7 100644 --- a/Documentation/cs/web/community.itexi +++ b/Documentation/cs/web/community.itexi @@ -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í diff --git a/Documentation/cs/web/download.itexi b/Documentation/cs/web/download.itexi old mode 100755 new mode 100644 diff --git a/Documentation/cs/web/manuals.itexi b/Documentation/cs/web/manuals.itexi old mode 100755 new mode 100644 index 610f2a972d..376a6996d2 --- a/Documentation/cs/web/manuals.itexi +++ b/Documentation/cs/web/manuals.itexi @@ -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 index 6339bf26dc..0000000000 --- a/Documentation/cs/web/news-front.itexi +++ /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 -- diff --git a/Documentation/css/GNUmakefile b/Documentation/css/GNUmakefile index 41495994ce..5f822237df 100644 --- a/Documentation/css/GNUmakefile +++ b/Documentation/css/GNUmakefile @@ -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 diff --git a/Documentation/css/lilypond-website.css b/Documentation/css/lilypond-website.css index 2ce6229125..820cd5c5bf 100644 --- a/Documentation/css/lilypond-website.css +++ b/Documentation/css/lilypond-website.css @@ -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 index 0000000000..4e7569cf40 --- /dev/null +++ b/Documentation/cyrillic.itexi @@ -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 diff --git a/Documentation/de/GNUmakefile b/Documentation/de/GNUmakefile index c31fd2fa6a..427949d751 100644 --- a/Documentation/de/GNUmakefile +++ b/Documentation/de/GNUmakefile @@ -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 diff --git a/Documentation/de/essay.tely b/Documentation/de/essay.tely index e5bb7f6b7b..adf0ff03e6 100644 --- a/Documentation/de/essay.tely +++ b/Documentation/de/essay.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/de/essay/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/essay/engraving.itely b/Documentation/de/essay/engraving.itely index 502906318f..0affa3b9e5 100644 --- a/Documentation/de/essay/engraving.itely +++ b/Documentation/de/essay/engraving.itely @@ -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 2.~->^\f 4.~ 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 r4\fermata } \new Voice = "II" \relative c' { \voiceTwo c4 - \times 4/5 { + \tuplet 5/4 { 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 ) r\fermata } >> @@ -1457,14 +1457,14 @@ ausgerichtet, beim zweiten nach oben (rechts). \score { \relative c' { \stemDown 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT + \override Arpeggio.direction = #RIGHT \stemUp 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 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 4 - \once \override NoteHead #'style = #'cross + \once \override NoteHead.style = #'cross 4 \applyOutput #'Voice #mc-squared 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 } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down + \override Staff.Arpeggio.arpeggio-direction =#down 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 index 000480f365..0000000000 --- a/Documentation/de/extending/GNUmakefile +++ /dev/null @@ -1,4 +0,0 @@ -depth = ../../.. -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/extending/programming-interface.itely b/Documentation/de/extending/programming-interface.itely index 35ad908c5d..4b1b43a006 100644 --- a/Documentation/de/extending/programming-interface.itely +++ b/Documentation/de/extending/programming-interface.itely @@ -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 diff --git a/Documentation/de/extending/scheme-tutorial.itely b/Documentation/de/extending/scheme-tutorial.itely index 06e84edb9f..954f1dce5c 100644 --- a/Documentation/de/extending/scheme-tutorial.itely +++ b/Documentation/de/extending/scheme-tutorial.itely @@ -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 = (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 index dfb8d673f8..0000000000 --- a/Documentation/de/included/GNUmakefile +++ /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/de/included/generating-output.itexi b/Documentation/de/included/generating-output.itexi index 34e33733d5..c3b51cc8af 100644 --- a/Documentation/de/included/generating-output.itexi +++ b/Documentation/de/included/generating-output.itexi @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/de/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/learning/common-notation.itely b/Documentation/de/learning/common-notation.itely index 2f9e10c1ea..e108d0b0c0 100644 --- a/Documentation/de/learning/common-notation.itely +++ b/Documentation/de/learning/common-notation.itely @@ -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'' { diff --git a/Documentation/de/learning/fundamental.itely b/Documentation/de/learning/fundamental.itely index 1b72a415f4..77e3112483 100644 --- a/Documentation/de/learning/fundamental.itely +++ b/Documentation/de/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/de/learning/tweaks.itely b/Documentation/de/learning/tweaks.itely index 338985f9e6..0c64ba2469 100644 --- a/Documentation/de/learning/tweaks.itely +++ b/Documentation/de/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -403,7 +403,7 @@ mittlere Note eines Akkordes auf diese Weise ändern: @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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) 4 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: \\ { 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 diff --git a/Documentation/de/notation.tely b/Documentation/de/notation.tely index 729c265302..966c0b6c6b 100644 --- a/Documentation/de/notation.tely +++ b/Documentation/de/notation.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/de/notation/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/notation/ancient.itely b/Documentation/de/notation/ancient.itely index b2fb9ddc67..813dcf4d5c 100644 --- a/Documentation/de/notation/ancient.itely +++ b/Documentation/de/notation/ancient.itely @@ -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: diff --git a/Documentation/de/notation/changing-defaults.itely b/Documentation/de/notation/changing-defaults.itely index 90251a3835..e528f8ae6a 100644 --- a/Documentation/de/notation/changing-defaults.itely +++ b/Documentation/de/notation/changing-defaults.itely @@ -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 4 -<\tweak #'color #red c e>4 +\tweak color #red 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 -4 +\tweak Stem.color #red +\tweak Beam.color #green c8 e +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 } #}) diff --git a/Documentation/de/notation/cheatsheet.itely b/Documentation/de/notation/cheatsheet.itely index 13737c907f..ebedb6c218 100644 --- a/Documentation/de/notation/cheatsheet.itely +++ b/Documentation/de/notation/cheatsheet.itely @@ -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 diff --git a/Documentation/de/notation/chords.itely b/Documentation/de/notation/chords.itely index dca13cea32..fb3336f998 100644 --- a/Documentation/de/notation/chords.itely +++ b/Documentation/de/notation/chords.itely @@ -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 diff --git a/Documentation/de/notation/contemporary.itely b/Documentation/de/notation/contemporary.itely index 4292a3364e..d57c3e50b2 100644 --- a/Documentation/de/notation/contemporary.itely +++ b/Documentation/de/notation/contemporary.itely @@ -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 diff --git a/Documentation/de/notation/editorial.itely b/Documentation/de/notation/editorial.itely index 1d3080c4a5..f01a51d270 100644 --- a/Documentation/de/notation/editorial.itely +++ b/Documentation/de/notation/editorial.itely @@ -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 diff --git a/Documentation/de/notation/expressive.itely b/Documentation/de/notation/expressive.itely index 35b8fde46a..4642922195 100644 --- a/Documentation/de/notation/expressive.itely +++ b/Documentation/de/notation/expressive.itely @@ -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 diff --git a/Documentation/de/notation/fretted-strings.itely b/Documentation/de/notation/fretted-strings.itely index b5b0bc6419..58e9539e72 100644 --- a/Documentation/de/notation/fretted-strings.itely +++ b/Documentation/de/notation/fretted-strings.itely @@ -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 @{ @} + stringTunings = \stringTuning @} @} @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" 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 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" }}} 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 } diff --git a/Documentation/de/notation/input.itely b/Documentation/de/notation/input.itely index 94b1c63374..5b159b1a05 100644 --- a/Documentation/de/notation/input.itely +++ b/Documentation/de/notation/input.itely @@ -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." diff --git a/Documentation/de/notation/keyboards.itely b/Documentation/de/notation/keyboards.itely index e94a624087..eb262ad221 100644 --- a/Documentation/de/notation/keyboards.itely +++ b/Documentation/de/notation/keyboards.itely @@ -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\! } diff --git a/Documentation/de/notation/notation-appendices.itely b/Documentation/de/notation/notation-appendices.itely index 11b10ac1e5..1a14675ecb 100644 --- a/Documentation/de/notation/notation-appendices.itely +++ b/Documentation/de/notation/notation-appendices.itely @@ -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 diff --git a/Documentation/de/notation/percussion.itely b/Documentation/de/notation/percussion.itely index b1896d2ce2..786ba54c4f 100644 --- a/Documentation/de/notation/percussion.itely +++ b/Documentation/de/notation/percussion.itely @@ -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" } diff --git a/Documentation/de/notation/pitches.itely b/Documentation/de/notation/pitches.itely index b7bfe58e74..70129c81c7 100644 --- a/Documentation/de/notation/pitches.itely +++ b/Documentation/de/notation/pitches.itely @@ -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 diff --git a/Documentation/de/notation/repeats.itely b/Documentation/de/notation/repeats.itely index 5195578fb9..2e2d5198cf 100644 --- a/Documentation/de/notation/repeats.itely +++ b/Documentation/de/notation/repeats.itely @@ -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. 16 } -\repeat percent 2 { \times 2/3 { r8 c d } e4 } +\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 } @end lilypond @snippets diff --git a/Documentation/de/notation/rhythms.itely b/Documentation/de/notation/rhythms.itely index 4177e354fa..5a8bb1adc8 100644 --- a/Documentation/de/notation/rhythms.itely +++ b/Documentation/de/notation/rhythms.itely @@ -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 diff --git a/Documentation/de/notation/simultaneous.itely b/Documentation/de/notation/simultaneous.itely index 6f4c080b73..1eb7afce45 100644 --- a/Documentation/de/notation/simultaneous.itely +++ b/Documentation/de/notation/simultaneous.itely @@ -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] -1\fermata 2-> 4\prall 8.^| 16-. +1\fermata 2-> 4\prall 8.^! 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] -1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +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 diff --git a/Documentation/de/notation/spacing.itely b/Documentation/de/notation/spacing.itely index 4702401af0..1b4d0ce673 100644 --- a/Documentation/de/notation/spacing.itely +++ b/Documentation/de/notation/spacing.itely @@ -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) } } } diff --git a/Documentation/de/notation/staff.itely b/Documentation/de/notation/staff.itely index f577ce0ee3..1c694be3a4 100644 --- a/Documentation/de/notation/staff.itely +++ b/Documentation/de/notation/staff.itely @@ -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: diff --git a/Documentation/de/notation/text.itely b/Documentation/de/notation/text.itely index 41f77ca38c..fb2a9fce5c 100644 --- a/Documentation/de/notation/text.itely +++ b/Documentation/de/notation/text.itely @@ -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 { diff --git a/Documentation/de/notation/vocal.itely b/Documentation/de/notation/vocal.itely index 1501413428..5e81851fe6 100644 --- a/Documentation/de/notation/vocal.itely +++ b/Documentation/de/notation/vocal.itely @@ -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 diff --git a/Documentation/de/search-box.ihtml b/Documentation/de/search-box.ihtml index 31bb22c7c5..452f275938 100644 --- a/Documentation/de/search-box.ihtml +++ b/Documentation/de/search-box.ihtml @@ -1,5 +1,5 @@
diff --git a/Documentation/de/texidocs/GNUmakefile b/Documentation/de/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/de/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/texidocs/tweaking-clef-properties.texidoc b/Documentation/de/texidocs/tweaking-clef-properties.texidoc index 70ec26012b..c2ea8011be 100644 --- a/Documentation/de/texidocs/tweaking-clef-properties.texidoc +++ b/Documentation/de/texidocs/tweaking-clef-properties.texidoc @@ -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 diff --git a/Documentation/de/translations.itexi b/Documentation/de/translations.itexi index 0d3478ed92..21a85322b1 100644 --- a/Documentation/de/translations.itexi +++ b/Documentation/de/translations.itexi @@ -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 -ja +teilweise @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 -ja +teilweise (53 %) @end html @end ifhtml @ifnothtml -ja +teilweise (53 %) @end ifnothtml @tab @ifhtml @html -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise (48 %) @end html @end ifhtml @ifnothtml -ja +teilweise (48 %) @end ifnothtml @tab @ifhtml @html -ja +teilweise @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 -ja +teilweise (35 %) @end html @end ifhtml @ifnothtml -ja +teilweise (35 %) @end ifnothtml @tab @ifhtml @html -ja +teilweise @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 -ja +teilweise (52 %) @end html @end ifhtml @ifnothtml -ja +teilweise (52 %) @end ifnothtml @tab @ifhtml @html -teilweise +teilweise @end html @end ifhtml @ifnothtml @@ -436,24 +436,24 @@ teilweise @item A Vorlagen @* -219 +372 @tab Till Paala @tab @tab @ifhtml @html -ja +teilweise (38 %) @end html @end ifhtml @ifnothtml -ja +teilweise (38 %) @end ifnothtml @tab @ifhtml @html -teilweise +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @end html @end ifhtml @ifnothtml -ja +teilweise @end ifnothtml @tab vor-GDP @item @@ -870,17 +870,17 @@ ja @ifhtml @html -ja +teilweise @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 -teilweise +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -teilweise +teilweise @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 -ja +teilweise @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 -ja +teilweise (85 %) @end html @end ifhtml @ifnothtml -ja +teilweise (85 %) @end ifnothtml @tab @ifhtml @html -teilweise +teilweise @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 -ja +teilweise @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 -teilweise (98 %) +ja @end html @end ifhtml @ifnothtml -teilweise (98 %) +ja @end ifnothtml @tab @ifhtml @html -teilweise +teilweise @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 -ja +teilweise @end html @end ifhtml @ifnothtml -ja +teilweise @end ifnothtml @tab vor-GDP @item @@ -1343,17 +1343,17 @@ ja @ifhtml @html -ja +teilweise @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 -ja +teilweise (87 %) @end html @end ifhtml @ifnothtml -ja +teilweise (87 %) @end ifnothtml @tab @ifhtml @html -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @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 -ja +teilweise @end html @end ifhtml @ifnothtml -ja +teilweise @end ifnothtml @tab vor-GDP @item Gemeinschaft @* -3006 +3073 @tab  Till Paala @tab @tab @ifhtml @html -ja +teilweise (97 %) @end html @end ifhtml @ifnothtml -ja +teilweise (97 %) @end ifnothtml @tab @ifhtml @html -teilweise +teilweise @end html @end ifhtml @ifnothtml diff --git a/Documentation/de/usage/GNUmakefile b/Documentation/de/usage/GNUmakefile deleted file mode 100644 index 425cc1d8e2..0000000000 --- a/Documentation/de/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/usage/external.itely b/Documentation/de/usage/external.itely index d13b06c525..fc31bf4003 100644 --- a/Documentation/de/usage/external.itely +++ b/Documentation/de/usage/external.itely @@ -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. diff --git a/Documentation/de/usage/lilypond-book.itely b/Documentation/de/usage/lilypond-book.itely index 829379030d..02ad688826 100644 --- a/Documentation/de/usage/lilypond-book.itely +++ b/Documentation/de/usage/lilypond-book.itely @@ -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 diff --git a/Documentation/de/usage/running.itely b/Documentation/de/usage/running.itely index 37d86c525b..a4a46406a2 100644 --- a/Documentation/de/usage/running.itely +++ b/Documentation/de/usage/running.itely @@ -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 diff --git a/Documentation/de/usage/updating.itely b/Documentation/de/usage/updating.itely index 392844c26a..bd84a1427e 100644 --- a/Documentation/de/usage/updating.itely +++ b/Documentation/de/usage/updating.itely @@ -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 index 000480f365..0000000000 --- a/Documentation/de/web/GNUmakefile +++ /dev/null @@ -1,4 +0,0 @@ -depth = ../../.. -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/de/web/community.itexi b/Documentation/de/web/community.itexi index f3fe633881..8b68907ace 100644 --- a/Documentation/de/web/community.itexi +++ b/Documentation/de/web/community.itexi @@ -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 diff --git a/Documentation/de/web/download.itexi b/Documentation/de/web/download.itexi index 0cca1d5fba..f88f69d1da 100644 --- a/Documentation/de/web/download.itexi +++ b/Documentation/de/web/download.itexi @@ -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 diff --git a/Documentation/de/web/manuals.itexi b/Documentation/de/web/manuals.itexi index 61768740b8..d236a6f289 100644 --- a/Documentation/de/web/manuals.itexi +++ b/Documentation/de/web/manuals.itexi @@ -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) diff --git a/Documentation/es/GNUmakefile b/Documentation/es/GNUmakefile index dc127f98c2..dc200b17b0 100644 --- a/Documentation/es/GNUmakefile +++ b/Documentation/es/GNUmakefile @@ -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 diff --git a/Documentation/es/changes.tely b/Documentation/es/changes.tely index 94e7a00a90..863605837f 100644 --- a/Documentation/es/changes.tely +++ b/Documentation/es/changes.tely @@ -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 { 1 } + \layout { indent=0 } } , + cello: \score { \new Staff { \clef "bass" } + \layout { indent=0 } } } -\relative c'' << - { \time 6/8 - 4. b - } \\ { - 4. - } >> @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 { 1 } + \layout { indent=0 } } , + cello: \general-align #Y #UP + \score { \new Staff { \clef "bass" } + \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 r r } \\ + { d r a r bes r } >> | + 1 + } + \new Staff \relative + { \clef "treble" \freeBass "1" + r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef "bass" \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 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] +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 "• † ©right; &OE; &ss; ¶" +\new Staff \with { \omit Clef } +\relative c'' 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) - 4 - \once \set fingeringOrientations = #'(right) - - -"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 index 425cc1d8e2..0000000000 --- a/Documentation/es/essay/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/essay/engraving.itely b/Documentation/es/essay/engraving.itely index 86337f89b2..4dd535f1e8 100644 --- a/Documentation/es/essay/engraving.itely +++ b/Documentation/es/essay/engraving.itely @@ -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 2.~->^\f 4.~ 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 r4\fermata } \new Voice = "II" \relative c' { \voiceTwo c4 - \times 4/5 { + \tuplet 5/4 { 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 ) 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 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT + \override Arpeggio.direction = #RIGHT \stemUp 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 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 4 - \once \override NoteHead #'style = #'cross + \once \override NoteHead.style = #'cross 4 \applyOutput #'Voice #mc-squared 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 } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down + \override Staff.Arpeggio.arpeggio-direction =#down 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 index 425cc1d8e2..0000000000 --- a/Documentation/es/extending/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/extending/programming-interface.itely b/Documentation/es/extending/programming-interface.itely index cdbb9365b8..9ccb31560b 100644 --- a/Documentation/es/extending/programming-interface.itely +++ b/Documentation/es/extending/programming-interface.itely @@ -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 diff --git a/Documentation/es/extending/scheme-tutorial.itely b/Documentation/es/extending/scheme-tutorial.itely index fdc27da0cc..ad55dbc255 100644 --- a/Documentation/es/extending/scheme-tutorial.itely +++ b/Documentation/es/extending/scheme-tutorial.itely @@ -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 = (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 index afe7a4d738..0000000000 --- a/Documentation/es/included/GNUmakefile +++ /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/es/included/generating-output.itexi b/Documentation/es/included/generating-output.itexi index 61e0e8b5e3..d8bb8e3b4a 100644 --- a/Documentation/es/included/generating-output.itexi +++ b/Documentation/es/included/generating-output.itexi @@ -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 diff --git a/Documentation/es/included/helpus.itexi b/Documentation/es/included/helpus.itexi index 27cd758bf9..480fd64977 100644 --- a/Documentation/es/included/helpus.itexi +++ b/Documentation/es/included/helpus.itexi @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/es/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/learning/common-notation.itely b/Documentation/es/learning/common-notation.itely index 5c5197b941..487ce0e3da 100644 --- a/Documentation/es/learning/common-notation.itely +++ b/Documentation/es/learning/common-notation.itely @@ -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 diff --git a/Documentation/es/learning/fundamental.itely b/Documentation/es/learning/fundamental.itely index be1aafaa8e..72290b6fa6 100644 --- a/Documentation/es/learning/fundamental.itely +++ b/Documentation/es/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/es/learning/templates.itely b/Documentation/es/learning/templates.itely index bdb5286ac0..ce9b26d388 100644 --- a/Documentation/es/learning/templates.itely +++ b/Documentation/es/learning/templates.itely @@ -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 diff --git a/Documentation/es/learning/tutorial.itely b/Documentation/es/learning/tutorial.itely index 35399faf2b..7f206ea4c8 100644 --- a/Documentation/es/learning/tutorial.itely +++ b/Documentation/es/learning/tutorial.itely @@ -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: diff --git a/Documentation/es/learning/tweaks.itely b/Documentation/es/learning/tweaks.itely index 11ee26a348..0d4e010418 100644 --- a/Documentation/es/learning/tweaks.itely +++ b/Documentation/es/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -377,7 +429,7 @@ se cambiaría de la siguiente forma: @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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) 4 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 -\once \override StringNumber #'self-alignment-X = #RIGHT +\once \override StringNumber.self-alignment-X = #RIGHT @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: \\ { 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 diff --git a/Documentation/es/notation.tely b/Documentation/es/notation.tely index 4272e84849..502355754a 100644 --- a/Documentation/es/notation.tely +++ b/Documentation/es/notation.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/es/notation/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/notation/ancient.itely b/Documentation/es/notation/ancient.itely index 627df0ccf5..b315871178 100644 --- a/Documentation/es/notation/ancient.itely +++ b/Documentation/es/notation/ancient.itely @@ -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 } } } diff --git a/Documentation/es/notation/changing-defaults.itely b/Documentation/es/notation/changing-defaults.itely index 7993db1a57..6e53296f7b 100644 --- a/Documentation/es/notation/changing-defaults.itely +++ b/Documentation/es/notation/changing-defaults.itely @@ -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}) - ) +\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 4 -<\tweak #'color #red c e>4 +\tweak color #red c4 +\tweak color #red 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 -4 +\tweak Stem.color #red +\tweak Beam.color #green c8 e +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 } +>> +@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 } >> @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 } #}) diff --git a/Documentation/es/notation/cheatsheet.itely b/Documentation/es/notation/cheatsheet.itely index 0051f33b8c..9ba8fcaf2c 100644 --- a/Documentation/es/notation/cheatsheet.itely +++ b/Documentation/es/notation/cheatsheet.itely @@ -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 diff --git a/Documentation/es/notation/chords.itely b/Documentation/es/notation/chords.itely index 37d3bd5451..9e1d67b53b 100644 --- a/Documentation/es/notation/chords.itely +++ b/Documentation/es/notation/chords.itely @@ -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' { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } +} << \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } + \chordmusic } { - 2 - 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 diff --git a/Documentation/es/notation/editorial.itely b/Documentation/es/notation/editorial.itely index 425eb8599a..2c7865a122 100644 --- a/Documentation/es/notation/editorial.itely +++ b/Documentation/es/notation/editorial.itely @@ -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 diff --git a/Documentation/es/notation/expressive.itely b/Documentation/es/notation/expressive.itely index bc3d987ada..7dfba42e5a 100644 --- a/Documentation/es/notation/expressive.itely +++ b/Documentation/es/notation/expressive.itely @@ -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' { + 16 + 2..\moltoF 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 diff --git a/Documentation/es/notation/fretted-strings.itely b/Documentation/es/notation/fretted-strings.itely index 46188b7421..5fd9c0a235 100644 --- a/Documentation/es/notation/fretted-strings.itely +++ b/Documentation/es/notation/fretted-strings.itely @@ -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 @{ @} + stringTunings = \stringTuning @} @} @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" 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" 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" 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" 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" 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" 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" 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" 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" 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 1^\markup { \fret-diagram-verbose #'( (place-fret 6 1) @@ -1048,7 +1048,7 @@ bajo del diagrama de posición. (place-fret 1 3 3) ) } - 1^\markup { + 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 } 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 { 1 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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 { 1 \predefinedFretboardsOff 1 \predefinedFretboardsOn 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 1 @@ -1556,16 +1556,16 @@ FretBoard. @lilypond[quote, verbatim] << - \context ChordNames { + \new ChordNames { \chordmode { c1 d:m } } - \context FretBoards { + \new FretBoards { 1 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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 { 1 \set FretBoards.minimumFret = #5 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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" }}} 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 diff --git a/Documentation/es/notation/input.itely b/Documentation/es/notation/input.itely index a56b9c3386..537c3e2e27 100644 --- a/Documentation/es/notation/input.itely +++ b/Documentation/es/notation/input.itely @@ -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" 2 + <\footnote #'(-2 . -3) "Funciona" a-3>4 + 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 + 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 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 <> } } @@ -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. diff --git a/Documentation/es/notation/keyboards.itely b/Documentation/es/notation/keyboards.itely index e5b03081b6..ef4962d579 100644 --- a/Documentation/es/notation/keyboards.itely +++ b/Documentation/es/notation/keyboards.itely @@ -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: diff --git a/Documentation/es/notation/notation-appendices.itely b/Documentation/es/notation/notation-appendices.itely index e02fe8fa59..a2e44a57c9 100644 --- a/Documentation/es/notation/notation-appendices.itely +++ b/Documentation/es/notation/notation-appendices.itely @@ -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 diff --git a/Documentation/es/notation/percussion.itely b/Documentation/es/notation/percussion.itely index dc5d3ac1f7..a0ac068525 100644 --- a/Documentation/es/notation/percussion.itely +++ b/Documentation/es/notation/percussion.itely @@ -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" } diff --git a/Documentation/es/notation/pitches.itely b/Documentation/es/notation/pitches.itely index 1b3233ea83..da52953fd2 100644 --- a/Documentation/es/notation/pitches.itely +++ b/Documentation/es/notation/pitches.itely @@ -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] -2 4 +2 4 f\harmonic @end lilypond @predefined diff --git a/Documentation/es/notation/repeats.itely b/Documentation/es/notation/repeats.itely index 434418a3c8..e60b00c437 100644 --- a/Documentation/es/notation/repeats.itely +++ b/Documentation/es/notation/repeats.itely @@ -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. 16 } -\repeat percent 2 { \times 2/3 { r8 c d } e4 } +\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 } @end lilypond @snippets diff --git a/Documentation/es/notation/rhythms.itely b/Documentation/es/notation/rhythms.itely index dfeb810371..7061807060 100644 --- a/Documentation/es/notation/rhythms.itely +++ b/Documentation/es/notation/rhythms.itely @@ -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í" c8 ~ 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] - ~ +~ @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 2 ~ } +\repeat volta 2 { c g 2~ } \alternative { % First alternative: following note is tied normally { 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 | } diff --git a/Documentation/es/notation/simultaneous.itely b/Documentation/es/notation/simultaneous.itely index 9ae2583d84..e3ca26276f 100644 --- a/Documentation/es/notation/simultaneous.itely +++ b/Documentation/es/notation/simultaneous.itely @@ -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] -1\fermata 2-> 4\prall 8.^| 16-. +1\fermata 2-> 4\prall 8.^! 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] -1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +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, diff --git a/Documentation/es/notation/spacing.itely b/Documentation/es/notation/spacing.itely index 1a705c0419..454a0e7b12 100644 --- a/Documentation/es/notation/spacing.itely +++ b/Documentation/es/notation/spacing.itely @@ -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) } } } diff --git a/Documentation/es/notation/staff.itely b/Documentation/es/notation/staff.itely index f261c3c2b9..8d0a19ed66 100644 --- a/Documentation/es/notation/staff.itely +++ b/Documentation/es/notation/staff.itely @@ -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: diff --git a/Documentation/es/notation/text.itely b/Documentation/es/notation/text.itely index 4462a6b6d0..8f970d3fdd 100644 --- a/Documentation/es/notation/text.itely +++ b/Documentation/es/notation/text.itely @@ -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'{ diff --git a/Documentation/es/notation/unfretted-strings.itely b/Documentation/es/notation/unfretted-strings.itely index cd6ba0d4f7..4e34832898 100644 --- a/Documentation/es/notation/unfretted-strings.itely +++ b/Documentation/es/notation/unfretted-strings.itely @@ -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}, diff --git a/Documentation/es/notation/vocal.itely b/Documentation/es/notation/vocal.itely index f59dd3780f..3bfd91884c 100644 --- a/Documentation/es/notation/vocal.itely +++ b/Documentation/es/notation/vocal.itely @@ -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}, diff --git a/Documentation/es/notation/wind.itely b/Documentation/es/notation/wind.itely index 292e6d817d..9aaa571ae1 100644 --- a/Documentation/es/notation/wind.itely +++ b/Documentation/es/notation/wind.itely @@ -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' diff --git a/Documentation/es/search-box.ihtml b/Documentation/es/search-box.ihtml index 9db212b623..51674e2cf1 100644 --- a/Documentation/es/search-box.ihtml +++ b/Documentation/es/search-box.ihtml @@ -1,24 +1,24 @@ diff --git a/Documentation/es/texidocs/GNUmakefile b/Documentation/es/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/es/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/texidocs/accordion-discant-symbols.texidoc b/Documentation/es/texidocs/accordion-discant-symbols.texidoc index 3f8618334b..45eeb479b8 100644 --- a/Documentation/es/texidocs/accordion-discant-symbols.texidoc +++ b/Documentation/es/texidocs/accordion-discant-symbols.texidoc @@ -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 index 0000000000..54b2cd36e0 --- /dev/null +++ b/Documentation/es/texidocs/accordion-registers.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc b/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc index 484ec29be4..5a46663b11 100644 --- a/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc +++ b/Documentation/es/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc b/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc index 793d7a26f8..e3189690ba 100644 --- a/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc +++ b/Documentation/es/texidocs/adding-ambitus-per-voice.texidoc @@ -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 diff --git a/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc b/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc index a9ec8dfa19..45c0aed5a7 100644 --- a/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc +++ b/Documentation/es/texidocs/adding-an-extra-staff-at-a-line-break.texidoc @@ -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 diff --git a/Documentation/es/texidocs/adding-an-extra-staff.texidoc b/Documentation/es/texidocs/adding-an-extra-staff.texidoc index c3ab2a4cd7..253f3e6a4d 100644 --- a/Documentation/es/texidocs/adding-an-extra-staff.texidoc +++ b/Documentation/es/texidocs/adding-an-extra-staff.texidoc @@ -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 index 0000000000..8f6b6d9565 --- /dev/null +++ b/Documentation/es/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc b/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc index bc91b3bc11..f01486276f 100644 --- a/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc +++ b/Documentation/es/texidocs/adding-bar-lines-to-chordnames-context.texidoc @@ -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)" - diff --git a/Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc b/Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc index bb47f41b1c..a97f5addca 100644 --- a/Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc +++ b/Documentation/es/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc @@ -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 diff --git a/Documentation/es/texidocs/adding-drum-parts.texidoc b/Documentation/es/texidocs/adding-drum-parts.texidoc index 42e6bd5856..8a151b50a9 100644 --- a/Documentation/es/texidocs/adding-drum-parts.texidoc +++ b/Documentation/es/texidocs/adding-drum-parts.texidoc @@ -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 index 0000000000..8a81c92ddd --- /dev/null +++ b/Documentation/es/texidocs/adding-extra-fingering-with-scheme.texidoc @@ -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 index 0000000000..9928c9e4ec --- /dev/null +++ b/Documentation/es/texidocs/adding-fingerings-to-a-score.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc b/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc index ad2aef5ca1..fd8308146d 100644 --- a/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc +++ b/Documentation/es/texidocs/adding-fingerings-to-tablatures.texidoc @@ -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 index 0000000000..fa41985ebc --- /dev/null +++ b/Documentation/es/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc @@ -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 index 0000000000..f4040bb295 --- /dev/null +++ b/Documentation/es/texidocs/adding-links-to-objects.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc b/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc index 0808b73cd6..829bd2df07 100644 --- a/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc +++ b/Documentation/es/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc b/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc index ab773d89d2..3206e89f49 100644 --- a/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc +++ b/Documentation/es/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc @@ -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}. diff --git a/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc b/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc index 31de8e659b..398b138fa0 100644 --- a/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc +++ b/Documentation/es/texidocs/adding-the-current-date-to-a-score.texidoc @@ -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 index 0000000000..63655dcb58 --- /dev/null +++ b/Documentation/es/texidocs/adding-timing-marks-to-long-glissandi.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc index 9ec9c92aa5..fb9ce6ddc1 100644 --- a/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc +++ b/Documentation/es/texidocs/adding-volta-brackets-to-additional-staves.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc b/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc index 27e3f0c890..6ebffcad41 100644 --- a/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc +++ b/Documentation/es/texidocs/additional-voices-to-avoid-collisions.texidoc @@ -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}. " - diff --git a/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc b/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc index 035253bb4f..150042ab96 100644 --- a/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc +++ b/Documentation/es/texidocs/adjusting-grace-note-spacing.texidoc @@ -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" diff --git a/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc b/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc index 6dc9dc9322..38599b1981 100644 --- a/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc +++ b/Documentation/es/texidocs/adjusting-lyrics-vertical-spacing.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc index 20e3835e0e..257374f0bd 100644 --- a/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc +++ b/Documentation/es/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc b/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc index 02ebc09be7..b9323a802e 100644 --- a/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc +++ b/Documentation/es/texidocs/aligning-and-centering-instrument-names.texidoc @@ -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 diff --git a/Documentation/es/texidocs/aligning-bar-numbers.texidoc b/Documentation/es/texidocs/aligning-bar-numbers.texidoc index f69efa020a..f5e63b7035 100644 --- a/Documentation/es/texidocs/aligning-bar-numbers.texidoc +++ b/Documentation/es/texidocs/aligning-bar-numbers.texidoc @@ -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 index 54d062e2d4..0000000000 --- a/Documentation/es/texidocs/aligning-marks-with-various-notation-objects.texidoc +++ /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 index 0000000000..40350d7d11 --- /dev/null +++ b/Documentation/es/texidocs/aligning-objects-created-with-the--mark-command.texidoc @@ -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 index 0000000000..bacab3471a --- /dev/null +++ b/Documentation/es/texidocs/aligning-syllables-with-melisma.texidoc @@ -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" diff --git a/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc index 7584ee598e..dcad48cb7b 100644 --- a/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc +++ b/Documentation/es/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc b/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc index 1ebe983ea1..09f040f60b 100644 --- a/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc +++ b/Documentation/es/texidocs/altering-the-length-of-beamed-stems.texidoc @@ -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" diff --git a/Documentation/es/texidocs/alternative-bar-numbering.texidoc b/Documentation/es/texidocs/alternative-bar-numbering.texidoc index 8cf6f00a4f..7e09048b12 100644 --- a/Documentation/es/texidocs/alternative-bar-numbering.texidoc +++ b/Documentation/es/texidocs/alternative-bar-numbering.texidoc @@ -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 index 51725938f4..0000000000 --- a/Documentation/es/texidocs/alternative-breve-note.texidoc +++ /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 index 0000000000..dc75fb5c80 --- /dev/null +++ b/Documentation/es/texidocs/alternative-breve-notes.texidoc @@ -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" diff --git a/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc b/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc index 4a97b7be99..2ecb8fd1a9 100644 --- a/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc +++ b/Documentation/es/texidocs/ambitus-with-multiple-voices.texidoc @@ -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 index 0000000000..e515f6fc28 --- /dev/null +++ b/Documentation/es/texidocs/ambitus.texidoc @@ -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" diff --git a/Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc b/Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc index 2e1c079433..821e750ea8 100644 --- a/Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc +++ b/Documentation/es/texidocs/analysis-brackets-above-the-staff.texidoc @@ -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 diff --git a/Documentation/es/texidocs/ancient-fonts.texidoc b/Documentation/es/texidocs/ancient-fonts.texidoc index d934befb99..9fddfe0631 100644 --- a/Documentation/es/texidocs/ancient-fonts.texidoc +++ b/Documentation/es/texidocs/ancient-fonts.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc index 09c175ed0e..c65d3ce4ed 100644 --- a/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc +++ b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -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)" diff --git a/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc index 3c3de401d3..4e2b549f1f 100644 --- a/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc +++ b/Documentation/es/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -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)" - diff --git a/Documentation/es/texidocs/ancient-time-signatures.texidoc b/Documentation/es/texidocs/ancient-time-signatures.texidoc index 03dc0c1efe..3152049dc3 100644 --- a/Documentation/es/texidocs/ancient-time-signatures.texidoc +++ b/Documentation/es/texidocs/ancient-time-signatures.texidoc @@ -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. diff --git a/Documentation/es/texidocs/anglican-psalm-template.texidoc b/Documentation/es/texidocs/anglican-psalm-template.texidoc index 6bbaa0c89f..8886785f0d 100644 --- a/Documentation/es/texidocs/anglican-psalm-template.texidoc +++ b/Documentation/es/texidocs/anglican-psalm-template.texidoc @@ -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 diff --git a/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc index 759e68c8da..1a09e2e0a8 100644 --- a/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc +++ b/Documentation/es/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc @@ -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. " - diff --git a/Documentation/es/texidocs/arabic-improvisation.texidoc b/Documentation/es/texidocs/arabic-improvisation.texidoc index fb70ef1618..ceed5316c8 100644 --- a/Documentation/es/texidocs/arabic-improvisation.texidoc +++ b/Documentation/es/texidocs/arabic-improvisation.texidoc @@ -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" diff --git a/Documentation/es/texidocs/asymmetric-slurs.texidoc b/Documentation/es/texidocs/asymmetric-slurs.texidoc index d8d3d7b8eb..d332da45aa 100644 --- a/Documentation/es/texidocs/asymmetric-slurs.texidoc +++ b/Documentation/es/texidocs/asymmetric-slurs.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/automatic-beam-subdivisions.texidoc b/Documentation/es/texidocs/automatic-beam-subdivisions.texidoc index faa34fb832..98a8bcde27 100644 --- a/Documentation/es/texidocs/automatic-beam-subdivisions.texidoc +++ b/Documentation/es/texidocs/automatic-beam-subdivisions.texidoc @@ -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 index 0000000000..1e01d5e3e8 --- /dev/null +++ b/Documentation/es/texidocs/automatically-change-durations.texidoc @@ -0,0 +1,9 @@ +%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a + texidoces = " +Se puede usar shiftDurations 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 index 0000000000..2e889f5da2 --- /dev/null +++ b/Documentation/es/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc @@ -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" diff --git a/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc b/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc index 7c8fe4066c..88fa4aa89c 100644 --- a/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc +++ b/Documentation/es/texidocs/avoiding-collisions-with-chord-fingerings.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc b/Documentation/es/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc index 908ac7ea02..011d2d39dc 100644 --- a/Documentation/es/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc +++ b/Documentation/es/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc @@ -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)" diff --git a/Documentation/es/texidocs/beam-endings-in-score-context.texidoc b/Documentation/es/texidocs/beam-endings-in-score-context.texidoc index 39bd682ef8..9879885e96 100644 --- a/Documentation/es/texidocs/beam-endings-in-score-context.texidoc +++ b/Documentation/es/texidocs/beam-endings-in-score-context.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc b/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc index c7de59da7a..9265296a9d 100644 --- a/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc +++ b/Documentation/es/texidocs/beam-grouping-in-7-8-time.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/beams-across-line-breaks.texidoc b/Documentation/es/texidocs/beams-across-line-breaks.texidoc index 5c0ce5afaa..0f99f2cd09 100644 --- a/Documentation/es/texidocs/beams-across-line-breaks.texidoc +++ b/Documentation/es/texidocs/beams-across-line-breaks.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc b/Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc index f8ab4cf9c2..759a52c216 100644 --- a/Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc +++ b/Documentation/es/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc @@ -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 index 0000000000..15936255ea --- /dev/null +++ b/Documentation/es/texidocs/book-parts.texidoc @@ -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 index 0000000000..2ee76878e4 --- /dev/null +++ b/Documentation/es/texidocs/breathing-signs.texidoc @@ -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" diff --git a/Documentation/es/texidocs/broken-crescendo-hairpin.texidoc b/Documentation/es/texidocs/broken-crescendo-hairpin.texidoc index 7903f5b048..20a2093ac8 100644 --- a/Documentation/es/texidocs/broken-crescendo-hairpin.texidoc +++ b/Documentation/es/texidocs/broken-crescendo-hairpin.texidoc @@ -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 diff --git a/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc b/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc index 1c2f02baf8..a498d08ddb 100644 --- a/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc +++ b/Documentation/es/texidocs/caesura-railtracks-with-fermata.texidoc @@ -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" diff --git a/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc b/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc index 80b94b8e32..d5b311b804 100644 --- a/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc +++ b/Documentation/es/texidocs/center-text-below-hairpin-dynamics.texidoc @@ -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 index 0000000000..e46c646901 --- /dev/null +++ b/Documentation/es/texidocs/centered-measure-numbers.texidoc @@ -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 index 0000000000..1fa8e58cb3 --- /dev/null +++ b/Documentation/es/texidocs/centering-markup-on-note-heads-automatically.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc b/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc index 59a9e032ed..fd3637706a 100644 --- a/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc +++ b/Documentation/es/texidocs/changing--flageolet-mark-size.texidoc @@ -5,4 +5,3 @@ utilice la siguiente función de Scheme. " doctitlees = "Cambiar el tamaño de la marca de \\flageolet" - diff --git a/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc b/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc index 0b1ec8d471..3e267d660c 100644 --- a/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc +++ b/Documentation/es/texidocs/changing-a-single-notes-size-in-a-chord.texidoc @@ -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}. diff --git a/Documentation/es/texidocs/changing-beam-knee-gap.texidoc b/Documentation/es/texidocs/changing-beam-knee-gap.texidoc index b4b639ecf3..0bb3c95d74 100644 --- a/Documentation/es/texidocs/changing-beam-knee-gap.texidoc +++ b/Documentation/es/texidocs/changing-beam-knee-gap.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/changing-chord-separator.texidoc b/Documentation/es/texidocs/changing-chord-separator.texidoc index 4048d80644..2545fa4bc3 100644 --- a/Documentation/es/texidocs/changing-chord-separator.texidoc +++ b/Documentation/es/texidocs/changing-chord-separator.texidoc @@ -5,4 +5,3 @@ nombre de un acorde para que sea cualquier elemento de marcado. " doctitlees = "Modificación del separador de acordes" - diff --git a/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc b/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc index be65ad8c03..3284ecc64d 100644 --- a/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc +++ b/Documentation/es/texidocs/changing-form-of-multi-measure-rests.texidoc @@ -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}: " - diff --git a/Documentation/es/texidocs/changing-fret-orientations.texidoc b/Documentation/es/texidocs/changing-fret-orientations.texidoc index a8d72ec603..2507b26aa6 100644 --- a/Documentation/es/texidocs/changing-fret-orientations.texidoc +++ b/Documentation/es/texidocs/changing-fret-orientations.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc b/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc index 2ec136ea39..8437ed9277 100644 --- a/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc +++ b/Documentation/es/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc @@ -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 diff --git a/Documentation/es/texidocs/changing-partcombine-texts.texidoc b/Documentation/es/texidocs/changing-partcombine-texts.texidoc index 87485b6e74..5f69a9d1c9 100644 --- a/Documentation/es/texidocs/changing-partcombine-texts.texidoc +++ b/Documentation/es/texidocs/changing-partcombine-texts.texidoc @@ -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 index 0000000000..fa249a9698 --- /dev/null +++ b/Documentation/es/texidocs/changing-properties-for-individual-grobs.texidoc @@ -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 index 0000000000..bd5e32622f --- /dev/null +++ b/Documentation/es/texidocs/changing-stanza-fonts.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc index a16b7ba7d0..eaa6b459fb 100644 --- a/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc +++ b/Documentation/es/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc b/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc index ec9ac861fc..0b87bcc2da 100644 --- a/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc +++ b/Documentation/es/texidocs/changing-the-ambitus-gap.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc b/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc index 32ece0dd46..348f94a122 100644 --- a/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc +++ b/Documentation/es/texidocs/changing-the-breath-mark-symbol.texidoc @@ -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 index 0000000000..1ae33f4293 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-default-text-font-family.texidoc @@ -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 index 0000000000..02d44c45c7 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc b/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc index d2f8b5c40e..c95ee05e97 100644 --- a/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc +++ b/Documentation/es/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc @@ -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 index 0000000000..b08aa2f569 --- /dev/null +++ b/Documentation/es/texidocs/changing-the-number-of-lines-in-a-staff.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc b/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc index f35d6b2a02..1468ef7509 100644 --- a/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc +++ b/Documentation/es/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc b/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc index 980bc1f340..238bbf095d 100644 --- a/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc +++ b/Documentation/es/texidocs/changing-the-size-of-woodwind-diagrams.texidoc @@ -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 index 0000000000..b9e113d7db --- /dev/null +++ b/Documentation/es/texidocs/changing-the-staff-size.texidoc @@ -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" diff --git a/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc index bd5a837c1e..42b47f69ee 100644 --- a/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc +++ b/Documentation/es/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc b/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc index fd093159ce..e900f61b84 100644 --- a/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc +++ b/Documentation/es/texidocs/changing-the-text-for-sustain-markings.texidoc @@ -8,5 +8,3 @@ relación exhaustiva. " doctitlees = "Modificar el texto de las indicaciones de pedal" - - diff --git a/Documentation/es/texidocs/changing-the-tuplet-number.texidoc b/Documentation/es/texidocs/changing-the-tuplet-number.texidoc index e3e15bd8f3..132224b748 100644 --- a/Documentation/es/texidocs/changing-the-tuplet-number.texidoc +++ b/Documentation/es/texidocs/changing-the-tuplet-number.texidoc @@ -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. " - diff --git a/Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc b/Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc index 92fc372b7e..1bf248a368 100644 --- a/Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc +++ b/Documentation/es/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc @@ -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 diff --git a/Documentation/es/texidocs/chant-or-psalms-notation.texidoc b/Documentation/es/texidocs/chant-or-psalms-notation.texidoc index 643cfd6360..5ce12e5243 100644 --- a/Documentation/es/texidocs/chant-or-psalms-notation.texidoc +++ b/Documentation/es/texidocs/chant-or-psalms-notation.texidoc @@ -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. diff --git a/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc b/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc index cc1f4d4320..b3c67d89d5 100644 --- a/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc +++ b/Documentation/es/texidocs/chord-glissando-in-tablature.texidoc @@ -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" diff --git a/Documentation/es/texidocs/chord-name-exceptions.texidoc b/Documentation/es/texidocs/chord-name-exceptions.texidoc index c506098230..491956220d 100644 --- a/Documentation/es/texidocs/chord-name-exceptions.texidoc +++ b/Documentation/es/texidocs/chord-name-exceptions.texidoc @@ -6,4 +6,3 @@ específicos. " doctitlees = "Excepciones para los nombres de acorde" - diff --git a/Documentation/es/texidocs/chord-name-major7.texidoc b/Documentation/es/texidocs/chord-name-major7.texidoc index 34af0c7aee..835b88d79c 100644 --- a/Documentation/es/texidocs/chord-name-major7.texidoc +++ b/Documentation/es/texidocs/chord-name-major7.texidoc @@ -5,4 +5,3 @@ puede ajustar mediante majorSevenSymbol. " doctitlees = "Nombre de acorde maj7" - diff --git a/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc b/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc index bd162b5194..95ab357730 100644 --- a/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc +++ b/Documentation/es/texidocs/chordchanges-for-fretboards.texidoc @@ -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 index 0000000000..49404976d3 --- /dev/null +++ b/Documentation/es/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc @@ -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 index 0000000000..c17244c4db --- /dev/null +++ b/Documentation/es/texidocs/coloring-notes-depending-on-their-pitch.texidoc @@ -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" diff --git a/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc b/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc index 05e9a190b8..9b27ded64a 100644 --- a/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc +++ b/Documentation/es/texidocs/combining-two-parts-on-the-same-staff.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/compound-time-signatures.texidoc b/Documentation/es/texidocs/compound-time-signatures.texidoc index 9af5c9f654..a92fec7ec0 100644 --- a/Documentation/es/texidocs/compound-time-signatures.texidoc +++ b/Documentation/es/texidocs/compound-time-signatures.texidoc @@ -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). " - diff --git a/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc index 8768d2e988..ff25713e13 100644 --- a/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc +++ b/Documentation/es/texidocs/conducting-signs,-measure-grouping-signs.texidoc @@ -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 index 0000000000..c942efe7eb --- /dev/null +++ b/Documentation/es/texidocs/consistently-left-aligned-bar-numbers.texidoc @@ -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" diff --git a/Documentation/es/texidocs/contemporary-glissando.texidoc b/Documentation/es/texidocs/contemporary-glissando.texidoc index a51558022b..2c403c4332 100644 --- a/Documentation/es/texidocs/contemporary-glissando.texidoc +++ b/Documentation/es/texidocs/contemporary-glissando.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc b/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc index 9e8710ac86..bd7caa0a24 100644 --- a/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc +++ b/Documentation/es/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc index d7d6513950..cd254f7ccf 100644 --- a/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc +++ b/Documentation/es/texidocs/controlling-the-placement-of-chord-fingerings.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc index 2d1f48e469..3b8a74bdf5 100644 --- a/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc +++ b/Documentation/es/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc b/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc index ec65723313..cf72a45a07 100644 --- a/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc +++ b/Documentation/es/texidocs/controlling-tuplet-bracket-visibility.texidoc @@ -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" diff --git a/Documentation/es/texidocs/creating-a-delayed-turn.texidoc b/Documentation/es/texidocs/creating-a-delayed-turn.texidoc index bd51534257..fbac8f31fe 100644 --- a/Documentation/es/texidocs/creating-a-delayed-turn.texidoc +++ b/Documentation/es/texidocs/creating-a-delayed-turn.texidoc @@ -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" diff --git a/Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc b/Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc index b6972ee81a..15ccc7816c 100644 --- a/Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc +++ b/Documentation/es/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc @@ -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. diff --git a/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc index 347d3de30d..725e33029c 100644 --- a/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc +++ b/Documentation/es/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc @@ -7,4 +7,3 @@ voces que están sobre el mismo pentagrama si el grabador " doctitlees = "Crear arpegios entre notas de voces distintas" - diff --git a/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc index 6218c21ea4..ed9e399bf3 100644 --- a/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc +++ b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc index c1c5b3058b..3c36bcdca9 100644 --- a/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc +++ b/Documentation/es/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc @@ -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 index 0000000000..0393886d45 --- /dev/null +++ b/Documentation/es/texidocs/creating-double-digit-fingerings.texidoc @@ -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" diff --git a/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc index 9c734f7e5f..58d66554cc 100644 --- a/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc +++ b/Documentation/es/texidocs/creating-metronome-marks-in-markup-mode.texidoc @@ -5,4 +5,3 @@ marcado, pero no cambian el tempo en la salida MIDI. " doctitlees = "Crear indicaciones metronómicas en modo de marcado" - diff --git a/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc b/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc index 3cf0124193..5c77f30807 100644 --- a/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc +++ b/Documentation/es/texidocs/creating-real-parenthesized-dynamics.texidoc @@ -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" diff --git a/Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc b/Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc index 03d2a0f65e..0306b8a350 100644 --- a/Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc +++ b/Documentation/es/texidocs/creating-simultaneous-rehearsal-marks.texidoc @@ -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 diff --git a/Documentation/es/texidocs/creating-text-spanners.texidoc b/Documentation/es/texidocs/creating-text-spanners.texidoc index d3bc2a4097..ad2ba267a4 100644 --- a/Documentation/es/texidocs/creating-text-spanners.texidoc +++ b/Documentation/es/texidocs/creating-text-spanners.texidoc @@ -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 index 0000000000..6fef99ce63 --- /dev/null +++ b/Documentation/es/texidocs/cross-staff-stems.texidoc @@ -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" diff --git a/Documentation/es/texidocs/cross-staff-tremolos.texidoc b/Documentation/es/texidocs/cross-staff-tremolos.texidoc index 23ee550e0d..1d2c417982 100644 --- a/Documentation/es/texidocs/cross-staff-tremolos.texidoc +++ b/Documentation/es/texidocs/cross-staff-tremolos.texidoc @@ -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" diff --git a/Documentation/es/texidocs/custodes.texidoc b/Documentation/es/texidocs/custodes.texidoc index 68e2f607ca..ae8dda98cf 100644 --- a/Documentation/es/texidocs/custodes.texidoc +++ b/Documentation/es/texidocs/custodes.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a +%% Translation of GIT committish: 56145dfed8f19bb34459d5b40cab388776d2ec49 texidoces = " Se pueden tipografiar «custos» en diferentes estilos. diff --git a/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc b/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc index 408adaa9fc..0eb14dd7a9 100644 --- a/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc +++ b/Documentation/es/texidocs/customizing-fretboard-fret-diagrams.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc b/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc index 79bd8a84b6..2c2496544e 100644 --- a/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc +++ b/Documentation/es/texidocs/customizing-markup-fret-diagrams.texidoc @@ -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" diff --git a/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc index 6b8c18250a..bf8069c619 100644 --- a/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc +++ b/Documentation/es/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc @@ -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 index 0000000000..d98f50980c --- /dev/null +++ b/Documentation/es/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc @@ -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" diff --git a/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc index 39f90f5e27..10c9b400e1 100644 --- a/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc +++ b/Documentation/es/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc @@ -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 index 0000000000..93f656f93d --- /dev/null +++ b/Documentation/es/texidocs/demo-midiinstruments.texidoc @@ -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 index 0000000000..508bcc54e2 --- /dev/null +++ b/Documentation/es/texidocs/demonstrating-all-headers.texidoc @@ -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" diff --git a/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc index eecad2bd0a..2a8e38db1b 100644 --- a/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc +++ b/Documentation/es/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc @@ -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 index 0000000000..7ad6066b64 --- /dev/null +++ b/Documentation/es/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc @@ -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" diff --git a/Documentation/es/texidocs/displaying-complex-chords.texidoc b/Documentation/es/texidocs/displaying-complex-chords.texidoc index fcfc64b226..301ee2efc0 100644 --- a/Documentation/es/texidocs/displaying-complex-chords.texidoc +++ b/Documentation/es/texidocs/displaying-complex-chords.texidoc @@ -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. diff --git a/Documentation/es/texidocs/displaying-grob-ancestry.texidoc b/Documentation/es/texidocs/displaying-grob-ancestry.texidoc index 988eb33b92..5872cb9212 100644 --- a/Documentation/es/texidocs/displaying-grob-ancestry.texidoc +++ b/Documentation/es/texidocs/displaying-grob-ancestry.texidoc @@ -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 index 0000000000..7177f69473 --- /dev/null +++ b/Documentation/es/texidocs/dotted-harmonics.texidoc @@ -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 index 0000000000..8f7af4ea5d --- /dev/null +++ b/Documentation/es/texidocs/double-glissando.texidoc @@ -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 index 0000000000..56e1511447 --- /dev/null +++ b/Documentation/es/texidocs/drawing-boxes-around-grobs.texidoc @@ -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 index 0000000000..bde9215735 --- /dev/null +++ b/Documentation/es/texidocs/drawing-circles-around-note-heads.texidoc @@ -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 index 0000000000..962ad723e7 --- /dev/null +++ b/Documentation/es/texidocs/drawing-circles-around-various-objects.texidoc @@ -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" diff --git a/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc b/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc index dc136027b2..460f92c2c2 100644 --- a/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc +++ b/Documentation/es/texidocs/dynamics-custom-text-spanner-postfix.texidoc @@ -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" diff --git a/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc b/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc index 03a65cb82d..8f05baed28 100644 --- a/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc +++ b/Documentation/es/texidocs/dynamics-text-spanner-postfix.texidoc @@ -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" diff --git a/Documentation/es/texidocs/engravers-one-by-one.texidoc b/Documentation/es/texidocs/engravers-one-by-one.texidoc index e6b463f6b7..12dc321017 100644 --- a/Documentation/es/texidocs/engravers-one-by-one.texidoc +++ b/Documentation/es/texidocs/engravers-one-by-one.texidoc @@ -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 diff --git a/Documentation/es/texidocs/engraving-ties-manually.texidoc b/Documentation/es/texidocs/engraving-ties-manually.texidoc index 68b1f47952..6aceee67fb 100644 --- a/Documentation/es/texidocs/engraving-ties-manually.texidoc +++ b/Documentation/es/texidocs/engraving-ties-manually.texidoc @@ -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 index 0000000000..eefa6a2cd8 --- /dev/null +++ b/Documentation/es/texidocs/engraving-tremolos-with-floating-beams.texidoc @@ -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" diff --git a/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc index 30bd501c73..0e27b5fe79 100644 --- a/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc +++ b/Documentation/es/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc @@ -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 index 0000000000..afd3db2ead --- /dev/null +++ b/Documentation/es/texidocs/extending-glissandi-across-repeats.texidoc @@ -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" diff --git a/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc b/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc index f1939155b9..78a50caa5c 100644 --- a/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc +++ b/Documentation/es/texidocs/faking-a-hammer-in-tablatures.texidoc @@ -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 index 0000000000..41ede752c6 --- /dev/null +++ b/Documentation/es/texidocs/fine-tuning-pedal-brackets.texidoc @@ -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" diff --git a/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc b/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc index 935ab3a839..34e0742c94 100644 --- a/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc +++ b/Documentation/es/texidocs/fingering-symbols-for-wind-instruments.texidoc @@ -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. diff --git a/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc index 11816a6b83..26613107f3 100644 --- a/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc +++ b/Documentation/es/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc @@ -6,4 +6,3 @@ derecha. " doctitlees = "Digitaciones - indicación del número de cuerda y digitaciones de mano derecha" - diff --git a/Documentation/es/texidocs/flamenco-notation.texidoc b/Documentation/es/texidocs/flamenco-notation.texidoc index d682441154..f2cadef237 100644 --- a/Documentation/es/texidocs/flamenco-notation.texidoc +++ b/Documentation/es/texidocs/flamenco-notation.texidoc @@ -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: diff --git a/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc b/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc index 6f63288d96..f2a598331e 100644 --- a/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc +++ b/Documentation/es/texidocs/flat-flags-and-beam-nibs.texidoc @@ -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 index 0000000000..17aa4ad43d --- /dev/null +++ b/Documentation/es/texidocs/flute-slap-notation.texidoc @@ -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 index 0000000000..33ec73067e --- /dev/null +++ b/Documentation/es/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc @@ -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" diff --git a/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc b/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc index 6604d13e19..0db33518f9 100644 --- a/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc +++ b/Documentation/es/texidocs/forcing-horizontal-shift-of-notes.texidoc @@ -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. " - diff --git a/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc b/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc index 1cddaa1103..62cb7a23a0 100644 --- a/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc +++ b/Documentation/es/texidocs/forcing-hyphens-to-be-shown.texidoc @@ -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 index 0000000000..14868df438 --- /dev/null +++ b/Documentation/es/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc @@ -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 index 0000000000..c4ab4c1c94 --- /dev/null +++ b/Documentation/es/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc @@ -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 index 0000000000..47fea47351 --- /dev/null +++ b/Documentation/es/texidocs/fret-diagrams-explained-and-developed.texidoc @@ -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" diff --git a/Documentation/es/texidocs/fretboards-alternate-tables.texidoc b/Documentation/es/texidocs/fretboards-alternate-tables.texidoc index 2638a255b0..e12f201ac6 100644 --- a/Documentation/es/texidocs/fretboards-alternate-tables.texidoc +++ b/Documentation/es/texidocs/fretboards-alternate-tables.texidoc @@ -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" diff --git a/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc b/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc index 410de6a43f..c52f455529 100644 --- a/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc +++ b/Documentation/es/texidocs/fretted-string-harmonics-in-tablature.texidoc @@ -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 index 0000000000..d6caf3d863 --- /dev/null +++ b/Documentation/es/texidocs/generating-custom-flags.texidoc @@ -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" diff --git a/Documentation/es/texidocs/generating-random-notes.texidoc b/Documentation/es/texidocs/generating-random-notes.texidoc index baada576cc..702167dbde 100644 --- a/Documentation/es/texidocs/generating-random-notes.texidoc +++ b/Documentation/es/texidocs/generating-random-notes.texidoc @@ -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 index 0000000000..59b57d0685 --- /dev/null +++ b/Documentation/es/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc @@ -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" diff --git a/Documentation/es/texidocs/glissandi-can-skip-grobs.texidoc b/Documentation/es/texidocs/glissandi-can-skip-grobs.texidoc index 5e77af996d..0f71eab4b4 100644 --- a/Documentation/es/texidocs/glissandi-can-skip-grobs.texidoc +++ b/Documentation/es/texidocs/glissandi-can-skip-grobs.texidoc @@ -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. diff --git a/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc b/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc index a911eabcbe..391aca1a4e 100644 --- a/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc +++ b/Documentation/es/texidocs/graphical-and-text-woodwind-diagrams.texidoc @@ -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" diff --git a/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc b/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc index b77c187bff..2ffbb1e134 100644 --- a/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc +++ b/Documentation/es/texidocs/grid-lines--changing-their-appearance.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc b/Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc index a8e5108de6..2974f56175 100644 --- a/Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc +++ b/Documentation/es/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc @@ -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 diff --git a/Documentation/es/texidocs/guitar-slides.texidoc b/Documentation/es/texidocs/guitar-slides.texidoc index e25fe4918c..3b1ec20514 100644 --- a/Documentation/es/texidocs/guitar-slides.texidoc +++ b/Documentation/es/texidocs/guitar-slides.texidoc @@ -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" diff --git a/Documentation/es/texidocs/guitar-strum-rhythms.texidoc b/Documentation/es/texidocs/guitar-strum-rhythms.texidoc index bfc9e8d1a6..6cc0d36a98 100644 --- a/Documentation/es/texidocs/guitar-strum-rhythms.texidoc +++ b/Documentation/es/texidocs/guitar-strum-rhythms.texidoc @@ -5,4 +5,3 @@ además de las notas de la melodía, acordes y diagramas de posiciones. " doctitlees = "Ritmos rasgueados de guitarra" - diff --git a/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc b/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc index 140a82e7bd..d737f3781a 100644 --- a/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc +++ b/Documentation/es/texidocs/hairpins-with-different-line-styles.texidoc @@ -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 index 0000000000..8b373d707d --- /dev/null +++ b/Documentation/es/texidocs/heavily-customized-polymetric-time-signatures.texidoc @@ -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" diff --git a/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc b/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc index 5631ae8d49..319de2f0c7 100644 --- a/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc +++ b/Documentation/es/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc index 0323136e36..880b5eb80a 100644 --- a/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc +++ b/Documentation/es/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc @@ -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 index 0000000000..bb60ce0858 --- /dev/null +++ b/Documentation/es/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc @@ -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 index 0000000000..12708f23ff --- /dev/null +++ b/Documentation/es/texidocs/how-to-change-fret-diagram-position.texidoc @@ -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 index 0000000000..15d9e6e64a --- /dev/null +++ b/Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc @@ -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 index 0000000000..b7f48a06cc --- /dev/null +++ b/Documentation/es/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc @@ -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 index 0000000000..6ec6491114 --- /dev/null +++ b/Documentation/es/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc @@ -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" diff --git a/Documentation/es/texidocs/hymn-template.texidoc b/Documentation/es/texidocs/hymn-template.texidoc index 31775154cb..f62b647599 100644 --- a/Documentation/es/texidocs/hymn-template.texidoc +++ b/Documentation/es/texidocs/hymn-template.texidoc @@ -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" diff --git a/Documentation/es/texidocs/incipit.texidoc b/Documentation/es/texidocs/incipit.texidoc index e2f2803a24..9d76efa377 100644 --- a/Documentation/es/texidocs/incipit.texidoc +++ b/Documentation/es/texidocs/incipit.texidoc @@ -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" diff --git a/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc b/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc index 3f1701f003..2ae2c8dcf7 100644 --- a/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc +++ b/Documentation/es/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/inserting-a-caesura.texidoc b/Documentation/es/texidocs/inserting-a-caesura.texidoc index ea09f2f6f2..e13aae0b6d 100644 --- a/Documentation/es/texidocs/inserting-a-caesura.texidoc +++ b/Documentation/es/texidocs/inserting-a-caesura.texidoc @@ -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 index 0000000000..2226d10d16 --- /dev/null +++ b/Documentation/es/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc @@ -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" diff --git a/Documentation/es/texidocs/isolated-percent-repeats.texidoc b/Documentation/es/texidocs/isolated-percent-repeats.texidoc index e6b241ff02..daebc6d56c 100644 --- a/Documentation/es/texidocs/isolated-percent-repeats.texidoc +++ b/Documentation/es/texidocs/isolated-percent-repeats.texidoc @@ -4,4 +4,3 @@ También se pueden imprimir símbolos de porcentaje sueltos. " doctitlees = "Símbolos de porcentaje sueltos" - diff --git a/Documentation/es/texidocs/jazz-combo-template.texidoc b/Documentation/es/texidocs/jazz-combo-template.texidoc index 770e03bd5e..1914b396da 100644 --- a/Documentation/es/texidocs/jazz-combo-template.texidoc +++ b/Documentation/es/texidocs/jazz-combo-template.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc b/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc index fd36ab1816..5bc4f0dd8f 100644 --- a/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc +++ b/Documentation/es/texidocs/keep-change-clefs-full-sized.texidoc @@ -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 index 0000000000..163d74a0d8 --- /dev/null +++ b/Documentation/es/texidocs/laissez-vibrer-ties.texidoc @@ -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}" diff --git a/Documentation/es/texidocs/letter-tablature-formatting.texidoc b/Documentation/es/texidocs/letter-tablature-formatting.texidoc index a59353182e..391f3dd460 100644 --- a/Documentation/es/texidocs/letter-tablature-formatting.texidoc +++ b/Documentation/es/texidocs/letter-tablature-formatting.texidoc @@ -3,5 +3,4 @@ La tablatura se puede formatear utilizando letras en lugar de números. " - doctitlees = "Formateado de tablaturas con letras" diff --git a/Documentation/es/texidocs/line-arrows.texidoc b/Documentation/es/texidocs/line-arrows.texidoc index 9bedb903fc..ac0d8e05b5 100644 --- a/Documentation/es/texidocs/line-arrows.texidoc +++ b/Documentation/es/texidocs/line-arrows.texidoc @@ -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). diff --git a/Documentation/es/texidocs/lyrics-alignment.texidoc b/Documentation/es/texidocs/lyrics-alignment.texidoc index 75000516b3..150fad8c2d 100644 --- a/Documentation/es/texidocs/lyrics-alignment.texidoc +++ b/Documentation/es/texidocs/lyrics-alignment.texidoc @@ -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}. diff --git a/Documentation/es/texidocs/makam-example.texidoc b/Documentation/es/texidocs/makam-example.texidoc index a75209d924..8955bb0c18 100644 --- a/Documentation/es/texidocs/makam-example.texidoc +++ b/Documentation/es/texidocs/makam-example.texidoc @@ -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 index 0000000000..89d85f4776 --- /dev/null +++ b/Documentation/es/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc @@ -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 index 0000000000..c72166c7ef --- /dev/null +++ b/Documentation/es/texidocs/making-glissandi-breakable.texidoc @@ -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" diff --git a/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc b/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc index fc84d45df6..cf4333afa2 100644 --- a/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc +++ b/Documentation/es/texidocs/making-slurs-with-complex-dash-structure.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc index e6848367ee..372f08140b 100644 --- a/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc +++ b/Documentation/es/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc @@ -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 index 0000000000..8841200f30 --- /dev/null +++ b/Documentation/es/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc @@ -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 index 0000000000..7c185a4a28 --- /dev/null +++ b/Documentation/es/texidocs/manually-controlling-beam-positions.texidoc @@ -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 index 0000000000..9b0b144772 --- /dev/null +++ b/Documentation/es/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc @@ -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 index 0000000000..21da3c45a3 --- /dev/null +++ b/Documentation/es/texidocs/markup-lines.texidoc @@ -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" diff --git a/Documentation/es/texidocs/measure-counter.texidoc b/Documentation/es/texidocs/measure-counter.texidoc index 7073b846d7..94e7d4fe04 100644 --- a/Documentation/es/texidocs/measure-counter.texidoc +++ b/Documentation/es/texidocs/measure-counter.texidoc @@ -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 diff --git a/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc index 63740f9d47..484a6fa4ce 100644 --- a/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc +++ b/Documentation/es/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc @@ -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 index 0000000000..f68d343be5 --- /dev/null +++ b/Documentation/es/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc @@ -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" diff --git a/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc index 9152250dee..0f0906a080 100644 --- a/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc +++ b/Documentation/es/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc @@ -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 index 0000000000..c7ff811a46 --- /dev/null +++ b/Documentation/es/texidocs/modifying-tuplet-bracket-length.texidoc @@ -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" diff --git a/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc b/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc index 9bdbdd21c3..14da49b465 100644 --- a/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc +++ b/Documentation/es/texidocs/moving-dotted-notes-in-polyphony.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc b/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc index a1fb4ae36e..6cb69f0564 100644 --- a/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc +++ b/Documentation/es/texidocs/moving-slur-positions-vertically.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/multi-measure-rest-markup.texidoc b/Documentation/es/texidocs/multi-measure-rest-markup.texidoc index 902dd24a35..6f85ef4b8b 100644 --- a/Documentation/es/texidocs/multi-measure-rest-markup.texidoc +++ b/Documentation/es/texidocs/multi-measure-rest-markup.texidoc @@ -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" diff --git a/Documentation/es/texidocs/nesting-staves.texidoc b/Documentation/es/texidocs/nesting-staves.texidoc index 758f200670..3692353f99 100644 --- a/Documentation/es/texidocs/nesting-staves.texidoc +++ b/Documentation/es/texidocs/nesting-staves.texidoc @@ -15,4 +15,3 @@ todos los pentagramas. Las posibilidades son " doctitlees = "Anidado de grupos de pentagramas" - diff --git a/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc b/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc index 2fcdba8a40..e0e114accb 100644 --- a/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc +++ b/Documentation/es/texidocs/non-default-tuplet-numbers.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/non-traditional-key-signatures.texidoc b/Documentation/es/texidocs/non-traditional-key-signatures.texidoc index a187fb05ab..8db72dccc8 100644 --- a/Documentation/es/texidocs/non-traditional-key-signatures.texidoc +++ b/Documentation/es/texidocs/non-traditional-key-signatures.texidoc @@ -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 index 0000000000..e9163147b8 --- /dev/null +++ b/Documentation/es/texidocs/numbering-groups-of-measures.texidoc @@ -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" diff --git a/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc b/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc index fce039a27b..09c40b594f 100644 --- a/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc +++ b/Documentation/es/texidocs/numbers-as-easy-note-heads.texidoc @@ -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" diff --git a/Documentation/es/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc b/Documentation/es/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc index f0fc48cfe9..3d0d4cabc3 100644 --- a/Documentation/es/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc +++ b/Documentation/es/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc @@ -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" diff --git a/Documentation/es/texidocs/ottava-text.texidoc b/Documentation/es/texidocs/ottava-text.texidoc index c1b52ca70e..a028cf57c9 100644 --- a/Documentation/es/texidocs/ottava-text.texidoc +++ b/Documentation/es/texidocs/ottava-text.texidoc @@ -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 index 0000000000..a56afeddcb --- /dev/null +++ b/Documentation/es/texidocs/outputting-the-version-number.texidoc @@ -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 index 0000000000..52b60b8ff9 --- /dev/null +++ b/Documentation/es/texidocs/overriding-articulations-of-destinct-type.texidoc @@ -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 index 0000000000..d78b093268 --- /dev/null +++ b/Documentation/es/texidocs/page-label.texidoc @@ -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" diff --git a/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc b/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc index 393d19dc2a..79c01821da 100644 --- a/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc +++ b/Documentation/es/texidocs/partcombine-and-autobeamoff.texidoc @@ -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" diff --git a/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc b/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc index 18fa55785d..94294bb149 100644 --- a/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc +++ b/Documentation/es/texidocs/percent-repeat-count-visibility.texidoc @@ -6,4 +6,3 @@ la propiedad de contexto @code{repeatCountVisibility}. " doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje" - diff --git a/Documentation/es/texidocs/percent-repeat-counter.texidoc b/Documentation/es/texidocs/percent-repeat-counter.texidoc index f09a09beee..fbcdb07f93 100644 --- a/Documentation/es/texidocs/percent-repeat-counter.texidoc +++ b/Documentation/es/texidocs/percent-repeat-counter.texidoc @@ -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 index 0000000000..0b946ec64b --- /dev/null +++ b/Documentation/es/texidocs/percussion-beaters.texidoc @@ -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" diff --git a/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc index cb09b5ab47..3e2a7fd48f 100644 --- a/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc +++ b/Documentation/es/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc @@ -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. " - diff --git a/Documentation/es/texidocs/piano-template-simple.texidoc b/Documentation/es/texidocs/piano-template-simple.texidoc index 9b08122216..2e0f2479fd 100644 --- a/Documentation/es/texidocs/piano-template-simple.texidoc +++ b/Documentation/es/texidocs/piano-template-simple.texidoc @@ -5,4 +5,3 @@ notas. " doctitlees = "Plantilla de piano (sencilla)" - diff --git a/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc index 796087a18b..efa7ef6cea 100644 --- a/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc +++ b/Documentation/es/texidocs/piano-template-with-centered-lyrics.texidoc @@ -5,4 +5,3 @@ se puede centrar entre los pentagramas de un sistema de piano. " doctitlees = "Plantilla de piano con letra centrada" - diff --git a/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc index ae272fdd43..34a0246ee4 100644 --- a/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc +++ b/Documentation/es/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc b/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc index 206a89813e..4c535013e2 100644 --- a/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc +++ b/Documentation/es/texidocs/placement-of-right-hand-fingerings.texidoc @@ -7,4 +7,3 @@ se debe usar una construcción de acorde. " doctitlees = "Posicionamiento de digitaciones de mano derecha" - diff --git a/Documentation/es/texidocs/polyphony-in-tablature.texidoc b/Documentation/es/texidocs/polyphony-in-tablature.texidoc index bba6947e5c..8aaf3f90af 100644 --- a/Documentation/es/texidocs/polyphony-in-tablature.texidoc +++ b/Documentation/es/texidocs/polyphony-in-tablature.texidoc @@ -5,4 +5,3 @@ en una pauta normal. " doctitlees = "Polifonía en tablaturas" - diff --git a/Documentation/es/texidocs/positioning-arpeggios.texidoc b/Documentation/es/texidocs/positioning-arpeggios.texidoc index 85f011b61c..e124ef4e18 100644 --- a/Documentation/es/texidocs/positioning-arpeggios.texidoc +++ b/Documentation/es/texidocs/positioning-arpeggios.texidoc @@ -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 index 0000000000..6d0bc79dbf --- /dev/null +++ b/Documentation/es/texidocs/positioning-fingering-indications-precisely.texidoc @@ -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" diff --git a/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc b/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc index a137c37432..ac46f0a724 100644 --- a/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc +++ b/Documentation/es/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc b/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc index 47f3004fb5..2452c37b6e 100644 --- a/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc +++ b/Documentation/es/texidocs/positioning-grace-notes-with-floating-space.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc b/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc index 7ed2abda90..4d2c6b9dbb 100644 --- a/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc +++ b/Documentation/es/texidocs/positioning-multi-measure-rests.texidoc @@ -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 index 0000000000..710f7e5e9d --- /dev/null +++ b/Documentation/es/texidocs/positioning-segno-and-coda-with-line-break.texidoc @@ -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)" diff --git a/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc b/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc index 690a572c2a..d8801c94d0 100644 --- a/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc +++ b/Documentation/es/texidocs/positioning-text-markups-inside-slurs.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc index 6344af9dd4..f0848fa787 100644 --- a/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc +++ b/Documentation/es/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc @@ -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 index 0000000000..68d0171fd5 --- /dev/null +++ b/Documentation/es/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc @@ -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" diff --git a/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc index 9b302d3d62..21452f2d82 100644 --- a/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc +++ b/Documentation/es/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc @@ -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}. " - diff --git a/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc index ee5f7a33df..27a2f7056d 100644 --- a/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc +++ b/Documentation/es/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc index 01f3e33afd..e100d49dcd 100644 --- a/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc +++ b/Documentation/es/texidocs/printing-bar-numbers-at-regular-intervals.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc index 90f120ebaa..5fc46783f7 100644 --- a/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc +++ b/Documentation/es/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc @@ -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 index 0000000000..a46c60cae1 --- /dev/null +++ b/Documentation/es/texidocs/printing-hairpins-in-various-styles.texidoc @@ -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" diff --git a/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc index b959e65817..7686f22644 100644 --- a/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc +++ b/Documentation/es/texidocs/printing-hairpins-using-al-niente-notation.texidoc @@ -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»" - diff --git a/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc b/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc index f5b1dc8b36..53eb67bff3 100644 --- a/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc +++ b/Documentation/es/texidocs/printing-marks-at-the-end-of-a-line.texidoc @@ -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. diff --git a/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc b/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc index 39a3f2069f..159fbd3dd8 100644 --- a/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc +++ b/Documentation/es/texidocs/printing-marks-on-every-staff.texidoc @@ -6,4 +6,3 @@ pentagrama cualquiera. " doctitlees = "Imprimir marcas de ensayo en cualquier pentagrama" - diff --git a/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc index 2803015f5d..f60c8bcebe 100644 --- a/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc +++ b/Documentation/es/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc @@ -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 index 0000000000..370b2bddcc --- /dev/null +++ b/Documentation/es/texidocs/printing-music-with-different-time-signatures.texidoc @@ -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" diff --git a/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc b/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc index aeb94d04e5..ccddb7982e 100644 --- a/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc +++ b/Documentation/es/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc @@ -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 index 0000000000..6e4c0bcd87 --- /dev/null +++ b/Documentation/es/texidocs/printing-text-from-right-to-left.texidoc @@ -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" diff --git a/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc index f2c8f0f59d..d07e718194 100644 --- a/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc +++ b/Documentation/es/texidocs/printing-the-bar-number-for-the-first-measure.texidoc @@ -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 index 0000000000..0d3c062501 --- /dev/null +++ b/Documentation/es/texidocs/proportional-strict-notespacing.texidoc @@ -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 index 0000000000..ec09df61dc --- /dev/null +++ b/Documentation/es/texidocs/putting-lyrics-inside-the-staff.texidoc @@ -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" diff --git a/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc b/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc index 6c4280bf88..07ed74b66e 100644 --- a/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc +++ b/Documentation/es/texidocs/quoting-another-voice-with-transposition.texidoc @@ -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" diff --git a/Documentation/es/texidocs/quoting-another-voice.texidoc b/Documentation/es/texidocs/quoting-another-voice.texidoc index 369840fe3f..1903429589 100644 --- a/Documentation/es/texidocs/quoting-another-voice.texidoc +++ b/Documentation/es/texidocs/quoting-another-voice.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/recorder-fingering-chart.texidoc b/Documentation/es/texidocs/recorder-fingering-chart.texidoc index 25bd11b132..4cc9c95e42 100644 --- a/Documentation/es/texidocs/recorder-fingering-chart.texidoc +++ b/Documentation/es/texidocs/recorder-fingering-chart.texidoc @@ -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" diff --git a/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc b/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc index 407f3ad432..401637de9a 100644 --- a/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc +++ b/Documentation/es/texidocs/redefining-grace-note-global-defaults.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc b/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc index 2947da68a2..8ae1020d5f 100644 --- a/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc +++ b/Documentation/es/texidocs/removing-bar-numbers-from-a-score.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc b/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc index 02265cd6d0..58e0ca366a 100644 --- a/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc +++ b/Documentation/es/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/removing-the-first-empty-line.texidoc b/Documentation/es/texidocs/removing-the-first-empty-line.texidoc index 9c6a1f1bba..3d4171acf5 100644 --- a/Documentation/es/texidocs/removing-the-first-empty-line.texidoc +++ b/Documentation/es/texidocs/removing-the-first-empty-line.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/rest-styles.texidoc b/Documentation/es/texidocs/rest-styles.texidoc index 7f1c8f9291..2df64fce2c 100644 --- a/Documentation/es/texidocs/rest-styles.texidoc +++ b/Documentation/es/texidocs/rest-styles.texidoc @@ -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. diff --git a/Documentation/es/texidocs/reverting-default-beam-endings.texidoc b/Documentation/es/texidocs/reverting-default-beam-endings.texidoc index ce830a5516..4d08e187eb 100644 --- a/Documentation/es/texidocs/reverting-default-beam-endings.texidoc +++ b/Documentation/es/texidocs/reverting-default-beam-endings.texidoc @@ -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 index 0000000000..88e947e3dc --- /dev/null +++ b/Documentation/es/texidocs/rhythmic-slashes.texidoc @@ -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" diff --git a/Documentation/es/texidocs/satb-choir-template---four-staves.texidoc b/Documentation/es/texidocs/satb-choir-template---four-staves.texidoc index e8efbb5f9c..663f1d6895 100644 --- a/Documentation/es/texidocs/satb-choir-template---four-staves.texidoc +++ b/Documentation/es/texidocs/satb-choir-template---four-staves.texidoc @@ -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 index 0000000000..379ce7db93 --- /dev/null +++ b/Documentation/es/texidocs/score-for-diatonic-accordion.texidoc @@ -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" diff --git a/Documentation/es/texidocs/script-chart.texidoc b/Documentation/es/texidocs/script-chart.texidoc index 95a1689413..1444f6a8ec 100644 --- a/Documentation/es/texidocs/script-chart.texidoc +++ b/Documentation/es/texidocs/script-chart.texidoc @@ -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 index 0000000000..d118bf7414 --- /dev/null +++ b/Documentation/es/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc @@ -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" diff --git a/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc index b68a197d39..3f3a40d2b9 100644 --- a/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc +++ b/Documentation/es/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/setting-system-separators.texidoc b/Documentation/es/texidocs/setting-system-separators.texidoc index 4508d72900..e75f8c37f0 100644 --- a/Documentation/es/texidocs/setting-system-separators.texidoc +++ b/Documentation/es/texidocs/setting-system-separators.texidoc @@ -7,5 +7,3 @@ predeterminada adecuada. " doctitlees = "Fijar un separador entre los sistemas" - - diff --git a/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc b/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc index 9e03d1d8d2..3f024c9db0 100644 --- a/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc +++ b/Documentation/es/texidocs/setting-the-double-repeat-default-for-volte.texidoc @@ -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" diff --git a/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc index 32e26419c5..7d29b10499 100644 --- a/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc +++ b/Documentation/es/texidocs/setting-the-minimum-length-of-hairpins.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/shortening-volta-brackets.texidoc b/Documentation/es/texidocs/shortening-volta-brackets.texidoc index fb226f6900..db7abc6b7c 100644 --- a/Documentation/es/texidocs/shortening-volta-brackets.texidoc +++ b/Documentation/es/texidocs/shortening-volta-brackets.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/showing-chords-at-changes.texidoc b/Documentation/es/texidocs/showing-chords-at-changes.texidoc index bfbb5899e6..ca4092f76f 100644 --- a/Documentation/es/texidocs/showing-chords-at-changes.texidoc +++ b/Documentation/es/texidocs/showing-chords-at-changes.texidoc @@ -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 index 0000000000..7d4ec6de41 --- /dev/null +++ b/Documentation/es/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc @@ -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{} + +" + doctitlees = "Imprimir la misma articulación encima y debajo de la misma nota o acorde" diff --git a/Documentation/es/texidocs/simple-lead-sheet.texidoc b/Documentation/es/texidocs/simple-lead-sheet.texidoc index beb510ce64..299530a38e 100644 --- a/Documentation/es/texidocs/simple-lead-sheet.texidoc +++ b/Documentation/es/texidocs/simple-lead-sheet.texidoc @@ -5,4 +5,3 @@ obtenemos una hoja guía de acordes o «lead sheet»: " doctitlees = "Hoja guía de acordes o «lead sheet» sencilla" - diff --git a/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc index 3412c2465d..b210b209e6 100644 --- a/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc +++ b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -5,4 +5,3 @@ letra y acordes. " doctitlees = "Plantilla de pentagrama único con música, letra y acordes" - diff --git a/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc index afefc85350..cdc17f5704 100644 --- a/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc +++ b/Documentation/es/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc @@ -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" diff --git a/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc index 85ae48e913..6a837d21e7 100644 --- a/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc +++ b/Documentation/es/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -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" diff --git a/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc index ff912e0608..ea644a1cc8 100644 --- a/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc +++ b/Documentation/es/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -8,4 +8,3 @@ comentario la línea correspondiente. " doctitlees = "Plantilla de pentagrama único don notas y letra" - diff --git a/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc index b95584826f..63c40f4b2e 100644 --- a/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc +++ b/Documentation/es/texidocs/single-staff-template-with-only-notes.texidoc @@ -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 index 0000000000..96a63b36f5 --- /dev/null +++ b/Documentation/es/texidocs/skips-in-lyric-mode-2.texidoc @@ -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 index 0000000000..e367e88366 --- /dev/null +++ b/Documentation/es/texidocs/skips-in-lyric-mode.texidoc @@ -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" diff --git a/Documentation/es/texidocs/slides-in-tablature.texidoc b/Documentation/es/texidocs/slides-in-tablature.texidoc index 95a4fc4796..2972a1afed 100644 --- a/Documentation/es/texidocs/slides-in-tablature.texidoc +++ b/Documentation/es/texidocs/slides-in-tablature.texidoc @@ -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 index 0000000000..95ea005234 --- /dev/null +++ b/Documentation/es/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc @@ -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" diff --git a/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc b/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc index b189f62c58..3ce79bdcb7 100644 --- a/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc +++ b/Documentation/es/texidocs/stand-alone-two-column-markup.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc index e0b3f12383..78d47fd000 100644 --- a/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc +++ b/Documentation/es/texidocs/stem-and-beam-behavior-in-tablature.texidoc @@ -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 index 0000000000..ff96eb713a --- /dev/null +++ b/Documentation/es/texidocs/stemlets.texidoc @@ -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)" diff --git a/Documentation/es/texidocs/strict-beat-beaming.texidoc b/Documentation/es/texidocs/strict-beat-beaming.texidoc index 63ef55d013..54cc82aec8 100644 --- a/Documentation/es/texidocs/strict-beat-beaming.texidoc +++ b/Documentation/es/texidocs/strict-beat-beaming.texidoc @@ -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 index 0000000000..33e308974b --- /dev/null +++ b/Documentation/es/texidocs/string-number-extender-lines.texidoc @@ -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" diff --git a/Documentation/es/texidocs/string-quartet-template-simple.texidoc b/Documentation/es/texidocs/string-quartet-template-simple.texidoc index 7a9f66be59..e3c1b10166 100644 --- a/Documentation/es/texidocs/string-quartet-template-simple.texidoc +++ b/Documentation/es/texidocs/string-quartet-template-simple.texidoc @@ -5,4 +5,3 @@ una sección @code{\\global} para el compás y la armadura " doctitlees = "Plantilla de cuarteto de cuerda (sencilla)" - diff --git a/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc index 8d362c387c..05c39907d2 100644 --- a/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc +++ b/Documentation/es/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -18,4 +18,3 @@ los archivos independientes! " doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes" - diff --git a/Documentation/es/texidocs/subdividing-beams.texidoc b/Documentation/es/texidocs/subdividing-beams.texidoc index e25fcbf14a..e8cafac2c7 100644 --- a/Documentation/es/texidocs/subdividing-beams.texidoc +++ b/Documentation/es/texidocs/subdividing-beams.texidoc @@ -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 index 0000000000..40b222fea0 --- /dev/null +++ b/Documentation/es/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc @@ -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 index 0000000000..5d450f2857 --- /dev/null +++ b/Documentation/es/texidocs/table-of-contents.texidoc @@ -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 index 0000000000..81f1c6d918 --- /dev/null +++ b/Documentation/es/texidocs/three-sided-box.texidoc @@ -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 index 0000000000..ebf34908e7 --- /dev/null +++ b/Documentation/es/texidocs/tick-bar-lines.texidoc @@ -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 index 0000000000..2f54341bb0 --- /dev/null +++ b/Documentation/es/texidocs/time-signature-in-parentheses---method-3.texidoc @@ -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 index 0000000000..69f7ec0be7 --- /dev/null +++ b/Documentation/es/texidocs/time-signature-in-parentheses.texidoc @@ -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" diff --git a/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc b/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc index b125d6cbf9..aca3ef0b06 100644 --- a/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc +++ b/Documentation/es/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc @@ -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)" diff --git a/Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc b/Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc index dce77420bf..7d4c9cac90 100644 --- a/Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc +++ b/Documentation/es/texidocs/transcription-of-ancient-music-with-incipit.texidoc @@ -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 diff --git a/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc index 337397896b..a26a8975fe 100644 --- a/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc +++ b/Documentation/es/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc @@ -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. " - diff --git a/Documentation/es/texidocs/tweaking-clef-properties.texidoc b/Documentation/es/texidocs/tweaking-clef-properties.texidoc index db68c5b381..7ad0ceafbf 100644 --- a/Documentation/es/texidocs/tweaking-clef-properties.texidoc +++ b/Documentation/es/texidocs/tweaking-clef-properties.texidoc @@ -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. " - diff --git a/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc b/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc index d48fada654..057a59de47 100644 --- a/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc +++ b/Documentation/es/texidocs/tweaking-grace-layout-within-music.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc index ba269fe116..57dababf88 100644 --- a/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc +++ b/Documentation/es/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc @@ -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 index 0000000000..bd66a5a8da --- /dev/null +++ b/Documentation/es/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc @@ -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" diff --git a/Documentation/es/texidocs/using-alternative-flag-styles.texidoc b/Documentation/es/texidocs/using-alternative-flag-styles.texidoc index 54cf71c4a3..82dc237268 100644 --- a/Documentation/es/texidocs/using-alternative-flag-styles.texidoc +++ b/Documentation/es/texidocs/using-alternative-flag-styles.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc b/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc index 9f9d532bfc..1d24976765 100644 --- a/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc +++ b/Documentation/es/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc @@ -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 index 0000000000..8bea7fd4d3 --- /dev/null +++ b/Documentation/es/texidocs/using-autochange-with-more-than-one-voice.texidoc @@ -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" diff --git a/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc b/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc index 5b60f4f2fc..b9d8565295 100644 --- a/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc +++ b/Documentation/es/texidocs/using-double-slurs-for-legato-chords.texidoc @@ -5,4 +5,3 @@ legato. Esto se puede conseguir estableciendo @code{doubleSlurs}. " doctitlees = "Utilizar ligaduras dobles para acordes legato" - diff --git a/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc b/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc index 4e9f990746..d472fd3e55 100644 --- a/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc +++ b/Documentation/es/texidocs/using-grace-note-slashes-with-normal-heads.texidoc @@ -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" - - diff --git a/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc b/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc index 8df815d976..2b539c21fe 100644 --- a/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc +++ b/Documentation/es/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc @@ -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 index 0000000000..28d8928202 --- /dev/null +++ b/Documentation/es/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc @@ -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 index 0000000000..1aed3ad846 --- /dev/null +++ b/Documentation/es/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc @@ -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" diff --git a/Documentation/es/texidocs/using-the-whiteout-property.texidoc b/Documentation/es/texidocs/using-the-whiteout-property.texidoc index 22fe2c7736..3ba0811207 100644 --- a/Documentation/es/texidocs/using-the-whiteout-property.texidoc +++ b/Documentation/es/texidocs/using-the-whiteout-property.texidoc @@ -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" diff --git a/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc b/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc index d42cee3709..c06dc2ae4b 100644 --- a/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc +++ b/Documentation/es/texidocs/using-ties-with-arpeggios.texidoc @@ -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 index 0000000000..1570f32ef3 --- /dev/null +++ b/Documentation/es/texidocs/utf-8.texidoc @@ -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 index 0000000000..177ad52a2b --- /dev/null +++ b/Documentation/es/texidocs/vertical-aligned-staffgroups-without-connecting-systemstartbar.texidoc @@ -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 index 0000000000..779577ad44 --- /dev/null +++ b/Documentation/es/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc @@ -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" diff --git a/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc index 0e37c97430..89914b4c3a 100644 --- a/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc +++ b/Documentation/es/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc b/Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc index 3eeb4c0526..ae2d5b58d2 100644 --- a/Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc +++ b/Documentation/es/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc @@ -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 diff --git a/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc index 3236fa9859..e4fe6bbc24 100644 --- a/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc +++ b/Documentation/es/texidocs/vertically-aligning-ossias-and-lyrics.texidoc @@ -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 index 0000000000..d965f8e0a8 --- /dev/null +++ b/Documentation/es/texidocs/vertically-centered-common-lyrics.texidoc @@ -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" diff --git a/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc b/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc index fa569e0593..f6e201fb4d 100644 --- a/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc +++ b/Documentation/es/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc @@ -8,5 +8,3 @@ tiene el valor verdadero. " doctitlees = "Centrado vertical de las líneas de bajo cifrado emparejadas" - - diff --git a/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc index 9b21f1b546..682474ef7b 100644 --- a/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc +++ b/Documentation/es/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc index cdc12e40b4..005ea1e2a8 100644 --- a/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc +++ b/Documentation/es/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -7,4 +7,3 @@ colocan utilizando @code{alignAboveContext} y " doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas" - diff --git a/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc index 4ae6f540d0..3c2fc6f6ef 100644 --- a/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc +++ b/Documentation/es/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -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" diff --git a/Documentation/es/texidocs/vocal-ensemble-template.texidoc b/Documentation/es/texidocs/vocal-ensemble-template.texidoc index 1a913d7831..bc28fd4187 100644 --- a/Documentation/es/texidocs/vocal-ensemble-template.texidoc +++ b/Documentation/es/texidocs/vocal-ensemble-template.texidoc @@ -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" - diff --git a/Documentation/es/texidocs/volta-below-chords.texidoc b/Documentation/es/texidocs/volta-below-chords.texidoc index 821417e14d..e4bfc08024 100644 --- a/Documentation/es/texidocs/volta-below-chords.texidoc +++ b/Documentation/es/texidocs/volta-below-chords.texidoc @@ -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 index 0000000000..f68d437f65 --- /dev/null +++ b/Documentation/es/texidocs/volta-multi-staff.texidoc @@ -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 index 0000000000..ff6a11be50 --- /dev/null +++ b/Documentation/es/texidocs/volta-text-markup-using-repeatcommands.texidoc @@ -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" diff --git a/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc b/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc index a32b4fcf2b..84a57bb334 100644 --- a/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc +++ b/Documentation/es/texidocs/woodwind-diagrams-key-lists.texidoc @@ -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" diff --git a/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc b/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc index 93321a06e1..9f2c15c3a8 100644 --- a/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc +++ b/Documentation/es/texidocs/woodwind-diagrams-listing.texidoc @@ -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 diff --git a/Documentation/es/translations.itexi b/Documentation/es/translations.itexi index 7bea66747f..b95f74d1b8 100644 --- a/Documentation/es/translations.itexi +++ b/Documentation/es/translations.itexi @@ -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 -parcialmente +sí @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 index 425cc1d8e2..0000000000 --- a/Documentation/es/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/usage/external.itely b/Documentation/es/usage/external.itely index 918b124cf3..90e07c34f6 100644 --- a/Documentation/es/usage/external.itely +++ b/Documentation/es/usage/external.itely @@ -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 diff --git a/Documentation/es/usage/lilypond-book.itely b/Documentation/es/usage/lilypond-book.itely index d483d6f0ef..b223e0c4be 100644 --- a/Documentation/es/usage/lilypond-book.itely +++ b/Documentation/es/usage/lilypond-book.itely @@ -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]{} -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{}, donde podemos introducir +la instrucción @code{}, donde podemos introducir directamente fragmentos cortos de código de LilyPond @item -el entorno @code{...}, donde podemos escribir +el entorno @code{@dots{}}, donde podemos escribir directamente bloques más extensos de código de LilyPond @item -la instrucción @code{...} para insertar +la instrucción @code{@dots{}} para insertar un archivo de LilyPond @item -la instrucción @code{...} para insertar +la instrucción @code{@dots{}} 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{}, donde las +Para imágenes en línea, utilice @code{}, 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 una línea de texto. Para incluir archivos externos, escriba @example -@var{archivo} +@var{archivo} @end example @code{} usa la misma sintaxis que @code{}, @@ -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 diff --git a/Documentation/es/usage/running.itely b/Documentation/es/usage/running.itely index 12dc06e739..e6cb4cfce3 100644 --- a/Documentation/es/usage/running.itely +++ b/Documentation/es/usage/running.itely @@ -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 diff --git a/Documentation/es/usage/suggestions.itely b/Documentation/es/usage/suggestions.itely index f062a2a462..b974c54af6 100644 --- a/Documentation/es/usage/suggestions.itely +++ b/Documentation/es/usage/suggestions.itely @@ -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, diff --git a/Documentation/es/usage/updating.itely b/Documentation/es/usage/updating.itely index f253583646..acb7b92fc5 100644 --- a/Documentation/es/usage/updating.itely +++ b/Documentation/es/usage/updating.itely @@ -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' @@ -18,12 +18,13 @@ @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 index 425cc1d8e2..0000000000 --- a/Documentation/es/web/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/es/web/community.itexi b/Documentation/es/web/community.itexi index 119ec37c51..d9ed101f19 100644 --- a/Documentation/es/web/community.itexi +++ b/Documentation/es/web/community.itexi @@ -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 diff --git a/Documentation/es/web/download.itexi b/Documentation/es/web/download.itexi index 1a95931868..23334e2656 100644 --- a/Documentation/es/web/download.itexi +++ b/Documentation/es/web/download.itexi @@ -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 diff --git a/Documentation/es/web/introduction.itexi b/Documentation/es/web/introduction.itexi index 0f0cf9fef8..c1f39605b7 100644 --- a/Documentation/es/web/introduction.itexi +++ b/Documentation/es/web/introduction.itexi @@ -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}. diff --git a/Documentation/es/web/manuals.itexi b/Documentation/es/web/manuals.itexi index e19fd0c687..b53ae2fe14 100644 --- a/Documentation/es/web/manuals.itexi +++ b/Documentation/es/web/manuals.itexi @@ -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} diff --git a/Documentation/es/web/news-front.itexi b/Documentation/es/web/news-front.itexi index 0828e77e36..4128758545 100644 --- a/Documentation/es/web/news-front.itexi +++ b/Documentation/es/web/news-front.itexi @@ -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' @@ -17,6 +17,73 @@ @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 diff --git a/Documentation/es/web/news.itexi b/Documentation/es/web/news.itexi index 6f20190e3a..4883a59c92 100644 --- a/Documentation/es/web/news.itexi +++ b/Documentation/es/web/news.itexi @@ -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 index 068109cdcf..0000000000 --- a/Documentation/essay/GNUmakefile +++ /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 - diff --git a/Documentation/essay/computer-notation.bib b/Documentation/essay/computer-notation.bib index 23b0658066..b4d7e1984e 100644 --- a/Documentation/essay/computer-notation.bib +++ b/Documentation/essay/computer-notation.bib @@ -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}, diff --git a/Documentation/essay/engraving.itely b/Documentation/essay/engraving.itely index 9dd71564d9..0192b98623 100644 --- a/Documentation/essay/engraving.itely +++ b/Documentation/essay/engraving.itely @@ -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 2.~->^\f 4.~ 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 r4\fermata } \new Voice = "II" \relative c' { \voiceTwo c4 - \times 4/5 { + \tuplet 5/4 { 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 ) 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 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT + \override Arpeggio.direction = #RIGHT \stemUp 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 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 4 - \once \override NoteHead #'style = #'cross + \once \override NoteHead.style = #'cross 4 \applyOutput #'Voice #mc-squared 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 } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down + \override Staff.Arpeggio.arpeggio-direction =#down 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 } } } diff --git a/Documentation/essay/engravingbib.bib b/Documentation/essay/engravingbib.bib index f419af4e65..ecbddcbe35 100644 --- a/Documentation/essay/engravingbib.bib +++ b/Documentation/essay/engravingbib.bib @@ -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 index cab24d6a17..0000000000 --- a/Documentation/extending/GNUmakefile +++ /dev/null @@ -1,7 +0,0 @@ -depth = ../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make - - diff --git a/Documentation/extending/programming-interface.itely b/Documentation/extending/programming-interface.itely index a6109a5774..82ef216ad8 100644 --- a/Documentation/extending/programming-interface.itely +++ b/Documentation/extending/programming-interface.itely @@ -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 diff --git a/Documentation/extending/scheme-tutorial.itely b/Documentation/extending/scheme-tutorial.itely index c75f546300..bad8d261b2 100644 --- a/Documentation/extending/scheme-tutorial.itely +++ b/Documentation/extending/scheme-tutorial.itely @@ -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 = (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 } #}) diff --git a/Documentation/fr/GNUmakefile b/Documentation/fr/GNUmakefile index d9695cbb76..420c8db9d6 100644 --- a/Documentation/fr/GNUmakefile +++ b/Documentation/fr/GNUmakefile @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/fr/essay/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/essay/engraving.itely b/Documentation/fr/essay/engraving.itely index 6e4920878f..1a71ee2876 100644 --- a/Documentation/fr/essay/engraving.itely +++ b/Documentation/fr/essay/engraving.itely @@ -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 2.~->^\f 4.~ 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 r4\fermata } \new Voice = "II" \relative c' { \voiceTwo c4 - \times 4/5 { + \tuplet 5/4 { 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 ) 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 4_>-\arpeggio - \override Arpeggio #'direction = #RIGHT + \override Arpeggio.direction = #RIGHT \stemUp 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 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 4 - \once \override NoteHead #'style = #'cross + \once \override NoteHead.style = #'cross 4 \applyOutput #'Voice #mc-squared 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 } \\ { - \override Staff.Arpeggio #'arpeggio-direction =#down + \override Staff.Arpeggio.arpeggio-direction =#down 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 } } } diff --git a/Documentation/fr/extending.tely b/Documentation/fr/extending.tely index 346c0e6e2d..221ce450bd 100644 --- a/Documentation/fr/extending.tely +++ b/Documentation/fr/extending.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/fr/extending/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/extending/programming-interface.itely b/Documentation/fr/extending/programming-interface.itely index 6869d2dc04..7d9737154a 100644 --- a/Documentation/fr/extending/programming-interface.itely +++ b/Documentation/fr/extending/programming-interface.itely @@ -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 diff --git a/Documentation/fr/extending/scheme-tutorial.itely b/Documentation/fr/extending/scheme-tutorial.itely index c63427f72e..8a9b86a145 100644 --- a/Documentation/fr/extending/scheme-tutorial.itely +++ b/Documentation/fr/extending/scheme-tutorial.itely @@ -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 = (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 index afe7a4d738..0000000000 --- a/Documentation/fr/included/GNUmakefile +++ /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/fr/included/generating-output.itexi b/Documentation/fr/included/generating-output.itexi index 794154170d..0a50d619d0 100644 --- a/Documentation/fr/included/generating-output.itexi +++ b/Documentation/fr/included/generating-output.itexi @@ -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{}} diff --git a/Documentation/fr/included/helpus.itexi b/Documentation/fr/included/helpus.itexi index 7ab3b5d377..751bc6b00e 100644 --- a/Documentation/fr/included/helpus.itexi +++ b/Documentation/fr/included/helpus.itexi @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/fr/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/learning/common-notation.itely b/Documentation/fr/learning/common-notation.itely index f546f05134..7ce9e53cc1 100644 --- a/Documentation/fr/learning/common-notation.itely +++ b/Documentation/fr/learning/common-notation.itely @@ -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 diff --git a/Documentation/fr/learning/fundamental.itely b/Documentation/fr/learning/fundamental.itely index de1d02fcbc..d90720d173 100644 --- a/Documentation/fr/learning/fundamental.itely +++ b/Documentation/fr/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/fr/learning/templates.itely b/Documentation/fr/learning/templates.itely index bd1dbb9d0e..3995bff9a0 100644 --- a/Documentation/fr/learning/templates.itely +++ b/Documentation/fr/learning/templates.itely @@ -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 diff --git a/Documentation/fr/learning/tutorial.itely b/Documentation/fr/learning/tutorial.itely index 1015ea06ee..f51723a354 100644 --- a/Documentation/fr/learning/tutorial.itely +++ b/Documentation/fr/learning/tutorial.itely @@ -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 : diff --git a/Documentation/fr/learning/tweaks.itely b/Documentation/fr/learning/tweaks.itely index 36e5232f73..f2c3288126 100644 --- a/Documentation/fr/learning/tweaks.itely +++ b/Documentation/fr/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -391,7 +437,7 @@ accord peut être modifiée de cette manière : @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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) 4 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 -\once \override StringNumber #'self-alignment-X = #RIGHT +\once \override StringNumber.self-alignment-X = #RIGHT @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 : \\ { 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 diff --git a/Documentation/fr/notation.tely b/Documentation/fr/notation.tely index 105b1fde2d..f76b7c3bfd 100644 --- a/Documentation/fr/notation.tely +++ b/Documentation/fr/notation.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/fr/notation/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/notation/ancient.itely b/Documentation/fr/notation/ancient.itely index ba56e95603..2dff5b14eb 100644 --- a/Documentation/fr/notation/ancient.itely +++ b/Documentation/fr/notation/ancient.itely @@ -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: diff --git a/Documentation/fr/notation/changing-defaults.itely b/Documentation/fr/notation/changing-defaults.itely index 8f71f56ec3..4ca567912e 100644 --- a/Documentation/fr/notation/changing-defaults.itely +++ b/Documentation/fr/notation/changing-defaults.itely @@ -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}) - ) -@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 4 -<\tweak #'color #red c>4 +\tweak color #red c4 +\tweak color #red 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 -4 +\tweak Stem.color #red +\tweak Beam.color #green c8 e +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 -@c 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 } +>> +@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 } +>> +@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 } ->> + { + 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 } #}) diff --git a/Documentation/fr/notation/cheatsheet.itely b/Documentation/fr/notation/cheatsheet.itely index 802ce79344..6ae89aac3d 100644 --- a/Documentation/fr/notation/cheatsheet.itely +++ b/Documentation/fr/notation/cheatsheet.itely @@ -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 diff --git a/Documentation/fr/notation/chords.itely b/Documentation/fr/notation/chords.itely index 3153950907..f35fa56f70 100644 --- a/Documentation/fr/notation/chords.itely +++ b/Documentation/fr/notation/chords.itely @@ -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' { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } +} << \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } + \chordmusic } { - 2 - 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 diff --git a/Documentation/fr/notation/editorial.itely b/Documentation/fr/notation/editorial.itely index bfb5140129..a46c9f80c4 100644 --- a/Documentation/fr/notation/editorial.itely +++ b/Documentation/fr/notation/editorial.itely @@ -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 diff --git a/Documentation/fr/notation/expressive.itely b/Documentation/fr/notation/expressive.itely index 7316a7cee5..d1998c84ff 100644 --- a/Documentation/fr/notation/expressive.itely +++ b/Documentation/fr/notation/expressive.itely @@ -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' { + 16 + 2..\moltoF 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 diff --git a/Documentation/fr/notation/fretted-strings.itely b/Documentation/fr/notation/fretted-strings.itely index 314d67033e..98de5e2874 100644 --- a/Documentation/fr/notation/fretted-strings.itely +++ b/Documentation/fr/notation/fretted-strings.itely @@ -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 @{ @} + stringTunings = \stringTuning @} @} @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" 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" 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" 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" 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" 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" 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" 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" 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" 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 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} 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 { 1 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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 { 1 \predefinedFretboardsOff 1 \predefinedFretboardsOn 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 1 @@ -1517,16 +1518,16 @@ fret. @lilypond[quote, verbatim] << - \context ChordNames { + \new ChordNames { \chordmode { c1 d:m } } - \context FretBoards { + \new FretBoards { 1 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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 { 1 \set FretBoards.minimumFret = #5 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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" }}} 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 diff --git a/Documentation/fr/notation/input.itely b/Documentation/fr/notation/input.itely index f2cf87f759..ae073dcfde 100644 --- a/Documentation/fr/notation/input.itely +++ b/Documentation/fr/notation/input.itely @@ -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" 2 + <\footnote #'(-2 . -3) "Résultat probant" a-3>4 + 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 + 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 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, textes, etc. 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 diff --git a/Documentation/fr/notation/keyboards.itely b/Documentation/fr/notation/keyboards.itely index 67cfcac0de..5f0075d66a 100644 --- a/Documentation/fr/notation/keyboards.itely +++ b/Documentation/fr/notation/keyboards.itely @@ -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 : diff --git a/Documentation/fr/notation/notation-appendices.itely b/Documentation/fr/notation/notation-appendices.itely index c8400fc9ae..8ceef02be4 100644 --- a/Documentation/fr/notation/notation-appendices.itely +++ b/Documentation/fr/notation/notation-appendices.itely @@ -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 diff --git a/Documentation/fr/notation/percussion.itely b/Documentation/fr/notation/percussion.itely index eb84aa3c52..3a0dfcdddf 100644 --- a/Documentation/fr/notation/percussion.itely +++ b/Documentation/fr/notation/percussion.itely @@ -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" } diff --git a/Documentation/fr/notation/pitches.itely b/Documentation/fr/notation/pitches.itely index 3b192aff41..f468db5728 100644 --- a/Documentation/fr/notation/pitches.itely +++ b/Documentation/fr/notation/pitches.itely @@ -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] -2 4 +2 4 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 diff --git a/Documentation/fr/notation/repeats.itely b/Documentation/fr/notation/repeats.itely index 684a05d4bb..4952a258e7 100644 --- a/Documentation/fr/notation/repeats.itely +++ b/Documentation/fr/notation/repeats.itely @@ -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. 16 } -\repeat percent 2 { \times 2/3 { r8 c d } e4 } +\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 } @end lilypond @snippets diff --git a/Documentation/fr/notation/rhythms.itely b/Documentation/fr/notation/rhythms.itely index 4af7fb85cc..d007c5194b 100644 --- a/Documentation/fr/notation/rhythms.itely +++ b/Documentation/fr/notation/rhythms.itely @@ -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] - ~ +~ @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 2 ~ } +\repeat volta 2 { c g 2~ } \alternative { % First alternative: following note is tied normally { 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 | } diff --git a/Documentation/fr/notation/simultaneous.itely b/Documentation/fr/notation/simultaneous.itely index 1e6693e693..4d6b176905 100644 --- a/Documentation/fr/notation/simultaneous.itely +++ b/Documentation/fr/notation/simultaneous.itely @@ -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] -1\fermata 2-> 4\prall 8.^| 16-. +1\fermata 2-> 4\prall 8.^! 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] -1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +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 diff --git a/Documentation/fr/notation/spacing.itely b/Documentation/fr/notation/spacing.itely index a9389f591b..936e52c4f7 100644 --- a/Documentation/fr/notation/spacing.itely +++ b/Documentation/fr/notation/spacing.itely @@ -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) } } } diff --git a/Documentation/fr/notation/staff.itely b/Documentation/fr/notation/staff.itely index 7f1d0208c1..9e50bb07b2 100644 --- a/Documentation/fr/notation/staff.itely +++ b/Documentation/fr/notation/staff.itely @@ -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}. diff --git a/Documentation/fr/notation/text.itely b/Documentation/fr/notation/text.itely index ceb31c381e..04afd78674 100644 --- a/Documentation/fr/notation/text.itely +++ b/Documentation/fr/notation/text.itely @@ -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'{ diff --git a/Documentation/fr/notation/unfretted-strings.itely b/Documentation/fr/notation/unfretted-strings.itely index 78a6a67579..35b84030ac 100644 --- a/Documentation/fr/notation/unfretted-strings.itely +++ b/Documentation/fr/notation/unfretted-strings.itely @@ -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}, diff --git a/Documentation/fr/notation/vocal.itely b/Documentation/fr/notation/vocal.itely index 73a0f86310..1e3a6f93dd 100644 --- a/Documentation/fr/notation/vocal.itely +++ b/Documentation/fr/notation/vocal.itely @@ -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}, diff --git a/Documentation/fr/notation/wind.itely b/Documentation/fr/notation/wind.itely index 0a4f1eece2..6ecc977325 100644 --- a/Documentation/fr/notation/wind.itely +++ b/Documentation/fr/notation/wind.itely @@ -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' diff --git a/Documentation/fr/search-box.ihtml b/Documentation/fr/search-box.ihtml index f22e11f2d0..4ea2fffbf0 100644 --- a/Documentation/fr/search-box.ihtml +++ b/Documentation/fr/search-box.ihtml @@ -1,5 +1,5 @@ diff --git a/Documentation/fr/texidocs/GNUmakefile b/Documentation/fr/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/fr/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/texidocs/accordion-discant-symbols.texidoc b/Documentation/fr/texidocs/accordion-discant-symbols.texidoc index a142b46993..3af4bfd7f3 100644 --- a/Documentation/fr/texidocs/accordion-discant-symbols.texidoc +++ b/Documentation/fr/texidocs/accordion-discant-symbols.texidoc @@ -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 index 0000000000..92462e906f --- /dev/null +++ b/Documentation/fr/texidocs/accordion-registers.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc b/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc index ee14f8a79a..99ba5969c6 100644 --- a/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc +++ b/Documentation/fr/texidocs/adding-a-figured-bass-above-or-below-the-notes.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc b/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc index 0368bd8c28..f449ab62f2 100644 --- a/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc +++ b/Documentation/fr/texidocs/adding-ambitus-per-voice.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/adding-an-extra-staff-at-a-line-break.texidoc b/Documentation/fr/texidocs/adding-an-extra-staff-at-a-line-break.texidoc index 494073afa4..3dc7b4c35c 100644 --- a/Documentation/fr/texidocs/adding-an-extra-staff-at-a-line-break.texidoc +++ b/Documentation/fr/texidocs/adding-an-extra-staff-at-a-line-break.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/adding-an-extra-staff.texidoc b/Documentation/fr/texidocs/adding-an-extra-staff.texidoc index e8b3d26357..31eae91382 100644 --- a/Documentation/fr/texidocs/adding-an-extra-staff.texidoc +++ b/Documentation/fr/texidocs/adding-an-extra-staff.texidoc @@ -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 index 0000000000..fd5c6b1edb --- /dev/null +++ b/Documentation/fr/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/adding-bar-lines-to-chordnames-context.texidoc b/Documentation/fr/texidocs/adding-bar-lines-to-chordnames-context.texidoc index 82a757f75d..59050838a9 100644 --- a/Documentation/fr/texidocs/adding-bar-lines-to-chordnames-context.texidoc +++ b/Documentation/fr/texidocs/adding-bar-lines-to-chordnames-context.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc b/Documentation/fr/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc index ce841e0581..38255f83c7 100644 --- a/Documentation/fr/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc +++ b/Documentation/fr/texidocs/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.texidoc @@ -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, crochets, etc. 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" diff --git a/Documentation/fr/texidocs/adding-drum-parts.texidoc b/Documentation/fr/texidocs/adding-drum-parts.texidoc index b08517df01..7820febbe5 100644 --- a/Documentation/fr/texidocs/adding-drum-parts.texidoc +++ b/Documentation/fr/texidocs/adding-drum-parts.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/adding-extra-fingering-with-scheme.texidoc b/Documentation/fr/texidocs/adding-extra-fingering-with-scheme.texidoc index f6f9d45054..4a419f7975 100644 --- a/Documentation/fr/texidocs/adding-extra-fingering-with-scheme.texidoc +++ b/Documentation/fr/texidocs/adding-extra-fingering-with-scheme.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/adding-fingerings-to-a-score.texidoc b/Documentation/fr/texidocs/adding-fingerings-to-a-score.texidoc index 7ff98b2069..6d10ed9eca 100644 --- a/Documentation/fr/texidocs/adding-fingerings-to-a-score.texidoc +++ b/Documentation/fr/texidocs/adding-fingerings-to-a-score.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc b/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc index c56b88ee80..0a10b50fa7 100644 --- a/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc +++ b/Documentation/fr/texidocs/adding-fingerings-to-tablatures.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc b/Documentation/fr/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc index de24124d93..671e77c64f 100644 --- a/Documentation/fr/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc +++ b/Documentation/fr/texidocs/adding-indicators-to-staves-which-get-split-after-a-break.texidoc @@ -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 index 0000000000..b6c69e3f87 --- /dev/null +++ b/Documentation/fr/texidocs/adding-links-to-objects.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc b/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc index d6b4922e7a..817c0fab8f 100644 --- a/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc +++ b/Documentation/fr/texidocs/adding-orchestral-cues-to-a-vocal-score.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc b/Documentation/fr/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc index c8613b02f0..dcabd31133 100644 --- a/Documentation/fr/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc +++ b/Documentation/fr/texidocs/adding-parentheses-around-an-expressive-mark-or-chordal-note.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc b/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc index 4145ab2344..fd9701b70a 100644 --- a/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc +++ b/Documentation/fr/texidocs/adding-the-current-date-to-a-score.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/adding-timing-marks-to-long-glissandi.texidoc b/Documentation/fr/texidocs/adding-timing-marks-to-long-glissandi.texidoc index df8c56fae2..8177e24012 100644 --- a/Documentation/fr/texidocs/adding-timing-marks-to-long-glissandi.texidoc +++ b/Documentation/fr/texidocs/adding-timing-marks-to-long-glissandi.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc b/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc index 4f78034bba..120da08ec4 100644 --- a/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc +++ b/Documentation/fr/texidocs/adding-volta-brackets-to-additional-staves.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc b/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc index 9bcc2eb8ff..d896151262 100644 --- a/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc +++ b/Documentation/fr/texidocs/additional-voices-to-avoid-collisions.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/adjusting-grace-note-spacing.texidoc b/Documentation/fr/texidocs/adjusting-grace-note-spacing.texidoc index c370fcd2d3..1cf049d6c7 100644 --- a/Documentation/fr/texidocs/adjusting-grace-note-spacing.texidoc +++ b/Documentation/fr/texidocs/adjusting-grace-note-spacing.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc b/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc index 441f19341b..c63245757a 100644 --- a/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc +++ b/Documentation/fr/texidocs/adjusting-lyrics-vertical-spacing.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc b/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc index 9625909cd2..4c309a58fa 100644 --- a/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc +++ b/Documentation/fr/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/aligning-and-centering-instrument-names.texidoc b/Documentation/fr/texidocs/aligning-and-centering-instrument-names.texidoc index 176ad95d77..8b2bd41590 100644 --- a/Documentation/fr/texidocs/aligning-and-centering-instrument-names.texidoc +++ b/Documentation/fr/texidocs/aligning-and-centering-instrument-names.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/aligning-bar-numbers.texidoc b/Documentation/fr/texidocs/aligning-bar-numbers.texidoc index 6443c04521..020df30557 100644 --- a/Documentation/fr/texidocs/aligning-bar-numbers.texidoc +++ b/Documentation/fr/texidocs/aligning-bar-numbers.texidoc @@ -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 index 065fef38e0..0000000000 --- a/Documentation/fr/texidocs/aligning-marks-with-various-notation-objects.texidoc +++ /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" - diff --git a/Documentation/fr/texidocs/aligning-objects-created-with-the--mark-command.texidoc b/Documentation/fr/texidocs/aligning-objects-created-with-the--mark-command.texidoc index 9cde9b90f6..126494023e 100644 --- a/Documentation/fr/texidocs/aligning-objects-created-with-the--mark-command.texidoc +++ b/Documentation/fr/texidocs/aligning-objects-created-with-the--mark-command.texidoc @@ -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 index 0000000000..280d446b72 --- /dev/null +++ b/Documentation/fr/texidocs/aligning-syllables-with-melisma.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc b/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc index 33d70b26e6..5f7a0c348b 100644 --- a/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc +++ b/Documentation/fr/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/altering-the-length-of-beamed-stems.texidoc b/Documentation/fr/texidocs/altering-the-length-of-beamed-stems.texidoc index efe38aff20..a49b8b7268 100644 --- a/Documentation/fr/texidocs/altering-the-length-of-beamed-stems.texidoc +++ b/Documentation/fr/texidocs/altering-the-length-of-beamed-stems.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/alternative-bar-numbering.texidoc b/Documentation/fr/texidocs/alternative-bar-numbering.texidoc index b70e35703f..33c43babc8 100644 --- a/Documentation/fr/texidocs/alternative-bar-numbering.texidoc +++ b/Documentation/fr/texidocs/alternative-bar-numbering.texidoc @@ -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 index 9b902b52fd..0000000000 --- a/Documentation/fr/texidocs/alternative-breve-note.texidoc +++ /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 index 0000000000..2fd998f65c --- /dev/null +++ b/Documentation/fr/texidocs/alternative-breve-notes.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc b/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc index a926888938..b1171eb8d8 100644 --- a/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc +++ b/Documentation/fr/texidocs/ambitus-with-multiple-voices.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/ambitus.texidoc b/Documentation/fr/texidocs/ambitus.texidoc index 4f5dfe5f63..8a067ed9fe 100644 --- a/Documentation/fr/texidocs/ambitus.texidoc +++ b/Documentation/fr/texidocs/ambitus.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/analysis-brackets-above-the-staff.texidoc b/Documentation/fr/texidocs/analysis-brackets-above-the-staff.texidoc index 2783d174d4..05c9180a0d 100644 --- a/Documentation/fr/texidocs/analysis-brackets-above-the-staff.texidoc +++ b/Documentation/fr/texidocs/analysis-brackets-above-the-staff.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/ancient-fonts.texidoc b/Documentation/fr/texidocs/ancient-fonts.texidoc index 74d2644012..37007ce9a4 100644 --- a/Documentation/fr/texidocs/ancient-fonts.texidoc +++ b/Documentation/fr/texidocs/ancient-fonts.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc index d2318de8f4..fe5de2a53f 100644 --- a/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc +++ b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc index 5f204d38af..aeb4bfe287 100644 --- a/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc +++ b/Documentation/fr/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/ancient-time-signatures.texidoc b/Documentation/fr/texidocs/ancient-time-signatures.texidoc index 782012c9ff..241a915c5a 100644 --- a/Documentation/fr/texidocs/ancient-time-signatures.texidoc +++ b/Documentation/fr/texidocs/ancient-time-signatures.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/anglican-psalm-template.texidoc b/Documentation/fr/texidocs/anglican-psalm-template.texidoc index 1d14e751d7..7833923690 100644 --- a/Documentation/fr/texidocs/anglican-psalm-template.texidoc +++ b/Documentation/fr/texidocs/anglican-psalm-template.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc index c67a1e3b44..f75a256c82 100644 --- a/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc +++ b/Documentation/fr/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/arabic-improvisation.texidoc b/Documentation/fr/texidocs/arabic-improvisation.texidoc index b597d848ad..7440e2ea51 100644 --- a/Documentation/fr/texidocs/arabic-improvisation.texidoc +++ b/Documentation/fr/texidocs/arabic-improvisation.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/asymmetric-slurs.texidoc b/Documentation/fr/texidocs/asymmetric-slurs.texidoc index 16e7c75a9e..94d68f4398 100644 --- a/Documentation/fr/texidocs/asymmetric-slurs.texidoc +++ b/Documentation/fr/texidocs/asymmetric-slurs.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/automatic-beam-subdivisions.texidoc b/Documentation/fr/texidocs/automatic-beam-subdivisions.texidoc index 32247eb029..e1da5c4d10 100644 --- a/Documentation/fr/texidocs/automatic-beam-subdivisions.texidoc +++ b/Documentation/fr/texidocs/automatic-beam-subdivisions.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/automatically-change-durations.texidoc b/Documentation/fr/texidocs/automatically-change-durations.texidoc index ad235907f6..42053f0a47 100644 --- a/Documentation/fr/texidocs/automatically-change-durations.texidoc +++ b/Documentation/fr/texidocs/automatically-change-durations.texidoc @@ -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 index 0000000000..7dcb6bbd2a --- /dev/null +++ b/Documentation/fr/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/avoiding-collisions-with-chord-fingerings.texidoc b/Documentation/fr/texidocs/avoiding-collisions-with-chord-fingerings.texidoc index 01cf95b362..374803bc97 100644 --- a/Documentation/fr/texidocs/avoiding-collisions-with-chord-fingerings.texidoc +++ b/Documentation/fr/texidocs/avoiding-collisions-with-chord-fingerings.texidoc @@ -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. " diff --git a/Documentation/fr/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc b/Documentation/fr/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc index 3223e6a0f7..427dfb9357 100644 --- a/Documentation/fr/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc +++ b/Documentation/fr/texidocs/bar-chords-notation-for-guitar--with-text-spanner.texidoc @@ -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). diff --git a/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc b/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc index 748194e77f..84bf32f8ea 100644 --- a/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc +++ b/Documentation/fr/texidocs/beam-endings-in-score-context.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc b/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc index 2c9dd358ec..d3bce2d0a7 100644 --- a/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc +++ b/Documentation/fr/texidocs/beam-grouping-in-7-8-time.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/beams-across-line-breaks.texidoc b/Documentation/fr/texidocs/beams-across-line-breaks.texidoc index 6df040a61b..e9e461bf5e 100644 --- a/Documentation/fr/texidocs/beams-across-line-breaks.texidoc +++ b/Documentation/fr/texidocs/beams-across-line-breaks.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc b/Documentation/fr/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc index fe0fa8ef28..c8eb1bc7fc 100644 --- a/Documentation/fr/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc +++ b/Documentation/fr/texidocs/blanking-staff-lines-using-the--whiteout-command.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/book-parts.texidoc b/Documentation/fr/texidocs/book-parts.texidoc index ceaa316631..7123409ee9 100644 --- a/Documentation/fr/texidocs/book-parts.texidoc +++ b/Documentation/fr/texidocs/book-parts.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/breathing-signs.texidoc b/Documentation/fr/texidocs/breathing-signs.texidoc index 2ebf896ade..db20bca4cf 100644 --- a/Documentation/fr/texidocs/breathing-signs.texidoc +++ b/Documentation/fr/texidocs/breathing-signs.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/broken-crescendo-hairpin.texidoc b/Documentation/fr/texidocs/broken-crescendo-hairpin.texidoc index a15d6d8ff3..b5d6441115 100644 --- a/Documentation/fr/texidocs/broken-crescendo-hairpin.texidoc +++ b/Documentation/fr/texidocs/broken-crescendo-hairpin.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/caesura-railtracks-with-fermata.texidoc b/Documentation/fr/texidocs/caesura-railtracks-with-fermata.texidoc index c967dc1128..2f91e1dae0 100644 --- a/Documentation/fr/texidocs/caesura-railtracks-with-fermata.texidoc +++ b/Documentation/fr/texidocs/caesura-railtracks-with-fermata.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/center-text-below-hairpin-dynamics.texidoc b/Documentation/fr/texidocs/center-text-below-hairpin-dynamics.texidoc index 113303e272..27ada29e45 100644 --- a/Documentation/fr/texidocs/center-text-below-hairpin-dynamics.texidoc +++ b/Documentation/fr/texidocs/center-text-below-hairpin-dynamics.texidoc @@ -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é. diff --git a/Documentation/fr/texidocs/centering-markup-on-note-heads-automatically.texidoc b/Documentation/fr/texidocs/centering-markup-on-note-heads-automatically.texidoc index b4a52231a9..399852b689 100644 --- a/Documentation/fr/texidocs/centering-markup-on-note-heads-automatically.texidoc +++ b/Documentation/fr/texidocs/centering-markup-on-note-heads-automatically.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc b/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc index 9081276145..5a7db54732 100644 --- a/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc +++ b/Documentation/fr/texidocs/changing--flageolet-mark-size.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/changing-a-single-notes-size-in-a-chord.texidoc b/Documentation/fr/texidocs/changing-a-single-notes-size-in-a-chord.texidoc index 6f99cc55d2..f8b85f8355 100644 --- a/Documentation/fr/texidocs/changing-a-single-notes-size-in-a-chord.texidoc +++ b/Documentation/fr/texidocs/changing-a-single-notes-size-in-a-chord.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc b/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc index 9ed6ceaecf..6f2df7799c 100644 --- a/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc +++ b/Documentation/fr/texidocs/changing-beam-knee-gap.texidoc @@ -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. " diff --git a/Documentation/fr/texidocs/changing-chord-separator.texidoc b/Documentation/fr/texidocs/changing-chord-separator.texidoc index 8cc023a6ae..18c29ac2a5 100644 --- a/Documentation/fr/texidocs/changing-chord-separator.texidoc +++ b/Documentation/fr/texidocs/changing-chord-separator.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc b/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc index ee68872faa..f81e1890f5 100644 --- a/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc +++ b/Documentation/fr/texidocs/changing-form-of-multi-measure-rests.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/changing-fret-orientations.texidoc b/Documentation/fr/texidocs/changing-fret-orientations.texidoc index 70e1300c0b..2f9a73b666 100644 --- a/Documentation/fr/texidocs/changing-fret-orientations.texidoc +++ b/Documentation/fr/texidocs/changing-fret-orientations.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc b/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc index 7c756b111a..5627253e70 100644 --- a/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc +++ b/Documentation/fr/texidocs/changing-midi-output-to-one-channel-per-voice.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/changing-partcombine-texts.texidoc b/Documentation/fr/texidocs/changing-partcombine-texts.texidoc index 7549a192c8..8fc4c873a9 100644 --- a/Documentation/fr/texidocs/changing-partcombine-texts.texidoc +++ b/Documentation/fr/texidocs/changing-partcombine-texts.texidoc @@ -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 à diff --git a/Documentation/fr/texidocs/changing-properties-for-individual-grobs.texidoc b/Documentation/fr/texidocs/changing-properties-for-individual-grobs.texidoc index c31eaa34ba..35126bfdd7 100644 --- a/Documentation/fr/texidocs/changing-properties-for-individual-grobs.texidoc +++ b/Documentation/fr/texidocs/changing-properties-for-individual-grobs.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/changing-stanza-fonts.texidoc b/Documentation/fr/texidocs/changing-stanza-fonts.texidoc index 65ad34c1be..bc37bd247d 100644 --- a/Documentation/fr/texidocs/changing-stanza-fonts.texidoc +++ b/Documentation/fr/texidocs/changing-stanza-fonts.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc b/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc index 486ee6b5c9..6afa6cf328 100644 --- a/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc +++ b/Documentation/fr/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc b/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc index 5da442eda0..e4a866208e 100644 --- a/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc +++ b/Documentation/fr/texidocs/changing-the-ambitus-gap.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc b/Documentation/fr/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc index ba2e5ad5dd..fd795ddec9 100644 --- a/Documentation/fr/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc +++ b/Documentation/fr/texidocs/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.texidoc @@ -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é. diff --git a/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc b/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc index 16749bbade..697267a872 100644 --- a/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc +++ b/Documentation/fr/texidocs/changing-the-breath-mark-symbol.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc b/Documentation/fr/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc index db5084fc5c..1e7cdfb70e 100644 --- a/Documentation/fr/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc +++ b/Documentation/fr/texidocs/changing-the-chord-names-to-german-or-semi-german-notation.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/changing-the-default-text-font-family.texidoc b/Documentation/fr/texidocs/changing-the-default-text-font-family.texidoc index 50769e6092..61bd5dbb17 100644 --- a/Documentation/fr/texidocs/changing-the-default-text-font-family.texidoc +++ b/Documentation/fr/texidocs/changing-the-default-text-font-family.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc b/Documentation/fr/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc index 235261e381..fb070fbb96 100644 --- a/Documentation/fr/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc +++ b/Documentation/fr/texidocs/changing-the-interval-of-lines-on-the-stave.texidoc @@ -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 -- diff --git a/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc b/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc index 37e7b8eda8..a4ccda5989 100644 --- a/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc +++ b/Documentation/fr/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/changing-the-number-of-lines-in-a-staff.texidoc b/Documentation/fr/texidocs/changing-the-number-of-lines-in-a-staff.texidoc index 76c21ffd78..cf9fcc7205 100644 --- a/Documentation/fr/texidocs/changing-the-number-of-lines-in-a-staff.texidoc +++ b/Documentation/fr/texidocs/changing-the-number-of-lines-in-a-staff.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc b/Documentation/fr/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc index 946faed665..09a6feb837 100644 --- a/Documentation/fr/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc +++ b/Documentation/fr/texidocs/changing-the-positions-of-figured-bass-alterations.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc b/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc index a34d3aebf2..e1ce3a8a34 100644 --- a/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc +++ b/Documentation/fr/texidocs/changing-the-size-of-woodwind-diagrams.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/changing-the-staff-size.texidoc b/Documentation/fr/texidocs/changing-the-staff-size.texidoc index 817b139dae..11c96b6acd 100644 --- a/Documentation/fr/texidocs/changing-the-staff-size.texidoc +++ b/Documentation/fr/texidocs/changing-the-staff-size.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc b/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc index b2846c2013..2925f8b04d 100644 --- a/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc +++ b/Documentation/fr/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/changing-the-text-for-sustain-markings.texidoc b/Documentation/fr/texidocs/changing-the-text-for-sustain-markings.texidoc index e168f29938..7a1f566fbd 100644 --- a/Documentation/fr/texidocs/changing-the-text-for-sustain-markings.texidoc +++ b/Documentation/fr/texidocs/changing-the-text-for-sustain-markings.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc b/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc index cfde5eef24..99c61aefee 100644 --- a/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc +++ b/Documentation/fr/texidocs/changing-the-tuplet-number.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc b/Documentation/fr/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc index bf2a781d0e..25f5774dd6 100644 --- a/Documentation/fr/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc +++ b/Documentation/fr/texidocs/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc b/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc index 17826c4417..d3714edbd3 100644 --- a/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc +++ b/Documentation/fr/texidocs/chant-or-psalms-notation.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/chord-glissando-in-tablature.texidoc b/Documentation/fr/texidocs/chord-glissando-in-tablature.texidoc index f00091be54..781363af2f 100644 --- a/Documentation/fr/texidocs/chord-glissando-in-tablature.texidoc +++ b/Documentation/fr/texidocs/chord-glissando-in-tablature.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/chord-name-exceptions.texidoc b/Documentation/fr/texidocs/chord-name-exceptions.texidoc index 6669ab6756..c627f16df9 100644 --- a/Documentation/fr/texidocs/chord-name-exceptions.texidoc +++ b/Documentation/fr/texidocs/chord-name-exceptions.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/chord-name-major7.texidoc b/Documentation/fr/texidocs/chord-name-major7.texidoc index f9efeac46f..e596a69c99 100644 --- a/Documentation/fr/texidocs/chord-name-major7.texidoc +++ b/Documentation/fr/texidocs/chord-name-major7.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/chordchanges-for-fretboards.texidoc b/Documentation/fr/texidocs/chordchanges-for-fretboards.texidoc index 277334d990..6e296187f3 100644 --- a/Documentation/fr/texidocs/chordchanges-for-fretboards.texidoc +++ b/Documentation/fr/texidocs/chordchanges-for-fretboards.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc b/Documentation/fr/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc index 91126ad658..05423211f9 100644 --- a/Documentation/fr/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc +++ b/Documentation/fr/texidocs/clefs-can-be-transposed-by-arbitrary-amounts.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/clip-systems.texidoc b/Documentation/fr/texidocs/clip-systems.texidoc index bf48f1a7cd..1da917e27b 100644 --- a/Documentation/fr/texidocs/clip-systems.texidoc +++ b/Documentation/fr/texidocs/clip-systems.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/clusters.texidoc b/Documentation/fr/texidocs/clusters.texidoc index d0c8ab2ac8..23224739f3 100644 --- a/Documentation/fr/texidocs/clusters.texidoc +++ b/Documentation/fr/texidocs/clusters.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/coloring-notes-depending-on-their-pitch.texidoc b/Documentation/fr/texidocs/coloring-notes-depending-on-their-pitch.texidoc index 64021040bc..629a4f6fa4 100644 --- a/Documentation/fr/texidocs/coloring-notes-depending-on-their-pitch.texidoc +++ b/Documentation/fr/texidocs/coloring-notes-depending-on-their-pitch.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/combining-dynamics-with-markup-texts.texidoc b/Documentation/fr/texidocs/combining-dynamics-with-markup-texts.texidoc index 1425d189c5..7f94090c72 100644 --- a/Documentation/fr/texidocs/combining-dynamics-with-markup-texts.texidoc +++ b/Documentation/fr/texidocs/combining-dynamics-with-markup-texts.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc b/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc index 88f04b609a..9393274461 100644 --- a/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc +++ b/Documentation/fr/texidocs/combining-two-parts-on-the-same-staff.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/compound-time-signatures.texidoc b/Documentation/fr/texidocs/compound-time-signatures.texidoc index 5720d1387c..8b0b0cd9bb 100644 --- a/Documentation/fr/texidocs/compound-time-signatures.texidoc +++ b/Documentation/fr/texidocs/compound-time-signatures.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc b/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc index 3eff0f0dd0..50d2123197 100644 --- a/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc +++ b/Documentation/fr/texidocs/conducting-signs,-measure-grouping-signs.texidoc @@ -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 index 0000000000..b8b8886ae9 --- /dev/null +++ b/Documentation/fr/texidocs/consistently-left-aligned-bar-numbers.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/contemporary-glissando.texidoc b/Documentation/fr/texidocs/contemporary-glissando.texidoc index 259c6cc767..d01012050d 100644 --- a/Documentation/fr/texidocs/contemporary-glissando.texidoc +++ b/Documentation/fr/texidocs/contemporary-glissando.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc b/Documentation/fr/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc index f48e3c8cfb..5532b5b302 100644 --- a/Documentation/fr/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc +++ b/Documentation/fr/texidocs/controlling-spanner-visibility-after-a-line-break.texidoc @@ -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. " diff --git a/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc b/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc index 60f874c2e7..7bb08d0c06 100644 --- a/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc +++ b/Documentation/fr/texidocs/controlling-the-placement-of-chord-fingerings.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc b/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc index d10addf027..55a59626cb 100644 --- a/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc +++ b/Documentation/fr/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc b/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc index bdb5ba13a0..0c68f39ddc 100644 --- a/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc +++ b/Documentation/fr/texidocs/controlling-tuplet-bracket-visibility.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc b/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc index 67a25b5edb..fe12df22b4 100644 --- a/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc +++ b/Documentation/fr/texidocs/creating-a-delayed-turn.texidoc @@ -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é" diff --git a/Documentation/fr/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc b/Documentation/fr/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc index fda98792d0..21a41614e5 100644 --- a/Documentation/fr/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc +++ b/Documentation/fr/texidocs/creating-a-sequence-of-notes-on-various-pitches.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc b/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc index 8d646b196e..47533e86d7 100644 --- a/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc +++ b/Documentation/fr/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/creating-blank-staves.texidoc b/Documentation/fr/texidocs/creating-blank-staves.texidoc index 09681f864d..8119574ba5 100644 --- a/Documentation/fr/texidocs/creating-blank-staves.texidoc +++ b/Documentation/fr/texidocs/creating-blank-staves.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc index ea4c1e9e4d..0f06263b14 100644 --- a/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc +++ b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc index 77d1a1fda8..e7eaac1822 100644 --- a/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc +++ b/Documentation/fr/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/creating-double-digit-fingerings.texidoc b/Documentation/fr/texidocs/creating-double-digit-fingerings.texidoc index 7b73eade03..b073cd0837 100644 --- a/Documentation/fr/texidocs/creating-double-digit-fingerings.texidoc +++ b/Documentation/fr/texidocs/creating-double-digit-fingerings.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc b/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc index c3fd0ac93d..e9abec6a58 100644 --- a/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc +++ b/Documentation/fr/texidocs/creating-metronome-marks-in-markup-mode.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/creating-real-parenthesized-dynamics.texidoc b/Documentation/fr/texidocs/creating-real-parenthesized-dynamics.texidoc index d6137bda3c..6c3d5b727b 100644 --- a/Documentation/fr/texidocs/creating-real-parenthesized-dynamics.texidoc +++ b/Documentation/fr/texidocs/creating-real-parenthesized-dynamics.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/creating-simultaneous-rehearsal-marks.texidoc b/Documentation/fr/texidocs/creating-simultaneous-rehearsal-marks.texidoc index 5d4d2fcfec..eca2f7584b 100644 --- a/Documentation/fr/texidocs/creating-simultaneous-rehearsal-marks.texidoc +++ b/Documentation/fr/texidocs/creating-simultaneous-rehearsal-marks.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/creating-slurs-across-voices.texidoc b/Documentation/fr/texidocs/creating-slurs-across-voices.texidoc index 1b18a7517c..fe6379147d 100644 --- a/Documentation/fr/texidocs/creating-slurs-across-voices.texidoc +++ b/Documentation/fr/texidocs/creating-slurs-across-voices.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/creating-text-spanners.texidoc b/Documentation/fr/texidocs/creating-text-spanners.texidoc index deabdcb8f4..452480ea38 100644 --- a/Documentation/fr/texidocs/creating-text-spanners.texidoc +++ b/Documentation/fr/texidocs/creating-text-spanners.texidoc @@ -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, à diff --git a/Documentation/fr/texidocs/cross-staff-chords---beaming-problems-workaround.texidoc b/Documentation/fr/texidocs/cross-staff-chords---beaming-problems-workaround.texidoc index 255d038b48..0736c60780 100644 --- a/Documentation/fr/texidocs/cross-staff-chords---beaming-problems-workaround.texidoc +++ b/Documentation/fr/texidocs/cross-staff-chords---beaming-problems-workaround.texidoc @@ -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 index 0000000000..a38908e47c --- /dev/null +++ b/Documentation/fr/texidocs/cross-staff-stems.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/cross-staff-tremolos.texidoc b/Documentation/fr/texidocs/cross-staff-tremolos.texidoc index 27afc7fad3..7db135bed2 100644 --- a/Documentation/fr/texidocs/cross-staff-tremolos.texidoc +++ b/Documentation/fr/texidocs/cross-staff-tremolos.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/custodes.texidoc b/Documentation/fr/texidocs/custodes.texidoc index 49d5010821..21a44f5b62 100644 --- a/Documentation/fr/texidocs/custodes.texidoc +++ b/Documentation/fr/texidocs/custodes.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de +%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee texidocfr = " Les guidons peuvent adopter différents styles. diff --git a/Documentation/fr/texidocs/customizing-fretboard-fret-diagrams.texidoc b/Documentation/fr/texidocs/customizing-fretboard-fret-diagrams.texidoc index c1e603e212..740bea170b 100644 --- a/Documentation/fr/texidocs/customizing-fretboard-fret-diagrams.texidoc +++ b/Documentation/fr/texidocs/customizing-fretboard-fret-diagrams.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc b/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc index dc3f93d61c..661a4cbfb1 100644 --- a/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc +++ b/Documentation/fr/texidocs/customizing-markup-fret-diagrams.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc b/Documentation/fr/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc index b97dd79ebd..e49df2ecd0 100644 --- a/Documentation/fr/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc +++ b/Documentation/fr/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc b/Documentation/fr/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc index 8f13898f13..0b850b856d 100644 --- a/Documentation/fr/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc +++ b/Documentation/fr/texidocs/defining-an-engraver-in-scheme--ambitus-engraver.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc b/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc index d10043a98a..939703678c 100644 --- a/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc +++ b/Documentation/fr/texidocs/defining-predefined-fretboards-for-other-instruments.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/demo-midiinstruments.texidoc b/Documentation/fr/texidocs/demo-midiinstruments.texidoc index 33a7c0a43c..da7ab3f5f1 100644 --- a/Documentation/fr/texidocs/demo-midiinstruments.texidoc +++ b/Documentation/fr/texidocs/demo-midiinstruments.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/demonstrating-all-headers.texidoc b/Documentation/fr/texidocs/demonstrating-all-headers.texidoc index c471540241..ba3c19783e 100644 --- a/Documentation/fr/texidocs/demonstrating-all-headers.texidoc +++ b/Documentation/fr/texidocs/demonstrating-all-headers.texidoc @@ -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 : diff --git a/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc b/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc index dbd0e6c2ac..ed3835e951 100644 --- a/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc +++ b/Documentation/fr/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc @@ -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 index 0000000000..3a12e55d85 --- /dev/null +++ b/Documentation/fr/texidocs/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/displaying-complex-chords.texidoc b/Documentation/fr/texidocs/displaying-complex-chords.texidoc index 643a609f0e..561b765621 100644 --- a/Documentation/fr/texidocs/displaying-complex-chords.texidoc +++ b/Documentation/fr/texidocs/displaying-complex-chords.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/displaying-grob-ancestry.texidoc b/Documentation/fr/texidocs/displaying-grob-ancestry.texidoc index 2de00edbd4..6419a9c893 100644 --- a/Documentation/fr/texidocs/displaying-grob-ancestry.texidoc +++ b/Documentation/fr/texidocs/displaying-grob-ancestry.texidoc @@ -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 index 35773c364d..0000000000 --- a/Documentation/fr/texidocs/dodecaphonic-style-accidentals-for-each-note-including-naturals.texidoc +++ /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" - diff --git a/Documentation/fr/texidocs/dotted-harmonics.texidoc b/Documentation/fr/texidocs/dotted-harmonics.texidoc index c208bb24a9..b0cb409ec5 100644 --- a/Documentation/fr/texidocs/dotted-harmonics.texidoc +++ b/Documentation/fr/texidocs/dotted-harmonics.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/double-glissando.texidoc b/Documentation/fr/texidocs/double-glissando.texidoc index 3781b86e91..b8e1b0144b 100644 --- a/Documentation/fr/texidocs/double-glissando.texidoc +++ b/Documentation/fr/texidocs/double-glissando.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/drawing-boxes-around-grobs.texidoc b/Documentation/fr/texidocs/drawing-boxes-around-grobs.texidoc index 82c57c1b96..d7a5bb00ba 100644 --- a/Documentation/fr/texidocs/drawing-boxes-around-grobs.texidoc +++ b/Documentation/fr/texidocs/drawing-boxes-around-grobs.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/drawing-circles-around-note-heads.texidoc b/Documentation/fr/texidocs/drawing-circles-around-note-heads.texidoc index 3563ecf58d..40e12fae7e 100644 --- a/Documentation/fr/texidocs/drawing-circles-around-note-heads.texidoc +++ b/Documentation/fr/texidocs/drawing-circles-around-note-heads.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/drawing-circles-around-various-objects.texidoc b/Documentation/fr/texidocs/drawing-circles-around-various-objects.texidoc index 3c8cbc8802..b396c6d41b 100644 --- a/Documentation/fr/texidocs/drawing-circles-around-various-objects.texidoc +++ b/Documentation/fr/texidocs/drawing-circles-around-various-objects.texidoc @@ -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. " diff --git a/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc b/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc index 1883b090c0..9b62b4ec8b 100644 --- a/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc +++ b/Documentation/fr/texidocs/dynamics-custom-text-spanner-postfix.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc b/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc index 0defcf92d9..650b8b4e84 100644 --- a/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc +++ b/Documentation/fr/texidocs/dynamics-text-spanner-postfix.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/embedding-native-postscript-in-a--markup-block.texidoc b/Documentation/fr/texidocs/embedding-native-postscript-in-a--markup-block.texidoc index c765783edf..5e5493dc22 100644 --- a/Documentation/fr/texidocs/embedding-native-postscript-in-a--markup-block.texidoc +++ b/Documentation/fr/texidocs/embedding-native-postscript-in-a--markup-block.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/engravers-one-by-one.texidoc b/Documentation/fr/texidocs/engravers-one-by-one.texidoc index cf7104d498..cb121ef86b 100644 --- a/Documentation/fr/texidocs/engravers-one-by-one.texidoc +++ b/Documentation/fr/texidocs/engravers-one-by-one.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/engraving-ties-manually.texidoc b/Documentation/fr/texidocs/engraving-ties-manually.texidoc index 0cf3c19f8c..203df619ae 100644 --- a/Documentation/fr/texidocs/engraving-ties-manually.texidoc +++ b/Documentation/fr/texidocs/engraving-ties-manually.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/engraving-tremolos-with-floating-beams.texidoc b/Documentation/fr/texidocs/engraving-tremolos-with-floating-beams.texidoc index 4fa7171d9f..42cb7af756 100644 --- a/Documentation/fr/texidocs/engraving-tremolos-with-floating-beams.texidoc +++ b/Documentation/fr/texidocs/engraving-tremolos-with-floating-beams.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc b/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc index bbe8356fad..bfd2bee49d 100644 --- a/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc +++ b/Documentation/fr/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc @@ -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 index 0000000000..50603b9aca --- /dev/null +++ b/Documentation/fr/texidocs/extending-glissandi-across-repeats.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/faking-a-hammer-in-tablatures.texidoc b/Documentation/fr/texidocs/faking-a-hammer-in-tablatures.texidoc index 680f11502f..ceb2ec3eb3 100644 --- a/Documentation/fr/texidocs/faking-a-hammer-in-tablatures.texidoc +++ b/Documentation/fr/texidocs/faking-a-hammer-in-tablatures.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/fine-tuning-pedal-brackets.texidoc b/Documentation/fr/texidocs/fine-tuning-pedal-brackets.texidoc index 2a802d2fff..184041f9e1 100644 --- a/Documentation/fr/texidocs/fine-tuning-pedal-brackets.texidoc +++ b/Documentation/fr/texidocs/fine-tuning-pedal-brackets.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc b/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc index 2ce44e9628..851620d003 100644 --- a/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc +++ b/Documentation/fr/texidocs/fingering-symbols-for-wind-instruments.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc b/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc index 079ecc101c..681265a7b7 100644 --- a/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc +++ b/Documentation/fr/texidocs/fingerings,-string-indications,-and-right-hand-fingerings.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/flamenco-notation.texidoc b/Documentation/fr/texidocs/flamenco-notation.texidoc index ac1dba0582..5c3cdf7967 100644 --- a/Documentation/fr/texidocs/flamenco-notation.texidoc +++ b/Documentation/fr/texidocs/flamenco-notation.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc b/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc index 07bd63422e..71def11622 100644 --- a/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc +++ b/Documentation/fr/texidocs/flat-flags-and-beam-nibs.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/flute-slap-notation.texidoc b/Documentation/fr/texidocs/flute-slap-notation.texidoc index 54c4d4413e..42d1f7b306 100644 --- a/Documentation/fr/texidocs/flute-slap-notation.texidoc +++ b/Documentation/fr/texidocs/flute-slap-notation.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc b/Documentation/fr/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc index ef50eb7ae2..8efedf1cc5 100644 --- a/Documentation/fr/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc +++ b/Documentation/fr/texidocs/forcing-a-clef-symbol-to-be-displayed.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc b/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc index 45ea8cf3a7..2742fdaa29 100644 --- a/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc +++ b/Documentation/fr/texidocs/forcing-horizontal-shift-of-notes.texidoc @@ -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é" - diff --git a/Documentation/fr/texidocs/forcing-hyphens-to-be-shown.texidoc b/Documentation/fr/texidocs/forcing-hyphens-to-be-shown.texidoc index ec39532d5e..0ea8b1e193 100644 --- a/Documentation/fr/texidocs/forcing-hyphens-to-be-shown.texidoc +++ b/Documentation/fr/texidocs/forcing-hyphens-to-be-shown.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc b/Documentation/fr/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc index 014bdbba0b..19d07227fe 100644 --- a/Documentation/fr/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc +++ b/Documentation/fr/texidocs/forcing-measure-width-to-adapt-to-metronomemarks-width.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc b/Documentation/fr/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc index 3ccfd852bf..86c2859ad4 100644 --- a/Documentation/fr/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc +++ b/Documentation/fr/texidocs/forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.texidoc @@ -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 : diff --git a/Documentation/fr/texidocs/formatting-lyrics-syllables.texidoc b/Documentation/fr/texidocs/formatting-lyrics-syllables.texidoc index 5e2ff175e4..46d74e54f0 100644 --- a/Documentation/fr/texidocs/formatting-lyrics-syllables.texidoc +++ b/Documentation/fr/texidocs/formatting-lyrics-syllables.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/fret-diagrams-explained-and-developed.texidoc b/Documentation/fr/texidocs/fret-diagrams-explained-and-developed.texidoc index efb0f3107d..4def801e54 100644 --- a/Documentation/fr/texidocs/fret-diagrams-explained-and-developed.texidoc +++ b/Documentation/fr/texidocs/fret-diagrams-explained-and-developed.texidoc @@ -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 : diff --git a/Documentation/fr/texidocs/fretboards-alternate-tables.texidoc b/Documentation/fr/texidocs/fretboards-alternate-tables.texidoc index fd924811a5..5ff5075a19 100644 --- a/Documentation/fr/texidocs/fretboards-alternate-tables.texidoc +++ b/Documentation/fr/texidocs/fretboards-alternate-tables.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/fretted-string-harmonics-in-tablature.texidoc b/Documentation/fr/texidocs/fretted-string-harmonics-in-tablature.texidoc index b561737bcd..3d5707cbfa 100644 --- a/Documentation/fr/texidocs/fretted-string-harmonics-in-tablature.texidoc +++ b/Documentation/fr/texidocs/fretted-string-harmonics-in-tablature.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de +%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee texidocfr = " Harmoniques et tablature (harmoniques artificielles). diff --git a/Documentation/fr/texidocs/generating-custom-flags.texidoc b/Documentation/fr/texidocs/generating-custom-flags.texidoc index c99c87b3f7..8a09c7e232 100644 --- a/Documentation/fr/texidocs/generating-custom-flags.texidoc +++ b/Documentation/fr/texidocs/generating-custom-flags.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/generating-random-notes.texidoc b/Documentation/fr/texidocs/generating-random-notes.texidoc index 49e59176a3..ca297c356b 100644 --- a/Documentation/fr/texidocs/generating-random-notes.texidoc +++ b/Documentation/fr/texidocs/generating-random-notes.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc b/Documentation/fr/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc index 3c76c9f119..42a8e26052 100644 --- a/Documentation/fr/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc +++ b/Documentation/fr/texidocs/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/glissandi-can-skip-grobs.texidoc b/Documentation/fr/texidocs/glissandi-can-skip-grobs.texidoc index 89baedd143..74424f8586 100644 --- a/Documentation/fr/texidocs/glissandi-can-skip-grobs.texidoc +++ b/Documentation/fr/texidocs/glissandi-can-skip-grobs.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de +%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89 texidocfr = " Un glissando peut sauter un objet @code{NoteColumn}. diff --git a/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc b/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc index 998061291f..59b68717f8 100644 --- a/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc +++ b/Documentation/fr/texidocs/graphical-and-text-woodwind-diagrams.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc b/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc index 7becd605c2..7829b4efb9 100644 --- a/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc +++ b/Documentation/fr/texidocs/grid-lines--changing-their-appearance.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc b/Documentation/fr/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc index 549a5c300b..b4c1c8430e 100644 --- a/Documentation/fr/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc +++ b/Documentation/fr/texidocs/grid-lines--emphasizing-rhythms-and-notes-synchronization.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc b/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc index 4bf2173795..dd17417182 100644 --- a/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc +++ b/Documentation/fr/texidocs/guitar-strum-rhythms.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/hairpins-with-different-line-styles.texidoc b/Documentation/fr/texidocs/hairpins-with-different-line-styles.texidoc index 1579185037..db4e5ad490 100644 --- a/Documentation/fr/texidocs/hairpins-with-different-line-styles.texidoc +++ b/Documentation/fr/texidocs/hairpins-with-different-line-styles.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/heavily-customized-polymetric-time-signatures.texidoc b/Documentation/fr/texidocs/heavily-customized-polymetric-time-signatures.texidoc index db39b4db16..30d71db625 100644 --- a/Documentation/fr/texidocs/heavily-customized-polymetric-time-signatures.texidoc +++ b/Documentation/fr/texidocs/heavily-customized-polymetric-time-signatures.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc b/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc index aee327f94e..f448722689 100644 --- a/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc +++ b/Documentation/fr/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc b/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc index 3064626159..cc30902b1b 100644 --- a/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc +++ b/Documentation/fr/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc b/Documentation/fr/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc index 8afe4e8239..1341d99432 100644 --- a/Documentation/fr/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc +++ b/Documentation/fr/texidocs/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/how-to-change-fret-diagram-position.texidoc b/Documentation/fr/texidocs/how-to-change-fret-diagram-position.texidoc index ccc2195bf4..d34c12fcfc 100644 --- a/Documentation/fr/texidocs/how-to-change-fret-diagram-position.texidoc +++ b/Documentation/fr/texidocs/how-to-change-fret-diagram-position.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc b/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc index 4c6ae87a23..3cadbf782f 100644 --- a/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc +++ b/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc b/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc index e20a5d96bc..09a2db29ed 100644 --- a/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc +++ b/Documentation/fr/texidocs/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc b/Documentation/fr/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc index 9dffeb097a..d91983f9b6 100644 --- a/Documentation/fr/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc +++ b/Documentation/fr/texidocs/how-to-put-ties-between-syllables-in-lyrics.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/hymn-template.texidoc b/Documentation/fr/texidocs/hymn-template.texidoc index c004c398e8..8b84828ec9 100644 --- a/Documentation/fr/texidocs/hymn-template.texidoc +++ b/Documentation/fr/texidocs/hymn-template.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/incipit.texidoc b/Documentation/fr/texidocs/incipit.texidoc index 0e76b30cf1..102e850f8b 100644 --- a/Documentation/fr/texidocs/incipit.texidoc +++ b/Documentation/fr/texidocs/incipit.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc b/Documentation/fr/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc index 96c9025794..2b9f67e4c0 100644 --- a/Documentation/fr/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc +++ b/Documentation/fr/texidocs/indicating-cross-staff-chords-with-arpeggio-bracket.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/inserting-a-caesura.texidoc b/Documentation/fr/texidocs/inserting-a-caesura.texidoc index 224f9a099a..f56f0db8e2 100644 --- a/Documentation/fr/texidocs/inserting-a-caesura.texidoc +++ b/Documentation/fr/texidocs/inserting-a-caesura.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc b/Documentation/fr/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc index 3c803e246d..216e0dc262 100644 --- a/Documentation/fr/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc +++ b/Documentation/fr/texidocs/inserting-score-fragments-above-a-staff,-as-markups.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/isolated-percent-repeats.texidoc b/Documentation/fr/texidocs/isolated-percent-repeats.texidoc index cf63b3804c..45dc17c25b 100644 --- a/Documentation/fr/texidocs/isolated-percent-repeats.texidoc +++ b/Documentation/fr/texidocs/isolated-percent-repeats.texidoc @@ -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 : diff --git a/Documentation/fr/texidocs/jazz-combo-template.texidoc b/Documentation/fr/texidocs/jazz-combo-template.texidoc index 8989b4f5a9..263e4e8acc 100644 --- a/Documentation/fr/texidocs/jazz-combo-template.texidoc +++ b/Documentation/fr/texidocs/jazz-combo-template.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/keep-change-clefs-full-sized.texidoc b/Documentation/fr/texidocs/keep-change-clefs-full-sized.texidoc index f81a49a5a2..b6208734c8 100644 --- a/Documentation/fr/texidocs/keep-change-clefs-full-sized.texidoc +++ b/Documentation/fr/texidocs/keep-change-clefs-full-sized.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/laissez-vibrer-ties.texidoc b/Documentation/fr/texidocs/laissez-vibrer-ties.texidoc index 36b5fb80b4..d6ea5cbe01 100644 --- a/Documentation/fr/texidocs/laissez-vibrer-ties.texidoc +++ b/Documentation/fr/texidocs/laissez-vibrer-ties.texidoc @@ -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 »" diff --git a/Documentation/fr/texidocs/letter-tablature-formatting.texidoc b/Documentation/fr/texidocs/letter-tablature-formatting.texidoc index ca430f3661..c54cf8298e 100644 --- a/Documentation/fr/texidocs/letter-tablature-formatting.texidoc +++ b/Documentation/fr/texidocs/letter-tablature-formatting.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/line-arrows.texidoc b/Documentation/fr/texidocs/line-arrows.texidoc index 8ff17b7b3c..6f45fa450c 100644 --- a/Documentation/fr/texidocs/line-arrows.texidoc +++ b/Documentation/fr/texidocs/line-arrows.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/lyrics-alignment.texidoc b/Documentation/fr/texidocs/lyrics-alignment.texidoc index fbf31b976a..930ab00f05 100644 --- a/Documentation/fr/texidocs/lyrics-alignment.texidoc +++ b/Documentation/fr/texidocs/lyrics-alignment.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/makam-example.texidoc b/Documentation/fr/texidocs/makam-example.texidoc index dd19581ead..9b2f381198 100644 --- a/Documentation/fr/texidocs/makam-example.texidoc +++ b/Documentation/fr/texidocs/makam-example.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc b/Documentation/fr/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc index 4d0ff95cc0..0b96ae8522 100644 --- a/Documentation/fr/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc +++ b/Documentation/fr/texidocs/making-an-object-invisible-with-the-transparent-property.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/making-glissandi-breakable.texidoc b/Documentation/fr/texidocs/making-glissandi-breakable.texidoc index ef245c0d97..b31e9185a5 100644 --- a/Documentation/fr/texidocs/making-glissandi-breakable.texidoc +++ b/Documentation/fr/texidocs/making-glissandi-breakable.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc b/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc index 3b8d8bcb63..add9c37433 100644 --- a/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc +++ b/Documentation/fr/texidocs/making-slurs-with-complex-dash-structure.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc b/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc index 976b25ce6b..ca5a9f8e04 100644 --- a/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc +++ b/Documentation/fr/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc b/Documentation/fr/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc index 4c03980341..653ea367f3 100644 --- a/Documentation/fr/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc +++ b/Documentation/fr/texidocs/manually-break-figured-bass-extenders-for-only-some-numbers.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/manually-controlling-beam-positions.texidoc b/Documentation/fr/texidocs/manually-controlling-beam-positions.texidoc index 1226142194..1c80e815d3 100644 --- a/Documentation/fr/texidocs/manually-controlling-beam-positions.texidoc +++ b/Documentation/fr/texidocs/manually-controlling-beam-positions.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc b/Documentation/fr/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc index 52a40aa05a..94775dfacc 100644 --- a/Documentation/fr/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc +++ b/Documentation/fr/texidocs/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/markup-lines.texidoc b/Documentation/fr/texidocs/markup-lines.texidoc index e69db83505..829d4a5872 100644 --- a/Documentation/fr/texidocs/markup-lines.texidoc +++ b/Documentation/fr/texidocs/markup-lines.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/measure-counter.texidoc b/Documentation/fr/texidocs/measure-counter.texidoc index aafac69329..1ae4b66b80 100644 --- a/Documentation/fr/texidocs/measure-counter.texidoc +++ b/Documentation/fr/texidocs/measure-counter.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc b/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc index d96747bbca..8600eda7d1 100644 --- a/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc +++ b/Documentation/fr/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc @@ -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)" - diff --git a/Documentation/fr/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc b/Documentation/fr/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc index 9197ee69b1..40f8d0ae02 100644 --- a/Documentation/fr/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc +++ b/Documentation/fr/texidocs/merging-multi-measure-rests-in-a-polyphonic-part.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc b/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc index 8478956093..afea767ca1 100644 --- a/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc +++ b/Documentation/fr/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/modifying-tuplet-bracket-length.texidoc b/Documentation/fr/texidocs/modifying-tuplet-bracket-length.texidoc index 3e15bb43d7..05f67b849e 100644 --- a/Documentation/fr/texidocs/modifying-tuplet-bracket-length.texidoc +++ b/Documentation/fr/texidocs/modifying-tuplet-bracket-length.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/moving-dotted-notes-in-polyphony.texidoc b/Documentation/fr/texidocs/moving-dotted-notes-in-polyphony.texidoc index 51d2f87bba..5a97500739 100644 --- a/Documentation/fr/texidocs/moving-dotted-notes-in-polyphony.texidoc +++ b/Documentation/fr/texidocs/moving-dotted-notes-in-polyphony.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/moving-slur-positions-vertically.texidoc b/Documentation/fr/texidocs/moving-slur-positions-vertically.texidoc index 99976c522f..1412db1492 100644 --- a/Documentation/fr/texidocs/moving-slur-positions-vertically.texidoc +++ b/Documentation/fr/texidocs/moving-slur-positions-vertically.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc b/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc index 8553ffebc7..a2e6d6240e 100644 --- a/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc +++ b/Documentation/fr/texidocs/multi-measure-rest-markup.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/nesting-staves.texidoc b/Documentation/fr/texidocs/nesting-staves.texidoc index 31e66b3299..b1f4d5ba3b 100644 --- a/Documentation/fr/texidocs/nesting-staves.texidoc +++ b/Documentation/fr/texidocs/nesting-staves.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc b/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc index 7fbb726d8a..370e21a2eb 100644 --- a/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc +++ b/Documentation/fr/texidocs/non-default-tuplet-numbers.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc b/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc index 63365eb12e..5bfe832a3b 100644 --- a/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc +++ b/Documentation/fr/texidocs/non-traditional-key-signatures.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/numbers-as-easy-note-heads.texidoc b/Documentation/fr/texidocs/numbers-as-easy-note-heads.texidoc index 97a9ddc2bd..78a992f29e 100644 --- a/Documentation/fr/texidocs/numbers-as-easy-note-heads.texidoc +++ b/Documentation/fr/texidocs/numbers-as-easy-note-heads.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc b/Documentation/fr/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc index 70850161d2..176b5dab6c 100644 --- a/Documentation/fr/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc +++ b/Documentation/fr/texidocs/obtaining-2.12-lyrics-spacing-in-newer-versions.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/open-string-harmonics-in-tablature.texidoc b/Documentation/fr/texidocs/open-string-harmonics-in-tablature.texidoc index 32e0fa2fea..d47cd3d465 100644 --- a/Documentation/fr/texidocs/open-string-harmonics-in-tablature.texidoc +++ b/Documentation/fr/texidocs/open-string-harmonics-in-tablature.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de +%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89 texidocfr = " Table des harmoniques sur corde à vide (harmoniques naturelles) : diff --git a/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc b/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc index 510991dd09..0346f46de2 100644 --- a/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc +++ b/Documentation/fr/texidocs/orchestra,-choir-and-piano-template.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/ottava-text.texidoc b/Documentation/fr/texidocs/ottava-text.texidoc index 925122992d..ac879a8eda 100644 --- a/Documentation/fr/texidocs/ottava-text.texidoc +++ b/Documentation/fr/texidocs/ottava-text.texidoc @@ -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\"}) diff --git a/Documentation/fr/texidocs/outputting-the-version-number.texidoc b/Documentation/fr/texidocs/outputting-the-version-number.texidoc index 04f675f80a..53470be91b 100644 --- a/Documentation/fr/texidocs/outputting-the-version-number.texidoc +++ b/Documentation/fr/texidocs/outputting-the-version-number.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/page-label.texidoc b/Documentation/fr/texidocs/page-label.texidoc index 66e74c9994..a26d0948f7 100644 --- a/Documentation/fr/texidocs/page-label.texidoc +++ b/Documentation/fr/texidocs/page-label.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc b/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc index daf2dbcf9d..b9b37d9ef0 100644 --- a/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc +++ b/Documentation/fr/texidocs/partcombine-and-autobeamoff.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc b/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc index f55d7a7ddb..7c8317fddb 100644 --- a/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc +++ b/Documentation/fr/texidocs/percent-repeat-count-visibility.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/percent-repeat-counter.texidoc b/Documentation/fr/texidocs/percent-repeat-counter.texidoc index f6136df45e..bbe0bbbf80 100644 --- a/Documentation/fr/texidocs/percent-repeat-counter.texidoc +++ b/Documentation/fr/texidocs/percent-repeat-counter.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/percussion-beaters.texidoc b/Documentation/fr/texidocs/percussion-beaters.texidoc index 899b10da30..3d2d984e25 100644 --- a/Documentation/fr/texidocs/percussion-beaters.texidoc +++ b/Documentation/fr/texidocs/percussion-beaters.texidoc @@ -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, diff --git a/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc b/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc index 501911339f..f20f03d3e8 100644 --- a/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc +++ b/Documentation/fr/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/piano-template-simple.texidoc b/Documentation/fr/texidocs/piano-template-simple.texidoc index a70dc22a2f..1b5d779df6 100644 --- a/Documentation/fr/texidocs/piano-template-simple.texidoc +++ b/Documentation/fr/texidocs/piano-template-simple.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de +%% Translation of GIT committish: 4d1502a7f3c7929e30da8f35a1d177b19eb34f89 texidocfr = " Voici une simple partition pour piano avec quelques notes. diff --git a/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc index 66c23025ce..5ea61ca091 100644 --- a/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc +++ b/Documentation/fr/texidocs/piano-template-with-centered-lyrics.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc index c37defbf7f..589b826f2a 100644 --- a/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc +++ b/Documentation/fr/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc b/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc index ffcf5db218..d547d8580e 100644 --- a/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc +++ b/Documentation/fr/texidocs/placement-of-right-hand-fingerings.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/polyphony-in-tablature.texidoc b/Documentation/fr/texidocs/polyphony-in-tablature.texidoc index 0025bdf8b7..bf69a1fb7f 100644 --- a/Documentation/fr/texidocs/polyphony-in-tablature.texidoc +++ b/Documentation/fr/texidocs/polyphony-in-tablature.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/positioning-arpeggios.texidoc b/Documentation/fr/texidocs/positioning-arpeggios.texidoc index f755e90d53..4069f363d5 100644 --- a/Documentation/fr/texidocs/positioning-arpeggios.texidoc +++ b/Documentation/fr/texidocs/positioning-arpeggios.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/positioning-fingering-indications-precisely.texidoc b/Documentation/fr/texidocs/positioning-fingering-indications-precisely.texidoc index 0c067b93d0..05c4ac48c5 100644 --- a/Documentation/fr/texidocs/positioning-fingering-indications-precisely.texidoc +++ b/Documentation/fr/texidocs/positioning-fingering-indications-precisely.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc b/Documentation/fr/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc index abc2d95f48..7507ec3ef4 100644 --- a/Documentation/fr/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc +++ b/Documentation/fr/texidocs/positioning-grace-note-beams-at-the-height-of-normal-note-beams.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc b/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc index 04331d0896..7ecd86d599 100644 --- a/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc +++ b/Documentation/fr/texidocs/positioning-grace-notes-with-floating-space.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc b/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc index 63c8f50a6a..a7ff0c6249 100644 --- a/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc +++ b/Documentation/fr/texidocs/positioning-multi-measure-rests.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/positioning-segno-and-coda-with-line-break.texidoc b/Documentation/fr/texidocs/positioning-segno-and-coda-with-line-break.texidoc index 701526b39d..02ef1fa93a 100644 --- a/Documentation/fr/texidocs/positioning-segno-and-coda-with-line-break.texidoc +++ b/Documentation/fr/texidocs/positioning-segno-and-coda-with-line-break.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc b/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc index 81639f38b0..6fa930ee31 100644 --- a/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc +++ b/Documentation/fr/texidocs/positioning-text-markups-inside-slurs.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc index 1106cf322b..d496086508 100644 --- a/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc +++ b/Documentation/fr/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc b/Documentation/fr/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc index ff945f69b8..c3674b5e9c 100644 --- a/Documentation/fr/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc +++ b/Documentation/fr/texidocs/preventing-final-mark-from-removing-final-tuplet.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc index a921dbd587..1bb81b5b97 100644 --- a/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc +++ b/Documentation/fr/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc b/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc index a246ceb0ae..9c179627ce 100644 --- a/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc +++ b/Documentation/fr/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc @@ -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" - diff --git a/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc b/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc index 54ede3e046..62fc8a1ce7 100644 --- a/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc +++ b/Documentation/fr/texidocs/printing-bar-numbers-at-regular-intervals.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc b/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc index 8b5cf4bf78..5c521cb56e 100644 --- a/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc +++ b/Documentation/fr/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc @@ -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 index 0000000000..a5fbdf20e4 --- /dev/null +++ b/Documentation/fr/texidocs/printing-hairpins-in-various-styles.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc b/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc index dc95d2b661..994522f1de 100644 --- a/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc +++ b/Documentation/fr/texidocs/printing-hairpins-using-al-niente-notation.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc b/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc index c015dac9e0..e38bdbc739 100644 --- a/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc +++ b/Documentation/fr/texidocs/printing-marks-at-the-end-of-a-line.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc b/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc index e27a063b71..25f46fab27 100644 --- a/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc +++ b/Documentation/fr/texidocs/printing-marks-on-every-staff.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc b/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc index 12d1ae1ee2..d243fa6207 100644 --- a/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc +++ b/Documentation/fr/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/printing-music-with-different-time-signatures.texidoc b/Documentation/fr/texidocs/printing-music-with-different-time-signatures.texidoc index 6d3e63b8bc..9240b04099 100644 --- a/Documentation/fr/texidocs/printing-music-with-different-time-signatures.texidoc +++ b/Documentation/fr/texidocs/printing-music-with-different-time-signatures.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc b/Documentation/fr/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc index 962b5cf118..637004c879 100644 --- a/Documentation/fr/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc +++ b/Documentation/fr/texidocs/printing-note-names-with-and-without-an-octave-marker.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/printing-text-from-right-to-left.texidoc b/Documentation/fr/texidocs/printing-text-from-right-to-left.texidoc index 94e0dccdb2..baa3a3c5c9 100644 --- a/Documentation/fr/texidocs/printing-text-from-right-to-left.texidoc +++ b/Documentation/fr/texidocs/printing-text-from-right-to-left.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc b/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc index 20ad164ae9..4fe531f246 100644 --- a/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc +++ b/Documentation/fr/texidocs/printing-the-bar-number-for-the-first-measure.texidoc @@ -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} à diff --git a/Documentation/fr/texidocs/proportional-strict-notespacing.texidoc b/Documentation/fr/texidocs/proportional-strict-notespacing.texidoc index 2f217cb813..4aae94493e 100644 --- a/Documentation/fr/texidocs/proportional-strict-notespacing.texidoc +++ b/Documentation/fr/texidocs/proportional-strict-notespacing.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/putting-lyrics-inside-the-staff.texidoc b/Documentation/fr/texidocs/putting-lyrics-inside-the-staff.texidoc index 005ca429f5..5cbd481dc8 100644 --- a/Documentation/fr/texidocs/putting-lyrics-inside-the-staff.texidoc +++ b/Documentation/fr/texidocs/putting-lyrics-inside-the-staff.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc b/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc index 551fb7833d..0c783e5fe6 100644 --- a/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc +++ b/Documentation/fr/texidocs/quoting-another-voice-with-transposition.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/quoting-another-voice.texidoc b/Documentation/fr/texidocs/quoting-another-voice.texidoc index c8f5d2f2c7..8df70e4585 100644 --- a/Documentation/fr/texidocs/quoting-another-voice.texidoc +++ b/Documentation/fr/texidocs/quoting-another-voice.texidoc @@ -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 à diff --git a/Documentation/fr/texidocs/recorder-fingering-chart.texidoc b/Documentation/fr/texidocs/recorder-fingering-chart.texidoc index 37b0b31830..abb7d18f86 100644 --- a/Documentation/fr/texidocs/recorder-fingering-chart.texidoc +++ b/Documentation/fr/texidocs/recorder-fingering-chart.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc b/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc index 05c9cd253b..0d29da25d0 100644 --- a/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc +++ b/Documentation/fr/texidocs/redefining-grace-note-global-defaults.texidoc @@ -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}, diff --git a/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc b/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc index b6963c81fc..5f51cfbe1d 100644 --- a/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc +++ b/Documentation/fr/texidocs/removing-bar-numbers-from-a-score.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc b/Documentation/fr/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc index 3f59060d97..cda724b763 100644 --- a/Documentation/fr/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc +++ b/Documentation/fr/texidocs/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc b/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc index 59971041dd..0b9e0f20e7 100644 --- a/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc +++ b/Documentation/fr/texidocs/removing-the-first-empty-line.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/rest-styles.texidoc b/Documentation/fr/texidocs/rest-styles.texidoc index 6378a6d4fe..a13426a6bf 100644 --- a/Documentation/fr/texidocs/rest-styles.texidoc +++ b/Documentation/fr/texidocs/rest-styles.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc b/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc index 0016bc0770..026b57a795 100644 --- a/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc +++ b/Documentation/fr/texidocs/reverting-default-beam-endings.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/rhythmic-slashes.texidoc b/Documentation/fr/texidocs/rhythmic-slashes.texidoc index d96d7bee4a..5ee1820fcb 100644 --- a/Documentation/fr/texidocs/rhythmic-slashes.texidoc +++ b/Documentation/fr/texidocs/rhythmic-slashes.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc b/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc index 72c0d8306e..04fc8194f1 100644 --- a/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc +++ b/Documentation/fr/texidocs/satb-choir-template---four-staves.texidoc @@ -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 index 0000000000..3c7ae2fcca --- /dev/null +++ b/Documentation/fr/texidocs/screech-and-boink.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee + texidocfr = " +Notation complexe et aléatoire. + +" + doctitlefr = "Screech and boink" diff --git a/Documentation/fr/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc b/Documentation/fr/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc index 6ecd1c7d98..1385fc8614 100644 --- a/Documentation/fr/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc +++ b/Documentation/fr/texidocs/separating-key-cancellations-from-key-signature-changes.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc b/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc index 2b30a8fe2b..0d3af7aa74 100644 --- a/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc +++ b/Documentation/fr/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/setting-system-separators.texidoc b/Documentation/fr/texidocs/setting-system-separators.texidoc index f2ebae0a4b..a23c98d071 100644 --- a/Documentation/fr/texidocs/setting-system-separators.texidoc +++ b/Documentation/fr/texidocs/setting-system-separators.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc b/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc index d1cb53f0a4..22f8e0edcd 100644 --- a/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc +++ b/Documentation/fr/texidocs/setting-the-double-repeat-default-for-volte.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc b/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc index 088e82134c..5fb4f84c18 100644 --- a/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc +++ b/Documentation/fr/texidocs/setting-the-minimum-length-of-hairpins.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/shortening-volta-brackets.texidoc b/Documentation/fr/texidocs/shortening-volta-brackets.texidoc index fe5b0681b0..9d5856337d 100644 --- a/Documentation/fr/texidocs/shortening-volta-brackets.texidoc +++ b/Documentation/fr/texidocs/shortening-volta-brackets.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/showing-chords-at-changes.texidoc b/Documentation/fr/texidocs/showing-chords-at-changes.texidoc index 0bc7fd6278..eed5afdb33 100644 --- a/Documentation/fr/texidocs/showing-chords-at-changes.texidoc +++ b/Documentation/fr/texidocs/showing-chords-at-changes.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc b/Documentation/fr/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc index f7d3958a4e..d36b995cf2 100644 --- a/Documentation/fr/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc +++ b/Documentation/fr/texidocs/showing-the-same-articulation-above-and-below-a-note-or-chord.texidoc @@ -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'orgue, etc.) 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{} +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{} " doctitlefr = "Impression d'une même articulation des deux côtés d'une note ou d'un accord" diff --git a/Documentation/fr/texidocs/simple-lead-sheet.texidoc b/Documentation/fr/texidocs/simple-lead-sheet.texidoc index d8f978bc62..13e78669d5 100644 --- a/Documentation/fr/texidocs/simple-lead-sheet.texidoc +++ b/Documentation/fr/texidocs/simple-lead-sheet.texidoc @@ -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{}: diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc index d49fba14d8..2ac2aa1eef 100644 --- a/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc +++ b/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc index a196fa2294..d7788361a9 100644 --- a/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc +++ b/Documentation/fr/texidocs/single-staff-template-with-notes,-lyrics,-chords-and-frets.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc index f59d31bbf6..16ce9c0e28 100644 --- a/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc +++ b/Documentation/fr/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -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{}! diff --git a/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc index 4ca0f3fc21..a8c1640670 100644 --- a/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc +++ b/Documentation/fr/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc index b1ff492828..43fb58e774 100644 --- a/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc +++ b/Documentation/fr/texidocs/single-staff-template-with-only-notes.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/skips-in-lyric-mode-2.texidoc b/Documentation/fr/texidocs/skips-in-lyric-mode-2.texidoc index 33ed528f1b..a66e3b75cd 100644 --- a/Documentation/fr/texidocs/skips-in-lyric-mode-2.texidoc +++ b/Documentation/fr/texidocs/skips-in-lyric-mode-2.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/skips-in-lyric-mode.texidoc b/Documentation/fr/texidocs/skips-in-lyric-mode.texidoc index b20c127c14..eb14259f7a 100644 --- a/Documentation/fr/texidocs/skips-in-lyric-mode.texidoc +++ b/Documentation/fr/texidocs/skips-in-lyric-mode.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/slides-in-tablature.texidoc b/Documentation/fr/texidocs/slides-in-tablature.texidoc index ab6dba06b2..50dc1805a9 100644 --- a/Documentation/fr/texidocs/slides-in-tablature.texidoc +++ b/Documentation/fr/texidocs/slides-in-tablature.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc b/Documentation/fr/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc index 60a407e74c..50ecf926a7 100644 --- a/Documentation/fr/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc +++ b/Documentation/fr/texidocs/snap-pizzicato-or-bartok-pizzicato.texidoc @@ -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, diff --git a/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc b/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc index 09fde4fb11..763d400196 100644 --- a/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc +++ b/Documentation/fr/texidocs/specifying-context-with-beatgrouping.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc b/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc index c0c8c05017..2a49cc2840 100644 --- a/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc +++ b/Documentation/fr/texidocs/stand-alone-two-column-markup.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc b/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc index f7766f8499..70f9b94f85 100644 --- a/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc +++ b/Documentation/fr/texidocs/stem-and-beam-behavior-in-tablature.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/stem-cross-staff-engraver.texidoc b/Documentation/fr/texidocs/stem-cross-staff-engraver.texidoc index 49cd08e667..2cba8f659f 100644 --- a/Documentation/fr/texidocs/stem-cross-staff-engraver.texidoc +++ b/Documentation/fr/texidocs/stem-cross-staff-engraver.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/stemlets.texidoc b/Documentation/fr/texidocs/stemlets.texidoc index b4001afadd..7aeda11c2e 100644 --- a/Documentation/fr/texidocs/stemlets.texidoc +++ b/Documentation/fr/texidocs/stemlets.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/strict-beat-beaming.texidoc b/Documentation/fr/texidocs/strict-beat-beaming.texidoc index bf6442cb56..b823c06132 100644 --- a/Documentation/fr/texidocs/strict-beat-beaming.texidoc +++ b/Documentation/fr/texidocs/strict-beat-beaming.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/string-number-extender-lines.texidoc b/Documentation/fr/texidocs/string-number-extender-lines.texidoc index ef1ed188a8..454711229a 100644 --- a/Documentation/fr/texidocs/string-number-extender-lines.texidoc +++ b/Documentation/fr/texidocs/string-number-extender-lines.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/string-quartet-template-simple.texidoc b/Documentation/fr/texidocs/string-quartet-template-simple.texidoc index 373674f2bd..4739d29031 100644 --- a/Documentation/fr/texidocs/string-quartet-template-simple.texidoc +++ b/Documentation/fr/texidocs/string-quartet-template-simple.texidoc @@ -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é. diff --git a/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc index 920a7cd7e0..c1f4353eb4 100644 --- a/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc +++ b/Documentation/fr/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/subdividing-beams.texidoc b/Documentation/fr/texidocs/subdividing-beams.texidoc index e1183efb6d..c6adef1ee9 100644 --- a/Documentation/fr/texidocs/subdividing-beams.texidoc +++ b/Documentation/fr/texidocs/subdividing-beams.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc b/Documentation/fr/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc index 9df1745787..ab87da9fd8 100644 --- a/Documentation/fr/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc +++ b/Documentation/fr/texidocs/suppressing-warnings-for-clashing-note-columns.texidoc @@ -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. " diff --git a/Documentation/fr/texidocs/table-of-contents.texidoc b/Documentation/fr/texidocs/table-of-contents.texidoc index 7f1b217407..d3ec45cbfa 100644 --- a/Documentation/fr/texidocs/table-of-contents.texidoc +++ b/Documentation/fr/texidocs/table-of-contents.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/three-sided-box.texidoc b/Documentation/fr/texidocs/three-sided-box.texidoc index 14b3e740bc..436b5f26c9 100644 --- a/Documentation/fr/texidocs/three-sided-box.texidoc +++ b/Documentation/fr/texidocs/three-sided-box.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/tick-bar-lines.texidoc b/Documentation/fr/texidocs/tick-bar-lines.texidoc index 4066e4cc43..49afed1df1 100644 --- a/Documentation/fr/texidocs/tick-bar-lines.texidoc +++ b/Documentation/fr/texidocs/tick-bar-lines.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/time-signature-in-parentheses---method-3.texidoc b/Documentation/fr/texidocs/time-signature-in-parentheses---method-3.texidoc index 80b766035a..32f034e695 100644 --- a/Documentation/fr/texidocs/time-signature-in-parentheses---method-3.texidoc +++ b/Documentation/fr/texidocs/time-signature-in-parentheses---method-3.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/time-signature-in-parentheses.texidoc b/Documentation/fr/texidocs/time-signature-in-parentheses.texidoc index a4683ea352..7cbea3cc27 100644 --- a/Documentation/fr/texidocs/time-signature-in-parentheses.texidoc +++ b/Documentation/fr/texidocs/time-signature-in-parentheses.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: e99967817ff985eb5bd5b0220b2fbf552963f9de +%% Translation of GIT committish: 64d521c30b929ac9be37823df577b8f02c8cf0ee texidocfr = " Une métrique peut être mise entre parenthèses. diff --git a/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc b/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc index ec4a6fc79a..4decc14b9b 100644 --- a/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc +++ b/Documentation/fr/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/transcription-of-ancient-music-with-incipit.texidoc b/Documentation/fr/texidocs/transcription-of-ancient-music-with-incipit.texidoc index b3a10749a2..7e1aa02cbc 100644 --- a/Documentation/fr/texidocs/transcription-of-ancient-music-with-incipit.texidoc +++ b/Documentation/fr/texidocs/transcription-of-ancient-music-with-incipit.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc index 90df08cedc..cb1458f4b7 100644 --- a/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc +++ b/Documentation/fr/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/tweaking-clef-properties.texidoc b/Documentation/fr/texidocs/tweaking-clef-properties.texidoc index f77d013490..5ba1b8e0e6 100644 --- a/Documentation/fr/texidocs/tweaking-clef-properties.texidoc +++ b/Documentation/fr/texidocs/tweaking-clef-properties.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc b/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc index b8631b1702..f6b3326085 100644 --- a/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc +++ b/Documentation/fr/texidocs/tweaking-grace-layout-within-music.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc b/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc index e209c1e736..ffedeadf9a 100644 --- a/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc +++ b/Documentation/fr/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc @@ -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 index 0000000000..23c994b067 --- /dev/null +++ b/Documentation/fr/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/using-alternative-flag-styles.texidoc b/Documentation/fr/texidocs/using-alternative-flag-styles.texidoc index 083e54e0c9..b4318630a5 100644 --- a/Documentation/fr/texidocs/using-alternative-flag-styles.texidoc +++ b/Documentation/fr/texidocs/using-alternative-flag-styles.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc b/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc index 6882ec0969..6afde8daec 100644 --- a/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc +++ b/Documentation/fr/texidocs/using-arpeggiobracket-to-make-divisi-more-visible.texidoc @@ -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 index 0000000000..fd63482c49 --- /dev/null +++ b/Documentation/fr/texidocs/using-autochange-with-more-than-one-voice.texidoc @@ -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 index 95d90eec29..0000000000 --- a/Documentation/fr/texidocs/using-beatlength-and-beatgrouping.texidoc +++ /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" diff --git a/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc b/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc index 40414c0520..1bd648566d 100644 --- a/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc +++ b/Documentation/fr/texidocs/using-double-slurs-for-legato-chords.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc b/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc index 29268c5b7c..35260e0985 100644 --- a/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc +++ b/Documentation/fr/texidocs/using-grace-note-slashes-with-normal-heads.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc b/Documentation/fr/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc index b390ea49e6..f6cd633e07 100644 --- a/Documentation/fr/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc +++ b/Documentation/fr/texidocs/using-ly-grob-object-to-access-grobs-with--tweak.texidoc @@ -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}. diff --git a/Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc b/Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc index 3bc43f2871..32590b6b1e 100644 --- a/Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc +++ b/Documentation/fr/texidocs/using-postscript-to-generate-special-note-head-shapes.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc b/Documentation/fr/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc index d9bc44c75b..cb4677b2e5 100644 --- a/Documentation/fr/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc +++ b/Documentation/fr/texidocs/using-the--tweak-command-to-tweak-individual-grobs.texidoc @@ -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 : diff --git a/Documentation/fr/texidocs/using-the-whiteout-property.texidoc b/Documentation/fr/texidocs/using-the-whiteout-property.texidoc index 10eeed234a..224b67bfad 100644 --- a/Documentation/fr/texidocs/using-the-whiteout-property.texidoc +++ b/Documentation/fr/texidocs/using-the-whiteout-property.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc b/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc index 0a31e5ae28..57f3f0853a 100644 --- a/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc +++ b/Documentation/fr/texidocs/using-ties-with-arpeggios.texidoc @@ -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 index 0000000000..1ef67fd352 --- /dev/null +++ b/Documentation/fr/texidocs/utf-8.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc b/Documentation/fr/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc index 8e1f61f290..d85d09a910 100644 --- a/Documentation/fr/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc +++ b/Documentation/fr/texidocs/vertical-line-as-a-baroque-articulation-mark.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc b/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc index 9dcd6a0bfd..c965eaa3be 100644 --- a/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc +++ b/Documentation/fr/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc @@ -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" diff --git a/Documentation/fr/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc b/Documentation/fr/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc index fc70648088..f0e8b1f336 100644 --- a/Documentation/fr/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc +++ b/Documentation/fr/texidocs/vertically-aligning-dynamics-across-multiple-notes.texidoc @@ -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é diff --git a/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc b/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc index 5571f43c69..ebd27ef5d2 100644 --- a/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc +++ b/Documentation/fr/texidocs/vertically-aligning-ossias-and-lyrics.texidoc @@ -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} diff --git a/Documentation/fr/texidocs/vertically-centered-common-lyrics.texidoc b/Documentation/fr/texidocs/vertically-centered-common-lyrics.texidoc index 514c2c70ce..8363400b10 100644 --- a/Documentation/fr/texidocs/vertically-centered-common-lyrics.texidoc +++ b/Documentation/fr/texidocs/vertically-centered-common-lyrics.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc b/Documentation/fr/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc index 88ade75bc1..c0e73b6a7a 100644 --- a/Documentation/fr/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc +++ b/Documentation/fr/texidocs/vertically-centering-paired-figured-bass-extenders.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc index 94c349003f..6aa063e7fa 100644 --- a/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc +++ b/Documentation/fr/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc index ec7d0a2831..bd0430e82e 100644 --- a/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc +++ b/Documentation/fr/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc index b6b15e8115..22d0da239b 100644 --- a/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc +++ b/Documentation/fr/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/vocal-ensemble-template.texidoc b/Documentation/fr/texidocs/vocal-ensemble-template.texidoc index d1c8799fe3..a1108ad68e 100644 --- a/Documentation/fr/texidocs/vocal-ensemble-template.texidoc +++ b/Documentation/fr/texidocs/vocal-ensemble-template.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/volta-below-chords.texidoc b/Documentation/fr/texidocs/volta-below-chords.texidoc index ea256bc604..d94d8394dd 100644 --- a/Documentation/fr/texidocs/volta-below-chords.texidoc +++ b/Documentation/fr/texidocs/volta-below-chords.texidoc @@ -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. diff --git a/Documentation/fr/texidocs/volta-multi-staff.texidoc b/Documentation/fr/texidocs/volta-multi-staff.texidoc index 3d3c8f87ba..a0a03ddd96 100644 --- a/Documentation/fr/texidocs/volta-multi-staff.texidoc +++ b/Documentation/fr/texidocs/volta-multi-staff.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/volta-text-markup-using-repeatcommands.texidoc b/Documentation/fr/texidocs/volta-text-markup-using-repeatcommands.texidoc index 23347fa680..6291ae2a88 100644 --- a/Documentation/fr/texidocs/volta-text-markup-using-repeatcommands.texidoc +++ b/Documentation/fr/texidocs/volta-text-markup-using-repeatcommands.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc b/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc index bfa3f22c0c..fe5ed40912 100644 --- a/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc +++ b/Documentation/fr/texidocs/woodwind-diagrams-key-lists.texidoc @@ -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 diff --git a/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc b/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc index 34ccc98030..434572b0bc 100644 --- a/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc +++ b/Documentation/fr/texidocs/woodwind-diagrams-listing.texidoc @@ -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. diff --git a/Documentation/fr/translations.itexi b/Documentation/fr/translations.itexi index 82836d355b..b8576ff180 100644 --- a/Documentation/fr/translations.itexi +++ b/Documentation/fr/translations.itexi @@ -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 -partiellement +oui @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 -partiellement +oui @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 -partiellement +oui @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 -partiellement (95 %) +oui @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 -partiellement +oui @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 index 425cc1d8e2..0000000000 --- a/Documentation/fr/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/usage/external.itely b/Documentation/fr/usage/external.itely index 64b705b1bc..0e6e2d14dc 100644 --- a/Documentation/fr/usage/external.itely +++ b/Documentation/fr/usage/external.itely @@ -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 diff --git a/Documentation/fr/usage/lilypond-book.itely b/Documentation/fr/usage/lilypond-book.itely index 27ccb9b922..2c1d263585 100644 --- a/Documentation/fr/usage/lilypond-book.itely +++ b/Documentation/fr/usage/lilypond-book.itely @@ -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{} qui permet de directement saisir du -code LilyPond simple ; +la commande @code{} qui permet de directement saisir +du code LilyPond simple ; @item -l'environnement @code{...} qui permet de saisir +l'environnement @code{@dots{}} qui permet de saisir directement du code LilyPond plus élaboré ; @item -la commande @code{...} qui permet d'insérer -un fichier LilyPond ; +la commande @code{@dots{}} qui permet +d'insérer un fichier LilyPond ; @item -la commande @code{...} qui permet d'insérer -un fichier MusicXML qui sera alors traité par @code{musicxml2ly} puis -@code{lilypond}. +la commande @code{@dots{}} 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 au milieu d'une ligne de texte. Lorsque l'inclusion concerne des fichiers indépendants, utilisez @example -@var{fichier} +@var{fichier} @end example La syntaxe pour @code{} 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}, diff --git a/Documentation/fr/usage/running.itely b/Documentation/fr/usage/running.itely index fed75db4b2..ed19eac212 100644 --- a/Documentation/fr/usage/running.itely +++ b/Documentation/fr/usage/running.itely @@ -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 diff --git a/Documentation/fr/usage/suggestions.itely b/Documentation/fr/usage/suggestions.itely index 3ae1dc90ca..864b06a4d7 100644 --- a/Documentation/fr/usage/suggestions.itely +++ b/Documentation/fr/usage/suggestions.itely @@ -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 diff --git a/Documentation/fr/usage/updating.itely b/Documentation/fr/usage/updating.itely index 7d890c2b5a..502a2587c9 100644 --- a/Documentation/fr/usage/updating.itely +++ b/Documentation/fr/usage/updating.itely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/fr/web/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/fr/web/community.itexi b/Documentation/fr/web/community.itexi index b7bb8006f6..4d7ae628d9 100644 --- a/Documentation/fr/web/community.itexi +++ b/Documentation/fr/web/community.itexi @@ -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 diff --git a/Documentation/fr/web/download.itexi b/Documentation/fr/web/download.itexi index 861331d346..f8e6b83e18 100644 --- a/Documentation/fr/web/download.itexi +++ b/Documentation/fr/web/download.itexi @@ -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 diff --git a/Documentation/fr/web/introduction.itexi b/Documentation/fr/web/introduction.itexi index c9b811dad5..cc1cbb5387 100644 --- a/Documentation/fr/web/introduction.itexi +++ b/Documentation/fr/web/introduction.itexi @@ -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 diff --git a/Documentation/fr/web/manuals.itexi b/Documentation/fr/web/manuals.itexi index fd8fe010b6..c365ebc69e 100644 --- a/Documentation/fr/web/manuals.itexi +++ b/Documentation/fr/web/manuals.itexi @@ -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/, diff --git a/Documentation/hu/GNUmakefile b/Documentation/hu/GNUmakefile index 2205f934ad..5c04202d3b 100644 --- a/Documentation/hu/GNUmakefile +++ b/Documentation/hu/GNUmakefile @@ -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 index 0000000000..e69de29bb2 diff --git a/Documentation/hu/included/GNUmakefile b/Documentation/hu/included/GNUmakefile deleted file mode 100644 index afe7a4d738..0000000000 --- a/Documentation/hu/included/GNUmakefile +++ /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 index 425cc1d8e2..0000000000 --- a/Documentation/hu/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/hu/learning/common-notation.itely b/Documentation/hu/learning/common-notation.itely index 70fc1f520a..29fb660a1a 100644 --- a/Documentation/hu/learning/common-notation.itely +++ b/Documentation/hu/learning/common-notation.itely @@ -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'' { diff --git a/Documentation/hu/learning/fundamental.itely b/Documentation/hu/learning/fundamental.itely index f467d1e696..06ed20b8e0 100644 --- a/Documentation/hu/learning/fundamental.itely +++ b/Documentation/hu/learning/fundamental.itely @@ -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 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 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 index 0000000000..93c5c030eb --- /dev/null +++ b/Documentation/hu/learning/preface.itely @@ -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. + diff --git a/Documentation/hu/learning/tweaks.itely b/Documentation/hu/learning/tweaks.itely index d5b2da7c7d..8f0dae8fb2 100644 --- a/Documentation/hu/learning/tweaks.itely +++ b/Documentation/hu/learning/tweaks.itely @@ -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 @@ -605,7 +605,7 @@ @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 @@ -672,10 +672,10 @@ @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 diff --git a/Documentation/hu/search-box.ihtml b/Documentation/hu/search-box.ihtml index df516c9d82..6dc413f820 100644 --- a/Documentation/hu/search-box.ihtml +++ b/Documentation/hu/search-box.ihtml @@ -1,11 +1,11 @@ diff --git a/Documentation/hu/texidocs/GNUmakefile b/Documentation/hu/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/hu/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/hu/translations.itexi b/Documentation/hu/translations.itexi index 764140b377..af7c1a4117 100644 --- a/Documentation/hu/translations.itexi +++ b/Documentation/hu/translations.itexi @@ -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 -partially (80 %) +partially (44 %) @end html @end ifhtml @ifnothtml -partially (80 %) +partially (44 %) @end ifnothtml @tab @ifhtml @html -partially +partially @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 -partially (93 %) +partially (35 %) @end html @end ifhtml @ifnothtml -partially (93 %) +partially (35 %) @end ifnothtml @tab @ifhtml @html -partially +partially @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 -partially +partially @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 -partially +partially @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 -partially +partially @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 -partially (95 %) +partially (94 %) @end html @end ifhtml @ifnothtml -partially (95 %) +partially (94 %) @end ifnothtml @tab @ifhtml @html -partially +partially @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 -partially +partially @end html @end ifhtml @ifnothtml @@ -356,7 +356,7 @@ partially (13 %) @ifhtml @html -partially +partially @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 -partially +partially @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 -partially +partially @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 -partially +partially @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 -partially (96 %) +partially (95 %) @end html @end ifhtml @ifnothtml -partially (96 %) +partially (95 %) @end ifnothtml @tab @ifhtml @html -partially +partially @end html @end ifhtml @ifnothtml diff --git a/Documentation/hu/usage/GNUmakefile b/Documentation/hu/usage/GNUmakefile deleted file mode 100644 index 425cc1d8e2..0000000000 --- a/Documentation/hu/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/hu/usage/lilypond-book.itely b/Documentation/hu/usage/lilypond-book.itely index 0246b03e49..48617438b5 100644 --- a/Documentation/hu/usage/lilypond-book.itely +++ b/Documentation/hu/usage/lilypond-book.itely @@ -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 diff --git a/Documentation/hu/usage/running.itely b/Documentation/hu/usage/running.itely index 26b8a10f0b..f72f60ea9e 100644 --- a/Documentation/hu/usage/running.itely +++ b/Documentation/hu/usage/running.itely @@ -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 diff --git a/Documentation/hu/usage/updating.itely b/Documentation/hu/usage/updating.itely index ccf924e161..5af9712ccd 100644 --- a/Documentation/hu/usage/updating.itely +++ b/Documentation/hu/usage/updating.itely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/hu/web/GNUmakefile +++ /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 index 99ba226104..0000000000 --- a/Documentation/hu/web/basic-authors.itexi +++ /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 - - diff --git a/Documentation/hu/web/community.itexi b/Documentation/hu/web/community.itexi index 17be338147..14a93b3b24 100644 --- a/Documentation/hu/web/community.itexi +++ b/Documentation/hu/web/community.itexi @@ -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 diff --git a/Documentation/hu/web/manuals.itexi b/Documentation/hu/web/manuals.itexi index 054f76c9b0..bf052b46ca 100644 --- a/Documentation/hu/web/manuals.itexi +++ b/Documentation/hu/web/manuals.itexi @@ -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 index 79b506e798..0000000000 --- a/Documentation/included/GNUmakefile +++ /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 index 0000000000..c7fd2f3446 --- /dev/null +++ b/Documentation/included/acknowledge.itexi @@ -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 diff --git a/Documentation/included/authors.itexi b/Documentation/included/authors.itexi index 0d4ebabc00..f0528c2df6 100644 --- a/Documentation/included/authors.itexi +++ b/Documentation/included/authors.itexi @@ -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 diff --git a/Documentation/included/compile.itexi b/Documentation/included/compile.itexi index eb24c59180..cc2894019f 100644 --- a/Documentation/included/compile.itexi +++ b/Documentation/included/compile.itexi @@ -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 diff --git a/Documentation/included/display-predefined-fretboards.ly b/Documentation/included/display-predefined-fretboards.ly index 0167c24c21..3e4e7fc3b5 100644 --- a/Documentation/included/display-predefined-fretboards.ly +++ b/Documentation/included/display-predefined-fretboards.ly @@ -58,13 +58,13 @@ chordsline = { \score { << - \context ChordNames { + \new ChordNames { \chordsline } - \context FretBoards { + \new FretBoards { \chordsline } - \context Staff { + \new Staff { \chordsline } >> diff --git a/Documentation/included/display-predefined-mandolin-fretboards.ly b/Documentation/included/display-predefined-mandolin-fretboards.ly index df7675b52f..683c35e26a 100644 --- a/Documentation/included/display-predefined-mandolin-fretboards.ly +++ b/Documentation/included/display-predefined-mandolin-fretboards.ly @@ -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 } >> diff --git a/Documentation/included/display-predefined-string-tunings.ly b/Documentation/included/display-predefined-string-tunings.ly index 642993fe8a..455d953757 100644 --- a/Documentation/included/display-predefined-string-tunings.ly +++ b/Documentation/included/display-predefined-string-tunings.ly @@ -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" diff --git a/Documentation/included/display-predefined-ukulele-fretboards.ly b/Documentation/included/display-predefined-ukulele-fretboards.ly index fe7c795385..fab326d800 100644 --- a/Documentation/included/display-predefined-ukulele-fretboards.ly +++ b/Documentation/included/display-predefined-ukulele-fretboards.ly @@ -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 } >> diff --git a/Documentation/included/engraver-example.ily b/Documentation/included/engraver-example.ily index e9278d3e52..548742e14f 100644 --- a/Documentation/included/engraver-example.ily +++ b/Documentation/included/engraver-example.ily @@ -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-.] diff --git a/Documentation/included/generating-output.itexi b/Documentation/included/generating-output.itexi index de9fd0c876..9fd3c62c7f 100644 --- a/Documentation/included/generating-output.itexi +++ b/Documentation/included/generating-output.itexi @@ -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 diff --git a/Documentation/included/gonville.ly b/Documentation/included/gonville.ly index 84bade14f2..4ee47ec5ad 100644 --- a/Documentation/included/gonville.ly +++ b/Documentation/included/gonville.ly @@ -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 } diff --git a/Documentation/included/helpus.itexi b/Documentation/included/helpus.itexi index c53c3d1ff7..96f697be4c 100644 --- a/Documentation/included/helpus.itexi +++ b/Documentation/included/helpus.itexi @@ -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 diff --git a/Documentation/included/note-head-style.ly b/Documentation/included/note-head-style.ly index cd3be73994..a786978734 100644 --- a/Documentation/included/note-head-style.ly +++ b/Documentation/included/note-head-style.ly @@ -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 } diff --git a/Documentation/included/script-chart.ly b/Documentation/included/script-chart.ly index 5bf05a87eb..7ed10a91c5 100644 --- a/Documentation/included/script-chart.ly +++ b/Documentation/included/script-chart.ly @@ -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 } } diff --git a/Documentation/it/GNUmakefile b/Documentation/it/GNUmakefile index ac7545e342..85dc0bcc44 100644 --- a/Documentation/it/GNUmakefile +++ b/Documentation/it/GNUmakefile @@ -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 index 0000000000..1e8b5c415c --- /dev/null +++ b/Documentation/it/changes.tely @@ -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 + +@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 { 1 } + \layout { indent=0 } } , + cello: \score { \new Staff { \clef "bass" } + \layout { indent=0 } } +} +@end lilypond + +precedentemente appariva così +@lilypond[quote] +\markup { + violin: \general-align #Y #UP + \score { \new Staff { 1 } + \layout { indent=0 } } , + cello: \general-align #Y #UP + \score { \new Staff { \clef "bass" } + \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 r r } \\ + { d r a r bes r } >> | + 1 + } + \new Staff \relative + { \clef "treble" \freeBass "1" + r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef "bass" \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 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] +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'' 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 index 425cc1d8e2..0000000000 --- a/Documentation/it/included/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/it/included/generating-output.itexi b/Documentation/it/included/generating-output.itexi index 226642f581..999c8f5eab 100644 --- a/Documentation/it/included/generating-output.itexi +++ b/Documentation/it/included/generating-output.itexi @@ -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 diff --git a/Documentation/it/included/helpus.itexi b/Documentation/it/included/helpus.itexi index 5f51c3846b..c23565ce4e 100644 --- a/Documentation/it/included/helpus.itexi +++ b/Documentation/it/included/helpus.itexi @@ -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!} diff --git a/Documentation/it/learning.tely b/Documentation/it/learning.tely index 6b33072ee4..c47302550f 100644 --- a/Documentation/it/learning.tely +++ b/Documentation/it/learning.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/it/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/it/learning/common-notation.itely b/Documentation/it/learning/common-notation.itely index 572adcef52..f7b7fa20db 100644 --- a/Documentation/it/learning/common-notation.itely +++ b/Documentation/it/learning/common-notation.itely @@ -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 8.\p 16( 4-. ) | @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! - diff --git a/Documentation/it/learning/fundamental.itely b/Documentation/it/learning/fundamental.itely index 60d80692b1..8069970814 100644 --- a/Documentation/it/learning/fundamental.itely +++ b/Documentation/it/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/it/learning/templates.itely b/Documentation/it/learning/templates.itely index eb927b9e19..adee443417 100644 --- a/Documentation/it/learning/templates.itely +++ b/Documentation/it/learning/templates.itely @@ -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] diff --git a/Documentation/it/learning/tutorial.itely b/Documentation/it/learning/tutorial.itely index b7605c9296..bee60194a1 100644 --- a/Documentation/it/learning/tutorial.itely +++ b/Documentation/it/learning/tutorial.itely @@ -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 diff --git a/Documentation/it/learning/tweaks.itely b/Documentation/it/learning/tweaks.itely index 4e3c52ec11..da114bf58e 100644 --- a/Documentation/it/learning/tweaks.itely +++ b/Documentation/it/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -366,7 +408,7 @@ di un accordo si cambia in questo modo: @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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) 4 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 -\once \override StringNumber #'self-alignment-X = #RIGHT +\once \override StringNumber.self-alignment-X = #RIGHT @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: \\ { 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}. - diff --git a/Documentation/it/notation.tely b/Documentation/it/notation.tely index cab85b411b..4b681a8344 100644 --- a/Documentation/it/notation.tely +++ b/Documentation/it/notation.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/it/notation/GNUmakefile +++ /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 index 0000000000..03d2e38f77 --- /dev/null +++ b/Documentation/it/notation/editorial.itely @@ -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] +2 +@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] +2 +@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 +c2 +@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 + 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 + 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 index 0000000000..86e9ad2b7a --- /dev/null +++ b/Documentation/it/notation/expressive.itely @@ -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' { + 16_\moltoF + 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' { + 16 + 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' { + 16 + 2..\moltoF 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) +2( 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] +1\glissando g' | +1\glissando | + | +\break +\set glissandoMap = #'((0 . 1) (1 . 0)) +1\glissando | + | +\set glissandoMap = #'((0 . 0) (0 . 1) (0 . 2)) +c1\glissando | + | +\set glissandoMap = #'((2 . 0) (1 . 0) (0 . 1)) +1\glissando | + | +@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] +1\arpeggio +@end lilypond + +Si possono scrivere vari tipi di arpeggio. +@code{\arpeggioNormal} ripristina l'arpeggio normale: + +@lilypond[verbatim,quote,relative=1] +2\arpeggio + +\arpeggioArrowUp +2\arpeggio + +\arpeggioArrowDown +2\arpeggio + +\arpeggioNormal +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] +2 + +\arpeggioBracket +2\arpeggio + +\arpeggioParenthesis +2\arpeggio + +\arpeggioParenthesisDashed +2\arpeggio + +\arpeggioNormal +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}. diff --git a/Documentation/it/notation/notation.itely b/Documentation/it/notation/notation.itely index eb594d29b1..ed08bc1892 100644 --- a/Documentation/it/notation/notation.itely +++ b/Documentation/it/notation/notation.itely @@ -16,14 +16,14 @@ 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 - diff --git a/Documentation/it/notation/pitches.itely b/Documentation/it/notation/pitches.itely index 8e96e128c7..822968c660 100644 --- a/Documentation/it/notation/pitches.itely +++ b/Documentation/it/notation/pitches.itely @@ -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] -2 4 +2 4 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 index 0000000000..b94e402dd1 --- /dev/null +++ b/Documentation/it/notation/repeats.itely @@ -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. 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 index 0000000000..cf64c68f14 --- /dev/null +++ b/Documentation/it/notation/rhythms.itely @@ -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 +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 +4 c8 a +% Scala la musica di *2/3 +\scaleDurations 2/3 { + 4. c8 a f +} +% Scala la musica di *2 +\scaleDurations 2/1 { + 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] +~ + +@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 2~ } +\alternative { + % Prima volta: la nota seguente viene legata in modo normale + { 2. r4 } + % Seconda volta: la nota seguente ha una legatura ripetuta + { 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] +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 index 0000000000..46e13fd5ea --- /dev/null +++ b/Documentation/it/notation/simultaneous.itely @@ -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] +1 2 4 8. 16 +@end lilypond + +Proprio come per le note, si possono specificare le articolazioni da +riferire all'accordo. + +@lilypond[verbatim,quote,relative=2] +1\fermata 2-> 4\prall 8.^! 16-. +@end lilypond + +Si possono specificare abbellimenti e articolazioni per ogni nota che fa parte +dell'accordo. + +@lilypond[verbatim,quote,relative=2] +1 c-^ e>2 4 +8. 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] +1 \f ( ) +\< \! +@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] +1 +@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{}, 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! \\ >>}, + +@item +la trascrizione enarmonica di una o più altezze, +@samp{}, 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] +1 q 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] +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] +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] +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) + { 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'' + { 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] +4-. <>-. << c a >> << { c-. } { 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 { 2 } +@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 index 0000000000..9c0dd658f2 --- /dev/null +++ b/Documentation/it/notation/staff.itely @@ -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 index 0000000000..863ff5b3e9 --- /dev/null +++ b/Documentation/it/notation/text.itely @@ -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] +1 +\mark \markup { \italic { colla parte } } +2 +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] +2 +\mark \markup { \musicglyph #"scripts.ufermata" } +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}. + diff --git a/Documentation/it/search-box.ihtml b/Documentation/it/search-box.ihtml index a75cb4d6cb..1562b0b428 100644 --- a/Documentation/it/search-box.ihtml +++ b/Documentation/it/search-box.ihtml @@ -1,5 +1,5 @@ diff --git a/Documentation/it/texidocs/GNUmakefile b/Documentation/it/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/it/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/it/texidocs/adding-ambitus-per-voice.texidoc b/Documentation/it/texidocs/adding-ambitus-per-voice.texidoc index 6a2022d132..fd74c01a6b 100644 --- a/Documentation/it/texidocs/adding-ambitus-per-voice.texidoc +++ b/Documentation/it/texidocs/adding-ambitus-per-voice.texidoc @@ -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 index 0000000000..aa72485367 --- /dev/null +++ b/Documentation/it/texidocs/adding-an-ottava-marking-to-a-single-voice.texidoc @@ -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 index 0000000000..1499f9e26e --- /dev/null +++ b/Documentation/it/texidocs/adding-timing-marks-to-long-glissandi.texidoc @@ -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 index 0000000000..dcc7c3b56e --- /dev/null +++ b/Documentation/it/texidocs/adding-volta-brackets-to-additional-staves.texidoc @@ -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 index 0000000000..166aec3197 --- /dev/null +++ b/Documentation/it/texidocs/additional-voices-to-avoid-collisions.texidoc @@ -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 index 0000000000..f943ed3283 --- /dev/null +++ b/Documentation/it/texidocs/adjusting-the-shape-of-falls-and-doits.texidoc @@ -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 index 0000000000..990bf47c3d --- /dev/null +++ b/Documentation/it/texidocs/aligning-bar-numbers.texidoc @@ -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 index 0000000000..2e6fe2724b --- /dev/null +++ b/Documentation/it/texidocs/allowing-fingerings-to-be-printed-inside-the-staff.texidoc @@ -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 index 0000000000..573a546b71 --- /dev/null +++ b/Documentation/it/texidocs/alternative-bar-numbering.texidoc @@ -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 index 0000000000..fe92518f44 --- /dev/null +++ b/Documentation/it/texidocs/alternative-breve-notes.texidoc @@ -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" diff --git a/Documentation/it/texidocs/ambitus-with-multiple-voices.texidoc b/Documentation/it/texidocs/ambitus-with-multiple-voices.texidoc index c21b53778a..9a22927eb9 100644 --- a/Documentation/it/texidocs/ambitus-with-multiple-voices.texidoc +++ b/Documentation/it/texidocs/ambitus-with-multiple-voices.texidoc @@ -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ù diff --git a/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc index 6653eb6789..ecfab98fdb 100644 --- a/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc +++ b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-gregorian-music.texidoc @@ -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. " diff --git a/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc index 75a7d29621..3aa8adf95f 100644 --- a/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc +++ b/Documentation/it/texidocs/ancient-notation-template----modern-transcription-of-mensural-music.texidoc @@ -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 diff --git a/Documentation/it/texidocs/anglican-psalm-template.texidoc b/Documentation/it/texidocs/anglican-psalm-template.texidoc index c0caba3a55..95e4936266 100644 --- a/Documentation/it/texidocs/anglican-psalm-template.texidoc +++ b/Documentation/it/texidocs/anglican-psalm-template.texidoc @@ -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à. diff --git a/Documentation/it/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc b/Documentation/it/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc index a5b739def6..f2e5bc4714 100644 --- a/Documentation/it/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc +++ b/Documentation/it/texidocs/applying-note-head-styles-depending-on-the-step-of-the-scale.texidoc @@ -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 index 0000000000..12c5ef129a --- /dev/null +++ b/Documentation/it/texidocs/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.texidoc @@ -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 index 0000000000..2ba30095de --- /dev/null +++ b/Documentation/it/texidocs/avoiding-collisions-with-chord-fingerings.texidoc @@ -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 index 0000000000..a54de818d2 --- /dev/null +++ b/Documentation/it/texidocs/beam-endings-in-score-context.texidoc @@ -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 index 0000000000..d6fb266fbf --- /dev/null +++ b/Documentation/it/texidocs/beams-across-line-breaks.texidoc @@ -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 index 0000000000..e23d52a38a --- /dev/null +++ b/Documentation/it/texidocs/changing-beam-knee-gap.texidoc @@ -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 index 0000000000..a958182b2b --- /dev/null +++ b/Documentation/it/texidocs/changing-form-of-multi-measure-rests.texidoc @@ -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 index 0000000000..f9249a0cd5 --- /dev/null +++ b/Documentation/it/texidocs/changing-partcombine-texts.texidoc @@ -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 index 0000000000..86c7ebef53 --- /dev/null +++ b/Documentation/it/texidocs/changing-text-and-spanner-styles-for-text-dynamics.texidoc @@ -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" diff --git a/Documentation/it/texidocs/changing-the-ambitus-gap.texidoc b/Documentation/it/texidocs/changing-the-ambitus-gap.texidoc index 58008b4340..ad3649c385 100644 --- a/Documentation/it/texidocs/changing-the-ambitus-gap.texidoc +++ b/Documentation/it/texidocs/changing-the-ambitus-gap.texidoc @@ -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 index 0000000000..7a3975ae4c --- /dev/null +++ b/Documentation/it/texidocs/changing-the-breath-mark-symbol.texidoc @@ -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 index 0000000000..187fa43b7f --- /dev/null +++ b/Documentation/it/texidocs/changing-the-number-of-augmentation-dots-per-note.texidoc @@ -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 index 0000000000..50ec127bc9 --- /dev/null +++ b/Documentation/it/texidocs/changing-the-tempo-without-a-metronome-mark.texidoc @@ -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 index 0000000000..d5206d8298 --- /dev/null +++ b/Documentation/it/texidocs/changing-the-tuplet-number.texidoc @@ -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 index 0000000000..ceda6a5022 --- /dev/null +++ b/Documentation/it/texidocs/combining-two-parts-on-the-same-staff.texidoc @@ -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 index 0000000000..2d26f50817 --- /dev/null +++ b/Documentation/it/texidocs/conducting-signs,-measure-grouping-signs.texidoc @@ -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 index 0000000000..4b18fc1274 --- /dev/null +++ b/Documentation/it/texidocs/contemporary-glissando.texidoc @@ -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 index 0000000000..35bff93056 --- /dev/null +++ b/Documentation/it/texidocs/controlling-the-placement-of-chord-fingerings.texidoc @@ -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 index 0000000000..5a5e011e24 --- /dev/null +++ b/Documentation/it/texidocs/controlling-the-vertical-ordering-of-scripts.texidoc @@ -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 index 0000000000..f5f9536ab9 --- /dev/null +++ b/Documentation/it/texidocs/controlling-tuplet-bracket-visibility.texidoc @@ -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 index 0000000000..d10f1c62f9 --- /dev/null +++ b/Documentation/it/texidocs/creating-a-delayed-turn.texidoc @@ -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 index 0000000000..dc5692b69e --- /dev/null +++ b/Documentation/it/texidocs/creating-arpeggios-across-notes-in-different-voices.texidoc @@ -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 index 0000000000..d084e25728 --- /dev/null +++ b/Documentation/it/texidocs/creating-cross-staff-arpeggios-in-a-piano-staff.texidoc @@ -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 index 0000000000..7570ae15cd --- /dev/null +++ b/Documentation/it/texidocs/creating-cross-staff-arpeggios-in-other-contexts.texidoc @@ -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 index 0000000000..fa2a586876 --- /dev/null +++ b/Documentation/it/texidocs/creating-metronome-marks-in-markup-mode.texidoc @@ -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 index 0000000000..37e39d6565 --- /dev/null +++ b/Documentation/it/texidocs/cross-staff-tremolos.texidoc @@ -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 index 0000000000..4b3daf0d17 --- /dev/null +++ b/Documentation/it/texidocs/default-direction-of-stems-on-the-center-line-of-the-staff.texidoc @@ -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 index 0000000000..c271fa590b --- /dev/null +++ b/Documentation/it/texidocs/display-bracket-with-only-one-staff-in-a-system.texidoc @@ -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 index 0000000000..905b0bd089 --- /dev/null +++ b/Documentation/it/texidocs/dynamics-custom-text-spanner-postfix.texidoc @@ -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 index 0000000000..0339153cfb --- /dev/null +++ b/Documentation/it/texidocs/dynamics-text-spanner-postfix.texidoc @@ -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 index 0000000000..7b4c14c4e6 --- /dev/null +++ b/Documentation/it/texidocs/engraving-ties-manually.texidoc @@ -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 index 0000000000..f669834b19 --- /dev/null +++ b/Documentation/it/texidocs/entering-several-tuplets-using-only-one--times-command.texidoc @@ -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 index 0000000000..b590a543de --- /dev/null +++ b/Documentation/it/texidocs/extending-glissandi-across-repeats.texidoc @@ -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 index 0000000000..33846491e7 --- /dev/null +++ b/Documentation/it/texidocs/flat-flags-and-beam-nibs.texidoc @@ -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 index 0000000000..b777e6af62 --- /dev/null +++ b/Documentation/it/texidocs/forcing-horizontal-shift-of-notes.texidoc @@ -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 index 0000000000..c27961f394 --- /dev/null +++ b/Documentation/it/texidocs/grid-lines--changing-their-appearance.texidoc @@ -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 index 0000000000..01162921db --- /dev/null +++ b/Documentation/it/texidocs/guitar-strum-rhythms.texidoc @@ -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" diff --git a/Documentation/it/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc b/Documentation/it/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc index be4a8f006c..2c7bfbc0c4 100644 --- a/Documentation/it/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc +++ b/Documentation/it/texidocs/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.texidoc @@ -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 index 0000000000..7cc5313d07 --- /dev/null +++ b/Documentation/it/texidocs/hiding-the-extender-line-for-text-dynamics.texidoc @@ -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" diff --git a/Documentation/it/texidocs/hymn-template.texidoc b/Documentation/it/texidocs/hymn-template.texidoc index cebc7d05ab..d8883ad940 100644 --- a/Documentation/it/texidocs/hymn-template.texidoc +++ b/Documentation/it/texidocs/hymn-template.texidoc @@ -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 index 0000000000..0adfa6aaef --- /dev/null +++ b/Documentation/it/texidocs/inserting-a-caesura.texidoc @@ -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 index 0000000000..68fee2cd65 --- /dev/null +++ b/Documentation/it/texidocs/isolated-percent-repeats.texidoc @@ -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" diff --git a/Documentation/it/texidocs/jazz-combo-template.texidoc b/Documentation/it/texidocs/jazz-combo-template.texidoc index 1e5988fba6..7d56a61c9e 100644 --- a/Documentation/it/texidocs/jazz-combo-template.texidoc +++ b/Documentation/it/texidocs/jazz-combo-template.texidoc @@ -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 index 0000000000..db18607ec5 --- /dev/null +++ b/Documentation/it/texidocs/making-glissandi-breakable.texidoc @@ -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 index 0000000000..0d862f6a65 --- /dev/null +++ b/Documentation/it/texidocs/making-slurs-with-complex-dash-structure.texidoc @@ -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 index 0000000000..ef0b77aabf --- /dev/null +++ b/Documentation/it/texidocs/making-some-staff-lines-thicker-than-the-others.texidoc @@ -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 index 0000000000..8fac1ab41d --- /dev/null +++ b/Documentation/it/texidocs/mensurstriche-layout-bar-lines-between-the-staves.texidoc @@ -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 index 0000000000..751df0c1c6 --- /dev/null +++ b/Documentation/it/texidocs/modifying-default-values-for-articulation-shorthand-notation.texidoc @@ -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 index 0000000000..55abcbc69e --- /dev/null +++ b/Documentation/it/texidocs/multi-measure-rest-markup.texidoc @@ -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 index 0000000000..0df20c03b7 --- /dev/null +++ b/Documentation/it/texidocs/nesting-staves.texidoc @@ -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 index 0000000000..a5f417009f --- /dev/null +++ b/Documentation/it/texidocs/non-default-tuplet-numbers.texidoc @@ -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" diff --git a/Documentation/it/texidocs/non-traditional-key-signatures.texidoc b/Documentation/it/texidocs/non-traditional-key-signatures.texidoc index 1307a90e93..bcd17cefdb 100644 --- a/Documentation/it/texidocs/non-traditional-key-signatures.texidoc +++ b/Documentation/it/texidocs/non-traditional-key-signatures.texidoc @@ -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}. diff --git a/Documentation/it/texidocs/numbers-as-easy-note-heads.texidoc b/Documentation/it/texidocs/numbers-as-easy-note-heads.texidoc index 3745ca141c..0eee8468f6 100644 --- a/Documentation/it/texidocs/numbers-as-easy-note-heads.texidoc +++ b/Documentation/it/texidocs/numbers-as-easy-note-heads.texidoc @@ -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" diff --git a/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc b/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc index b65a75f797..3d9bf384c5 100644 --- a/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc +++ b/Documentation/it/texidocs/orchestra,-choir-and-piano-template.texidoc @@ -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 diff --git a/Documentation/it/texidocs/ottava-text.texidoc b/Documentation/it/texidocs/ottava-text.texidoc index 20250b9f46..e22ca9d60e 100644 --- a/Documentation/it/texidocs/ottava-text.texidoc +++ b/Documentation/it/texidocs/ottava-text.texidoc @@ -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 index 0000000000..9433792ba2 --- /dev/null +++ b/Documentation/it/texidocs/partcombine-and-autobeamoff.texidoc @@ -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 index 0000000000..835113520a --- /dev/null +++ b/Documentation/it/texidocs/percent-repeat-count-visibility.texidoc @@ -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 index 0000000000..439663a6b9 --- /dev/null +++ b/Documentation/it/texidocs/percent-repeat-counter.texidoc @@ -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 index 0000000000..c2b5c32aff --- /dev/null +++ b/Documentation/it/texidocs/permitting-line-breaks-within-beamed-tuplets.texidoc @@ -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" diff --git a/Documentation/it/texidocs/piano-template-simple.texidoc b/Documentation/it/texidocs/piano-template-simple.texidoc index 7aa020d85b..947fe1a335 100644 --- a/Documentation/it/texidocs/piano-template-simple.texidoc +++ b/Documentation/it/texidocs/piano-template-simple.texidoc @@ -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. diff --git a/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc index c3f97e5153..536e012814 100644 --- a/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc +++ b/Documentation/it/texidocs/piano-template-with-centered-lyrics.texidoc @@ -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. diff --git a/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc index 06339ab602..80fc3b4806 100644 --- a/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc +++ b/Documentation/it/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -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 index 0000000000..9b2f17e7e6 --- /dev/null +++ b/Documentation/it/texidocs/positioning-grace-notes-with-floating-space.texidoc @@ -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 index 0000000000..70a0a4ee80 --- /dev/null +++ b/Documentation/it/texidocs/positioning-multi-measure-rests.texidoc @@ -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 index 0000000000..d10f8f02a6 --- /dev/null +++ b/Documentation/it/texidocs/positioning-text-markups-inside-slurs.texidoc @@ -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" diff --git a/Documentation/it/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc b/Documentation/it/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc index 9a755b8c88..b873ae0e55 100644 --- a/Documentation/it/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc +++ b/Documentation/it/texidocs/preventing-extra-naturals-from-being-automatically-added.texidoc @@ -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" diff --git a/Documentation/it/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc b/Documentation/it/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc index b7f0a2b0e5..c6dcdef76e 100644 --- a/Documentation/it/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc +++ b/Documentation/it/texidocs/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.texidoc @@ -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 index 0000000000..ebaed1c509 --- /dev/null +++ b/Documentation/it/texidocs/printing-a-repeat-sign-at-the-beginning-of-a-piece.texidoc @@ -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 index 0000000000..dca6b3a265 --- /dev/null +++ b/Documentation/it/texidocs/printing-bar-numbers-at-regular-intervals.texidoc @@ -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 index 0000000000..d799abadfb --- /dev/null +++ b/Documentation/it/texidocs/printing-bar-numbers-inside-boxes-or-circles.texidoc @@ -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 index 0000000000..e3fd59d072 --- /dev/null +++ b/Documentation/it/texidocs/printing-hairpins-in-various-styles.texidoc @@ -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 index 0000000000..dcbb731b6b --- /dev/null +++ b/Documentation/it/texidocs/printing-hairpins-using-al-niente-notation.texidoc @@ -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 index 0000000000..cef80c1b9c --- /dev/null +++ b/Documentation/it/texidocs/printing-marks-at-the-end-of-a-line.texidoc @@ -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 index 0000000000..7971732186 --- /dev/null +++ b/Documentation/it/texidocs/printing-marks-on-every-staff.texidoc @@ -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 index 0000000000..4ca4d67755 --- /dev/null +++ b/Documentation/it/texidocs/printing-metronome-and-rehearsal-marks-below-the-staff.texidoc @@ -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 index 0000000000..fadac46a2e --- /dev/null +++ b/Documentation/it/texidocs/printing-the-bar-number-for-the-first-measure.texidoc @@ -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 index 0000000000..ab1e4a8238 --- /dev/null +++ b/Documentation/it/texidocs/redefining-grace-note-global-defaults.texidoc @@ -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 index 0000000000..badd306bfd --- /dev/null +++ b/Documentation/it/texidocs/removing-bar-numbers-from-a-score.texidoc @@ -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 index 0000000000..2ef24e9b37 --- /dev/null +++ b/Documentation/it/texidocs/removing-the-first-empty-line.texidoc @@ -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 index 0000000000..14c35632b6 --- /dev/null +++ b/Documentation/it/texidocs/rest-styles.texidoc @@ -0,0 +1,6 @@ +%% Translation of GIT committish: 6e4e9c4eacb94d68c11fd6b9062da4f724114860 + texidocit = " +Esistono vari stili di pausa. + +" + doctitleit = "Stili di pausa" diff --git a/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc b/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc index f97f4f3492..5edd89bc7e 100644 --- a/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc +++ b/Documentation/it/texidocs/satb-choir-template---four-staves.texidoc @@ -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 index 0000000000..8a8a0b1ef5 --- /dev/null +++ b/Documentation/it/texidocs/setting-hairpin-behavior-at-bar-lines.texidoc @@ -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 index 0000000000..55e74b3fef --- /dev/null +++ b/Documentation/it/texidocs/setting-the-double-repeat-default-for-volte.texidoc @@ -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 index 0000000000..17dab47f73 --- /dev/null +++ b/Documentation/it/texidocs/setting-the-minimum-length-of-hairpins.texidoc @@ -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 index 0000000000..573c2ca486 --- /dev/null +++ b/Documentation/it/texidocs/shortening-volta-brackets.texidoc @@ -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" diff --git a/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc index 4c60b3167b..69ef9377af 100644 --- a/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc +++ b/Documentation/it/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -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" diff --git a/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc index 0b691a12ef..f09a4e3c3e 100644 --- a/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc +++ b/Documentation/it/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -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! diff --git a/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc index 524e43caab..a6c9b30121 100644 --- a/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc +++ b/Documentation/it/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -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 diff --git a/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc index 9e93a97109..a3231796b2 100644 --- a/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc +++ b/Documentation/it/texidocs/single-staff-template-with-only-notes.texidoc @@ -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 index 0000000000..03aecb7367 --- /dev/null +++ b/Documentation/it/texidocs/stand-alone-two-column-markup.texidoc @@ -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 index 0000000000..3672cabba7 --- /dev/null +++ b/Documentation/it/texidocs/strict-beat-beaming.texidoc @@ -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" diff --git a/Documentation/it/texidocs/string-quartet-template-simple.texidoc b/Documentation/it/texidocs/string-quartet-template-simple.texidoc index d2581209d3..00fa356733 100644 --- a/Documentation/it/texidocs/string-quartet-template-simple.texidoc +++ b/Documentation/it/texidocs/string-quartet-template-simple.texidoc @@ -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. diff --git a/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc index 673f7b75e2..58b5df3229 100644 --- a/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc +++ b/Documentation/it/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -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 index 0000000000..6683853150 --- /dev/null +++ b/Documentation/it/texidocs/subdividing-beams.texidoc @@ -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 index 0000000000..98d32fba9c --- /dev/null +++ b/Documentation/it/texidocs/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.texidoc @@ -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)" diff --git a/Documentation/it/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc b/Documentation/it/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc index 3836ced7d2..ab84a1b9c4 100644 --- a/Documentation/it/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc +++ b/Documentation/it/texidocs/transposing-pitches-with-minimum-accidentals-smart-transpose.texidoc @@ -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 diff --git a/Documentation/it/texidocs/tweaking-clef-properties.texidoc b/Documentation/it/texidocs/tweaking-clef-properties.texidoc index e5576b0d06..f26542a0ef 100644 --- a/Documentation/it/texidocs/tweaking-clef-properties.texidoc +++ b/Documentation/it/texidocs/tweaking-clef-properties.texidoc @@ -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 index 0000000000..f062219f66 --- /dev/null +++ b/Documentation/it/texidocs/tweaking-grace-layout-within-music.texidoc @@ -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 index 0000000000..dcc3f148a7 --- /dev/null +++ b/Documentation/it/texidocs/use-square-bracket-at-the-start-of-a-staff-group.texidoc @@ -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 index 0000000000..970f4aa831 --- /dev/null +++ b/Documentation/it/texidocs/using-a-tick-as-the-breath-mark-symbol.texidoc @@ -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 index 0000000000..f19c9a196c --- /dev/null +++ b/Documentation/it/texidocs/using-double-slurs-for-legato-chords.texidoc @@ -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 index 0000000000..5703f11a20 --- /dev/null +++ b/Documentation/it/texidocs/using-grace-note-slashes-with-normal-heads.texidoc @@ -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 index 0000000000..904c02196c --- /dev/null +++ b/Documentation/it/texidocs/using-ties-with-arpeggios.texidoc @@ -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 index 0000000000..218a315a76 --- /dev/null +++ b/Documentation/it/texidocs/vertically-aligned-dynamics-and-textscripts.texidoc @@ -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 index 0000000000..22e5a05b82 --- /dev/null +++ b/Documentation/it/texidocs/vertically-aligning-ossias-and-lyrics.texidoc @@ -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" diff --git a/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc index d4a6a1fde9..d21a508ebf 100644 --- a/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc +++ b/Documentation/it/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -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" diff --git a/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc index a84ed3ad71..049e4a44d9 100644 --- a/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc +++ b/Documentation/it/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -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 diff --git a/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc b/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc index 3351326e3e..9f00b26cc8 100644 --- a/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc +++ b/Documentation/it/texidocs/vocal-ensemble-template-with-verse-and-refrain.texidoc @@ -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 diff --git a/Documentation/it/texidocs/vocal-ensemble-template.texidoc b/Documentation/it/texidocs/vocal-ensemble-template.texidoc index c3b10e0af5..55efe8fe20 100644 --- a/Documentation/it/texidocs/vocal-ensemble-template.texidoc +++ b/Documentation/it/texidocs/vocal-ensemble-template.texidoc @@ -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 diff --git a/Documentation/it/translations.itexi b/Documentation/it/translations.itexi index 2e8825463f..df15a8a68a 100644 --- a/Documentation/it/translations.itexi +++ b/Documentation/it/translations.itexi @@ -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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab pre-GDP +@item +LilyPond --- \TITLE\ +@* +1139 +@tab Federico Bruni +@tab +@tab +@ifhtml + +@html +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab pre-GDP @item @@ -64,129 +130,156 @@ LilyPond --- \TITLE\ @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 -yes +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@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 +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab pre-GDP +@item +1.7 Note editoriali +@* +954 +@tab Federico Bruni +@tab +@tab +@ifhtml + +@html +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab +@ifhtml + +@html +sì +@end html +@end ifhtml +@ifnothtml +sì +@end ifnothtml +@tab pre-GDP +@item +1.8 Testo +@* +2816 +@tab Federico Bruni +@tab +@tab +@ifhtml + +@html +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab pre-GDP @item @@ -358,75 +640,75 @@ LilyPond --- \TITLE\ @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab pre-GDP @item @@ -439,75 +721,75 @@ yes @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab pre-GDP @item @@ -559,129 +841,129 @@ LilyPond --- \TITLE\ @ifhtml @html -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -yes +sì @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 -yes +sì @end html @end ifhtml @ifnothtml -yes +sì @end ifnothtml @tab @ifhtml @html -partially +sì @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 index 425cc1d8e2..0000000000 --- a/Documentation/it/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/it/usage/external.itely b/Documentation/it/usage/external.itely index 7fd1c0d309..578723b220 100644 --- a/Documentation/it/usage/external.itely +++ b/Documentation/it/usage/external.itely @@ -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 diff --git a/Documentation/it/usage/lilypond-book.itely b/Documentation/it/usage/lilypond-book.itely index 77ad3f45c2..e54bc7c786 100644 --- a/Documentation/it/usage/lilypond-book.itely +++ b/Documentation/it/usage/lilypond-book.itely @@ -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]{} -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{}, dove le opzioni +Per le immagini in linea, si usa @code{}, dove le opzioni sono distinte dalla musica attraverso i due punti, ad esempio @example @@ -568,7 +568,7 @@ Un po' di musica in una linea di testo. Per includere file separati, si usa @example -@var{filename} +@var{filename} @end example @code{} usa la stessa sintassi di @code{}, 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}. - diff --git a/Documentation/it/usage/running.itely b/Documentation/it/usage/running.itely index 929bcab677..a049741052 100644 --- a/Documentation/it/usage/running.itely +++ b/Documentation/it/usage/running.itely @@ -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 diff --git a/Documentation/it/usage/suggestions.itely b/Documentation/it/usage/suggestions.itely index 491dc3756e..a8b66c1a79 100644 --- a/Documentation/it/usage/suggestions.itely +++ b/Documentation/it/usage/suggestions.itely @@ -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 diff --git a/Documentation/it/usage/updating.itely b/Documentation/it/usage/updating.itely index c22efb5dc9..91c0081b2e 100644 --- a/Documentation/it/usage/updating.itely +++ b/Documentation/it/usage/updating.itely @@ -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' @@ -15,14 +15,14 @@ @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 index 425cc1d8e2..0000000000 --- a/Documentation/it/web/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/it/web/community.itexi b/Documentation/it/web/community.itexi index d3f2fe759a..4737b5c964 100644 --- a/Documentation/it/web/community.itexi +++ b/Documentation/it/web/community.itexi @@ -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}, diff --git a/Documentation/it/web/download.itexi b/Documentation/it/web/download.itexi index 10dea82c29..d9c853dea4 100644 --- a/Documentation/it/web/download.itexi +++ b/Documentation/it/web/download.itexi @@ -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 diff --git a/Documentation/it/web/introduction.itexi b/Documentation/it/web/introduction.itexi index 5bf496ca4b..1bdf661fa0 100644 --- a/Documentation/it/web/introduction.itexi +++ b/Documentation/it/web/introduction.itexi @@ -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}. diff --git a/Documentation/it/web/manuals.itexi b/Documentation/it/web/manuals.itexi index 23c77980ee..27a050e7b8 100644 --- a/Documentation/it/web/manuals.itexi +++ b/Documentation/it/web/manuals.itexi @@ -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} diff --git a/Documentation/ja/GNUmakefile b/Documentation/ja/GNUmakefile index 24cff45d25..54c1212969 100644 --- a/Documentation/ja/GNUmakefile +++ b/Documentation/ja/GNUmakefile @@ -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 index afe7a4d738..0000000000 --- a/Documentation/ja/included/GNUmakefile +++ /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/ja/included/generating-output.itexi b/Documentation/ja/included/generating-output.itexi index dde1cd42b2..c7534bfc10 100644 --- a/Documentation/ja/included/generating-output.itexi +++ b/Documentation/ja/included/generating-output.itexi @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/ja/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/ja/learning/common-notation.itely b/Documentation/ja/learning/common-notation.itely index 44f77490e1..989f0443cd 100644 --- a/Documentation/ja/learning/common-notation.itely +++ b/Documentation/ja/learning/common-notation.itely @@ -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'' { diff --git a/Documentation/ja/learning/fundamental.itely b/Documentation/ja/learning/fundamental.itely index f0d38bb791..5122a524b8 100644 --- a/Documentation/ja/learning/fundamental.itely +++ b/Documentation/ja/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/ja/learning/preface.itely b/Documentation/ja/learning/preface.itely index c990c68e43..1a629efe95 100644 --- a/Documentation/ja/learning/preface.itely +++ b/Documentation/ja/learning/preface.itely @@ -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' diff --git a/Documentation/ja/learning/templates.itely b/Documentation/ja/learning/templates.itely index 091ad9b7d7..de6f029732 100644 --- a/Documentation/ja/learning/templates.itely +++ b/Documentation/ja/learning/templates.itely @@ -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' @@ -23,38 +23,52 @@ 音符を付け加えて、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} @@ -64,74 +78,117 @@ @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} @@ -141,21 +198,34 @@ @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] @@ -166,7 +236,13 @@ @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] diff --git a/Documentation/ja/learning/tutorial.itely b/Documentation/ja/learning/tutorial.itely index a87377f084..9df0483d2f 100644 --- a/Documentation/ja/learning/tutorial.itely +++ b/Documentation/ja/learning/tutorial.itely @@ -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 diff --git a/Documentation/ja/learning/tweaks.itely b/Documentation/ja/learning/tweaks.itely index 11329a5567..ff31215f2d 100644 --- a/Documentation/ja/learning/tweaks.itely +++ b/Documentation/ja/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -376,7 +418,7 @@ C メジャー コードの中にある真ん中の音符 (ミドル E) の符 @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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 正の整数 - @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 -カラーをこのリストの中にある他の関数の 1 に変更しようと思うかもしれません。 +-- これはシンボルではなく@emph{変数}です。@c +この変数は評価される時、小節線の色を白にセットするのに必要な内部的な値の@c +リストを提供します。@c +標準カラー リストにある他のカラーもまた変数です。@c +小節線の色をこのリストの中にある他の変数に変更することで、@c +これが機能することをあなた自身で納得できます。 @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 -まだ 3 番目の方法が残っています。@c -これは RGB 値を内部カラーに変換する @code{rgb-color} 関数を使用する方法です。@c +もう 1 つ関数があります。@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 -コマンドの効果を単一の音符に制限したい場合、@c -等価の @code{\once \override} コマンドを使用するか、@c -あるいは、定義済みコマンドを使用して、効果を受けた音符の後に@c -対応する @code{\xxxNeutral} コマンドを置かなければなりません。 +これらのコマンドで中立/通常の位置に戻すコマンドは @code{\revert} を@c +用いることで実装されていて、前に @code{\once} が付いて @strong{いない} +かもしれません。@c +@code{\override} を用いて実装されているコマンドの効果を単一のタイミング@c +に限定したいのであれば、明示的なオーバライドの場合と同様に、@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) 4 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 -\once \override StringNumber #'self-alignment-X = #RIGHT +\once \override StringNumber.self-alignment-X = #RIGHT @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 \\ { 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 diff --git a/Documentation/ja/notation.tely b/Documentation/ja/notation.tely index d1a8c83951..0afb531979 100644 --- a/Documentation/ja/notation.tely +++ b/Documentation/ja/notation.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/ja/notation/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/ja/notation/changing-defaults.itely b/Documentation/ja/notation/changing-defaults.itely index 8bdcca695e..8d3c5b837c 100644 --- a/Documentation/ja/notation/changing-defaults.itely +++ b/Documentation/ja/notation/changing-defaults.itely @@ -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 * コンテキストの説明:: -* コンテキストを作成する:: +* コンテキストを作成して参照する:: * コンテキストを残しておく:: * コンテキストのプラグインを変更する:: * コンテキストのデフォルト設定を変更する:: @@ -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}) - ) +\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 4 -<\tweak #'color #red c e>4 +\tweak color #red c4 +\tweak color #red 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 -4 +\tweak Stem.color #red +\tweak Beam.color #green c8 e +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 @@ -2963,12 +3047,12 @@ a 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 -調合や音部記号の可視性には効果を持ちません。@c +調号や音部記号の可視性には効果を持ちません。@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 前の調をキャンセルする臨時記号の可視性 -明示的な調の変更で描画される忠告の臨時記号を削除するには、@c +明示的な調の変更で描画される前の調をキャンセルする臨時記号を削除するには、@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 @@ -3831,17 +3944,17 @@ a @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 @@ -4015,14 +4128,14 @@ 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 } +>> +@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 } >> @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 } #}) diff --git a/Documentation/ja/notation/cheatsheet.itely b/Documentation/ja/notation/cheatsheet.itely index 4bf1892660..cefecafef0 100644 --- a/Documentation/ja/notation/cheatsheet.itely +++ b/Documentation/ja/notation/cheatsheet.itely @@ -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 @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 diff --git a/Documentation/ja/notation/chords.itely b/Documentation/ja/notation/chords.itely index c878007780..c7a7bc5a1b 100644 --- a/Documentation/ja/notation/chords.itely +++ b/Documentation/ja/notation/chords.itely @@ -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 @@ -179,7 +179,7 @@ @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 diff --git a/Documentation/ja/notation/contemporary.itely b/Documentation/ja/notation/contemporary.itely index 8f2cf1cf02..6f79e1a415 100644 --- a/Documentation/ja/notation/contemporary.itely +++ b/Documentation/ja/notation/contemporary.itely @@ -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' diff --git a/Documentation/ja/notation/editorial.itely b/Documentation/ja/notation/editorial.itely index cea3f2159f..084b00f579 100644 --- a/Documentation/ja/notation/editorial.itely +++ b/Documentation/ja/notation/editorial.itely @@ -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 -指の変更のためにマークアップ テキストが使用されることもあります。 +指の変更のためにマークアップ テキストや文字列が使用されることもあります。 @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 diff --git a/Documentation/ja/notation/expressive.itely b/Documentation/ja/notation/expressive.itely index eae0922e42..97973e4d2b 100644 --- a/Documentation/ja/notation/expressive.itely +++ b/Documentation/ja/notation/expressive.itely @@ -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' { + 16 + 2..\moltoF 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{グリッサンド} は音符に @code{\glissando} を付けることによって@c -作成されます: +@notation{グリッサンド} は音符の後に @code{\glissando} を付けることに@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] +1\glissando g' | +1\glissando | + | +\break +\set glissandoMap = #'((0 . 1) (1 . 0)) +1\glissando | + | +\set glissandoMap = #'((0 . 0) (0 . 1) (0 . 2)) +c1\glissando | + | +\set glissandoMap = #'((2 . 0) (1 . 0) (0 . 1)) +1\glissando | + | @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} diff --git a/Documentation/ja/notation/fretted-strings.itely b/Documentation/ja/notation/fretted-strings.itely index c214e6923e..016491cf3e 100644 --- a/Documentation/ja/notation/fretted-strings.itely +++ b/Documentation/ja/notation/fretted-strings.itely @@ -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 @{ @} + stringTunings = \stringTuning @} @} @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" 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 1^\markup { \fret-diagram-verbose #'( (place-fret 6 1) @@ -1028,7 +1028,7 @@ fret-diagram-verbose インターフェイスに特有なこととして、 (place-fret 1 3 3) ) } - 1^\markup { + 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" }}} 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 } diff --git a/Documentation/ja/notation/input.itely b/Documentation/ja/notation/input.itely index 76484d3446..0f02c9a922 100644 --- a/Documentation/ja/notation/input.itely +++ b/Documentation/ja/notation/input.itely @@ -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 } diff --git a/Documentation/ja/notation/keyboards.itely b/Documentation/ja/notation/keyboards.itely index e760f8098f..9827d26632 100644 --- a/Documentation/ja/notation/keyboards.itely +++ b/Documentation/ja/notation/keyboards.itely @@ -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 @@ -211,7 +211,7 @@ \new Staff = "up" { \voiceOne % 譜を跨ぐボイスの中にある運指記号のためのスペースを作ります - \once\override DynamicLineSpanner #'staff-padding = #3.4 + \once\override DynamicLineSpanner.staff-padding = #3.4 e''2\p\< d''\> c''1\! } @@ -437,6 +437,9 @@ @lilypondfile[verbatim,quote] {cross-staff-stems.ly} +このエングラーバは、名前をダブル クォートで囲っても指定することが@c +できませんが、名前の前にハッシュ記号 @code{#} を置くことで指定できます。 + @snippets @lilypondfile[verbatim,quote,texidoc,doctitle] {indicating-cross-staff-chords-with-arpeggio-bracket.ly} diff --git a/Documentation/ja/notation/notation.itely b/Documentation/ja/notation/notation.itely index 4cb341ef7a..f047a94ee5 100644 --- a/Documentation/ja/notation/notation.itely +++ b/Documentation/ja/notation/notation.itely @@ -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. diff --git a/Documentation/ja/notation/percussion.itely b/Documentation/ja/notation/percussion.itely index be23d8800a..9968a12829 100644 --- a/Documentation/ja/notation/percussion.itely +++ b/Documentation/ja/notation/percussion.itely @@ -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" } diff --git a/Documentation/ja/notation/pitches.itely b/Documentation/ja/notation/pitches.itely index bac47b7f68..eb6713859b 100644 --- a/Documentation/ja/notation/pitches.itely +++ b/Documentation/ja/notation/pitches.itely @@ -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 diff --git a/Documentation/ja/notation/repeats.itely b/Documentation/ja/notation/repeats.itely index 41a2c5e031..9df79cd8f1 100644 --- a/Documentation/ja/notation/repeats.itely +++ b/Documentation/ja/notation/repeats.itely @@ -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. 16 } -\repeat percent 2 { \times 2/3 { r8 c d } e4 } +\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 } @end lilypond @snippets diff --git a/Documentation/ja/notation/rhythms.itely b/Documentation/ja/notation/rhythms.itely index 38843909c2..fdffd7a251 100644 --- a/Documentation/ja/notation/rhythms.itely +++ b/Documentation/ja/notation/rhythms.itely @@ -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 | } diff --git a/Documentation/ja/notation/simultaneous.itely b/Documentation/ja/notation/simultaneous.itely index 1db44650f4..b88b36a319 100644 --- a/Documentation/ja/notation/simultaneous.itely +++ b/Documentation/ja/notation/simultaneous.itely @@ -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] -1\fermata 2-> 4\prall 8.^| 16-. +1\fermata 2-> 4\prall 8.^! 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] -1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +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} +ブロックの中に置くことはできません。 @code{printPartCombineTexts} がセットされていて、ある小節で 2 つのボイスの@c 音符が同じである場合、@c diff --git a/Documentation/ja/notation/spacing.itely b/Documentation/ja/notation/spacing.itely index c71eff7cda..9c16677ce7 100644 --- a/Documentation/ja/notation/spacing.itely +++ b/Documentation/ja/notation/spacing.itely @@ -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) } } } diff --git a/Documentation/ja/notation/specialist.itely b/Documentation/ja/notation/specialist.itely index e79dbb450f..e8beabaabb 100644 --- a/Documentation/ja/notation/specialist.itely +++ b/Documentation/ja/notation/specialist.itely @@ -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' diff --git a/Documentation/ja/notation/staff.itely b/Documentation/ja/notation/staff.itely index 223d64e5cb..7f048afa84 100644 --- a/Documentation/ja/notation/staff.itely +++ b/Documentation/ja/notation/staff.itely @@ -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} です: @@ -132,7 +132,7 @@ @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'' { diff --git a/Documentation/ja/notation/text.itely b/Documentation/ja/notation/text.itely index deea70d88c..dfcfd646c6 100644 --- a/Documentation/ja/notation/text.itely +++ b/Documentation/ja/notation/text.itely @@ -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'{ diff --git a/Documentation/ja/notation/unfretted-strings.itely b/Documentation/ja/notation/unfretted-strings.itely index dd010736c7..2525662768 100644 --- a/Documentation/ja/notation/unfretted-strings.itely +++ b/Documentation/ja/notation/unfretted-strings.itely @@ -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}, diff --git a/Documentation/ja/notation/vocal.itely b/Documentation/ja/notation/vocal.itely index 6926442e3c..0878902eb9 100644 --- a/Documentation/ja/notation/vocal.itely +++ b/Documentation/ja/notation/vocal.itely @@ -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 @@ -63,22 +63,22 @@ @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 @@ -133,8 +133,8 @@ -- 上記の例のように歌詞の各音節の演奏時間を指定するか、@c @code{\addlyrics} または @code{\lyricsto} を用いて@c 歌詞を自動的に旋律や他のボイスに揃えさせるかのどちらかです。@c -前者は @ref{歌詞音節の手動演奏時間} で説明します。@c -後者は @ref{歌詞音節の自動演奏時間} で説明します。 +前者は @ref{Manual syllable durations} で説明します。@c +後者は @ref{Automatic syllable durations} で説明します。 歌詞の単語または音節はアルファベット (さらに他のいくつかの文字 -- 以下を読んでください) で始まり、@c @@ -159,25 +159,6 @@ \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 @@ -214,7 +195,7 @@ 歌詞の中で @code{\markup} を用いることで、@c 歌詞の体裁を様々に制御することができます。@c -多くのオプションの説明は、@ref{テキストをフォーマットする} を参照してください。 +多くのオプションの説明は、@ref{Formatting text} を参照してください。 @snippets @@ -223,14 +204,14 @@ @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} 内部リファレンス: @@ -251,7 +232,7 @@ @funindex \lyricsto 歌詞はコンテキスト @code{Lyrics} の中で解釈されることで譜刻されます。@c -@ref{コンテキストの説明} を参照してください。 +@ref{Contexts explained} を参照してください。 @example \new Lyrics \lyricmode @{ @dots{} @} @@ -266,7 +247,7 @@ プロパティ @code{associatedVoice} を設定することにより、@c 他のボイスあるいは (特殊な状況ですが) 関連付けされた旋律から@c 歌詞の音節の演奏時間を取ることで、歌詞を自動的に揃えることができます。@c -詳細は @ref{歌詞音節の自動演奏時間} を参照してください。 +詳細は @ref{Automatic syllable durations} を参照してください。 @c KEEP LY @lilypond[quote,ragged-right,verbatim] @@ -302,7 +283,7 @@ 歌詞の 2 番は歌詞を揃えるボイスを切り替える方法を示しています。@c この方法は、歌詞の 1 番と 2 番で音符への単語の揃え方が異なり、@c 単語を揃えるべき音符がすべてボイス コンテキストの中にある場合に有用です。@c -詳細は @ref{歌詞の節} を参照してください。 +詳細は @ref{Stanzas} を参照してください。 @item 歌詞を @code{¥lyricmode} で入力し、音節の演奏時間を明示的に示すことで、@c @@ -334,13 +315,13 @@ 歌詞の 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 @@ -389,12 +370,12 @@ 3 つの方法のいずれでも、単語の音節の間にハイフンを描き、@c 単語の後ろに延長線を描くことができます。@c -詳細は @ref{延長線とハイフン} を参照してください。 +詳細は @ref{Extenders and hyphens} を参照してください。 歌詞を揃える @code{Voice} コンテキストが @qq{消滅} してはいけません。@c さもないと、その後の歌詞は失われてしまいます。@c ボイスは何もすることが無くなると消滅する可能性があります --- @ref{コンテキストを残しておく} を参照してください。 +-- @ref{Keeping contexts alive} を参照してください。 @subheading @code{\lyricsto} を用いる @@ -425,7 +406,7 @@ @code{¥lyricsto} コマンドは自動的に歌詞モードを呼び出すため、@c @code{¥lyricmode} の記述は省略できます。@c デフォルトでは、歌詞は音符の下に配置されます。@c -配置場所を変更する方法は @ref{歌詞の垂直方向の配置} を参照してください。 +配置場所を変更する方法は @ref{Placing lyrics vertically} を参照してください。 @subheading @code{\addlyrics} を用いる @@ -579,7 +560,7 @@ @end lilypond このテクニックは、譜の上に会話を書く場合に有用です --- @ref{音楽の中での会話} を参照してください。 +-- @ref{Dialogue over music} を参照してください。 歌詞を音符に中央揃えさせるには、@c @code{associatedVoice} に音符を保持しているボイス コンテキストをセットします。@c @@ -706,7 +687,7 @@ @item 自動連桁を off にして、手動で連桁を付けられた音符はメリスマと見なされます。@c -@ref{自動連桁の振る舞いを設定する} を参照してください。 +@ref{Setting automatic beam behavior} を参照してください。 @lilypond[quote,relative=2,verbatim] << @@ -790,7 +771,7 @@ 代替手段として、@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 e, } @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 e, } @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 賛美歌での部分小節 diff --git a/Documentation/ja/notation/wind.itely b/Documentation/ja/notation/wind.itely index cd9dea6eff..5b6c57ad56 100644 --- a/Documentation/ja/notation/wind.itely +++ b/Documentation/ja/notation/wind.itely @@ -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{グリッサンド} を参照してください。 diff --git a/Documentation/ja/notation/world.itely b/Documentation/ja/notation/world.itely index 3ec484492a..025f23c841 100644 --- a/Documentation/ja/notation/world.itely +++ b/Documentation/ja/notation/world.itely @@ -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 index 0ffa75869c..0000000000 --- a/Documentation/ja/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/ja/texidocs/piano-template-simple.texidoc b/Documentation/ja/texidocs/piano-template-simple.texidoc index 7d4bb7e65c..75f4028c84 100644 --- a/Documentation/ja/texidocs/piano-template-simple.texidoc +++ b/Documentation/ja/texidocs/piano-template-simple.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e texidocja = " いくつかの音符を持つシンプルなピアノ譜を示します。 diff --git a/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc b/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc index 7209924f8f..6003892532 100644 --- a/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc +++ b/Documentation/ja/texidocs/piano-template-with-centered-lyrics.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e texidocja = " 旋律と歌詞のための総譜ではなく、歌詞をピアノ譜の 2 つの譜の間に配置することができます。 " diff --git a/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc b/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc index 6870e5d940..f4d3a90aaa 100644 --- a/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc +++ b/Documentation/ja/texidocs/piano-template-with-melody-and-lyrics.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e texidocja = " これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜と、その下にピアノ伴奏譜があります。 " diff --git a/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc b/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc index 53e9065a95..3a15161e4a 100644 --- a/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc +++ b/Documentation/ja/texidocs/single-staff-template-with-notes,-lyrics,-and-chords.texidoc @@ -1,5 +1,5 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e texidocja = " これは旋律、歌詞、コードを持つ歌曲の楽譜のためのテンプレートです。 " - doctitleja = "音符、歌詞、コードを持つ単一譜のテンプレート" \ No newline at end of file + doctitleja = "音符、歌詞、コードを持つ単一譜のテンプレート" diff --git a/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc b/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc index 564494f2b1..12e62f5a47 100644 --- a/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc +++ b/Documentation/ja/texidocs/single-staff-template-with-notes-and-chords.texidoc @@ -1,5 +1,5 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e texidocja = " 旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません! " - doctitleja = "音符とコードを持つ単一譜のテンプレート" \ No newline at end of file + doctitleja = "音符とコードを持つ単一譜のテンプレート" diff --git a/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc b/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc index 13f10c2a67..1250c1efc1 100644 --- a/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc +++ b/Documentation/ja/texidocs/single-staff-template-with-notes-and-lyrics.texidoc @@ -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 = "音符と歌詞を持つ単一譜のテンプレート" diff --git a/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc b/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc index 6eab4488c2..53ad1f89dd 100644 --- a/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc +++ b/Documentation/ja/texidocs/single-staff-template-with-only-notes.texidoc @@ -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 = "音符だけを持つ単一譜のテンプレート" diff --git a/Documentation/ja/texidocs/string-quartet-template-simple.texidoc b/Documentation/ja/texidocs/string-quartet-template-simple.texidoc index c810c11522..b8a4787610 100644 --- a/Documentation/ja/texidocs/string-quartet-template-simple.texidoc +++ b/Documentation/ja/texidocs/string-quartet-template-simple.texidoc @@ -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 = "弦楽四重奏テンプレート (シンプル)" diff --git a/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc b/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc index 6ec49fbe17..b3c0f8660a 100644 --- a/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc +++ b/Documentation/ja/texidocs/string-quartet-template-with-separate-parts.texidoc @@ -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 = "パートを個々に持つ弦楽四重奏テンプレート" diff --git a/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc b/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc index 74905139a7..772c668ea1 100644 --- a/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc +++ b/Documentation/ja/texidocs/vocal-ensemble-template-with-automatic-piano-reduction.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a texidocja = " このテンプレートは、@qq{合唱テンプレート} で示した標準の SATB ボーカル譜に自動@c ピアノ譜を付け加えています。これは LilyPond の強みの 1 つを示しています - 音楽@c diff --git a/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc b/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc index def3a938ad..792b4bc0c9 100644 --- a/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc +++ b/Documentation/ja/texidocs/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: fabcd22c8f88ea9a87241597f1e48c0a9adbfc6e texidocja = " このテンプレートは基本的に単純な @qq{合唱} テンプレートと同じですが、歌詞が @code{alignAboveContext} と @code{alignBelowContext} を用いて配置@c diff --git a/Documentation/ja/texidocs/vocal-ensemble-template.texidoc b/Documentation/ja/texidocs/vocal-ensemble-template.texidoc index 107d59e239..0bf6267530 100644 --- a/Documentation/ja/texidocs/vocal-ensemble-template.texidoc +++ b/Documentation/ja/texidocs/vocal-ensemble-template.texidoc @@ -1,4 +1,4 @@ -%% Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 +%% Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a texidocja = " これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c diff --git a/Documentation/ja/translations.itexi b/Documentation/ja/translations.itexi index 4c70493c44..2bd1429e24 100644 --- a/Documentation/ja/translations.itexi +++ b/Documentation/ja/translations.itexi @@ -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 -はい +一部 (48 %) @end html @end ifhtml @ifnothtml -はい +一部 (48 %) @end ifnothtml @tab @ifhtml @html -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab post-GDP @item 2 一般的な記譜法 @* -4187 +4396 @tab Yoshiki Sawada @tab @tab @ifhtml @html -はい +一部 (35 %) @end html @end ifhtml @ifnothtml -はい +一部 (35 %) @end ifnothtml @tab @ifhtml @html -はい +partially @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 -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab post-GDP @item 4 出力を調整する @* -15468 +16191 @tab Yoshiki Sawada @tab @tab @ifhtml @html -はい +一部 (98 %) @end html @end ifhtml @ifnothtml -はい +一部 (98 %) @end ifnothtml @tab @ifhtml @html -partially +partially @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 -partially +partially @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 -partially +partially @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 -はい +partially @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 -はい +partially @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 -はい +partially @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 -はい +partially @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 -はい +partially @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 -はい +partially @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 -partially +partially @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 -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab post-GDP @item 5 デフォルトを変更する @* -12679 +15289 @tab Yoshiki Sawada @tab @tab @ifhtml @html -はい +一部 (97 %) @end html @end ifhtml @ifnothtml -はい +一部 (97 %) @end ifnothtml @tab @ifhtml @html -partially +partially @end html @end ifhtml @ifnothtml @@ -972,34 +972,34 @@ LilyPond --- \TITLE\ @item 1 @command{lilypond} を実行する @* -4615 +4537 @tab Yoshiki Sawada @tab @tab @ifhtml @html -はい +一部 (97 %) @end html @end ifhtml @ifnothtml -はい +一部 (97 %) @end ifnothtml @tab @ifhtml @html -はい +partially @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 -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab post-GDP @item @@ -1043,44 +1043,44 @@ LilyPond --- \TITLE\ @ifhtml @html -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab pre-GDP @item 4 外部プログラム @* -2390 +2817 @tab Yoshiki Sawada @tab @tab @ifhtml @html -はい +一部 (87 %) @end html @end ifhtml @ifnothtml -はい +一部 (87 %) @end ifnothtml @tab @ifhtml @html -はい +partially @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 -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab post-GDP @end multitable @@ -1138,11 +1138,11 @@ Yoshinobu Ishizaki @ifhtml @html -partially +はい @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 -partially +partially @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 -はい +partially @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 -はい +partially @end html @end ifhtml @ifnothtml -はい +partially @end ifnothtml @tab pre-GDP @item コミュニティ @* -3006 +3073 @tab Yoshiki Sawada @tab @tab @ifhtml @html -はい +一部 (97 %) @end html @end ifhtml @ifnothtml -はい +一部 (97 %) @end ifnothtml @tab @ifhtml @html -partially +partially @end html @end ifhtml @ifnothtml diff --git a/Documentation/ja/usage/GNUmakefile b/Documentation/ja/usage/GNUmakefile deleted file mode 100644 index 425cc1d8e2..0000000000 --- a/Documentation/ja/usage/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/ja/usage/external.itely b/Documentation/ja/usage/external.itely index 7afd9bb345..bb64233371 100644 --- a/Documentation/ja/usage/external.itely +++ b/Documentation/ja/usage/external.itely @@ -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 diff --git a/Documentation/ja/usage/lilypond-book.itely b/Documentation/ja/usage/lilypond-book.itely index a1f5106dc4..e0f3f4bf69 100644 --- a/Documentation/ja/usage/lilypond-book.itely +++ b/Documentation/ja/usage/lilypond-book.itely @@ -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} で説明しています。 diff --git a/Documentation/ja/usage/running.itely b/Documentation/ja/usage/running.itely index f65dfdc765..23cf063b6c 100644 --- a/Documentation/ja/usage/running.itely +++ b/Documentation/ja/usage/running.itely @@ -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 diff --git a/Documentation/ja/usage/suggestions.itely b/Documentation/ja/usage/suggestions.itely index c8d2ba0474..71b94dcadd 100644 --- a/Documentation/ja/usage/suggestions.itely +++ b/Documentation/ja/usage/suggestions.itely @@ -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 以下のようなディレクトリ構造を持ちます: diff --git a/Documentation/ja/usage/updating.itely b/Documentation/ja/usage/updating.itely index ac2aa3534b..6d9d3e3266 100644 --- a/Documentation/ja/usage/updating.itely +++ b/Documentation/ja/usage/updating.itely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/ja/web/GNUmakefile +++ /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 index c93c9e0624..0000000000 --- a/Documentation/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/learning/common-notation.itely b/Documentation/learning/common-notation.itely index 044cfcf6df..8c833c76f5 100644 --- a/Documentation/learning/common-notation.itely +++ b/Documentation/learning/common-notation.itely @@ -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 diff --git a/Documentation/learning/fundamental.itely b/Documentation/learning/fundamental.itely index 732874c1bb..b8f001b3a2 100644 --- a/Documentation/learning/fundamental.itely +++ b/Documentation/learning/fundamental.itely @@ -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 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 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''' { diff --git a/Documentation/learning/templates.itely b/Documentation/learning/templates.itely index 0b6bc00fa4..2370ff1f3b 100644 --- a/Documentation/learning/templates.itely +++ b/Documentation/learning/templates.itely @@ -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. diff --git a/Documentation/learning/tutorial.itely b/Documentation/learning/tutorial.itely index ea6c4e08e6..dfb60fab0b 100644 --- a/Documentation/learning/tutorial.itely +++ b/Documentation/learning/tutorial.itely @@ -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: diff --git a/Documentation/learning/tweaks.itely b/Documentation/learning/tweaks.itely index f4210b2e0d..5ee640a9b9 100644 --- a/Documentation/learning/tweaks.itely +++ b/Documentation/learning/tweaks.itely @@ -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] 4 -\once \override NoteHead #'font-size = #-3 +\once \override NoteHead.font-size = #-3 4 4 @end lilypond @@ -360,7 +400,7 @@ a chord would be changed in this way: @lilypond[quote,fragment,ragged-right,verbatim,relative=1] 4 -4 +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) 4 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 -\once \override StringNumber #'self-alignment-X = #RIGHT +\once \override StringNumber.self-alignment-X = #RIGHT @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: \\ { 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 diff --git a/Documentation/lilypond-texi2html.init b/Documentation/lilypond-texi2html.init index 928366317d..cd370bb87d 100644 --- a/Documentation/lilypond-texi2html.init +++ b/Documentation/lilypond-texi2html.init @@ -121,7 +121,7 @@ $LY_LANGUAGES->{'hu'} = { $LY_LANGUAGES->{'it'} = { 'Back to Documentation Index' => 'Torna all\'indice della documentazione', - '

Thanks to ${webdev_link} for hosting ${lily_site}.' => '', + '

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 '

' . &$anchor('', $Texi2HTML::HREF{'Top'}, - $topname, + $topname . " ", 'title="Start of the manual"' ) . "

\n"; } diff --git a/Documentation/logo/GNUmakefile b/Documentation/logo/GNUmakefile index 4a8f2eb72f..bf09cbff12 100644 --- a/Documentation/logo/GNUmakefile +++ b/Documentation/logo/GNUmakefile @@ -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 diff --git a/Documentation/ly-examples/GNUmakefile b/Documentation/ly-examples/GNUmakefile index ad1c84ae49..c5c800b6e4 100644 --- a/Documentation/ly-examples/GNUmakefile +++ b/Documentation/ly-examples/GNUmakefile @@ -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 diff --git a/Documentation/ly-examples/aucun-snippet.ly b/Documentation/ly-examples/aucun-snippet.ly index fa5bda5620..4ee9f6fd21 100644 --- a/Documentation/ly-examples/aucun-snippet.ly +++ b/Documentation/ly-examples/aucun-snippet.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.30" \include "example-header.ily" \paper { @@ -17,14 +17,14 @@ %%%%%%%%%%% 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 diff --git a/Documentation/ly-examples/bach-bwv610.ly b/Documentation/ly-examples/bach-bwv610.ly index 951e99ff73..863c8594e6 100644 --- a/Documentation/ly-examples/bach-bwv610.ly +++ b/Documentation/ly-examples/bach-bwv610.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.6" %\include "example-header.ily" @@ -21,8 +21,28 @@ %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" @@ -30,17 +50,16 @@ 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 diff --git a/Documentation/ly-examples/bach-schenker.ly b/Documentation/ly-examples/bach-schenker.ly index 721427eacb..82d2f6d858 100644 --- a/Documentation/ly-examples/bach-schenker.ly +++ b/Documentation/ly-examples/bach-schenker.ly @@ -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 "|." diff --git a/Documentation/ly-examples/cary-layout.ily b/Documentation/ly-examples/cary-layout.ily index 4d2faf4c1e..c002e111d0 100644 --- a/Documentation/ly-examples/cary-layout.ily +++ b/Documentation/ly-examples/cary-layout.ily @@ -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 #}) diff --git a/Documentation/ly-examples/cary.ly b/Documentation/ly-examples/cary.ly index 37f4dfd0d4..1e1d98d461 100644 --- a/Documentation/ly-examples/cary.ly +++ b/Documentation/ly-examples/cary.ly @@ -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" @@ -34,17 +34,17 @@ \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 @@ -57,15 +57,15 @@ } { % 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 @@ -95,27 +95,27 @@ >> \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 @@ -124,11 +124,11 @@ \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 @@ -143,7 +143,7 @@ \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 @@ -153,8 +153,8 @@ } % measure 8 - \times 4/5 { - \times 4/7 { + \tuplet 5/4 { + \tuplet 7/4 { s4 % 66 \triangle a''16 % 67 \triangle a''16 % 68 @@ -175,18 +175,17 @@ \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 @@ -195,11 +194,11 @@ \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 @@ -214,7 +213,7 @@ \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 @@ -224,8 +223,8 @@ } % measure 8 - \times 4/5 { - \times 4/7 { + \tuplet 5/4 { + \tuplet 7/4 { s4 % 66 \blackdiamond f'16 % 67 \blackdiamond f'16 % 68 @@ -246,18 +245,18 @@ \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 @@ -266,11 +265,11 @@ 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 @@ -285,7 +284,7 @@ s8 % 57 s16 % 58 \triangle a16 % 59 - \times 8/9 { + \tuplet 9/8 { s16 % 60 s64 % 61 s64 % 62 @@ -295,8 +294,8 @@ } % measure 8 - \times 4/5 { - \times 4/7 { + \tuplet 5/4 { + \tuplet 7/4 { s4 % 66 \semicircle a16 % 67 \semicircle a16 % 68 @@ -317,23 +316,23 @@ \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 @@ -342,11 +341,11 @@ \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 @@ -361,7 +360,7 @@ 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 @@ -371,8 +370,8 @@ } % 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 diff --git a/Documentation/ly-examples/chart.ly b/Documentation/ly-examples/chart.ly index 685d811ed3..bcf8fd7d2d 100644 --- a/Documentation/ly-examples/chart.ly +++ b/Documentation/ly-examples/chart.ly @@ -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 { diff --git a/Documentation/ly-examples/granados.ly b/Documentation/ly-examples/granados.ly index 31834c1b01..1579ac27bf 100644 --- a/Documentation/ly-examples/granados.ly +++ b/Documentation/ly-examples/granados.ly @@ -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 - 8\([ \times 4/5{g'32( aes g f g]) } - 8[ \times 4/5{32( c' bes aes bes]) } + \hide TupletBracket + 8\([ \tuplet 5/4{g'32( aes g f g]) } + 8[ \tuplet 5/4{32( c' bes aes bes]) } 8 \) | % end m. 1 %--------------------------------------------------% 4\( \voiceTwo \) @@ -42,11 +42,11 @@ upperVoiceOne = \relative c'' { %--------------------------------------------------% \noBreak \voiceOne - 8\([ \times 4/5{32( aes' g f g]) } + 8\([ \tuplet 5/4{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) - 16 \times 4/5{ bes'32( c bes aes bes]) } + 16 \tuplet 5/4{ bes'32( c bes aes bes]) } \set subdivideBeams = ##f \ottava #1 16 \appoggiatura f8 16\) } @@ -55,20 +55,20 @@ upperVoiceTwo = \relative c'' { \voiceTwo s8 c8\< [ c' \!] s32 s32_\appassmolto s8. \voiceOne r8 -> 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 8[ ] \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 8 16 d' 8 | % 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 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 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 @@ -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" } } diff --git a/Documentation/ly-examples/orchestra.ly b/Documentation/ly-examples/orchestra.ly index 219acafdc9..6b205af903 100644 --- a/Documentation/ly-examples/orchestra.ly +++ b/Documentation/ly-examples/orchestra.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.6" \header { tagline = ##f @@ -13,20 +13,6 @@ 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 diff --git a/Documentation/ly-examples/tab-example.ly b/Documentation/ly-examples/tab-example.ly index 60fcf20881..fbccc1f558 100644 --- a/Documentation/ly-examples/tab-example.ly +++ b/Documentation/ly-examples/tab-example.ly @@ -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)) @@ -14,11 +12,6 @@ (- (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 } } } diff --git a/Documentation/ly-examples/theory.ly b/Documentation/ly-examples/theory.ly index 082317705a..5dbe0da654 100644 --- a/Documentation/ly-examples/theory.ly +++ b/Documentation/ly-examples/theory.ly @@ -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 { diff --git a/Documentation/misc/CHANGES-1.3 b/Documentation/misc/CHANGES-1.3 index d6ba0bfc9f..d8597a9238 100644 --- a/Documentation/misc/CHANGES-1.3 +++ b/Documentation/misc/CHANGES-1.3 @@ -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. diff --git a/Documentation/misc/ChangeLog-2.1 b/Documentation/misc/ChangeLog-2.1 index 362c00a21a..c890b90f3c 100644 --- a/Documentation/misc/ChangeLog-2.1 +++ b/Documentation/misc/ChangeLog-2.1 @@ -2697,7 +2697,7 @@ * 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]. diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile index b617fc99cd..a1db6cd710 100644 --- a/Documentation/misc/GNUmakefile +++ b/Documentation/misc/GNUmakefile @@ -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 index 0000000000..dcd31635c5 --- /dev/null +++ b/Documentation/misc/THANKS-1.8 @@ -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 index 0000000000..8ef6b0cfd9 --- /dev/null +++ b/Documentation/misc/THANKS-2.0 @@ -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 index 0000000000..be908e916a --- /dev/null +++ b/Documentation/misc/THANKS-2.10 @@ -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 index 0000000000..1928e06ee9 --- /dev/null +++ b/Documentation/misc/THANKS-2.12 @@ -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 index 0000000000..c0cd0b0b58 --- /dev/null +++ b/Documentation/misc/THANKS-2.14 @@ -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 index 0000000000..cd561ee36f --- /dev/null +++ b/Documentation/misc/THANKS-2.16 @@ -0,0 +1,73 @@ +Release 2.16 +************ + +For information about the various official or semi-official positions, +check out + +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 index 0000000000..afdbf7e3b1 --- /dev/null +++ b/Documentation/misc/THANKS-2.2 @@ -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 index 0000000000..9d89dd26d1 --- /dev/null +++ b/Documentation/misc/THANKS-2.4 @@ -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 index 0000000000..0c586579bb --- /dev/null +++ b/Documentation/misc/THANKS-2.6 @@ -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 index 0000000000..f75d0e0ee3 --- /dev/null +++ b/Documentation/misc/THANKS-2.8 @@ -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: diff --git a/Documentation/misc/browser-language.fr.html b/Documentation/misc/browser-language.fr.html index 04c654ef23..0e176007f0 100644 --- a/Documentation/misc/browser-language.fr.html +++ b/Documentation/misc/browser-language.fr.html @@ -1,5 +1,5 @@ + +

Selezione automatica della lingua

+ +

+ 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. +

+ + + +
+ +
Mozilla Firefox versione 0.9 e successive
+
+ GNU/Linux +
+      Modifica -> Preferenze -> Contenuti -> Lingue
+    
+
+
+ Microsoft Windows +
+      Strumenti -> Opzioni -> Contenuti -> Lingue
+    
+ In versioni precedenti bisogna andare in about:config e cambiare + il valore di intl.accept_languages. +
+ +
Mozilla / Netscape 4.x e versioni successive
+
+
+      Modifica -> Preferenze -> Navigator -> Lingue
+    
+ 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. +
+ +
Microsoft Internet Explorer
+
+ Microsoft Windows +
+      Strumenti (o Visualizza o Extra) -> Opzioni Internet -> Lingue
+    
+
+
+ MacOS +
+      Modifica -> Preferenze -> Browser Web -> Lingua/Font
+    
+
+
+ +
+Questa pagina, è ripresa da +
Debian, quindi è soggetta a + +Copyright © 1997-2005 +SPI; vedi i termini della licenza. +
+Debian è un marchio registrato di Software in the Public Interest, Inc. diff --git a/Documentation/music-glossary.tely b/Documentation/music-glossary.tely index 115e75784a..7d198504b7 100644 --- a/Documentation/music-glossary.tely +++ b/Documentation/music-glossary.tely @@ -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: ?, diff --git a/Documentation/nl/GNUmakefile b/Documentation/nl/GNUmakefile index f4072b845c..d4f25727e6 100644 --- a/Documentation/nl/GNUmakefile +++ b/Documentation/nl/GNUmakefile @@ -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 index afe7a4d738..0000000000 --- a/Documentation/nl/included/GNUmakefile +++ /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/nl/included/generating-output.itexi b/Documentation/nl/included/generating-output.itexi index f2f5c13aac..06b5fd1d83 100644 --- a/Documentation/nl/included/generating-output.itexi +++ b/Documentation/nl/included/generating-output.itexi @@ -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 diff --git a/Documentation/nl/learning.tely b/Documentation/nl/learning.tely index d2ce06ad95..25f36cfcba 100644 --- a/Documentation/nl/learning.tely +++ b/Documentation/nl/learning.tely @@ -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 index 425cc1d8e2..0000000000 --- a/Documentation/nl/learning/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/nl/learning/common-notation.itely b/Documentation/nl/learning/common-notation.itely index b5de751e9b..ae89bdba9c 100644 --- a/Documentation/nl/learning/common-notation.itely +++ b/Documentation/nl/learning/common-notation.itely @@ -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 ~ 2 | -8[ ] \>[ ]\! | +8[ ] + \>[ ]\! | r4 8.\p 16( 4-. ) | @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 diff --git a/Documentation/nl/learning/fundamental.itely b/Documentation/nl/learning/fundamental.itely index 0311790c85..c68c506cf2 100644 --- a/Documentation/nl/learning/fundamental.itely +++ b/Documentation/nl/learning/fundamental.itely @@ -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 - 2 - \once \override NoteColumn #'force-hshift = #0.5 + \once \override NoteColumn.ignore-collision = ##t + 2 + \once \override NoteColumn.force-hshift = #0.5 des2 } + \\ % No voice three + \\ % Voice four + { + \override NoteColumn.force-hshift = #0 + aes'2 f4 fes + } >> | 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 + 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 - 2 - \once \override NoteColumn #'force-hshift = #0.5 - des2 + \override NoteColumn.force-hshift = #0 + aes'2 f4 fes } >> | 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 } \\ { 2 des } + { c2 aes4. bes8 } \\ { 2 des } \\ { aes'2 f4 fes } >> | 1 | } @@ -921,30 +928,30 @@ adding another pair of @code{\\}. << % Voice one { c2 aes4. bes8 } \\ % Voice two - { aes2 f4 fes } + { 2 des } \\ % Omit Voice three \\ % Voice four - { 2 des } + { aes'2 f4 fes } >> | 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 index 0000000000..74631e1c03 --- /dev/null +++ b/Documentation/nl/learning/preface.itely @@ -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 index 0000000000..7f7d1c93fa --- /dev/null +++ b/Documentation/nl/learning/templates.itely @@ -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 + + + diff --git a/Documentation/nl/learning/tutorial.itely b/Documentation/nl/learning/tutorial.itely index ad9191151c..d428ec33fb 100644 --- a/Documentation/nl/learning/tutorial.itely +++ b/Documentation/nl/learning/tutorial.itely @@ -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 index 0000000000..80881daf55 --- /dev/null +++ b/Documentation/nl/learning/tweaks.itely @@ -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] +4 +\once \override NoteHead.font-size = #-3 +4 +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] +4 +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] +4 +4 +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] +4 +4 +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) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +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) +4 +4 +\set fingeringOrientations = #'(left) +4 +4 | +\set fingeringOrientations = #'(up left down) +4 +4 +\set fingeringOrientations = #'(up left) +4 +4 | +\set fingeringOrientations = #'(right) +4 +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 + +\once \override StringNumber.self-alignment-X = #RIGHT + +@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 } + \\ + { 2 des } + \\ + \\ + { aes'2 f4 fes } + >> | + 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 } + \\ + { + 2 + \once \override NoteColumn.force-hshift = #0.5 + des2 + } + \\ + \\ + { + \override NoteColumn.force-hshift = #0 + aes'2 f4 fes + } + >> | + 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 2( | + 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 2 | + 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 2( | + 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 2( | + 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 2( | + 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 2( | + 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 2( | + 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}. + + + diff --git a/Documentation/nl/macros.itexi b/Documentation/nl/macros.itexi index da7ef9c801..2f82070f2c 100644 --- a/Documentation/nl/macros.itexi +++ b/Documentation/nl/macros.itexi @@ -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' diff --git a/Documentation/nl/search-box.ihtml b/Documentation/nl/search-box.ihtml index 03652bbc88..33e6c1062a 100644 --- a/Documentation/nl/search-box.ihtml +++ b/Documentation/nl/search-box.ihtml @@ -1,18 +1,26 @@ + + diff --git a/Documentation/nl/texidocs/GNUmakefile b/Documentation/nl/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/nl/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/nl/translations.itexi b/Documentation/nl/translations.itexi index b8de237f63..6e28d6897d 100644 --- a/Documentation/nl/translations.itexi +++ b/Documentation/nl/translations.itexi @@ -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 -gedeeltelijk +ja @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 -ja +gedeeltelijk (48 %) @end html @end ifhtml @ifnothtml -ja +gedeeltelijk (48 %) @end ifnothtml @tab @ifhtml @html -ja +gedeeltelijk @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 -ja +gedeeltelijk (35 %) @end html @end ifhtml @ifnothtml -ja +gedeeltelijk (35 %) @end ifnothtml @tab @ifhtml @html -ja +gedeeltelijk @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 -gedeeltelijk +gedeeltelijk +@end html +@end ifhtml +@ifnothtml +gedeeltelijk +@end ifnothtml +@tab voor-GDP +@item +4 Tweaking output +@* +16191 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +gedeeltelijk (98 %) +@end html +@end ifhtml +@ifnothtml +gedeeltelijk (98 %) +@end ifnothtml +@tab +@ifhtml + +@html +gedeeltelijk @end html @end ifhtml @ifnothtml gedeeltelijk @end ifnothtml @tab voor-GDP +@item +A Templates +@* +372 +@tab Jan Nieuwenhuizen +@tab +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab +@ifhtml + +@html +ja +@end html +@end ifhtml +@ifnothtml +ja +@end ifnothtml +@tab voor-GDP @end multitable @@ -194,11 +248,11 @@ ja @ifhtml @html -gedeeltelijk +ja @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 -gedeeltelijk +gedeeltelijk @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 -ja +gedeeltelijk @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 -ja +gedeeltelijk @end html @end ifhtml @ifnothtml -ja +gedeeltelijk @end ifnothtml @tab voor-GDP @end multitable diff --git a/Documentation/nl/web.texi b/Documentation/nl/web.texi index b6f2537a0a..b682396f9f 100644 --- a/Documentation/nl/web.texi +++ b/Documentation/nl/web.texi @@ -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 + + + +@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 index 425cc1d8e2..0000000000 --- a/Documentation/nl/web/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/nl/web/download.itexi b/Documentation/nl/web/download.itexi index a92aa33279..6306c5d531 100644 --- a/Documentation/nl/web/download.itexi +++ b/Documentation/nl/web/download.itexi @@ -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 diff --git a/Documentation/nl/web/introduction.itexi b/Documentation/nl/web/introduction.itexi index 88294d1f20..6d0ecef888 100644 --- a/Documentation/nl/web/introduction.itexi +++ b/Documentation/nl/web/introduction.itexi @@ -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 diff --git a/Documentation/nl/web/manuals.itexi b/Documentation/nl/web/manuals.itexi index ed484064e7..61db2db59e 100644 --- a/Documentation/nl/web/manuals.itexi +++ b/Documentation/nl/web/manuals.itexi @@ -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 diff --git a/Documentation/notation.tely b/Documentation/notation.tely index 098d4f3593..517c4dc046 100644 --- a/Documentation/notation.tely +++ b/Documentation/notation.tely @@ -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 index c93c9e0624..0000000000 --- a/Documentation/notation/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/notation/ancient.itely b/Documentation/notation/ancient.itely index 7ef446ee62..67aefbd86d 100644 --- a/Documentation/notation/ancient.itely +++ b/Documentation/notation/ancient.itely @@ -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: diff --git a/Documentation/notation/changing-defaults.itely b/Documentation/notation/changing-defaults.itely index f4f2ad0928..3dc39edd9b 100644 --- a/Documentation/notation/changing-defaults.itely +++ b/Documentation/notation/changing-defaults.itely @@ -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}) - ) +\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 4 -<\tweak #'color #red c e>4 +\tweak color #red c4 +\tweak color #red 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 -4 +\tweak Stem.color #red +\tweak Beam.color #green c8 e +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 } +>> +@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 } >> @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 } #}) diff --git a/Documentation/notation/cheatsheet.itely b/Documentation/notation/cheatsheet.itely index 57cf68c4d1..711be9782a 100644 --- a/Documentation/notation/cheatsheet.itely +++ b/Documentation/notation/cheatsheet.itely @@ -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 diff --git a/Documentation/notation/chords.itely b/Documentation/notation/chords.itely index 753d82bb3d..88c08e1961 100644 --- a/Documentation/notation/chords.itely +++ b/Documentation/notation/chords.itely @@ -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' { + 2 + 1 + \chordmode { + c2 f:sus4 c1:/f + } +} << \new ChordNames { - 2 - 1 - \chordmode { - c2 f:sus4 c1:/f - } + \chordmusic } { - 2 - 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 diff --git a/Documentation/notation/editorial.itely b/Documentation/notation/editorial.itely index d81c9160fa..630aa6690f 100644 --- a/Documentation/notation/editorial.itely +++ b/Documentation/notation/editorial.itely @@ -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 diff --git a/Documentation/notation/expressive.itely b/Documentation/notation/expressive.itely index 6d88b53264..96c1449e91 100644 --- a/Documentation/notation/expressive.itely +++ b/Documentation/notation/expressive.itely @@ -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' { + 16 + 2..\moltoF 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 diff --git a/Documentation/notation/fretted-strings.itely b/Documentation/notation/fretted-strings.itely index e183f1ccd6..412295985b 100644 --- a/Documentation/notation/fretted-strings.itely +++ b/Documentation/notation/fretted-strings.itely @@ -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 @{ @} + stringTunings = \stringTuning @} @} @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" 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" 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" 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" 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" 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" 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" 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" 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" 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 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) ) } - 1^\markup { + 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 } 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 { 1 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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 { 1 \predefinedFretboardsOff 1 \predefinedFretboardsOn 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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 { 1 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 1 @@ -1533,17 +1533,17 @@ property. @lilypond[quote, verbatim] << - \context ChordNames { + \new ChordNames { \chordmode { d1:m d:m } } - \context FretBoards { + \new FretBoards { 1 \set FretBoards.minimumFret = #5 1 } - \context Staff { + \new Staff { \clef "treble_8" 1 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" }}} 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 diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely index a8f12215ef..1617a39395 100644 --- a/Documentation/notation/input.itely +++ b/Documentation/notation/input.itely @@ -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" 2 + <\footnote #'(-2 . -3) "Does work" a-3>4 + 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 + 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 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 diff --git a/Documentation/notation/keyboards.itely b/Documentation/notation/keyboards.itely index 6bf1c0be8f..a8405b5274 100644 --- a/Documentation/notation/keyboards.itely +++ b/Documentation/notation/keyboards.itely @@ -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: diff --git a/Documentation/notation/notation-appendices.itely b/Documentation/notation/notation-appendices.itely index 2eb3182e46..75c12d4e4d 100644 --- a/Documentation/notation/notation-appendices.itely +++ b/Documentation/notation/notation-appendices.itely @@ -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 diff --git a/Documentation/notation/percussion.itely b/Documentation/notation/percussion.itely index f864e1e625..27127dee69 100644 --- a/Documentation/notation/percussion.itely +++ b/Documentation/notation/percussion.itely @@ -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" } diff --git a/Documentation/notation/pitches.itely b/Documentation/notation/pitches.itely index c9e99f5eb7..4c41302c4f 100644 --- a/Documentation/notation/pitches.itely +++ b/Documentation/notation/pitches.itely @@ -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] -2 4 +2 4 f\harmonic @end lilypond @predefined diff --git a/Documentation/notation/repeats.itely b/Documentation/notation/repeats.itely index fb7cdf663b..ad555652fb 100644 --- a/Documentation/notation/repeats.itely +++ b/Documentation/notation/repeats.itely @@ -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. 16 } -\repeat percent 2 { \times 2/3 { r8 c d } e4 } +\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 } @end lilypond @snippets diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely index c2a06b4202..f6842824a8 100644 --- a/Documentation/notation/rhythms.itely +++ b/Documentation/notation/rhythms.itely @@ -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 c8 ~ 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] - ~ +~ @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 2 ~ } +\repeat volta 2 { c g 2~ } \alternative { % First alternative: following note is tied normally { 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 | } diff --git a/Documentation/notation/simultaneous.itely b/Documentation/notation/simultaneous.itely index 30e682b74a..4725ecf0de 100644 --- a/Documentation/notation/simultaneous.itely +++ b/Documentation/notation/simultaneous.itely @@ -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] -1\fermata 2-> 4\prall 8.^| 16-. +1\fermata 2-> 4\prall 8.^! 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] -1\p^"text" q2\<( q8)[-| q8.]\! q16-1-2-3 q8\prall +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 diff --git a/Documentation/notation/spacing.itely b/Documentation/notation/spacing.itely index 070ba07bd0..73b431dd79 100644 --- a/Documentation/notation/spacing.itely +++ b/Documentation/notation/spacing.itely @@ -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) } } } diff --git a/Documentation/notation/staff.itely b/Documentation/notation/staff.itely index c7d799e47a..278ffc97c0 100644 --- a/Documentation/notation/staff.itely +++ b/Documentation/notation/staff.itely @@ -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: diff --git a/Documentation/notation/text.itely b/Documentation/notation/text.itely index 7b056dbdbd..62aac77931 100644 --- a/Documentation/notation/text.itely +++ b/Documentation/notation/text.itely @@ -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'{ diff --git a/Documentation/notation/unfretted-strings.itely b/Documentation/notation/unfretted-strings.itely index a112331f14..fcaff9d4dc 100644 --- a/Documentation/notation/unfretted-strings.itely +++ b/Documentation/notation/unfretted-strings.itely @@ -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}, diff --git a/Documentation/notation/vocal.itely b/Documentation/notation/vocal.itely index 0dc82ee2f5..06aa65d46d 100644 --- a/Documentation/notation/vocal.itely +++ b/Documentation/notation/vocal.itely @@ -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}, diff --git a/Documentation/notation/wind.itely b/Documentation/notation/wind.itely index dfb0d585ff..64fee0f3ca 100644 --- a/Documentation/notation/wind.itely +++ b/Documentation/notation/wind.itely @@ -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 index 0000000000..ce95e98ffc 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 index 0000000000..2be3b29c22 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 index 0000000000..e67b9473bc 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 index 0000000000..747ecad68d 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 index 0000000000..8d91121f33 Binary files /dev/null and b/Documentation/pictures/FileSave.png differ diff --git a/Documentation/pictures/GNUmakefile b/Documentation/pictures/GNUmakefile index 0254c26d0b..131de3e323 100644 --- a/Documentation/pictures/GNUmakefile +++ b/Documentation/pictures/GNUmakefile @@ -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 index 0000000000..8030910965 Binary files /dev/null and b/Documentation/pictures/GenPDF.png differ diff --git a/Documentation/pictures/Gonville_after.png b/Documentation/pictures/Gonville_after.png index 6bafc25a9d..070ff0c641 100644 Binary files a/Documentation/pictures/Gonville_after.png and b/Documentation/pictures/Gonville_after.png differ diff --git a/Documentation/pictures/Gonville_before.png b/Documentation/pictures/Gonville_before.png index ef810fdda9..9f0b3947dd 100644 Binary files a/Documentation/pictures/Gonville_before.png and b/Documentation/pictures/Gonville_before.png differ diff --git a/Documentation/pictures/Learning_Macos_Compiling_log.png b/Documentation/pictures/Learning_Macos_Compiling_log.png index 3ad433f35f..2d21a2140c 100644 Binary files a/Documentation/pictures/Learning_Macos_Compiling_log.png and b/Documentation/pictures/Learning_Macos_Compiling_log.png differ diff --git a/Documentation/pictures/Learning_Macos_New_menu.png b/Documentation/pictures/Learning_Macos_New_menu.png index 4bfcbcb331..e0c464fb22 100644 Binary files a/Documentation/pictures/Learning_Macos_New_menu.png and b/Documentation/pictures/Learning_Macos_New_menu.png differ diff --git a/Documentation/pictures/Learning_Macos_Open_Dialog_box.png b/Documentation/pictures/Learning_Macos_Open_Dialog_box.png index 3aefbc94c5..6c67f7d75f 100644 Binary files a/Documentation/pictures/Learning_Macos_Open_Dialog_box.png and b/Documentation/pictures/Learning_Macos_Open_Dialog_box.png differ diff --git a/Documentation/pictures/Learning_Macos_Open_menu.png b/Documentation/pictures/Learning_Macos_Open_menu.png index 7da0f54ce2..e369df360a 100644 Binary files a/Documentation/pictures/Learning_Macos_Open_menu.png and b/Documentation/pictures/Learning_Macos_Open_menu.png differ diff --git a/Documentation/pictures/Learning_Macos_Save_file_with_name.png b/Documentation/pictures/Learning_Macos_Save_file_with_name.png index 7a11e856f8..e594ea2bd1 100644 Binary files a/Documentation/pictures/Learning_Macos_Save_file_with_name.png and b/Documentation/pictures/Learning_Macos_Save_file_with_name.png differ diff --git a/Documentation/pictures/Learning_Macos_Save_menu.png b/Documentation/pictures/Learning_Macos_Save_menu.png index 7fd0509448..6f51c4e503 100644 Binary files a/Documentation/pictures/Learning_Macos_Save_menu.png and b/Documentation/pictures/Learning_Macos_Save_menu.png differ diff --git a/Documentation/pictures/Learning_Macos_Typeset_menu.png b/Documentation/pictures/Learning_Macos_Typeset_menu.png index ed89244505..2fbc94b91a 100644 Binary files a/Documentation/pictures/Learning_Macos_Typeset_menu.png and b/Documentation/pictures/Learning_Macos_Typeset_menu.png differ diff --git a/Documentation/pictures/Learning_Macos_pdf_output.png b/Documentation/pictures/Learning_Macos_pdf_output.png index cba71447f4..560d7b0365 100644 Binary files a/Documentation/pictures/Learning_Macos_pdf_output.png and b/Documentation/pictures/Learning_Macos_pdf_output.png differ diff --git a/Documentation/pictures/Learning_Macos_welcome.png b/Documentation/pictures/Learning_Macos_welcome.png index f37ea9a95b..e99a1de43c 100644 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 index f33cd814fb..0000000000 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 index 642ac78a98..0000000000 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 index 8946ec10fe..0000000000 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 index 19c5db32d4..0000000000 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 index 1e7fc8e04a..0000000000 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 index c81dee5c7e..0000000000 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 index c007685b2f..0000000000 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 index 2ecf46cac8..0000000000 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 index e261abfcdd..0000000000 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 index 3dd588d637..0000000000 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 index 0000000000..5a9e976dad Binary files /dev/null and b/Documentation/pictures/LilyPad.png differ diff --git a/Documentation/pictures/OpusAndFeta.png b/Documentation/pictures/OpusAndFeta.png index f766063fa5..03b740694d 100644 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 index 0000000000..aaa1175b52 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 index 0000000000..ead5d0d17c Binary files /dev/null and b/Documentation/pictures/SaveAs.png differ diff --git a/Documentation/pictures/background-image.png b/Documentation/pictures/background-image.png index dac7f63eb7..202cf8bd31 100644 Binary files a/Documentation/pictures/background-image.png and b/Documentation/pictures/background-image.png differ diff --git a/Documentation/pictures/baer-sarabande-hires.png b/Documentation/pictures/baer-sarabande-hires.png index 06be5138ad..dbc399efe3 100644 Binary files a/Documentation/pictures/baer-sarabande-hires.png and b/Documentation/pictures/baer-sarabande-hires.png differ diff --git a/Documentation/pictures/baer-sarabande.png b/Documentation/pictures/baer-sarabande.png index fa14958da3..2db728c410 100644 Binary files a/Documentation/pictures/baer-sarabande.png and b/Documentation/pictures/baer-sarabande.png differ diff --git a/Documentation/pictures/baer-suite1-fullpage-hires.png b/Documentation/pictures/baer-suite1-fullpage-hires.png index e2ccd60b48..bff34bb793 100644 Binary files a/Documentation/pictures/baer-suite1-fullpage-hires.png and b/Documentation/pictures/baer-suite1-fullpage-hires.png differ diff --git a/Documentation/pictures/baer-suite1-fullpage.png b/Documentation/pictures/baer-suite1-fullpage.png index 494f6e0294..537ab64cbe 100644 Binary files a/Documentation/pictures/baer-suite1-fullpage.png and b/Documentation/pictures/baer-suite1-fullpage.png differ diff --git a/Documentation/pictures/baer-suite1-line.png b/Documentation/pictures/baer-suite1-line.png index d94ac32de6..ee43975040 100644 Binary files a/Documentation/pictures/baer-suite1-line.png and b/Documentation/pictures/baer-suite1-line.png differ diff --git a/Documentation/pictures/bench-morgenlied.png b/Documentation/pictures/bench-morgenlied.png index cfe0bcfaf2..420f14bc27 100644 Binary files a/Documentation/pictures/bench-morgenlied.png and b/Documentation/pictures/bench-morgenlied.png differ diff --git a/Documentation/pictures/bwv861-baer-alt-small.png b/Documentation/pictures/bwv861-baer-alt-small.png index c4506abac8..044a494ce8 100644 Binary files a/Documentation/pictures/bwv861-baer-alt-small.png and b/Documentation/pictures/bwv861-baer-alt-small.png differ diff --git a/Documentation/pictures/bwv861-baer-alt.png b/Documentation/pictures/bwv861-baer-alt.png index b13577a72d..bc02b64e05 100644 Binary files a/Documentation/pictures/bwv861-baer-alt.png and b/Documentation/pictures/bwv861-baer-alt.png differ diff --git a/Documentation/pictures/bwv861-baer-small.png b/Documentation/pictures/bwv861-baer-small.png index 1ceea36286..ee828f9f06 100644 Binary files a/Documentation/pictures/bwv861-baer-small.png and b/Documentation/pictures/bwv861-baer-small.png differ diff --git a/Documentation/pictures/bwv861-baer.png b/Documentation/pictures/bwv861-baer.png index 229155c84c..b592213a91 100644 Binary files a/Documentation/pictures/bwv861-baer.png and b/Documentation/pictures/bwv861-baer.png differ diff --git a/Documentation/pictures/bwv861-breitkopf-small.png b/Documentation/pictures/bwv861-breitkopf-small.png index 00f873f72c..e13ae49975 100644 Binary files a/Documentation/pictures/bwv861-breitkopf-small.png and b/Documentation/pictures/bwv861-breitkopf-small.png differ diff --git a/Documentation/pictures/bwv861-breitkopf.png b/Documentation/pictures/bwv861-breitkopf.png index 797b4086ca..9b3284a897 100644 Binary files a/Documentation/pictures/bwv861-breitkopf.png and b/Documentation/pictures/bwv861-breitkopf.png differ diff --git a/Documentation/pictures/bwv861-finale2008a.png b/Documentation/pictures/bwv861-finale2008a.png index cdf4da71f0..a2be64bd50 100644 Binary files a/Documentation/pictures/bwv861-finale2008a.png and b/Documentation/pictures/bwv861-finale2008a.png differ diff --git a/Documentation/pictures/bwv861-gessellschaft-small.png b/Documentation/pictures/bwv861-gessellschaft-small.png index 848e260b8e..c55920e899 100644 Binary files a/Documentation/pictures/bwv861-gessellschaft-small.png and b/Documentation/pictures/bwv861-gessellschaft-small.png differ diff --git a/Documentation/pictures/bwv861-gessellschaft.png b/Documentation/pictures/bwv861-gessellschaft.png index 7fc73903b0..5e03aec5fe 100644 Binary files a/Documentation/pictures/bwv861-gessellschaft.png and b/Documentation/pictures/bwv861-gessellschaft.png differ diff --git a/Documentation/pictures/bwv861mm28-29.png b/Documentation/pictures/bwv861mm28-29.png index 3933f3f213..9a25ca95de 100644 Binary files a/Documentation/pictures/bwv861mm28-29.png and b/Documentation/pictures/bwv861mm28-29.png differ diff --git a/Documentation/pictures/bwv861mm33-34-annotate.png b/Documentation/pictures/bwv861mm33-34-annotate.png index 506601e6cb..6fd08686e8 100644 Binary files a/Documentation/pictures/bwv861mm33-34-annotate.png and b/Documentation/pictures/bwv861mm33-34-annotate.png differ diff --git a/Documentation/pictures/bwv861mm33-34.png b/Documentation/pictures/bwv861mm33-34.png index f1bffb4495..371d8e0f6b 100644 Binary files a/Documentation/pictures/bwv861mm33-34.png and b/Documentation/pictures/bwv861mm33-34.png differ diff --git a/Documentation/pictures/color1-active.png b/Documentation/pictures/color1-active.png index e91e80dc67..37b464ae4a 100644 Binary files a/Documentation/pictures/color1-active.png and b/Documentation/pictures/color1-active.png differ diff --git a/Documentation/pictures/color1-bg.png b/Documentation/pictures/color1-bg.png index 187579954b..cb80c40207 100644 Binary files a/Documentation/pictures/color1-bg.png and b/Documentation/pictures/color1-bg.png differ diff --git a/Documentation/pictures/color2-active.png b/Documentation/pictures/color2-active.png index 1bc51a9e2b..8f6ac576f7 100644 Binary files a/Documentation/pictures/color2-active.png and b/Documentation/pictures/color2-active.png differ diff --git a/Documentation/pictures/color2-bg.png b/Documentation/pictures/color2-bg.png index 4eeb9cba9b..154b365f8a 100644 Binary files a/Documentation/pictures/color2-bg.png and b/Documentation/pictures/color2-bg.png differ diff --git a/Documentation/pictures/color2-hover.png b/Documentation/pictures/color2-hover.png index 71ae3ea5ab..3232bce7b6 100644 Binary files a/Documentation/pictures/color2-hover.png and b/Documentation/pictures/color2-hover.png differ diff --git a/Documentation/pictures/color3-active.png b/Documentation/pictures/color3-active.png index ceefd4b18c..b2aed09810 100644 Binary files a/Documentation/pictures/color3-active.png and b/Documentation/pictures/color3-active.png differ diff --git a/Documentation/pictures/color3-bg.png b/Documentation/pictures/color3-bg.png index 2fcc56be06..ab2134fd7e 100644 Binary files a/Documentation/pictures/color3-bg.png and b/Documentation/pictures/color3-bg.png differ diff --git a/Documentation/pictures/color3-hover.png b/Documentation/pictures/color3-hover.png index c692715efd..b070274ad1 100644 Binary files a/Documentation/pictures/color3-hover.png and b/Documentation/pictures/color3-hover.png differ diff --git a/Documentation/pictures/color4-active.png b/Documentation/pictures/color4-active.png index 0046c0e18a..0daee7f706 100644 Binary files a/Documentation/pictures/color4-active.png and b/Documentation/pictures/color4-active.png differ diff --git a/Documentation/pictures/color4-bg.png b/Documentation/pictures/color4-bg.png index ff7ee3512e..d71b3d91ce 100644 Binary files a/Documentation/pictures/color4-bg.png and b/Documentation/pictures/color4-bg.png differ diff --git a/Documentation/pictures/double-lily-modified3.png b/Documentation/pictures/double-lily-modified3.png index 7bdb50b6b7..9d48f2898c 100644 Binary files a/Documentation/pictures/double-lily-modified3.png and b/Documentation/pictures/double-lily-modified3.png differ diff --git a/Documentation/pictures/engraver-noteheads.png b/Documentation/pictures/engraver-noteheads.png index 449d7edaa8..61c7c842f5 100644 Binary files a/Documentation/pictures/engraver-noteheads.png and b/Documentation/pictures/engraver-noteheads.png differ diff --git a/Documentation/pictures/engraver-score.png b/Documentation/pictures/engraver-score.png index dc2b2e6512..57c931882e 100644 Binary files a/Documentation/pictures/engraver-score.png and b/Documentation/pictures/engraver-score.png differ diff --git a/Documentation/pictures/finale-sarabande-full.png b/Documentation/pictures/finale-sarabande-full.png index 36707ddf93..79c2c5c51b 100644 Binary files a/Documentation/pictures/finale-sarabande-full.png and b/Documentation/pictures/finale-sarabande-full.png differ diff --git a/Documentation/pictures/flat-design.png b/Documentation/pictures/flat-design.png index 80507a4224..e327a16e46 100644 Binary files a/Documentation/pictures/flat-design.png and b/Documentation/pictures/flat-design.png differ diff --git a/Documentation/pictures/frescobaldi-lilypond-editor-small.png b/Documentation/pictures/frescobaldi-lilypond-editor-small.png index 37fed95b73..36a777e1bd 100644 Binary files a/Documentation/pictures/frescobaldi-lilypond-editor-small.png and b/Documentation/pictures/frescobaldi-lilypond-editor-small.png differ diff --git a/Documentation/pictures/frescobaldi-lilypond-editor.png b/Documentation/pictures/frescobaldi-lilypond-editor.png index 7edcfc0791..7f465c84d5 100644 Binary files a/Documentation/pictures/frescobaldi-lilypond-editor.png and b/Documentation/pictures/frescobaldi-lilypond-editor.png differ diff --git a/Documentation/pictures/hader-collage.png b/Documentation/pictures/hader-collage.png index 6687b1c538..f1a6caadc0 100644 Binary files a/Documentation/pictures/hader-collage.png and b/Documentation/pictures/hader-collage.png differ diff --git a/Documentation/pictures/hader-slaan.png b/Documentation/pictures/hader-slaan.png index a6d66503d4..5369c725e5 100644 Binary files a/Documentation/pictures/hader-slaan.png and b/Documentation/pictures/hader-slaan.png differ diff --git a/Documentation/pictures/henle-ledger.png b/Documentation/pictures/henle-ledger.png index 184b2f0397..2d7bcf5002 100644 Binary files a/Documentation/pictures/henle-ledger.png and b/Documentation/pictures/henle-ledger.png differ diff --git a/Documentation/pictures/henle-suite1-fullpage-hires.png b/Documentation/pictures/henle-suite1-fullpage-hires.png index 44ac2f1101..77ac137b0a 100644 Binary files a/Documentation/pictures/henle-suite1-fullpage-hires.png and b/Documentation/pictures/henle-suite1-fullpage-hires.png differ diff --git a/Documentation/pictures/henle-suite1-fullpage.png b/Documentation/pictures/henle-suite1-fullpage.png index 75ffa11791..d2eacacd3e 100644 Binary files a/Documentation/pictures/henle-suite1-fullpage.png and b/Documentation/pictures/henle-suite1-fullpage.png differ diff --git a/Documentation/pictures/henle-suite1-line.png b/Documentation/pictures/henle-suite1-line.png index fc6a264785..e8d78988ff 100644 Binary files a/Documentation/pictures/henle-suite1-line.png and b/Documentation/pictures/henle-suite1-line.png differ diff --git a/Documentation/pictures/lelie.png b/Documentation/pictures/lelie.png index 7e691a76aa..1b7bfb1b0f 100644 Binary files a/Documentation/pictures/lelie.png and b/Documentation/pictures/lelie.png differ diff --git a/Documentation/pictures/lily-home-nav-active.png b/Documentation/pictures/lily-home-nav-active.png index e9400ed92f..f3fe2f237c 100644 Binary files a/Documentation/pictures/lily-home-nav-active.png and b/Documentation/pictures/lily-home-nav-active.png differ diff --git a/Documentation/pictures/lily-home-nav-bg.png b/Documentation/pictures/lily-home-nav-bg.png index 9032c8384a..9a3e4e8c41 100644 Binary files a/Documentation/pictures/lily-home-nav-bg.png and b/Documentation/pictures/lily-home-nav-bg.png differ diff --git a/Documentation/pictures/lily-home-nav-hover.png b/Documentation/pictures/lily-home-nav-hover.png index 954a8074f6..aaf1c2e103 100644 Binary files a/Documentation/pictures/lily-home-nav-hover.png and b/Documentation/pictures/lily-home-nav-hover.png differ diff --git a/Documentation/pictures/lily-ledger.png b/Documentation/pictures/lily-ledger.png index ce4dcc4150..ad37906e2d 100644 Binary files a/Documentation/pictures/lily-ledger.png and b/Documentation/pictures/lily-ledger.png differ diff --git a/Documentation/pictures/lily14-sarabande-annotated-hires.png b/Documentation/pictures/lily14-sarabande-annotated-hires.png index 8879ccf8dc..bf00309d27 100644 Binary files a/Documentation/pictures/lily14-sarabande-annotated-hires.png and b/Documentation/pictures/lily14-sarabande-annotated-hires.png differ diff --git a/Documentation/pictures/lily14-sarabande-annotated.png b/Documentation/pictures/lily14-sarabande-annotated.png index 98769d7584..6ccc0a1032 100644 Binary files a/Documentation/pictures/lily14-sarabande-annotated.png and b/Documentation/pictures/lily14-sarabande-annotated.png differ diff --git a/Documentation/pictures/lily14-sarabande-correct.png b/Documentation/pictures/lily14-sarabande-correct.png index f114f12d07..2dffeb53b8 100644 Binary files a/Documentation/pictures/lily14-sarabande-correct.png and b/Documentation/pictures/lily14-sarabande-correct.png differ diff --git a/Documentation/pictures/lily14-sarabande-hires.png b/Documentation/pictures/lily14-sarabande-hires.png index 755f9bce65..2465ac1dbb 100644 Binary files a/Documentation/pictures/lily14-sarabande-hires.png and b/Documentation/pictures/lily14-sarabande-hires.png differ diff --git a/Documentation/pictures/lily17-sarabande.png b/Documentation/pictures/lily17-sarabande.png index 64813732da..d1994909fb 100644 Binary files a/Documentation/pictures/lily17-sarabande.png and b/Documentation/pictures/lily17-sarabande.png differ diff --git a/Documentation/pictures/lilykde-screenshot-small.png b/Documentation/pictures/lilykde-screenshot-small.png index 5e31316b88..41f29b897f 100644 Binary files a/Documentation/pictures/lilykde-screenshot-small.png and b/Documentation/pictures/lilykde-screenshot-small.png differ diff --git a/Documentation/pictures/lilykde-screenshot.png b/Documentation/pictures/lilykde-screenshot.png index 33fdbb3d3e..20ad280827 100644 Binary files a/Documentation/pictures/lilykde-screenshot.png and b/Documentation/pictures/lilykde-screenshot.png differ diff --git a/Documentation/pictures/lilypond-book.png b/Documentation/pictures/lilypond-book.png index cd05bd912f..113940fe83 100644 Binary files a/Documentation/pictures/lilypond-book.png and b/Documentation/pictures/lilypond-book.png differ diff --git a/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png b/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png index b15aaffc16..9011661cea 100644 Binary files a/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png and b/Documentation/pictures/lilypondtool-2.12-screenshot-400wide.png differ diff --git a/Documentation/pictures/lilypondtool-2.12-screenshot.png b/Documentation/pictures/lilypondtool-2.12-screenshot.png index ab2cb0e655..2c4b71489c 100644 Binary files a/Documentation/pictures/lilypondtool-2.12-screenshot.png and b/Documentation/pictures/lilypondtool-2.12-screenshot.png differ diff --git a/Documentation/pictures/logo-linux.png b/Documentation/pictures/logo-linux.png index b30937c581..edfe1bf135 100644 Binary files a/Documentation/pictures/logo-linux.png and b/Documentation/pictures/logo-linux.png differ diff --git a/Documentation/pictures/logo-slackware.png b/Documentation/pictures/logo-slackware.png index 01765f8b68..749f9ee925 100644 Binary files a/Documentation/pictures/logo-slackware.png and b/Documentation/pictures/logo-slackware.png differ diff --git a/Documentation/pictures/logo-suse.png b/Documentation/pictures/logo-suse.png index dba0cd1710..a678b6dfaa 100644 Binary files a/Documentation/pictures/logo-suse.png and b/Documentation/pictures/logo-suse.png differ diff --git a/Documentation/pictures/logo-ubuntu.png b/Documentation/pictures/logo-ubuntu.png index bb9d0de4ff..b7b14254b8 100644 Binary files a/Documentation/pictures/logo-ubuntu.png and b/Documentation/pictures/logo-ubuntu.png differ diff --git a/Documentation/pictures/logo-windows.png b/Documentation/pictures/logo-windows.png index d915c654e7..9f869b15fd 100644 Binary files a/Documentation/pictures/logo-windows.png and b/Documentation/pictures/logo-windows.png differ diff --git a/Documentation/pictures/morgenlied-crop-2.png b/Documentation/pictures/morgenlied-crop-2.png index f71d7924b7..a6d8ba61c5 100644 Binary files a/Documentation/pictures/morgenlied-crop-2.png and b/Documentation/pictures/morgenlied-crop-2.png differ diff --git a/Documentation/pictures/morgenlied-ly-crop2.png b/Documentation/pictures/morgenlied-ly-crop2.png index 7c51ebf21b..b0df9970b8 100644 Binary files a/Documentation/pictures/morgenlied-ly-crop2.png and b/Documentation/pictures/morgenlied-ly-crop2.png differ diff --git a/Documentation/pictures/naive-notation.png b/Documentation/pictures/naive-notation.png index 112c406a7a..18f7ea9830 100644 Binary files a/Documentation/pictures/naive-notation.png and b/Documentation/pictures/naive-notation.png differ diff --git a/Documentation/pictures/nav-active-2.png b/Documentation/pictures/nav-active-2.png index 65e68e2974..af41a69eaf 100644 Binary files a/Documentation/pictures/nav-active-2.png and b/Documentation/pictures/nav-active-2.png differ diff --git a/Documentation/pictures/nav-active.png b/Documentation/pictures/nav-active.png index 8deb6cf0f0..2ef6477b0f 100644 Binary files a/Documentation/pictures/nav-active.png and b/Documentation/pictures/nav-active.png differ diff --git a/Documentation/pictures/nav-bg-2.png b/Documentation/pictures/nav-bg-2.png index f368e91869..e1ce8278f1 100644 Binary files a/Documentation/pictures/nav-bg-2.png and b/Documentation/pictures/nav-bg-2.png differ diff --git a/Documentation/pictures/nav-bg.png b/Documentation/pictures/nav-bg.png index 6f05e45f76..b893d07b1a 100644 Binary files a/Documentation/pictures/nav-bg.png and b/Documentation/pictures/nav-bg.png differ diff --git a/Documentation/pictures/nav-hover-2.png b/Documentation/pictures/nav-hover-2.png index 09f1cb69d2..84c436badf 100644 Binary files a/Documentation/pictures/nav-hover-2.png and b/Documentation/pictures/nav-hover-2.png differ diff --git a/Documentation/pictures/nav-hover.png b/Documentation/pictures/nav-hover.png index c368525182..3213900699 100644 Binary files a/Documentation/pictures/nav-hover.png and b/Documentation/pictures/nav-hover.png differ diff --git a/Documentation/pictures/nereid-shot-small.png b/Documentation/pictures/nereid-shot-small.png index 1e09a8e91b..2076152ecf 100644 Binary files a/Documentation/pictures/nereid-shot-small.png and b/Documentation/pictures/nereid-shot-small.png differ diff --git a/Documentation/pictures/nereid-shot.png b/Documentation/pictures/nereid-shot.png index 138c2db9e1..7fbfe18dbe 100644 Binary files a/Documentation/pictures/nereid-shot.png and b/Documentation/pictures/nereid-shot.png differ diff --git a/Documentation/pictures/nonnaive-notation.png b/Documentation/pictures/nonnaive-notation.png index 1026928ccb..ab2416fbf1 100644 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 index 72ac2bcc88..0000000000 --- a/Documentation/pictures/pdf/GNUmakefile +++ /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: - diff --git a/Documentation/pictures/pdf/bwv861-finale2008a.pdf b/Documentation/pictures/pdf/bwv861-finale2008a.pdf old mode 100755 new mode 100644 diff --git a/Documentation/pictures/screenshot-denemo-small.png b/Documentation/pictures/screenshot-denemo-small.png index 4bc8d8480d..7293697260 100644 Binary files a/Documentation/pictures/screenshot-denemo-small.png and b/Documentation/pictures/screenshot-denemo-small.png differ diff --git a/Documentation/pictures/screenshot-denemo.png b/Documentation/pictures/screenshot-denemo.png index 0ed28cd4fd..f880fc08c4 100644 Binary files a/Documentation/pictures/screenshot-denemo.png and b/Documentation/pictures/screenshot-denemo.png differ diff --git a/Documentation/pictures/simple-notation.png b/Documentation/pictures/simple-notation.png index f7110941ca..f0b08a3fdc 100644 Binary files a/Documentation/pictures/simple-notation.png and b/Documentation/pictures/simple-notation.png differ diff --git a/Documentation/pictures/stone-distance.png b/Documentation/pictures/stone-distance.png index 9c7fa54243..18962932d8 100644 Binary files a/Documentation/pictures/stone-distance.png and b/Documentation/pictures/stone-distance.png differ diff --git a/Documentation/pictures/text-input-1-annotate-hu.png b/Documentation/pictures/text-input-1-annotate-hu.png index ce17d38671..a9553ecd9b 100644 Binary files a/Documentation/pictures/text-input-1-annotate-hu.png and b/Documentation/pictures/text-input-1-annotate-hu.png differ diff --git a/Documentation/pictures/text-input-1-annotate-it.png b/Documentation/pictures/text-input-1-annotate-it.png index 9c5583cea3..4d7610d41c 100644 Binary files a/Documentation/pictures/text-input-1-annotate-it.png and b/Documentation/pictures/text-input-1-annotate-it.png differ diff --git a/Documentation/pictures/text-input-1-annotate-nl.png b/Documentation/pictures/text-input-1-annotate-nl.png index 3a8c3d8146..d43d590851 100644 Binary files a/Documentation/pictures/text-input-1-annotate-nl.png and b/Documentation/pictures/text-input-1-annotate-nl.png differ diff --git a/Documentation/pictures/text-input-2-annotate-hu.png b/Documentation/pictures/text-input-2-annotate-hu.png index 600c5e5c94..70eafb34e6 100644 Binary files a/Documentation/pictures/text-input-2-annotate-hu.png and b/Documentation/pictures/text-input-2-annotate-hu.png differ diff --git a/Documentation/pictures/text-input-2-annotate-it.png b/Documentation/pictures/text-input-2-annotate-it.png index 6966dfd677..ee6f461634 100644 Binary files a/Documentation/pictures/text-input-2-annotate-it.png and b/Documentation/pictures/text-input-2-annotate-it.png differ diff --git a/Documentation/pictures/text-input-2-annotate-nl.png b/Documentation/pictures/text-input-2-annotate-nl.png index 2d9dcf148b..61457833d5 100644 Binary files a/Documentation/pictures/text-input-2-annotate-nl.png and b/Documentation/pictures/text-input-2-annotate-nl.png differ diff --git a/Documentation/pictures/text-input-parts-both-annotate-hu.png b/Documentation/pictures/text-input-parts-both-annotate-hu.png index a734abaaae..8019e584fe 100644 Binary files a/Documentation/pictures/text-input-parts-both-annotate-hu.png and b/Documentation/pictures/text-input-parts-both-annotate-hu.png differ diff --git a/Documentation/pictures/text-input-parts-both-annotate-it.png b/Documentation/pictures/text-input-parts-both-annotate-it.png index bf8de6f890..7c5993d2bb 100644 Binary files a/Documentation/pictures/text-input-parts-both-annotate-it.png and b/Documentation/pictures/text-input-parts-both-annotate-it.png differ diff --git a/Documentation/pictures/text-input-parts-both-annotate-nl.png b/Documentation/pictures/text-input-parts-both-annotate-nl.png index 82e0fc00b1..830690c137 100644 Binary files a/Documentation/pictures/text-input-parts-both-annotate-nl.png and b/Documentation/pictures/text-input-parts-both-annotate-nl.png differ diff --git a/Documentation/pictures/text-input-parts-single-annotate-hu.png b/Documentation/pictures/text-input-parts-single-annotate-hu.png index 6608579a08..cf0b96abac 100644 Binary files a/Documentation/pictures/text-input-parts-single-annotate-hu.png and b/Documentation/pictures/text-input-parts-single-annotate-hu.png differ diff --git a/Documentation/pictures/text-input-parts-single-annotate-it.png b/Documentation/pictures/text-input-parts-single-annotate-it.png index 4ec32414c9..082ea5bd29 100644 Binary files a/Documentation/pictures/text-input-parts-single-annotate-it.png and b/Documentation/pictures/text-input-parts-single-annotate-it.png differ diff --git a/Documentation/pictures/text-input-parts-single-annotate-nl.png b/Documentation/pictures/text-input-parts-single-annotate-nl.png index 6504170832..751d230968 100644 Binary files a/Documentation/pictures/text-input-parts-single-annotate-nl.png and b/Documentation/pictures/text-input-parts-single-annotate-nl.png differ diff --git a/Documentation/pictures/text-input-pop-annotate-hu.png b/Documentation/pictures/text-input-pop-annotate-hu.png index 51e5140c9c..f261b0d9c6 100644 Binary files a/Documentation/pictures/text-input-pop-annotate-hu.png and b/Documentation/pictures/text-input-pop-annotate-hu.png differ diff --git a/Documentation/pictures/text-input-pop-annotate-it.png b/Documentation/pictures/text-input-pop-annotate-it.png index 1e051271af..26376de627 100644 Binary files a/Documentation/pictures/text-input-pop-annotate-it.png and b/Documentation/pictures/text-input-pop-annotate-it.png differ diff --git a/Documentation/pictures/text-input-pop-annotate-nl.png b/Documentation/pictures/text-input-pop-annotate-nl.png index a418c5f41e..0b4740319c 100644 Binary files a/Documentation/pictures/text-input-pop-annotate-nl.png and b/Documentation/pictures/text-input-pop-annotate-nl.png differ diff --git a/Documentation/pictures/text-input-score-annotate-hu.png b/Documentation/pictures/text-input-score-annotate-hu.png index b599e1f8d1..1e498c721f 100644 Binary files a/Documentation/pictures/text-input-score-annotate-hu.png and b/Documentation/pictures/text-input-score-annotate-hu.png differ diff --git a/Documentation/pictures/text-input-score-annotate-it.png b/Documentation/pictures/text-input-score-annotate-it.png index a43c8b362e..2a7e31bb42 100644 Binary files a/Documentation/pictures/text-input-score-annotate-it.png and b/Documentation/pictures/text-input-score-annotate-it.png differ diff --git a/Documentation/pictures/text-input-score-annotate-nl.png b/Documentation/pictures/text-input-score-annotate-nl.png index b5415b414b..b54001aa38 100644 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 index 0000000000..e69de29bb2 diff --git a/Documentation/po/it.po b/Documentation/po/it.po index 1d9e2464fb..4304b73819 100644 --- a/Documentation/po/it.po +++ b/Documentation/po/it.po @@ -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 , 2009, 2012. # -# Federico Bruni , 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 \n" -"Language-Team: Italiano\n" -"Language: \n" +"PO-Revision-Date: 2013-12-26 11:15+0100\n" +"Last-Translator: Federico Bruni \n" +"Language-Team: Italian \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 automatic language selection." msgstr "" +"A proposito della selezione automatica della lingua." #: 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 "sì" #: 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" diff --git a/Documentation/search-box.ihtml b/Documentation/search-box.ihtml index a1c2949555..9f48bc6f56 100644 --- a/Documentation/search-box.ihtml +++ b/Documentation/search-box.ihtml @@ -1,19 +1,19 @@ diff --git a/Documentation/snippets/GNUmakefile b/Documentation/snippets/GNUmakefile deleted file mode 100644 index cfc96feec5..0000000000 --- a/Documentation/snippets/GNUmakefile +++ /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: diff --git a/Documentation/snippets/accordion-discant-symbols.ly b/Documentation/snippets/accordion-discant-symbols.ly index c7b4da7a67..505bda3c57 100644 --- a/Documentation/snippets/accordion-discant-symbols.ly +++ b/Documentation/snippets/accordion-discant-symbols.ly @@ -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 index 0000000000..00df0215a7 --- /dev/null +++ b/Documentation/snippets/accordion-registers.ly @@ -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 r r } \\ { d r a r bes r } >> | 1 } + \new Staff \relative + { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef bass \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 1^"a" } \\ + { d8_"D" c_"C" bes_"B" | a1_"A" } + >> + } +>> diff --git a/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly b/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly index 6e15690aa8..77d5beaa60 100644 --- a/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly +++ b/Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly @@ -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 } diff --git a/Documentation/snippets/adding-ambitus-per-voice.ly b/Documentation/snippets/adding-ambitus-per-voice.ly index 406cbfd5f1..6f05ed94ed 100644 --- a/Documentation/snippets/adding-ambitus-per-voice.ly +++ b/Documentation/snippets/adding-ambitus-per-voice.ly @@ -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 diff --git a/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly b/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly index cd413a7d78..f4a9963b3f 100644 --- a/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly +++ b/Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly @@ -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 } >> diff --git a/Documentation/snippets/adding-an-extra-staff.ly b/Documentation/snippets/adding-an-extra-staff.ly index 205d47e79a..430371a644 100644 --- a/Documentation/snippets/adding-an-extra-staff.ly +++ b/Documentation/snippets/adding-an-extra-staff.ly @@ -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 index 0000000000..fce68d84b7 --- /dev/null +++ b/Documentation/snippets/adding-an-ottava-marking-to-a-single-voice.ly @@ -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 + << { 1~ q2 } + \\ + { + r2. + \set Staff.ottavation = #"8vb" + \once \override Staff.OttavaBracket.direction = #DOWN + \set Voice.middleCPosition = #(+ 6 7) + 4 ~ | + q2 + \unset Staff.ottavation + \unset Voice.middleCPosition + 2 + } + >> +} diff --git a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly index 27d3823480..ee14a8aff5 100644 --- a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly +++ b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly @@ -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 { diff --git a/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly b/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly index 5a05847427..5912d2d8aa 100644 --- a/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly +++ b/Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly @@ -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.\) } diff --git a/Documentation/snippets/adding-drum-parts.ly b/Documentation/snippets/adding-drum-parts.ly index a0b3264d0f..7f354029fe 100644 --- a/Documentation/snippets/adding-drum-parts.ly +++ b/Documentation/snippets/adding-drum-parts.ly @@ -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 diff --git a/Documentation/snippets/adding-extra-fingering-with-scheme.ly b/Documentation/snippets/adding-extra-fingering-with-scheme.ly index 2fe4bcd6c4..9e3f6072cb 100644 --- a/Documentation/snippets/adding-extra-fingering-with-scheme.ly +++ b/Documentation/snippets/adding-extra-fingering-with-scheme.ly @@ -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 } } } diff --git a/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly b/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly index 528b3f3853..80df7dc6d0 100644 --- a/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly +++ b/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly @@ -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 index 0000000000..a2d214337d --- /dev/null +++ b/Documentation/snippets/adding-links-to-objects.ly @@ -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 + 1 + +} diff --git a/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly b/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly index cd77b63ccc..92c4fc31e5 100644 --- a/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly +++ b/Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly @@ -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 } diff --git a/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly b/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly index 4287411de0..05b4e9ba07 100644 --- a/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly +++ b/Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly @@ -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 2 } diff --git a/Documentation/snippets/adding-timing-marks-to-long-glissandi.ly b/Documentation/snippets/adding-timing-marks-to-long-glissandi.ly index 587a5d9279..0cbcfeb719 100644 --- a/Documentation/snippets/adding-timing-marks-to-long-glissandi.ly +++ b/Documentation/snippets/adding-timing-marks-to-long-glissandi.ly @@ -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'' { diff --git a/Documentation/snippets/additional-voices-to-avoid-collisions.ly b/Documentation/snippets/additional-voices-to-avoid-collisions.ly index 749559f016..e8d2f55187 100644 --- a/Documentation/snippets/additional-voices-to-avoid-collisions.ly +++ b/Documentation/snippets/additional-voices-to-avoid-collisions.ly @@ -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 - } >> } diff --git a/Documentation/snippets/adjusting-grace-note-spacing.ly b/Documentation/snippets/adjusting-grace-note-spacing.ly index a1869c9aed..d442d817ec 100644 --- a/Documentation/snippets/adjusting-grace-note-spacing.ly +++ b/Documentation/snippets/adjusting-grace-note-spacing.ly @@ -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 } diff --git a/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly b/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly index 551e960537..e7bcf160f1 100644 --- a/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly +++ b/Documentation/snippets/adjusting-lyrics-vertical-spacing.ly @@ -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 } >> diff --git a/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly b/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly index 86f26c7154..6b0b03478d 100644 --- a/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly +++ b/Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly @@ -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 diff --git a/Documentation/snippets/aligning-and-centering-instrument-names.ly b/Documentation/snippets/aligning-and-centering-instrument-names.ly index f4a55903a1..b67aeac03a 100644 --- a/Documentation/snippets/aligning-and-centering-instrument-names.ly +++ b/Documentation/snippets/aligning-and-centering-instrument-names.ly @@ -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" diff --git a/Documentation/snippets/aligning-bar-numbers.ly b/Documentation/snippets/aligning-bar-numbers.ly index e09a298f33..321f4cb3d7 100644 --- a/Documentation/snippets/aligning-bar-numbers.ly +++ b/Documentation/snippets/aligning-bar-numbers.ly @@ -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 index ddab547d5c..0000000000 --- a/Documentation/snippets/aligning-marks-with-various-notation-objects.ly +++ /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 -} diff --git a/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly b/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly index 8ab123ef88..c25eccd8a1 100644 --- a/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly +++ b/Documentation/snippets/aligning-objects-created-with-the--mark-command.ly @@ -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 } diff --git a/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly b/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly index 01d5dbd819..d4a211ffe5 100644 --- a/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly +++ b/Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly @@ -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' { 2 - \override Fingering #'staff-padding = #'() + \override Fingering.staff-padding = #'() 4 } diff --git a/Documentation/snippets/altering-the-length-of-beamed-stems.ly b/Documentation/snippets/altering-the-length-of-beamed-stems.ly index f42ad922b2..719aa97ea1 100644 --- a/Documentation/snippets/altering-the-length-of-beamed-stems.ly +++ b/Documentation/snippets/altering-the-length-of-beamed-stems.ly @@ -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 } diff --git a/Documentation/snippets/alternative-bar-numbering.ly b/Documentation/snippets/alternative-bar-numbering.ly index 74b608255e..017551b62b 100644 --- a/Documentation/snippets/alternative-bar-numbering.ly +++ b/Documentation/snippets/alternative-bar-numbering.ly @@ -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 index 75012ba33d..0000000000 --- a/Documentation/snippets/alternative-breve-note.ly +++ /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 index 0000000000..d735931c31 --- /dev/null +++ b/Documentation/snippets/alternative-breve-notes.ly @@ -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 +} diff --git a/Documentation/snippets/analysis-brackets-above-the-staff.ly b/Documentation/snippets/analysis-brackets-above-the-staff.ly index 65baecd336..02a153baf7 100644 --- a/Documentation/snippets/analysis-brackets-above-the-staff.ly +++ b/Documentation/snippets/analysis-brackets-above-the-staff.ly @@ -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 } diff --git a/Documentation/snippets/ancient-fonts.ly b/Documentation/snippets/ancient-fonts.ly index 64a083b1a5..e0d6f54f92 100644 --- a/Documentation/snippets/ancient-fonts.ly +++ b/Documentation/snippets/ancient-fonts.ly @@ -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 } } } diff --git a/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly b/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly index efdb39ae33..fbab93e75f 100644 --- a/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly +++ b/Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly @@ -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 diff --git a/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly b/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly index 9b7029cc28..f9867cb5d6 100644 --- a/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly +++ b/Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly @@ -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 diff --git a/Documentation/snippets/ancient-time-signatures.ly b/Documentation/snippets/ancient-time-signatures.ly index fc6c07fe09..84e12ce3dc 100644 --- a/Documentation/snippets/ancient-time-signatures.ly +++ b/Documentation/snippets/ancient-time-signatures.ly @@ -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 } diff --git a/Documentation/snippets/anglican-psalm-template.ly b/Documentation/snippets/anglican-psalm-template.ly index 44920dce47..81f5816c0a 100644 --- a/Documentation/snippets/anglican-psalm-template.ly +++ b/Documentation/snippets/anglican-psalm-template.ly @@ -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 diff --git a/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly index 113ee328b7..8cefbedea7 100644 --- a/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly +++ b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly @@ -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 } diff --git a/Documentation/snippets/arabic-improvisation.ly b/Documentation/snippets/arabic-improvisation.ly index b4354ab717..3d1708e455 100644 --- a/Documentation/snippets/arabic-improvisation.ly +++ b/Documentation/snippets/arabic-improvisation.ly @@ -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 } diff --git a/Documentation/snippets/asymmetric-slurs.ly b/Documentation/snippets/asymmetric-slurs.ly index 8a16d3de60..2ff6e85ab8 100644 --- a/Documentation/snippets/asymmetric-slurs.ly +++ b/Documentation/snippets/asymmetric-slurs.ly @@ -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 } diff --git a/Documentation/snippets/automatic-beam-subdivisions.ly b/Documentation/snippets/automatic-beam-subdivisions.ly index d824ef92e5..40e9e04d68 100644 --- a/Documentation/snippets/automatic-beam-subdivisions.ly +++ b/Documentation/snippets/automatic-beam-subdivisions.ly @@ -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 index 0000000000..6ff6b99856 --- /dev/null +++ b/Documentation/snippets/automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly @@ -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 = #'() + } +} diff --git a/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly b/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly index c726e37555..9af5fffa99 100644 --- a/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly +++ b/Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly @@ -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 8 - \override StringNumber #'add-stem-support = ##t + \override StringNumber.add-stem-support = ##t 8 - \override StrokeFinger #'add-stem-support = ##t + \override StrokeFinger.add-stem-support = ##t 8 } diff --git a/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly b/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly index 8946b8a29c..a1e7232187 100644 --- a/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly +++ b/Documentation/snippets/bar-chords-notation-for-guitar--with-text-spanner.ly @@ -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 #}) diff --git a/Documentation/snippets/beam-endings-in-score-context.ly b/Documentation/snippets/beam-endings-in-score-context.ly index d5b9e07ea9..a09e8853d0 100644 --- a/Documentation/snippets/beam-endings-in-score-context.ly +++ b/Documentation/snippets/beam-endings-in-score-context.ly @@ -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 { diff --git a/Documentation/snippets/beams-across-line-breaks.ly b/Documentation/snippets/beams-across-line-breaks.ly index db8da453b2..1b60a49d41 100644 --- a/Documentation/snippets/beams-across-line-breaks.ly +++ b/Documentation/snippets/beams-across-line-breaks.ly @@ -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 } diff --git a/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly index 58cbc13c64..c9139bafb1 100644 --- a/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly +++ b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly @@ -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 } diff --git a/Documentation/snippets/breathing-signs.ly b/Documentation/snippets/breathing-signs.ly index be5b8c0865..c1af6d24da 100644 --- a/Documentation/snippets/breathing-signs.ly +++ b/Documentation/snippets/breathing-signs.ly @@ -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 "||" } diff --git a/Documentation/snippets/broken-crescendo-hairpin.ly b/Documentation/snippets/broken-crescendo-hairpin.ly index b21fc6e792..68960a5840 100644 --- a/Documentation/snippets/broken-crescendo-hairpin.ly +++ b/Documentation/snippets/broken-crescendo-hairpin.ly @@ -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" @@ -12,16 +13,12 @@ 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 } >> diff --git a/Documentation/snippets/caesura-railtracks-with-fermata.ly b/Documentation/snippets/caesura-railtracks-with-fermata.ly index befcd7ab02..c42000b8af 100644 --- a/Documentation/snippets/caesura-railtracks-with-fermata.ly +++ b/Documentation/snippets/caesura-railtracks-with-fermata.ly @@ -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 "|." } diff --git a/Documentation/snippets/center-text-below-hairpin-dynamics.ly b/Documentation/snippets/center-text-below-hairpin-dynamics.ly index 4f2eb36926..67e1972270 100644 --- a/Documentation/snippets/center-text-below-hairpin-dynamics.ly +++ b/Documentation/snippets/center-text-below-hairpin-dynamics.ly @@ -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 index 0000000000..490fde1580 --- /dev/null +++ b/Documentation/snippets/centered-measure-numbers.ly @@ -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 + } +>> diff --git a/Documentation/snippets/centering-markup-on-note-heads-automatically.ly b/Documentation/snippets/centering-markup-on-note-heads-automatically.ly index 36f83dd4a7..b5342b4131 100644 --- a/Documentation/snippets/centering-markup-on-note-heads-automatically.ly +++ b/Documentation/snippets/centering-markup-on-note-heads-automatically.ly @@ -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 } } \\ diff --git a/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly b/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly index c9b51f780e..741edb8388 100644 --- a/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly +++ b/Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly @@ -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 } } diff --git a/Documentation/snippets/changing-beam-knee-gap.ly b/Documentation/snippets/changing-beam-knee-gap.ly index 3bd380f2c7..6409e4b15d 100644 --- a/Documentation/snippets/changing-beam-knee-gap.ly +++ b/Documentation/snippets/changing-beam-knee-gap.ly @@ -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 } diff --git a/Documentation/snippets/changing-form-of-multi-measure-rests.ly b/Documentation/snippets/changing-form-of-multi-measure-rests.ly index 3884062606..118341b7a8 100644 --- a/Documentation/snippets/changing-form-of-multi-measure-rests.ly +++ b/Documentation/snippets/changing-form-of-multi-measure-rests.ly @@ -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 } diff --git a/Documentation/snippets/changing-fret-orientations.ly b/Documentation/snippets/changing-fret-orientations.ly index f0bbabd215..b174cb5bd8 100644 --- a/Documentation/snippets/changing-fret-orientations.ly +++ b/Documentation/snippets/changing-fret-orientations.ly @@ -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 } diff --git a/Documentation/snippets/changing-stanza-fonts.ly b/Documentation/snippets/changing-stanza-fonts.ly index ceea216ef2..4ef7475f41 100644 --- a/Documentation/snippets/changing-stanza-fonts.ly +++ b/Documentation/snippets/changing-stanza-fonts.ly @@ -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 } diff --git a/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly b/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly index 31434e5d01..002aaf7216 100644 --- a/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly +++ b/Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly @@ -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 diff --git a/Documentation/snippets/changing-the-ambitus-gap.ly b/Documentation/snippets/changing-the-ambitus-gap.ly index 3fe9208c41..7d13dc3b06 100644 --- a/Documentation/snippets/changing-the-ambitus-gap.ly +++ b/Documentation/snippets/changing-the-ambitus-gap.ly @@ -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'' } diff --git a/Documentation/snippets/changing-the-breath-mark-symbol.ly b/Documentation/snippets/changing-the-breath-mark-symbol.ly index 8b51aea49a..33978945b0 100644 --- a/Documentation/snippets/changing-the-breath-mark-symbol.ly +++ b/Documentation/snippets/changing-the-breath-mark-symbol.ly @@ -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 diff --git a/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly b/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly index 6040c76cd1..38764d36f3 100644 --- a/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly +++ b/Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly @@ -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 | } diff --git a/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly b/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly index 19ab74b449..c4c53e5c32 100644 --- a/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly +++ b/Documentation/snippets/changing-the-number-of-lines-in-a-staff.ly @@ -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 } >> diff --git a/Documentation/snippets/changing-the-staff-size.ly b/Documentation/snippets/changing-the-staff-size.ly index 1400f158c3..ed30920b49 100644 --- a/Documentation/snippets/changing-the-staff-size.ly +++ b/Documentation/snippets/changing-the-staff-size.ly @@ -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 diff --git a/Documentation/snippets/changing-the-tuplet-number.ly b/Documentation/snippets/changing-the-tuplet-number.ly index 419f761689..e0257869b7 100644 --- a/Documentation/snippets/changing-the-tuplet-number.ly +++ b/Documentation/snippets/changing-the-tuplet-number.ly @@ -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 } } diff --git a/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly b/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly index d49857c542..74a6d43c10 100644 --- a/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly +++ b/Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly @@ -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" @@ -32,10 +32,10 @@ \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 } } diff --git a/Documentation/snippets/chant-or-psalms-notation.ly b/Documentation/snippets/chant-or-psalms-notation.ly index 7f9153f86d..864374ec3f 100644 --- a/Documentation/snippets/chant-or-psalms-notation.ly +++ b/Documentation/snippets/chant-or-psalms-notation.ly @@ -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" } diff --git a/Documentation/snippets/chords-headword.ly b/Documentation/snippets/chords-headword.ly index 0fed8b2050..c335944a5a 100644 --- a/Documentation/snippets/chords-headword.ly +++ b/Documentation/snippets/chords-headword.ly @@ -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 } } } diff --git a/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly b/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly index 05fe6f5ea6..16ed079f6e 100644 --- a/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly +++ b/Documentation/snippets/coloring-notes-depending-on-their-pitch.ly @@ -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 } } diff --git a/Documentation/snippets/combining-two-parts-on-the-same-staff.ly b/Documentation/snippets/combining-two-parts-on-the-same-staff.ly index 9005fff11a..0a8477adc5 100644 --- a/Documentation/snippets/combining-two-parts-on-the-same-staff.ly +++ b/Documentation/snippets/combining-two-parts-on-the-same-staff.ly @@ -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 } } } diff --git a/Documentation/snippets/compound-time-signatures.ly b/Documentation/snippets/compound-time-signatures.ly index da49aec532..9b1a047a5b 100644 --- a/Documentation/snippets/compound-time-signatures.ly +++ b/Documentation/snippets/compound-time-signatures.ly @@ -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 diff --git a/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly index fbe2e227bb..b30f7e7393 100644 --- a/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly +++ b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly @@ -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 { diff --git a/Documentation/snippets/consistently-left-aligned-bar-numbers.ly b/Documentation/snippets/consistently-left-aligned-bar-numbers.ly index 46e86777ed..f2b61e8e8d 100644 --- a/Documentation/snippets/consistently-left-aligned-bar-numbers.ly +++ b/Documentation/snippets/consistently-left-aligned-bar-numbers.ly @@ -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))) diff --git a/Documentation/snippets/contemporary-glissando.ly b/Documentation/snippets/contemporary-glissando.ly index bad94e600d..7d9d563318 100644 --- a/Documentation/snippets/contemporary-glissando.ly +++ b/Documentation/snippets/contemporary-glissando.ly @@ -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 diff --git a/Documentation/snippets/contexts-and-engravers.snippet-list b/Documentation/snippets/contexts-and-engravers.snippet-list index 2f4e1103dc..c752cf87ed 100644 --- a/Documentation/snippets/contexts-and-engravers.snippet-list +++ b/Documentation/snippets/contexts-and-engravers.snippet-list @@ -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 diff --git a/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly b/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly index 794b65b820..4df07c679e 100644 --- a/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly +++ b/Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly @@ -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 diff --git a/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly b/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly index c1dfc67da4..d4091b033d 100644 --- a/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly +++ b/Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly @@ -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 } } diff --git a/Documentation/snippets/controlling-tuplet-bracket-visibility.ly b/Documentation/snippets/controlling-tuplet-bracket-visibility.ly index 7ceaf5615e..9c74de6b45 100644 --- a/Documentation/snippets/controlling-tuplet-bracket-visibility.ly +++ b/Documentation/snippets/controlling-tuplet-bracket-visibility.ly @@ -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" >> } } diff --git a/Documentation/snippets/creating-a-delayed-turn.ly b/Documentation/snippets/creating-a-delayed-turn.ly index 519275b9d9..dba460587b 100644 --- a/Documentation/snippets/creating-a-delayed-turn.ly +++ b/Documentation/snippets/creating-a-delayed-turn.ly @@ -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 { diff --git a/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly b/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly index 28de0512c5..22476cebfb 100644 --- a/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly +++ b/Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly @@ -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 diff --git a/Documentation/snippets/creating-double-digit-fingerings.ly b/Documentation/snippets/creating-double-digit-fingerings.ly index c1d0fb620f..aaf9962842 100644 --- a/Documentation/snippets/creating-double-digit-fingerings.ly +++ b/Documentation/snippets/creating-double-digit-fingerings.ly @@ -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 } diff --git a/Documentation/snippets/creating-real-parenthesized-dynamics.ly b/Documentation/snippets/creating-real-parenthesized-dynamics.ly index 8f43bbff62..d6299a8ca8 100644 --- a/Documentation/snippets/creating-real-parenthesized-dynamics.ly +++ b/Documentation/snippets/creating-real-parenthesized-dynamics.ly @@ -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 } diff --git a/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly b/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly index 9bbac34508..eefa6f5917 100644 --- a/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly +++ b/Documentation/snippets/creating-simultaneous-rehearsal-marks.ly @@ -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 diff --git a/Documentation/snippets/creating-text-spanners.ly b/Documentation/snippets/creating-text-spanners.ly index ee587e14ef..5e18e550e2 100644 --- a/Documentation/snippets/creating-text-spanners.ly +++ b/Documentation/snippets/creating-text-spanners.ly @@ -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 diff --git a/Documentation/snippets/cross-staff-chords---beaming-problems-workaround.ly b/Documentation/snippets/cross-staff-chords---beaming-problems-workaround.ly index 1c3817bbf2..cb4ec966af 100644 --- a/Documentation/snippets/cross-staff-chords---beaming-problems-workaround.ly +++ b/Documentation/snippets/cross-staff-chords---beaming-problems-workaround.ly @@ -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 } >> diff --git a/Documentation/snippets/cross-staff-stems.ly b/Documentation/snippets/cross-staff-stems.ly index 1431461cf3..cfcc9ef0d0 100644 --- a/Documentation/snippets/cross-staff-stems.ly +++ b/Documentation/snippets/cross-staff-stems.ly @@ -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 { diff --git a/Documentation/snippets/custodes.ly b/Documentation/snippets/custodes.ly index 6a4afbd601..b653e146ac 100644 --- a/Documentation/snippets/custodes.ly +++ b/Documentation/snippets/custodes.ly @@ -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 1 - \override Staff.Custos #'style = #'medicaea + \override Staff.Custos.style = #'medicaea c1^"medicaea" \break 1 - \override Staff.Custos #'style = #'vaticana + \override Staff.Custos.style = #'vaticana c1^"vaticana" \break 1 - \override Staff.Custos #'style = #'mensural + \override Staff.Custos.style = #'mensural c1^"mensural" \break 1 } diff --git a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly index e0e335621f..f9d5816c37 100644 --- a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly +++ b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly @@ -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 } } diff --git a/Documentation/snippets/customizing-markup-fret-diagrams.ly b/Documentation/snippets/customizing-markup-fret-diagrams.ly index 77c3004eda..57032ef0fd 100644 --- a/Documentation/snippets/customizing-markup-fret-diagrams.ly +++ b/Documentation/snippets/customizing-markup-fret-diagrams.ly @@ -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 diff --git a/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly b/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly index 8ffb32fee6..50ff9bc0cd 100644 --- a/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly +++ b/Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly @@ -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 } diff --git a/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly b/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly index 3546a1ec0e..88efc8c20f 100644 --- a/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly +++ b/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly @@ -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 { diff --git a/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly b/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly index 6045697b5a..6ba7858cca 100644 --- a/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly +++ b/Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly @@ -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 { } diff --git a/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly index 7af25ba2be..94d61a4be5 100644 --- a/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly +++ b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly @@ -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 index 0000000000..bb20ae2d0e --- /dev/null +++ b/Documentation/snippets/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly @@ -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 + } +} diff --git a/Documentation/snippets/displaying-complex-chords.ly b/Documentation/snippets/displaying-complex-chords.ly index 160093aac7..902541ce0c 100644 --- a/Documentation/snippets/displaying-complex-chords.ly +++ b/Documentation/snippets/displaying-complex-chords.ly @@ -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' { diff --git a/Documentation/snippets/displaying-grob-ancestry.ly b/Documentation/snippets/displaying-grob-ancestry.ly index 87d2da59f6..d6c8d46a2a 100644 --- a/Documentation/snippets/displaying-grob-ancestry.ly +++ b/Documentation/snippets/displaying-grob-ancestry.ly @@ -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 4\arpeggio } diff --git a/Documentation/snippets/drawing-boxes-around-grobs.ly b/Documentation/snippets/drawing-boxes-around-grobs.ly index 2bddbf518c..a95c7739b5 100644 --- a/Documentation/snippets/drawing-boxes-around-grobs.ly +++ b/Documentation/snippets/drawing-boxes-around-grobs.ly @@ -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 diff --git a/Documentation/snippets/drawing-circles-around-note-heads.ly b/Documentation/snippets/drawing-circles-around-note-heads.ly index b2dc749eb4..44cfe8c7a1 100644 --- a/Documentation/snippets/drawing-circles-around-note-heads.ly +++ b/Documentation/snippets/drawing-circles-around-note-heads.ly @@ -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 diff --git a/Documentation/snippets/drawing-circles-around-various-objects.ly b/Documentation/snippets/drawing-circles-around-various-objects.ly index f10fa4edc0..196a3d8c81 100644 --- a/Documentation/snippets/drawing-circles-around-various-objects.ly +++ b/Documentation/snippets/drawing-circles-around-various-objects.ly @@ -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) } diff --git a/Documentation/snippets/editorial-annotations.snippet-list b/Documentation/snippets/editorial-annotations.snippet-list index 8b488aae5c..b2cb2d8ff9 100644 --- a/Documentation/snippets/editorial-annotations.snippet-list +++ b/Documentation/snippets/editorial-annotations.snippet-list @@ -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 diff --git a/Documentation/snippets/editorial-headword.ly b/Documentation/snippets/editorial-headword.ly index b40a6cebd2..e6b962a557 100644 --- a/Documentation/snippets/editorial-headword.ly +++ b/Documentation/snippets/editorial-headword.ly @@ -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 8 \staccato diff --git a/Documentation/snippets/engravers-one-by-one.ly b/Documentation/snippets/engravers-one-by-one.ly index 3e9ea2fee8..bae30fb440 100644 --- a/Documentation/snippets/engravers-one-by-one.ly +++ b/Documentation/snippets/engravers-one-by-one.ly @@ -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" diff --git a/Documentation/snippets/engraving-ties-manually.ly b/Documentation/snippets/engraving-ties-manually.ly index 24c2538cf9..76bf91d1ce 100644 --- a/Documentation/snippets/engraving-ties-manually.ly +++ b/Documentation/snippets/engraving-ties-manually.ly @@ -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' { 2~ - \override TieColumn #'tie-configuration = + \override TieColumn.tie-configuration = #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) 2~ } diff --git a/Documentation/snippets/engraving-tremolos-with-floating-beams.ly b/Documentation/snippets/engraving-tremolos-with-floating-beams.ly index 4b9d07625a..1338e8c175 100644 --- a/Documentation/snippets/engraving-tremolos-with-floating-beams.ly +++ b/Documentation/snippets/engraving-tremolos-with-floating-beams.ly @@ -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 } } diff --git a/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly b/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly index 384c90017e..5e67e60d47 100644 --- a/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly +++ b/Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly @@ -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 } } diff --git a/Documentation/snippets/expressive-headword.ly b/Documentation/snippets/expressive-headword.ly index 6730fe41c9..b7caf83f1e 100644 --- a/Documentation/snippets/expressive-headword.ly +++ b/Documentation/snippets/expressive-headword.ly @@ -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 diff --git a/Documentation/snippets/expressive-marks.snippet-list b/Documentation/snippets/expressive-marks.snippet-list index 54cbf78449..0bc43e26f9 100644 --- a/Documentation/snippets/expressive-marks.snippet-list +++ b/Documentation/snippets/expressive-marks.snippet-list @@ -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 index 0000000000..4656fac443 --- /dev/null +++ b/Documentation/snippets/extending-glissandi-across-repeats.ly @@ -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 diff --git a/Documentation/snippets/figured-bass-headword.ly b/Documentation/snippets/figured-bass-headword.ly index fdf1803c22..8b76e0204d 100644 --- a/Documentation/snippets/figured-bass-headword.ly +++ b/Documentation/snippets/figured-bass-headword.ly @@ -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 } } } diff --git a/Documentation/snippets/fine-tuning-pedal-brackets.ly b/Documentation/snippets/fine-tuning-pedal-brackets.ly index 547d1e8037..b9cdf44f71 100644 --- a/Documentation/snippets/fine-tuning-pedal-brackets.ly +++ b/Documentation/snippets/fine-tuning-pedal-brackets.ly @@ -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 } diff --git a/Documentation/snippets/fingering-symbols-for-wind-instruments.ly b/Documentation/snippets/fingering-symbols-for-wind-instruments.ly index 15ebe07c1d..e4ea09092f 100644 --- a/Documentation/snippets/fingering-symbols-for-wind-instruments.ly +++ b/Documentation/snippets/fingering-symbols-for-wind-instruments.ly @@ -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" diff --git a/Documentation/snippets/flamenco-notation.ly b/Documentation/snippets/flamenco-notation.ly index eeede2855c..db142cd9d2 100644 --- a/Documentation/snippets/flamenco-notation.ly +++ b/Documentation/snippets/flamenco-notation.ly @@ -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 { 16^\xUp \headsOff ^\aUp @@ -161,7 +161,7 @@ part = \relative c' { r4 \tupletsOff - \times 2/3 { + \tuplet 3/2 { 8^\pDown \headsOff ^\xUp @@ -169,7 +169,7 @@ part = \relative c' { \headsOn } - \times 2/3 { + \tuplet 3/2 { 8^\pDown \headsOff ^\xUp @@ -177,14 +177,14 @@ part = \relative c' { \headsOn } - \times 2/3 { + \tuplet 3/2 { 8^\pDown \headsOff ^\xUp ^\iUp \headsOn } - \times 2/3 { + \tuplet 3/2 { 8^\pDown \headsOff ^\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 } ^\strokeUpGolpe ^\strokeDown } - \times 2/3 { + \tuplet 3/2 { a,8^\markup{ \small p } ^\strokeUpGolpe ^\strokeDown } - \times 2/3 { + \tuplet 3/2 { a,8^\markup{ \small p } ^\strokeUpGolpe ^\strokeDown } - \times 2/3 { + \tuplet 3/2 { a,8^\markup{ \small p } ^\strokeUpGolpe ^\strokeDown } \tupletsOn - \once \override TextScript #'extra-offset = #'(0 . -1) + \once \override TextScript.extra-offset = #'(0 . -1) 1_\golpe^\mUp \bar "|." } diff --git a/Documentation/snippets/flute-slap-notation.ly b/Documentation/snippets/flute-slap-notation.ly index b239a2036d..fb387f9b69 100644 --- a/Documentation/snippets/flute-slap-notation.ly +++ b/Documentation/snippets/flute-slap-notation.ly @@ -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' { diff --git a/Documentation/snippets/forcing-horizontal-shift-of-notes.ly b/Documentation/snippets/forcing-horizontal-shift-of-notes.ly index ce8072932c..e2413c73b2 100644 --- a/Documentation/snippets/forcing-horizontal-shift-of-notes.ly +++ b/Documentation/snippets/forcing-horizontal-shift-of-notes.ly @@ -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. \\ { 2 - \once \override NoteColumn #'force-hshift = #1.7 + \once \override NoteColumn.force-hshift = #1.7 2 } >> diff --git a/Documentation/snippets/forcing-hyphens-to-be-shown.ly b/Documentation/snippets/forcing-hyphens-to-be-shown.ly index 33545ccb6e..6ab4f3706f 100644 --- a/Documentation/snippets/forcing-hyphens-to-be-shown.ly +++ b/Documentation/snippets/forcing-hyphens-to-be-shown.ly @@ -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 } diff --git a/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly b/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly index 217c235be4..244eefef50 100644 --- a/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly +++ b/Documentation/snippets/forcing-measure-width-to-adapt-to-metronomemarks-width.ly @@ -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 } diff --git a/Documentation/snippets/fret-diagrams-explained-and-developed.ly b/Documentation/snippets/fret-diagrams-explained-and-developed.ly index 0371ee1172..7ae4dead64 100644 --- a/Documentation/snippets/fret-diagrams-explained-and-developed.ly +++ b/Documentation/snippets/fret-diagrams-explained-and-developed.ly @@ -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 diff --git a/Documentation/snippets/fretted-headword.ly b/Documentation/snippets/fretted-headword.ly index 0975f55757..6b8f910d87 100644 --- a/Documentation/snippets/fretted-headword.ly +++ b/Documentation/snippets/fretted-headword.ly @@ -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 4 b8 } | % end of m. 6 + d4-4 \tuplet 3/2 { \sfou \FO #'-0.3 #'0.6 4 b8 } | % end of m. 6 \FO #'-0.3 #'0.3 - 4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7 + 4 \tuplet 3/2 { c4 b8 } a4 e'8. e16 | % m. 7 \FO #'-0.3 #'0.3 - 4 \times 2/3 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 - \times 2/3 { \sfou 4 c8 } | % end of m. 8 + 4 \tuplet 3/2 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 + \tuplet 3/2 { \sfou 4 c8 } | % end of m. 8 - b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 4 e | % end of m. 9 + b4 \tuplet 3/2 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 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 - 4^\< \times 2/3 { e4 8\! } | % end of m. 11 + 4^\< \tuplet 3/2 { e4 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 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 c gis e } | % end m. 6 - \times 2/3 { a,8 a c e, b' a, e' a c a e } | % m. 7 + \tuplet 3/2 { a,8 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 a f fis, d' a' d a d, } | % m. 8 + \tuplet 3/2 { f,8 f' a \sfol \FO #'0.3 #'-0.5 a f fis, d' a' d a d, } | % m. 8 - \times 2/3 { 8 d' g d' g, d % beg m. 9 + \tuplet 3/2 { 8 d' g d' g, d % beg m. 9 \sfod \FO #'0.0 #'-2.0 \sfou 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 { } diff --git a/Documentation/snippets/fretted-string-harmonics-in-tablature.ly b/Documentation/snippets/fretted-string-harmonics-in-tablature.ly index 8cb311a1a0..a62c85dddd 100644 --- a/Documentation/snippets/fretted-string-harmonics-in-tablature.ly +++ b/Documentation/snippets/fretted-string-harmonics-in-tablature.ly @@ -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 = { diff --git a/Documentation/snippets/generating-custom-flags.ly b/Documentation/snippets/generating-custom-flags.ly index 1bf3b22979..99579b27f4 100644 --- a/Documentation/snippets/generating-custom-flags.ly +++ b/Documentation/snippets/generating-custom-flags.ly @@ -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 } diff --git a/Documentation/snippets/generating-random-notes.ly b/Documentation/snippets/generating-random-notes.ly index 2093009521..cf2bfb23e9 100644 --- a/Documentation/snippets/generating-random-notes.ly +++ b/Documentation/snippets/generating-random-notes.ly @@ -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) diff --git a/Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly b/Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly index c2182e123a..cc30a8b2bf 100644 --- a/Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly +++ b/Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly @@ -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)) diff --git a/Documentation/snippets/glissandi-can-skip-grobs.ly b/Documentation/snippets/glissandi-can-skip-grobs.ly index f58120b2d5..32caca079c 100644 --- a/Documentation/snippets/glissandi-can-skip-grobs.ly +++ b/Documentation/snippets/glissandi-can-skip-grobs.ly @@ -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, } diff --git a/Documentation/snippets/grid-lines--changing-their-appearance.ly b/Documentation/snippets/grid-lines--changing-their-appearance.ly index 2b69748857..254a266304 100644 --- a/Documentation/snippets/grid-lines--changing-their-appearance.ly +++ b/Documentation/snippets/grid-lines--changing-their-appearance.ly @@ -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 } } } diff --git a/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly b/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly index 52e4c45d94..927ad32969 100644 --- a/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly +++ b/Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly @@ -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 } diff --git a/Documentation/snippets/guitar-slides.ly b/Documentation/snippets/guitar-slides.ly index dd1cbd8d03..e2e2b802f2 100644 --- a/Documentation/snippets/guitar-slides.ly +++ b/Documentation/snippets/guitar-slides.ly @@ -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' { diff --git a/Documentation/snippets/hairpins-with-different-line-styles.ly b/Documentation/snippets/hairpins-with-different-line-styles.ly index e77b94296c..ebfcda0513 100644 --- a/Documentation/snippets/hairpins-with-different-line-styles.ly +++ b/Documentation/snippets/hairpins-with-different-line-styles.ly @@ -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\! } diff --git a/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly index e85878da1e..8c939d25c1 100644 --- a/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly +++ b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly @@ -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 ":|." } { diff --git a/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly b/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly index c4e1959195..1c3c4ea4ea 100644 --- a/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly +++ b/Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly @@ -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 diff --git a/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly index 1df5ec0bf4..682e2d5421 100644 --- a/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly +++ b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly @@ -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\! } diff --git a/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly b/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly index 79423f1658..b336b35caf 100644 --- a/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly +++ b/Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly @@ -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 } >> diff --git a/Documentation/snippets/how-to-change-fret-diagram-position.ly b/Documentation/snippets/how-to-change-fret-diagram-position.ly index c241b7f6af..cbcd2bc9c7 100644 --- a/Documentation/snippets/how-to-change-fret-diagram-position.ly +++ b/Documentation/snippets/how-to-change-fret-diagram-position.ly @@ -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 << diff --git a/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly index 72d4a9b101..1a84268db6 100644 --- a/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly +++ b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly @@ -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 } } diff --git a/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly index 80a56e227e..12d760f3ff 100644 --- a/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly +++ b/Documentation/snippets/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly @@ -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 } diff --git a/Documentation/snippets/incipit.ly b/Documentation/snippets/incipit.ly index 075cd35840..b078cc0f53 100644 --- a/Documentation/snippets/incipit.ly +++ b/Documentation/snippets/incipit.ly @@ -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 diff --git a/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly b/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly index 0452647221..bbb2f9fbd6 100644 --- a/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly +++ b/Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly @@ -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 diff --git a/Documentation/snippets/inserting-a-caesura.ly b/Documentation/snippets/inserting-a-caesura.ly index 2789bce283..c8378a2f1d 100644 --- a/Documentation/snippets/inserting-a-caesura.ly +++ b/Documentation/snippets/inserting-a-caesura.ly @@ -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 diff --git a/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly b/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly index d556d5b80d..388398c02d 100644 --- a/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly +++ b/Documentation/snippets/inserting-score-fragments-above-a-staff,-as-markups.ly @@ -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 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 } diff --git a/Documentation/snippets/jazz-combo-template.ly b/Documentation/snippets/jazz-combo-template.ly index ff917606a4..4f0570da2c 100644 --- a/Documentation/snippets/jazz-combo-template.ly +++ b/Documentation/snippets/jazz-combo-template.ly @@ -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 } } diff --git a/Documentation/snippets/keep-change-clefs-full-sized.ly b/Documentation/snippets/keep-change-clefs-full-sized.ly index 04c569fd15..1504747297 100644 --- a/Documentation/snippets/keep-change-clefs-full-sized.ly +++ b/Documentation/snippets/keep-change-clefs-full-sized.ly @@ -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" diff --git a/Documentation/snippets/keyboard-headword.ly b/Documentation/snippets/keyboard-headword.ly index 8523dd6a8c..177675afc5 100644 --- a/Documentation/snippets/keyboard-headword.ly +++ b/Documentation/snippets/keyboard-headword.ly @@ -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 4 ( ^ \markup \bold { Rall. } - \override Script #'stencil = #(lambda (grob) + \override Script.stencil = #(lambda (grob) (grob-interpret-markup grob fermataLong)) 8 ) \fermata \noBeam \clef treble \slurUp - \once \override Hairpin #'to-barline = ##f + \once \override Hairpin.to-barline = ##f 8 ( \pp \> | 4. \! ) ^\markup \bold { a Tempo } @@ -132,19 +133,19 @@ fermataLong = \markup { | s4. \! \slurUp - \once \override Script #'direction = #UP + \once \override Script.direction = #UP 8 ( \accent | 4. ) - \once \override Hairpin #'to-barline = ##f + \once \override Hairpin.to-barline = ##f 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 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 4. \fermata _\markup \italic { ped. } 8 ( | diff --git a/Documentation/snippets/keyboards.snippet-list b/Documentation/snippets/keyboards.snippet-list index 415afb73bd..f834227dfc 100644 --- a/Documentation/snippets/keyboards.snippet-list +++ b/Documentation/snippets/keyboards.snippet-list @@ -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 diff --git a/Documentation/snippets/laissez-vibrer-ties.ly b/Documentation/snippets/laissez-vibrer-ties.ly index bfc4f1600e..d125dc8038 100644 --- a/Documentation/snippets/laissez-vibrer-ties.ly +++ b/Documentation/snippets/laissez-vibrer-ties.ly @@ -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}. 4\laissezVibrer r 4.\laissezVibrer r8 4\laissezVibrer r - \override LaissezVibrerTieColumn #'tie-configuration + \override LaissezVibrerTieColumn.tie-configuration = #`((-7 . ,DOWN) (-5 . ,DOWN) (-3 . ,UP) diff --git a/Documentation/snippets/line-arrows.ly b/Documentation/snippets/line-arrows.ly index 3bc9a105ac..93086da94c 100644 --- a/Documentation/snippets/line-arrows.ly +++ b/Documentation/snippets/line-arrows.ly @@ -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 diff --git a/Documentation/snippets/lyrics-alignment.ly b/Documentation/snippets/lyrics-alignment.ly index fc6757dc6f..9167330fe6 100644 --- a/Documentation/snippets/lyrics-alignment.ly +++ b/Documentation/snippets/lyrics-alignment.ly @@ -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" } diff --git a/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly index fd1668089c..c7ad7b10a5 100644 --- a/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly +++ b/Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly @@ -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 } \\ diff --git a/Documentation/snippets/making-glissandi-breakable.ly b/Documentation/snippets/making-glissandi-breakable.ly index 9eee164eb1..16799a19cf 100644 --- a/Documentation/snippets/making-glissandi-breakable.ly +++ b/Documentation/snippets/making-glissandi-breakable.ly @@ -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. | diff --git a/Documentation/snippets/making-slurs-with-complex-dash-structure.ly b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly index 4fda57bcfe..b4d11b13d7 100644 --- a/Documentation/snippets/making-slurs-with-complex-dash-structure.ly +++ b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly @@ -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) diff --git a/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly b/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly index 9b24e3f97e..1cf8befaa0 100644 --- a/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly +++ b/Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly @@ -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' } diff --git a/Documentation/snippets/manually-controlling-beam-positions.ly b/Documentation/snippets/manually-controlling-beam-positions.ly index d9d292cb29..fe44415234 100644 --- a/Documentation/snippets/manually-controlling-beam-positions.ly +++ b/Documentation/snippets/manually-controlling-beam-positions.ly @@ -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 } diff --git a/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly index 8618782bb1..a836fd38d1 100644 --- a/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +++ b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly @@ -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 { diff --git a/Documentation/snippets/measure-counter.ly b/Documentation/snippets/measure-counter.ly index df602528c1..688ba96a07 100644 --- a/Documentation/snippets/measure-counter.ly +++ b/Documentation/snippets/measure-counter.ly @@ -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 } } >> diff --git a/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly index 725d9b46ea..dfb597b9a7 100644 --- a/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly +++ b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly @@ -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'' { diff --git a/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly b/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly index 1b78f4dff4..8cacc7ba90 100644 --- a/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly +++ b/Documentation/snippets/merging-multi-measure-rests-in-a-polyphonic-part.ly @@ -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 { << diff --git a/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly index ea6f338123..a2553ad84e 100644 --- a/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly +++ b/Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly @@ -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 diff --git a/Documentation/snippets/modifying-tuplet-bracket-length.ly b/Documentation/snippets/modifying-tuplet-bracket-length.ly index 3cff9d1059..bde66e6168 100644 --- a/Documentation/snippets/modifying-tuplet-bracket-length.ly +++ b/Documentation/snippets/modifying-tuplet-bracket-length.ly @@ -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. } diff --git a/Documentation/snippets/moving-dotted-notes-in-polyphony.ly b/Documentation/snippets/moving-dotted-notes-in-polyphony.ly index 748d309d10..8a225d29ff 100644 --- a/Documentation/snippets/moving-dotted-notes-in-polyphony.ly +++ b/Documentation/snippets/moving-dotted-notes-in-polyphony.ly @@ -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 } \\ diff --git a/Documentation/snippets/moving-slur-positions-vertically.ly b/Documentation/snippets/moving-slur-positions-vertically.ly index 6b7d5e44d8..d2b93bb89c 100644 --- a/Documentation/snippets/moving-slur-positions-vertically.ly +++ b/Documentation/snippets/moving-slur-positions-vertically.ly @@ -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) } diff --git a/Documentation/snippets/multi-measure-rest-markup.ly b/Documentation/snippets/multi-measure-rest-markup.ly index d7bd204f2c..e1d8deea44 100644 --- a/Documentation/snippets/multi-measure-rest-markup.ly +++ b/Documentation/snippets/multi-measure-rest-markup.ly @@ -13,27 +13,25 @@ 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 index 155e3f120f..0000000000 --- a/Documentation/snippets/new/GNUmakefile +++ /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 index 0000000000..7ec2129a63 --- /dev/null +++ b/Documentation/snippets/new/accordion-discant-symbols.ly @@ -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 index 0000000000..26a6e9df52 --- /dev/null +++ b/Documentation/snippets/new/accordion-registers.ly @@ -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 r r } \\ { d r a r bes r } >> | 1 } + \new Staff \relative + { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef bass \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 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 index 0000000000..71dcf28a18 --- /dev/null +++ b/Documentation/snippets/new/adding-a-figured-bass-above-or-below-the-notes.ly @@ -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 index 0000000000..b4d32ff1ea --- /dev/null +++ b/Documentation/snippets/new/adding-extra-fingering-with-scheme.ly @@ -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 } + } +} diff --git a/Documentation/snippets/new/adding-orchestral-cues-to-a-vocal-score.ly b/Documentation/snippets/new/adding-orchestral-cues-to-a-vocal-score.ly index 42c4df97b0..fcc5778c84 100644 --- a/Documentation/snippets/new/adding-orchestral-cues-to-a-vocal-score.ly +++ b/Documentation/snippets/new/adding-orchestral-cues-to-a-vocal-score.ly @@ -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 } diff --git a/Documentation/snippets/new/adding-timing-marks-to-long-glissandi.ly b/Documentation/snippets/new/adding-timing-marks-to-long-glissandi.ly index f4ff3a7e21..3bb2d02119 100644 --- a/Documentation/snippets/new/adding-timing-marks-to-long-glissandi.ly +++ b/Documentation/snippets/new/adding-timing-marks-to-long-glissandi.ly @@ -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'' { diff --git a/Documentation/snippets/new/ancient-fonts.ly b/Documentation/snippets/new/ancient-fonts.ly index 138f4227b9..159bed3fae 100644 --- a/Documentation/snippets/new/ancient-fonts.ly +++ b/Documentation/snippets/new/ancient-fonts.ly @@ -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 } } } diff --git a/Documentation/snippets/new/ancient-notation-template----modern-transcription-of-gregorian-music.ly b/Documentation/snippets/new/ancient-notation-template----modern-transcription-of-gregorian-music.ly index 36e873fd00..2fe51d97a2 100644 --- a/Documentation/snippets/new/ancient-notation-template----modern-transcription-of-gregorian-music.ly +++ b/Documentation/snippets/new/ancient-notation-template----modern-transcription-of-gregorian-music.ly @@ -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 diff --git a/Documentation/snippets/new/bar-chords-notation-for-guitar--with-text-spanner.ly b/Documentation/snippets/new/bar-chords-notation-for-guitar--with-text-spanner.ly index 0f292adb03..c74d392002 100644 --- a/Documentation/snippets/new/bar-chords-notation-for-guitar--with-text-spanner.ly +++ b/Documentation/snippets/new/bar-chords-notation-for-guitar--with-text-spanner.ly @@ -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 index 0000000000..27df9446ad --- /dev/null +++ b/Documentation/snippets/new/broken-crescendo-hairpin.ly @@ -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 index 0000000000..6fa6ee9e3b --- /dev/null +++ b/Documentation/snippets/new/centered-measure-numbers.ly @@ -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 + } +>> diff --git a/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly b/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly index 1e6ffa7b9e..641f2861c7 100644 --- a/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly +++ b/Documentation/snippets/new/centering-markup-on-note-heads-automatically.ly @@ -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 index 0000000000..346d12e0e6 --- /dev/null +++ b/Documentation/snippets/new/changing-the-tuplet-number.ly @@ -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 } +} diff --git a/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly b/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly index 0aff0ba5e7..cedf58cd32 100644 --- a/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly +++ b/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.11" \header { lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms" @@ -24,10 +24,10 @@ \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 } } diff --git a/Documentation/snippets/new/chant-or-psalms-notation.ly b/Documentation/snippets/new/chant-or-psalms-notation.ly index 3351cd2d38..8edb405b0d 100644 --- a/Documentation/snippets/new/chant-or-psalms-notation.ly +++ b/Documentation/snippets/new/chant-or-psalms-notation.ly @@ -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" } diff --git a/Documentation/snippets/new/chords-headword.ly b/Documentation/snippets/new/chords-headword.ly index 29fe905a43..4f625ddbc8 100644 --- a/Documentation/snippets/new/chords-headword.ly +++ b/Documentation/snippets/new/chords-headword.ly @@ -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 index 0000000000..693ed00469 --- /dev/null +++ b/Documentation/snippets/new/compound-time-signatures.ly @@ -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 +} diff --git a/Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly b/Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly index ea2d8305a9..8e9a8c65b4 100644 --- a/Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly +++ b/Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly @@ -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 index 0000000000..f9bf74b8d5 --- /dev/null +++ b/Documentation/snippets/new/creating-double-digit-fingerings.ly @@ -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 index 0000000000..bfdd1bdfbe --- /dev/null +++ b/Documentation/snippets/new/creating-real-parenthesized-dynamics.ly @@ -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 index 0000000000..0b6af1b368 --- /dev/null +++ b/Documentation/snippets/new/entering-several-tuplets-using-only-one--times-command.ly @@ -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 index 0000000000..1f9cf0f33c --- /dev/null +++ b/Documentation/snippets/new/expressive-headword.ly @@ -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 + } + >> + + | + + 4 \tenuto + d'8 \staccato + g'8 \staccato + b'8 \staccato + d''8 \staccato + + | + + d''8 ( + 8 \staccato ) + 8 \staccato + d''8 ( + 8 \staccato ) + 8 \staccato + + | + + d''8 ( + 8 \staccato ) + 8 \staccato + d''8 ( + 8 \staccato ) + 8 \staccato + + | + + d''8 \staccato + 8 \staccato + 8 \staccato + d'' \staccato + 8 \staccato + 8 \staccato + + | + + 4 \fermata + r8 r4 r8 + } + + % LH Staff + \new Staff { + \clef bass + \key g \major + \time 6/8 + \partial 2 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 8 \staccato + 8 \staccato + 8 \staccato + 4. ( + + | + + d'4 ) + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 4 + r8 + r8 + 8 \staccato + 8 \staccato + + | + + 8 \staccato + 8 \staccato + 8 \staccato + 4 + 8 \staccato + + | + + 4 \tenuto + r8 + r4 + r8 + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + r8 + 8 \staccato + 8 \staccato + r8 + 8 \staccato + 8 \staccato + + | + + 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 index 0000000000..0c7496c0d2 --- /dev/null +++ b/Documentation/snippets/new/extending-glissandi-across-repeats.ly @@ -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 diff --git a/Documentation/snippets/new/fretted-headword.ly b/Documentation/snippets/new/fretted-headword.ly index f71af0f147..24fe6e20e4 100644 --- a/Documentation/snippets/new/fretted-headword.ly +++ b/Documentation/snippets/new/fretted-headword.ly @@ -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 4 b8 } | % end of m. 6 + d4-4 \tuplet 3/2 { \sfou \FO #'-0.3 #'0.6 4 b8 } | % end of m. 6 \FO #'-0.3 #'0.3 - 4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7 + 4 \tuplet 3/2 { c4 b8 } a4 e'8. e16 | % m. 7 \FO #'-0.3 #'0.3 - 4 \times 2/3 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 - \times 2/3 { \sfou 4 c8 } | % end of m. 8 + 4 \tuplet 3/2 { \sfol \FO #'0.3 #'0.0 4 e8 } e4 % beg of m. 8 + \tuplet 3/2 { \sfou 4 c8 } | % end of m. 8 - b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 4 e | % end of m. 9 + b4 \tuplet 3/2 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 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 - 4^\< \times 2/3 { e4 8\! } | % end of m. 11 + 4^\< \tuplet 3/2 { e4 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 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 c gis e } | % end m. 6 - \times 2/3 { a,8 a c e, b' a, e' a c a e } | % m. 7 + \tuplet 3/2 { a,8 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 a f fis, d' a' d a d, } | % m. 8 + \tuplet 3/2 { f,8 f' a \sfol \FO #'0.3 #'-0.5 a f fis, d' a' d a d, } | % m. 8 - \times 2/3 { 8 d' g d' g, d % beg m. 9 + \tuplet 3/2 { 8 d' g d' g, d % beg m. 9 \sfod \FO #'0.0 #'-2.0 \sfou 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 { } diff --git a/Documentation/snippets/new/generating-custom-flags.ly b/Documentation/snippets/new/generating-custom-flags.ly index 240ef41b42..aa54b59bf4 100644 --- a/Documentation/snippets/new/generating-custom-flags.ly +++ b/Documentation/snippets/new/generating-custom-flags.ly @@ -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 } diff --git a/Documentation/snippets/new/glissandi-can-skip-grobs.ly b/Documentation/snippets/new/glissandi-can-skip-grobs.ly index e978d0df48..039d5b4310 100644 --- a/Documentation/snippets/new/glissandi-can-skip-grobs.ly +++ b/Documentation/snippets/new/glissandi-can-skip-grobs.ly @@ -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, } diff --git a/Documentation/snippets/new/guitar-slides.ly b/Documentation/snippets/new/guitar-slides.ly index a3a3ee80ac..c65a265cf8 100644 --- a/Documentation/snippets/new/guitar-slides.ly +++ b/Documentation/snippets/new/guitar-slides.ly @@ -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 index 0000000000..eefaf6ea2c --- /dev/null +++ b/Documentation/snippets/new/heavily-customized-polymetric-time-signatures.ly @@ -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 index 0000000000..0ff1ee530b --- /dev/null +++ b/Documentation/snippets/new/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly @@ -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 index 0000000000..d83c178bcc --- /dev/null +++ b/Documentation/snippets/new/how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly @@ -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 } +} diff --git a/Documentation/snippets/new/incipit.ly b/Documentation/snippets/new/incipit.ly index 8a22de16c3..3b85ef170c 100644 --- a/Documentation/snippets/new/incipit.ly +++ b/Documentation/snippets/new/incipit.ly @@ -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 index 0000000000..09a13cf667 --- /dev/null +++ b/Documentation/snippets/new/inserting-score-fragments-above-a-staff,-as-markups.ly @@ -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 + 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 +} diff --git a/Documentation/snippets/new/jazz-combo-template.ly b/Documentation/snippets/new/jazz-combo-template.ly index 3910d71dc6..41b62e581f 100644 --- a/Documentation/snippets/new/jazz-combo-template.ly +++ b/Documentation/snippets/new/jazz-combo-template.ly @@ -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 index 0000000000..cb2af25e9a --- /dev/null +++ b/Documentation/snippets/new/keyboard-headword.ly @@ -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 + 4 ( ^ \markup \bold { Rall. } + \override Script.stencil = #(lambda (grob) + (grob-interpret-markup grob fermataLong)) + 8 ) \fermata + \noBeam + \clef treble + \slurUp + \once \override Hairpin.to-barline = ##f + 8 ( \pp \> + | + 4. \! ) ^\markup \bold { a Tempo } + \slurUp + 8 ^\( \> + | + 4. \! \) + << + \new Voice { + \voiceOne + 8 ( + | + cs'8 ^\markup \bold { Rallentando } + b16 + cs'16 + d'8 + e'16 + fs'16 + | + 4. ) + s8 + | + r8 + 4 \arpeggio + e''16 ( ^\markup \bold { Lent } + fs''16 + | + \voiceTwo + 2 ) + | + } + \new Voice { + \voiceTwo + s8 + | + 4 \< + 4 \> + | + s4. \! + \slurUp + \once \override Script.direction = #UP + 8 ( \accent + | + 4. ) + \once \override Hairpin.to-barline = ##f + 8 \ppp \> + | + s8 \! + \stemDown + \once \override Script.direction = #UP + \ottava #1 + \voiceOne + \once \override PianoStaff.Arpeggio.padding = #0.8 + 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 + 8 [ + \clef bass + 8 \fermata ] + s8 + | + fs8\rest + \clef treble + 4 \tenuto + s8 + | + fs8\rest + \clef treble + 4 \tenuto + s8 + | + s2 + | + ds8\rest + \clef treble + 4 + \clef bass + s8 + | + s8 + \clef treble + 4 \arpeggio + \clef bass + s8 + | + s8 + \clef treble + 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 + 4. \fermata _\markup \italic { ped. } + 8 ( + | + 4. ) \sustainOn + \clef bass + 8 \( \sustainOff + | + 4. \) \sustainOn + \clef bass + 8 ( \sustainOff + | + 4 + 4 + | + 4. ) \sustainOn + 8 ( \sustainOff + | + 4. ) \sustainOn + \slurUp + 8 ( \sustainOff \sustainOn + | + 2 ) \sustainOff \sustainOn + | + } + >> +>> diff --git a/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly b/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly index 7596a4ebcb..70b3bf144e 100644 --- a/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly +++ b/Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly @@ -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 } \\ diff --git a/Documentation/snippets/new/making-glissandi-breakable.ly b/Documentation/snippets/new/making-glissandi-breakable.ly index dc2bdfa13a..bf065ac791 100644 --- a/Documentation/snippets/new/making-glissandi-breakable.ly +++ b/Documentation/snippets/new/making-glissandi-breakable.ly @@ -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 index 0000000000..3330291ff9 --- /dev/null +++ b/Documentation/snippets/new/merging-multi-measure-rests-in-a-polyphonic-part.ly @@ -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 index 0000000000..2722b3d286 --- /dev/null +++ b/Documentation/snippets/new/numbering-groups-of-measures.ly @@ -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 index 0000000000..70246ce579 --- /dev/null +++ b/Documentation/snippets/new/pitches-headword.ly @@ -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 + | + 2 + 2 ) + | + \oneVoice + \clef bass + 2 ( + 4 + 4 + | + 2 + 2 ) + | + \voiceOne + b2 %( + cs'4 + ds'4 + | + \clef treble + 4 %) + r4 r2 + } + + % RH Voice 2 + \new Voice { + \voiceTwo + \override Staff.DynamicLineSpanner.staff-padding = #3 + 2 \p + 4 + 4 + | + 2 + e'2 + | + 2 -\tweak #'style #'none \cresc + b'4 + 4 + | + b'2. ( \sf \> + a'4 ) + \clef bass + | \break + s1 \p + | + s1 + | + 4 ( + 2. ) + | + s4 + r4 r2 + } + + >> + + % LH Staff + \new Staff { + \override Staff.SustainPedalLineSpanner.staff-padding = #6 + 2 ( \sustainOn + 4 \sustainOff + 4 + | + 2 + 2 ) \sustainOn + | + \clef bass + \slurDown + 2 ( \sustainOff + 4 + 4 \sustainOn + | + \clef treble + \voiceOne + << + { + 2 + 2 ) + } + \new Voice { + \voiceTwo + b1 \sustainOff + } + >> + \oneVoice + | + %\break + \clef bass + 2 ( + 4 + 4 + | + 2 + 2 ) \sustainOn + | + 1 ( \sustainOff + | + 4 ) + r4 r2 + } + +>> diff --git a/Documentation/snippets/new/positioning-multi-measure-rests.ly b/Documentation/snippets/new/positioning-multi-measure-rests.ly index 8f9865ac23..e908ef14cd 100644 --- a/Documentation/snippets/new/positioning-multi-measure-rests.ly +++ b/Documentation/snippets/new/positioning-multi-measure-rests.ly @@ -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 index 0000000000..1bdd351b99 --- /dev/null +++ b/Documentation/snippets/new/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly @@ -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 index 0000000000..b6a18ecc7d --- /dev/null +++ b/Documentation/snippets/new/printing-hairpins-in-various-styles.ly @@ -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 index 0000000000..a0153d62a2 --- /dev/null +++ b/Documentation/snippets/new/quoting-another-voice-with-transposition.ly @@ -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" >> +} diff --git a/Documentation/snippets/new/redefining-grace-note-global-defaults.ly b/Documentation/snippets/new/redefining-grace-note-global-defaults.ly index b6575a4714..b4cd68c38c 100644 --- a/Documentation/snippets/new/redefining-grace-note-global-defaults.ly +++ b/Documentation/snippets/new/redefining-grace-note-global-defaults.ly @@ -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 <>) } diff --git a/Documentation/snippets/new/score-for-diatonic-accordion.ly b/Documentation/snippets/new/score-for-diatonic-accordion.ly index e4f2326b97..bca93b5c6a 100644 --- a/Documentation/snippets/new/score-for-diatonic-accordion.ly +++ b/Documentation/snippets/new/score-for-diatonic-accordion.ly @@ -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 diff --git a/Documentation/snippets/new/staff-headword.ly b/Documentation/snippets/new/staff-headword.ly index 64ebf5d4d3..67bc0f6286 100644 --- a/Documentation/snippets/new/staff-headword.ly +++ b/Documentation/snippets/new/staff-headword.ly @@ -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-. | diff --git a/Documentation/snippets/new/string-number-extender-lines.ly b/Documentation/snippets/new/string-number-extender-lines.ly index d05686f651..90ea3fc2f1 100644 --- a/Documentation/snippets/new/string-number-extender-lines.ly +++ b/Documentation/snippets/new/string-number-extender-lines.ly @@ -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 index 0000000000..5c3f8a05dc --- /dev/null +++ b/Documentation/snippets/new/unfretted-headword.ly @@ -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 index 0000000000..ad440c3c96 --- /dev/null +++ b/Documentation/snippets/new/using-a-tick-as-the-breath-mark-symbol.ly @@ -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 +} diff --git a/Documentation/snippets/new/using-alternative-flag-styles.ly b/Documentation/snippets/new/using-alternative-flag-styles.ly index d6b327d6ed..5932ba2565 100644 --- a/Documentation/snippets/new/using-alternative-flag-styles.ly +++ b/Documentation/snippets/new/using-alternative-flag-styles.ly @@ -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 } diff --git a/Documentation/snippets/new/using-grace-note-slashes-with-normal-heads.ly b/Documentation/snippets/new/using-grace-note-slashes-with-normal-heads.ly index 024c95dbae..0a53f3d980 100644 --- a/Documentation/snippets/new/using-grace-note-slashes-with-normal-heads.ly +++ b/Documentation/snippets/new/using-grace-note-slashes-with-normal-heads.ly @@ -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 index 0000000000..909f09e62d --- /dev/null +++ b/Documentation/snippets/new/vertically-aligned-dynamics-and-textscripts.ly @@ -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 +} diff --git a/Documentation/snippets/non-default-tuplet-numbers.ly b/Documentation/snippets/non-default-tuplet-numbers.ly index 8e74c262c7..65030025a3 100644 --- a/Documentation/snippets/non-default-tuplet-numbers.ly +++ b/Documentation/snippets/non-default-tuplet-numbers.ly @@ -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 index 0000000000..7c082bed1b --- /dev/null +++ b/Documentation/snippets/numbering-groups-of-measures.ly @@ -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 +} diff --git a/Documentation/snippets/numbers-as-easy-note-heads.ly b/Documentation/snippets/numbers-as-easy-note-heads.ly index 9abd9336c6..70faa4ae4b 100644 --- a/Documentation/snippets/numbers-as-easy-note-heads.ly +++ b/Documentation/snippets/numbers-as-easy-note-heads.ly @@ -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 { diff --git a/Documentation/snippets/obtaining-2.12-lyrics-spacing-in-newer-versions.ly b/Documentation/snippets/obtaining-2.12-lyrics-spacing-in-newer-versions.ly index 61d36d9d6c..2ec7ebf8d9 100644 --- a/Documentation/snippets/obtaining-2.12-lyrics-spacing-in-newer-versions.ly +++ b/Documentation/snippets/obtaining-2.12-lyrics-spacing-in-newer-versions.ly @@ -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)) diff --git a/Documentation/snippets/outputting-the-version-number.ly b/Documentation/snippets/outputting-the-version-number.ly index 1f061947b0..742e687c93 100644 --- a/Documentation/snippets/outputting-the-version-number.ly +++ b/Documentation/snippets/outputting-the-version-number.ly @@ -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 index 0000000000..e13154f9a0 --- /dev/null +++ b/Documentation/snippets/overriding-articulations-of-destinct-type.ly @@ -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 } + >> diff --git a/Documentation/snippets/page-label.ly b/Documentation/snippets/page-label.ly index 909a29f4f8..727f9d4191 100644 --- a/Documentation/snippets/page-label.ly +++ b/Documentation/snippets/page-label.ly @@ -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 } diff --git a/Documentation/snippets/paper-and-layout.snippet-list b/Documentation/snippets/paper-and-layout.snippet-list index 303b979a8a..e99215262a 100644 --- a/Documentation/snippets/paper-and-layout.snippet-list +++ b/Documentation/snippets/paper-and-layout.snippet-list @@ -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 diff --git a/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly b/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly index 10206bee17..c67206c3aa 100644 --- a/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly +++ b/Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly @@ -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 } diff --git a/Documentation/snippets/pitches-headword.ly b/Documentation/snippets/pitches-headword.ly index b476dede6d..ad09b5755b 100644 --- a/Documentation/snippets/pitches-headword.ly +++ b/Documentation/snippets/pitches-headword.ly @@ -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 2 \p 4 4 @@ -75,8 +76,7 @@ Piches headword 2 e'2 | - \once \override TextScript #'staff-padding = #2.5 - 2 _ \markup \italic { cresc. } + 2 -\tweak #'style #'none \cresc b'4 4 | @@ -99,7 +99,7 @@ Piches headword % LH Staff \new Staff { - \override Staff.SustainPedalLineSpanner #'staff-padding = #5 + \override Staff.SustainPedalLineSpanner.staff-padding = #6 2 ( \sustainOn 4 \sustainOff 4 diff --git a/Documentation/snippets/pitches.snippet-list b/Documentation/snippets/pitches.snippet-list index 911ef6f5da..87368cd7cf 100644 --- a/Documentation/snippets/pitches.snippet-list +++ b/Documentation/snippets/pitches.snippet-list @@ -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 diff --git a/Documentation/snippets/positioning-arpeggios.ly b/Documentation/snippets/positioning-arpeggios.ly index b62ec12e5f..68861a1dc3 100644 --- a/Documentation/snippets/positioning-arpeggios.ly +++ b/Documentation/snippets/positioning-arpeggios.ly @@ -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' { 1\arpeggio - \once \override Arpeggio #'positions = #'(-5 . 0) + \once \override Arpeggio.positions = #'(-5 . 0) 1\arpeggio - \once \override Arpeggio #'positions = #'(0 . 5) + \once \override Arpeggio.positions = #'(0 . 5) 1\arpeggio - \once \override Arpeggio #'positions = #'(-5 . 5) + \once \override Arpeggio.positions = #'(-5 . 5) 1\arpeggio } diff --git a/Documentation/snippets/positioning-fingering-indications-precisely.ly b/Documentation/snippets/positioning-fingering-indications-precisely.ly index 790ab94f32..253b05ec03 100644 --- a/Documentation/snippets/positioning-fingering-indications-precisely.ly +++ b/Documentation/snippets/positioning-fingering-indications-precisely.ly @@ -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) 4 - 4 + 4 \set fingeringOrientations = #'(down) 4 - 4 + 4 \set fingeringOrientations = #'(down right up) 4 - 4 + 4 \set fingeringOrientations = #'(up) 4 - 4 + 4 } diff --git a/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly b/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly index 7f13ed5280..d3c6e90dc9 100644 --- a/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly +++ b/Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly @@ -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] } diff --git a/Documentation/snippets/positioning-grace-notes-with-floating-space.ly b/Documentation/snippets/positioning-grace-notes-with-floating-space.ly index ae61dd1a9f..0bbbdf1624 100644 --- a/Documentation/snippets/positioning-grace-notes-with-floating-space.ly +++ b/Documentation/snippets/positioning-grace-notes-with-floating-space.ly @@ -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 { diff --git a/Documentation/snippets/positioning-multi-measure-rests.ly b/Documentation/snippets/positioning-multi-measure-rests.ly index 093834aa64..b32e5b9a51 100644 --- a/Documentation/snippets/positioning-multi-measure-rests.ly +++ b/Documentation/snippets/positioning-multi-measure-rests.ly @@ -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 } >> } diff --git a/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly b/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly index 047238c2a4..b03aa21b89 100644 --- a/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly +++ b/Documentation/snippets/positioning-segno-and-coda-with-line-break.ly @@ -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 diff --git a/Documentation/snippets/positioning-text-markups-inside-slurs.ly b/Documentation/snippets/positioning-text-markups-inside-slurs.ly index 206db5c204..8348981a4e 100644 --- a/Documentation/snippets/positioning-text-markups-inside-slurs.ly +++ b/Documentation/snippets/positioning-text-markups-inside-slurs.ly @@ -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 } diff --git a/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly index 8324912159..b788c3cd10 100644 --- a/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly +++ b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly @@ -10,10 +10,11 @@ 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 diff --git a/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly b/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly index e6c6c823aa..db86ab6d76 100644 --- a/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly +++ b/Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly @@ -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. diff --git a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly index f2d620be9e..b8590edebf 100644 --- a/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly +++ b/Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly @@ -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 diff --git a/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly b/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly index e75b2c37b3..75c335bdea 100644 --- a/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly +++ b/Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly @@ -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 "" diff --git a/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly b/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly index 838a1bb1e3..63b65a8372 100644 --- a/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly +++ b/Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly @@ -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 index 0000000000..1ce96f79a6 --- /dev/null +++ b/Documentation/snippets/printing-hairpins-in-various-styles.ly @@ -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\! +} diff --git a/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly b/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly index 6c7e5a3217..634017285c 100644 --- a/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly +++ b/Documentation/snippets/printing-hairpins-using-al-niente-notation.ly @@ -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\! } diff --git a/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly b/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly index 0b6dd34387..89e2fbf87a 100644 --- a/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly +++ b/Documentation/snippets/printing-marks-at-the-end-of-a-line.ly @@ -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, diff --git a/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly index f8b2ebc048..4c563872b4 100644 --- a/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly +++ b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly @@ -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 } diff --git a/Documentation/snippets/printing-music-with-different-time-signatures.ly b/Documentation/snippets/printing-music-with-different-time-signatures.ly index 1e189dfa9b..8d52ffd405 100644 --- a/Documentation/snippets/printing-music-with-different-time-signatures.ly +++ b/Documentation/snippets/printing-music-with-different-time-signatures.ly @@ -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 diff --git a/Documentation/snippets/proportional-strict-notespacing.ly b/Documentation/snippets/proportional-strict-notespacing.ly index eb4c12e5d7..b5d489208d 100644 --- a/Documentation/snippets/proportional-strict-notespacing.ly +++ b/Documentation/snippets/proportional-strict-notespacing.ly @@ -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 } >> diff --git a/Documentation/snippets/putting-lyrics-inside-the-staff.ly b/Documentation/snippets/putting-lyrics-inside-the-staff.ly index c2596fb4c5..4edd6a59e5 100644 --- a/Documentation/snippets/putting-lyrics-inside-the-staff.ly +++ b/Documentation/snippets/putting-lyrics-inside-the-staff.ly @@ -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 } >> diff --git a/Documentation/snippets/quoting-another-voice-with-transposition.ly b/Documentation/snippets/quoting-another-voice-with-transposition.ly index ad8061229d..df7517fd79 100644 --- a/Documentation/snippets/quoting-another-voice-with-transposition.ly +++ b/Documentation/snippets/quoting-another-voice-with-transposition.ly @@ -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 diff --git a/Documentation/snippets/quoting-another-voice.ly b/Documentation/snippets/quoting-another-voice.ly index 55ea2aaba6..b834961374 100644 --- a/Documentation/snippets/quoting-another-voice.ly +++ b/Documentation/snippets/quoting-another-voice.ly @@ -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. } } >> diff --git a/Documentation/snippets/recorder-fingering-chart.ly b/Documentation/snippets/recorder-fingering-chart.ly index dbe8cfa9d0..a5cb083c2e 100644 --- a/Documentation/snippets/recorder-fingering-chart.ly +++ b/Documentation/snippets/recorder-fingering-chart.ly @@ -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 diff --git a/Documentation/snippets/redefining-grace-note-global-defaults.ly b/Documentation/snippets/redefining-grace-note-global-defaults.ly index c8507a43eb..ae51b3c9a7 100644 --- a/Documentation/snippets/redefining-grace-note-global-defaults.ly +++ b/Documentation/snippets/redefining-grace-note-global-defaults.ly @@ -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 <>) } diff --git a/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly b/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly index f615a50d7a..fd0fdce662 100644 --- a/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly +++ b/Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly @@ -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 { diff --git a/Documentation/snippets/removing-the-first-empty-line.ly b/Documentation/snippets/removing-the-first-empty-line.ly index bcdfb4ee5a..6cad882e87 100644 --- a/Documentation/snippets/removing-the-first-empty-line.ly +++ b/Documentation/snippets/removing-the-first-empty-line.ly @@ -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 } diff --git a/Documentation/snippets/repeats-headword.ly b/Documentation/snippets/repeats-headword.ly index 0f284e5bc4..fa562f980a 100644 --- a/Documentation/snippets/repeats-headword.ly +++ b/Documentation/snippets/repeats-headword.ly @@ -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 ".|:" 4 ( 8.. 32 @@ -84,7 +84,7 @@ Repeats headword \oneVoice r8 \clef bass - \bar ":|" + \bar ":|." } \new Staff = LH { diff --git a/Documentation/snippets/repeats.snippet-list b/Documentation/snippets/repeats.snippet-list index c9b276e8ff..3b55be22a8 100644 --- a/Documentation/snippets/repeats.snippet-list +++ b/Documentation/snippets/repeats.snippet-list @@ -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 diff --git a/Documentation/snippets/rest-styles.ly b/Documentation/snippets/rest-styles.ly index a2d5641364..789f0b6d34 100644 --- a/Documentation/snippets/rest-styles.ly +++ b/Documentation/snippets/rest-styles.ly @@ -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 } diff --git a/Documentation/snippets/rhythmic-slashes.ly b/Documentation/snippets/rhythmic-slashes.ly index 5feb8b92bd..6d47071c79 100644 --- a/Documentation/snippets/rhythmic-slashes.ly +++ b/Documentation/snippets/rhythmic-slashes.ly @@ -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 #} ) diff --git a/Documentation/snippets/rhythms-headword.ly b/Documentation/snippets/rhythms-headword.ly index a05cbcfc3e..b0c99b7dc4 100644 --- a/Documentation/snippets/rhythms-headword.ly +++ b/Documentation/snippets/rhythms-headword.ly @@ -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 } 16 16 ] ) - \once \override TextScript #'padding = #3.8 + \once \override TextScript.padding = #3.8 16 ( \staccato -\markup { \italic cresc. } 16 ) \staccato 32 ( @@ -75,7 +75,7 @@ Rhythms headword | - \once \override DynamicLineSpanner #'padding = #2 + \once \override DynamicLineSpanner.padding = #2 b''32 ( \p \> c'''32 d'''32 diff --git a/Documentation/snippets/rhythms.snippet-list b/Documentation/snippets/rhythms.snippet-list index 6f964e1c63..99c7a93f80 100644 --- a/Documentation/snippets/rhythms.snippet-list +++ b/Documentation/snippets/rhythms.snippet-list @@ -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 diff --git a/Documentation/snippets/scheme-language.snippet-list b/Documentation/snippets/scheme-language.snippet-list index 3e9034afe7..a7bc17c61b 100644 --- a/Documentation/snippets/scheme-language.snippet-list +++ b/Documentation/snippets/scheme-language.snippet-list @@ -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 diff --git a/Documentation/snippets/score-for-diatonic-accordion.ly b/Documentation/snippets/score-for-diatonic-accordion.ly index 029486b1fe..46883755e6 100644 --- a/Documentation/snippets/score-for-diatonic-accordion.ly +++ b/Documentation/snippets/score-for-diatonic-accordion.ly @@ -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 diff --git a/Documentation/snippets/screech-and-boink.ly b/Documentation/snippets/screech-and-boink.ly index 2bb83f3239..86b9fba5e5 100644 --- a/Documentation/snippets/screech-and-boink.ly +++ b/Documentation/snippets/screech-and-boink.ly @@ -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 4\arpeggio } >> diff --git a/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly b/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly index 72713fe3e2..be7a8967d8 100644 --- a/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly +++ b/Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly @@ -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 diff --git a/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly b/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly index 0966e7ceae..067fbbfd2c 100644 --- a/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly +++ b/Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly @@ -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\! } diff --git a/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly b/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly index 7051646a03..c469c52e64 100644 --- a/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly +++ b/Documentation/snippets/setting-the-double-repeat-default-for-volte.ly @@ -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 } diff --git a/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly b/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly index d22a05d91d..dea361c49c 100644 --- a/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly +++ b/Documentation/snippets/setting-the-minimum-length-of-hairpins.ly @@ -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\! } >> } diff --git a/Documentation/snippets/shortening-volta-brackets.ly b/Documentation/snippets/shortening-volta-brackets.ly index a518debae4..611057d4cb 100644 --- a/Documentation/snippets/shortening-volta-brackets.ly +++ b/Documentation/snippets/shortening-volta-brackets.ly @@ -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 { { diff --git a/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly b/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly index c4f595c816..ec67a11657 100644 --- a/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly +++ b/Documentation/snippets/showing-the-same-articulation-above-and-below-a-note-or-chord.ly @@ -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{} +\\tweak: @code{} " doctitle = "Showing the same articulation above and below a note or chord" diff --git a/Documentation/snippets/simultaneous-headword.ly b/Documentation/snippets/simultaneous-headword.ly index 8c43c694f2..a08838f8f8 100644 --- a/Documentation/snippets/simultaneous-headword.ly +++ b/Documentation/snippets/simultaneous-headword.ly @@ -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. diff --git a/Documentation/snippets/slides-in-tablature.ly b/Documentation/snippets/slides-in-tablature.ly index 970380d2f3..760135cda9 100644 --- a/Documentation/snippets/slides-in-tablature.ly +++ b/Documentation/snippets/slides-in-tablature.ly @@ -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 } } } diff --git a/Documentation/snippets/specific-notation.snippet-list b/Documentation/snippets/specific-notation.snippet-list index 29d2685ee5..218c52f2b9 100644 --- a/Documentation/snippets/specific-notation.snippet-list +++ b/Documentation/snippets/specific-notation.snippet-list @@ -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 diff --git a/Documentation/snippets/staff-headword.ly b/Documentation/snippets/staff-headword.ly index 5b6ebcb365..6e81017f84 100644 --- a/Documentation/snippets/staff-headword.ly +++ b/Documentation/snippets/staff-headword.ly @@ -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-. | diff --git a/Documentation/snippets/staff-notation.snippet-list b/Documentation/snippets/staff-notation.snippet-list index 483a17253e..0a2df88f19 100644 --- a/Documentation/snippets/staff-notation.snippet-list +++ b/Documentation/snippets/staff-notation.snippet-list @@ -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 diff --git a/Documentation/snippets/stand-alone-two-column-markup.ly b/Documentation/snippets/stand-alone-two-column-markup.ly index dd096fe981..dd0005c432 100644 --- a/Documentation/snippets/stand-alone-two-column-markup.ly +++ b/Documentation/snippets/stand-alone-two-column-markup.ly @@ -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 } diff --git a/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly b/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly index 1e88060412..b5960df497 100644 --- a/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly +++ b/Documentation/snippets/stem-and-beam-behavior-in-tablature.ly @@ -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 } } diff --git a/Documentation/snippets/stemlets.ly b/Documentation/snippets/stemlets.ly index fcc096e5b2..0f1ea5e818 100644 --- a/Documentation/snippets/stemlets.ly +++ b/Documentation/snippets/stemlets.ly @@ -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'] } diff --git a/Documentation/snippets/strict-beat-beaming.ly b/Documentation/snippets/strict-beat-beaming.ly index 68779a8b4d..238479a413 100644 --- a/Documentation/snippets/strict-beat-beaming.ly +++ b/Documentation/snippets/strict-beat-beaming.ly @@ -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 { diff --git a/Documentation/snippets/string-number-extender-lines.ly b/Documentation/snippets/string-number-extender-lines.ly index 9e34f1ed64..726e69b778 100644 --- a/Documentation/snippets/string-number-extender-lines.ly +++ b/Documentation/snippets/string-number-extender-lines.ly @@ -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 } #}) diff --git a/Documentation/snippets/subdividing-beams.ly b/Documentation/snippets/subdividing-beams.ly index 41ffdce540..e7080e65a5 100644 --- a/Documentation/snippets/subdividing-beams.ly +++ b/Documentation/snippets/subdividing-beams.ly @@ -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] } diff --git a/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly b/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly index a37404cadf..0ecae8edd5 100644 --- a/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly +++ b/Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly @@ -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' { << diff --git a/Documentation/snippets/symbols-and-glyphs.snippet-list b/Documentation/snippets/symbols-and-glyphs.snippet-list index c10bd2fa9e..920987ba49 100644 --- a/Documentation/snippets/symbols-and-glyphs.snippet-list +++ b/Documentation/snippets/symbols-and-glyphs.snippet-list @@ -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 diff --git a/Documentation/snippets/syntax-and-expressions.snippet-list b/Documentation/snippets/syntax-and-expressions.snippet-list index 7e72565d66..f0e653afb0 100644 --- a/Documentation/snippets/syntax-and-expressions.snippet-list +++ b/Documentation/snippets/syntax-and-expressions.snippet-list @@ -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 diff --git a/Documentation/snippets/text-headword.ly b/Documentation/snippets/text-headword.ly index 4254c58236..0bcd3763ef 100644 --- a/Documentation/snippets/text-headword.ly +++ b/Documentation/snippets/text-headword.ly @@ -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 4. ( _ \markup { \dynamic p \italic { con amabilità } } 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 16 16 diff --git a/Documentation/snippets/text.snippet-list b/Documentation/snippets/text.snippet-list index 9076d5318b..e89b570d89 100644 --- a/Documentation/snippets/text.snippet-list +++ b/Documentation/snippets/text.snippet-list @@ -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 diff --git a/Documentation/snippets/time-signature-in-parentheses---method-3.ly b/Documentation/snippets/time-signature-in-parentheses---method-3.ly index f7acbae1f1..5eebaacc09 100644 --- a/Documentation/snippets/time-signature-in-parentheses---method-3.ly +++ b/Documentation/snippets/time-signature-in-parentheses---method-3.ly @@ -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 diff --git a/Documentation/snippets/time-signature-in-parentheses.ly b/Documentation/snippets/time-signature-in-parentheses.ly index 6d792fb6c1..257034d959 100644 --- a/Documentation/snippets/time-signature-in-parentheses.ly +++ b/Documentation/snippets/time-signature-in-parentheses.ly @@ -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 diff --git a/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly b/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly index 188484760b..bee629dc69 100644 --- a/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly +++ b/Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly @@ -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 diff --git a/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly b/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly index 8692f345bf..cebe3d2876 100644 --- a/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly +++ b/Documentation/snippets/transcription-of-ancient-music-with-incipit.ly @@ -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 diff --git a/Documentation/snippets/tweaking-clef-properties.ly b/Documentation/snippets/tweaking-clef-properties.ly index d4adb18f97..a43faaca38 100644 --- a/Documentation/snippets/tweaking-clef-properties.ly +++ b/Documentation/snippets/tweaking-clef-properties.ly @@ -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" @@ -13,17 +13,19 @@ 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 diff --git a/Documentation/snippets/tweaking-grace-layout-within-music.ly b/Documentation/snippets/tweaking-grace-layout-within-music.ly index 2afa28fc4d..b038e101b1 100644 --- a/Documentation/snippets/tweaking-grace-layout-within-music.ly +++ b/Documentation/snippets/tweaking-grace-layout-within-music.ly @@ -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 } } } diff --git a/Documentation/snippets/tweaks-and-overrides.snippet-list b/Documentation/snippets/tweaks-and-overrides.snippet-list index 8ceb9fa8ac..2e71f5f6e3 100644 --- a/Documentation/snippets/tweaks-and-overrides.snippet-list +++ b/Documentation/snippets/tweaks-and-overrides.snippet-list @@ -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 diff --git a/Documentation/snippets/unfretted-headword.ly b/Documentation/snippets/unfretted-headword.ly index 17ec6b723e..6cc02b677d 100644 --- a/Documentation/snippets/unfretted-headword.ly +++ b/Documentation/snippets/unfretted-headword.ly @@ -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 index 0000000000..27c80491e7 --- /dev/null +++ b/Documentation/snippets/using-a-tick-as-the-breath-mark-symbol.ly @@ -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 +} diff --git a/Documentation/snippets/using-alternative-flag-styles.ly b/Documentation/snippets/using-alternative-flag-styles.ly index b037233ba4..3338586384 100644 --- a/Documentation/snippets/using-alternative-flag-styles.ly +++ b/Documentation/snippets/using-alternative-flag-styles.ly @@ -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 } diff --git a/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly b/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly index c5bcb7e88d..a348603f9a 100644 --- a/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly +++ b/Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly @@ -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) } diff --git a/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly b/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly index 6b8c9f468e..c2e4685015 100644 --- a/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly +++ b/Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly @@ -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 1\arpeggio } diff --git a/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly b/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly index b732903167..976387a0d1 100644 --- a/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly +++ b/Documentation/snippets/using-postscript-to-generate-special-note-head-shapes.ly @@ -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 - 4 d + 4 d } diff --git a/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly b/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly index 43540003dc..f6bb8ed356 100644 --- a/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly +++ b/Documentation/snippets/using-the--tweak-command-to-tweak-individual-grobs.ly @@ -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 } diff --git a/Documentation/snippets/using-the-whiteout-property.ly b/Documentation/snippets/using-the-whiteout-property.ly index 70c0a83423..2e9f1a3243 100644 --- a/Documentation/snippets/using-the-whiteout-property.ly +++ b/Documentation/snippets/using-the-whiteout-property.ly @@ -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 index 0000000000..6610200af5 --- /dev/null +++ b/Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly @@ -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 + } + } +} diff --git a/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly b/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly index 31ec39112c..82a609c12f 100644 --- a/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly +++ b/Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly @@ -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 } diff --git a/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly b/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly index a6fd2906b8..0adb0dec41 100644 --- a/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly +++ b/Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly @@ -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\! } diff --git a/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly b/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly index b93afc58fc..4a85d9d6a4 100644 --- a/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly +++ b/Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly @@ -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] } } diff --git a/Documentation/snippets/vertically-centered-common-lyrics.ly b/Documentation/snippets/vertically-centered-common-lyrics.ly index a819d064cc..7c59cd3b16 100644 --- a/Documentation/snippets/vertically-centered-common-lyrics.ly +++ b/Documentation/snippets/vertically-centered-common-lyrics.ly @@ -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 } diff --git a/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly b/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly index 59754d98ee..8e1796fd47 100644 --- a/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly +++ b/Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly @@ -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" << diff --git a/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly b/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly index 86228b93fa..51ffe694b2 100644 --- a/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly +++ b/Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly @@ -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 } } } diff --git a/Documentation/snippets/vocal-ensemble-template.ly b/Documentation/snippets/vocal-ensemble-template.ly index c657cfe192..100d57e098 100644 --- a/Documentation/snippets/vocal-ensemble-template.ly +++ b/Documentation/snippets/vocal-ensemble-template.ly @@ -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 diff --git a/Documentation/snippets/vocal-headword.ly b/Documentation/snippets/vocal-headword.ly index 14b21c9c0a..d09d784396 100644 --- a/Documentation/snippets/vocal-headword.ly +++ b/Documentation/snippets/vocal-headword.ly @@ -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 "||" diff --git a/Documentation/snippets/wind-headword.ly b/Documentation/snippets/wind-headword.ly index ca451e32a8..821403d192 100644 --- a/Documentation/snippets/wind-headword.ly +++ b/Documentation/snippets/wind-headword.ly @@ -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 diff --git a/Documentation/snippets/woodwind-diagrams-key-lists.ly b/Documentation/snippets/woodwind-diagrams-key-lists.ly index f472cdafea..011aa3dcc6 100644 --- a/Documentation/snippets/woodwind-diagrams-key-lists.ly +++ b/Documentation/snippets/woodwind-diagrams-key-lists.ly @@ -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 { diff --git a/Documentation/snippets/woodwind-diagrams-listing.ly b/Documentation/snippets/woodwind-diagrams-listing.ly index 71a59920cc..db8661d843 100644 --- a/Documentation/snippets/woodwind-diagrams-listing.ly +++ b/Documentation/snippets/woodwind-diagrams-listing.ly @@ -19,6 +19,17 @@ defined in LilyPond. \relative c' { \textLengthOn + c1^ + \markup { + \center-column { + 'tin-whistle + " " + \woodwind-diagram + #'tin-whistle + #'() + } + } + c1^ \markup { \center-column { diff --git a/Documentation/topdocs/GNUmakefile b/Documentation/topdocs/GNUmakefile index ce3dc1f42b..43a99497c1 100644 --- a/Documentation/topdocs/GNUmakefile +++ b/Documentation/topdocs/GNUmakefile @@ -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 $< $@ diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index 47f0a70703..b562cc4d68 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -10,9 +10,18 @@ @node Top @top +@menu +* Compilation:: +@end menu + + @contents @include macros.itexi + +@node Compilation +@chapter Compilation + @include included/compile.itexi @bye diff --git a/Documentation/translations.itexi b/Documentation/translations.itexi index 4287d245eb..6951c1ce8f 100644 --- a/Documentation/translations.itexi +++ b/Documentation/translations.itexi @@ -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 +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + @html up to date @end html @@ -70,6 +94,29 @@ translated @ifhtml +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Federico Bruni +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + @html up to date @end html @@ -294,11 +341,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (53 %) @end html @end ifhtml @ifnothtml -translated +partially translated (53 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Francisco Vila @* @@ -1194,11 +1241,11 @@ translated @ifhtml @html -partially up to date +up to date @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 -translated +partially translated (48 %) @end html @end ifhtml @ifnothtml -translated +partially translated (48 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (48 %) @end html @end ifhtml @ifnothtml -translated +partially translated (48 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -partially translated (80 %) +partially translated (44 %) @end html @end ifhtml @ifnothtml -partially translated (80 %) +partially translated (44 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -1666,22 +1713,22 @@ up to date @ifhtml @html -translated +partially translated (48 %) @end html @end ifhtml @ifnothtml -translated +partially translated (48 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (48 %) @end html @end ifhtml @ifnothtml -translated +partially translated (48 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (35 %) @end html @end ifhtml @ifnothtml -translated +partially translated (35 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (35 %) @end html @end ifhtml @ifnothtml -translated +partially translated (35 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -partially translated (93 %) +partially translated (35 %) @end html @end ifhtml @ifnothtml -partially translated (93 %) +partially translated (35 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -1940,22 +1987,22 @@ up to date @ifhtml @html -translated +partially translated (35 %) @end html @end ifhtml @ifnothtml -translated +partially translated (35 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (35 %) @end html @end ifhtml @ifnothtml -translated +partially translated (35 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2137,7 +2184,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2203,11 +2250,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Jan Nieuwenhuizen @* @@ -2246,7 +2293,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2255,25 +2302,25 @@ partially up to date @item 4 Tweaking output @* -(15468) +(16191) @tab Pavel Fric @* @ifhtml @html -partially translated (98 %) +partially translated (50 %) @end html @end ifhtml @ifnothtml -partially translated (98 %) +partially translated (50 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2285,18 +2332,18 @@ partially up to date @ifhtml @html -translated +partially translated (52 %) @end html @end ifhtml @ifnothtml -translated +partially translated (52 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2377,11 +2424,11 @@ translated @ifhtml @html -partially up to date +up to date @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 -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2432,11 +2479,11 @@ Luca Rossetto Casel @ifhtml @html -not translated +translated @end html @end ifhtml @ifnothtml -not translated +translated @end ifnothtml @* @@ -2455,18 +2502,18 @@ up to date @ifhtml @html -translated +partially translated (98 %) @end html @end ifhtml @ifnothtml -translated +partially translated (98 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2498,45 +2545,45 @@ partially up to date @ifhtml @html -not translated +partially translated (98 %) @end html @end ifhtml @ifnothtml -not translated +partially translated (98 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @item A Templates @* -(219) +(372) @tab Pavel Fric @* @ifhtml @html -translated +partially translated (38 %) @end html @end ifhtml @ifnothtml -translated +partially translated (38 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2548,18 +2595,18 @@ partially up to date @ifhtml @html -translated +partially translated (38 %) @end html @end ifhtml @ifnothtml -translated +partially translated (38 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2628,7 +2675,7 @@ not translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -2726,11 +2773,11 @@ up to date @ifhtml @html -not translated +translated @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html translated @end html @@ -3206,26 +3233,6 @@ up to date @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html translated @end html @@ -3347,26 +3354,6 @@ up to date @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html translated @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 -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Francisco Vila @* @@ -3572,7 +3559,7 @@ translated @ifhtml @html -partially up to date +partially up to date @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 -up to date +partially up to date @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 -not translated +translated @end html @end ifhtml @ifnothtml -not translated +translated @end ifnothtml @* @@ -3755,7 +3742,7 @@ translated @ifhtml @html -partially up to date +partially up to date @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 -up to date +partially up to date @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 -not translated +translated @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 -up to date +partially up to date @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 -not translated +translated @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 -up to date +partially up to date @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 -not translated +translated @end html @end ifhtml @ifnothtml -not translated +translated @end ifnothtml @* @@ -4273,16 +4260,16 @@ translated @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @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 -Luca Rossetto Casel + @end html @end ifhtml @ifnothtml -Luca Rossetto Casel + @end ifnothtml @* @@ -4400,11 +4387,11 @@ Luca Rossetto Casel @ifhtml @html -not translated +translated @end html @end ifhtml @ifnothtml -not translated +translated @end ifnothtml @* @@ -4434,16 +4421,16 @@ translated @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @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 -Luca Rossetto Casel + @end html @end ifhtml @ifnothtml -Luca Rossetto Casel + @end ifnothtml @* @@ -4539,11 +4526,11 @@ Luca Rossetto Casel @ifhtml @html -not translated +translated @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 -up to date +partially up to date @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 -Luca Rossetto Casel + @end html @end ifhtml @ifnothtml -Luca Rossetto Casel + @end ifnothtml @* @@ -4709,11 +4696,11 @@ Luca Rossetto Casel @ifhtml @html -not translated +translated @end html @end ifhtml @ifnothtml -not translated +translated @end ifnothtml @* @@ -4743,11 +4730,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html partially translated (2 %) @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 -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -5045,16 +4992,16 @@ translated @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -5244,11 +5171,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @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 -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -5493,26 +5400,6 @@ up to date @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @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 -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -5709,16 +5576,16 @@ translated @ifhtml @html -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @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 -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -6053,11 +5880,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @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 -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -6457,26 +6244,6 @@ up to date @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @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 -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -6587,37 +6354,17 @@ translated @ifhtml @html -partially up to date +up to date @end html @end ifhtml @ifnothtml -partially up to date +up to date @end ifnothtml @tab Federico Bruni @* @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -6653,7 +6400,7 @@ translated @ifhtml @html -partially up to date +partially up to date @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 -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -6794,34 +6521,34 @@ translated @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (85 %) @end html @end ifhtml @ifnothtml -translated +partially translated (85 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -6889,37 +6616,17 @@ translated @ifhtml @html -partially up to date +up to date @end html @end ifhtml @ifnothtml -partially up to date +up to date @end ifnothtml @tab Federico Bruni @* @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -6944,18 +6651,18 @@ up to date @ifhtml @html -translated +partially translated (97 %) @end html @end ifhtml @ifnothtml -translated +partially translated (97 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @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 -partially translated (95 %) +translated @end html @end ifhtml @ifnothtml -partially translated (95 %) +translated @end ifnothtml @* @@ -7041,26 +6748,6 @@ up to date @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -7123,11 +6810,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @end html @@ -7341,26 +7008,6 @@ up to date @ifhtml -@html -Luca Rossetto Casel -@end html -@end ifhtml -@ifnothtml -Luca Rossetto Casel -@end ifnothtml -@* - -@ifhtml - -@html - -@end html -@end ifhtml -@ifnothtml - -@end ifnothtml -@ifhtml - @html not translated @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 -partially translated (98 %) +translated @end html @end ifhtml @ifnothtml -partially translated (98 %) +translated @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -7864,18 +7511,18 @@ up to date @ifhtml @html -partially translated (95 %) +partially translated (94 %) @end html @end ifhtml @ifnothtml -partially translated (95 %) +partially translated (94 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -7930,27 +7577,27 @@ up to date @ifhtml @html -translated +partially translated (97 %) @end html @end ifhtml @ifnothtml -translated +partially translated (97 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Francisco Vila @* @@ -8057,7 +7704,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -8123,11 +7770,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @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 -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -8325,16 +7972,16 @@ translated @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (87 %) @end html @end ifhtml @ifnothtml -translated +partially translated (87 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -translated +partially translated (87 %) @end html @end ifhtml @ifnothtml -translated +partially translated (87 %) @end ifnothtml @* @ifhtml @html -up to date +partially up to date @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 -up to date +partially up to date @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 -Jean-Charles Malahieude -@end html -@end ifhtml -@ifnothtml -Jean-Charles Malahieude -@end ifnothtml -@* - -@ifhtml - @html @end html @@ -8706,11 +8342,11 @@ translated @ifhtml @html -up to date +partially up to date @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 -partially up to date +up to date @end html @end ifhtml @ifnothtml -partially up to date +up to date @end ifnothtml @tab Jan Nieuwenhuizen @* @@ -9116,14 +8752,16 @@ translated @ifhtml @html -partially up to date +up to date @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 -partially up to date +up to date @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 -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @item Introduction @* -(4753) +(4937) @tab Pavel Fric @* @@ -9419,7 +9059,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -9442,11 +9082,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Francisco Vila @* @@ -9535,7 +9175,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -9603,7 +9243,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -9646,13 +9286,17 @@ translated @ifhtml @html -partially up to date +partially up to date @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 + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml @item Download @* -(1211) +(1201) @tab Pavel Fric @* @@ -9685,7 +9338,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -9708,11 +9361,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Francisco Vila @* @@ -9799,7 +9452,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -9865,11 +9518,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Jan Nieuwenhuizen @* @@ -9908,14 +9561,16 @@ translated @ifhtml @html -up to date +partially up to date @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 -partially up to date + @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 -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -9981,11 +9636,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Francisco Vila @* @@ -10070,7 +9725,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -10136,11 +9791,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Jan Nieuwenhuizen @* @@ -10179,17 +9834,37 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Ben Luo @* @ifhtml +@html +Anthony Fok +@end html +@end ifhtml +@ifnothtml +Anthony Fok +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + @html translated @end html @@ -10202,7 +9877,7 @@ translated @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -10461,6 +10136,26 @@ up to date @ifhtml +@html +Anthony Fok +@end html +@end ifhtml +@ifnothtml +Anthony Fok +@end ifnothtml +@* + +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml +@ifhtml + @html not translated @end html @@ -10482,25 +10177,25 @@ up to date @item Community @* -(3006) +(3073) @tab  Pavel Fric @* @ifhtml @html -partially translated (96 %) +partially translated (95 %) @end html @end ifhtml @ifnothtml -partially translated (96 %) +partially translated (95 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -10512,18 +10207,18 @@ partially up to date @ifhtml @html -translated +partially translated (97 %) @end html @end ifhtml @ifnothtml -translated +partially translated (97 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -10546,11 +10241,11 @@ translated @ifhtml @html -partially up to date +up to date @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 -Jean-Charles Malahieude + @end html @end ifhtml @ifnothtml -Jean-Charles Malahieude + @end ifnothtml @* @@ -10591,11 +10286,11 @@ translated @ifhtml @html -partially up to date +up to date @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 -partially translated (96 %) +partially translated (95 %) @end html @end ifhtml @ifnothtml -partially translated (96 %) +partially translated (95 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @end html @end ifhtml @ifnothtml @@ -10657,11 +10352,11 @@ translated @ifhtml @html -partially up to date +up to date @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 -translated +partially translated (97 %) @end html @end ifhtml @ifnothtml -translated +partially translated (97 %) @end ifnothtml @* @ifhtml @html -partially up to date +partially up to date @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 -partially translated (96 %) +partially translated (97 %) @end html @end ifhtml @ifnothtml -partially translated (96 %) +partially translated (97 %) @end ifnothtml @* +@ifhtml + +@html + +@end html +@end ifhtml +@ifnothtml + +@end ifnothtml @end multitable diff --git a/Documentation/usage/GNUmakefile b/Documentation/usage/GNUmakefile deleted file mode 100644 index 26e33a6901..0000000000 --- a/Documentation/usage/GNUmakefile +++ /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 - - diff --git a/Documentation/usage/external.itely b/Documentation/usage/external.itely index 2eda953374..f6cbc0980c 100644 --- a/Documentation/usage/external.itely +++ b/Documentation/usage/external.itely @@ -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 diff --git a/Documentation/usage/lilypond-book.itely b/Documentation/usage/lilypond-book.itely index 5225b67d5c..c14c49b43b 100644 --- a/Documentation/usage/lilypond-book.itely +++ b/Documentation/usage/lilypond-book.itely @@ -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]{} -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{} command, where you can directly enter short -lilypond code +the @code{} command, where you can directly enter +short lilypond code @item -the @code{...} environment, where you can directly -enter longer lilypond code +the @code{@dots{}} environment, where you can +directly enter longer lilypond code @item -the @code{...} command to insert a lilypond file +the @code{@dots{}} command to insert a +lilypond file @item -the @code{...} command to insert a MusicXML -file, which will be processed by @code{musicxml2ly} and @code{lilypond}. +the @code{@dots{}} 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{}, where the options +For inline pictures, use @code{}, where the options are separated by a colon from the music, for example @example @@ -554,7 +556,7 @@ Some music in a line of text. To include separate files, say @example -@var{filename} +@var{filename} @end example @code{} uses the same syntax as @code{}, 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 diff --git a/Documentation/usage/running.itely b/Documentation/usage/running.itely index db31e43471..9e736bda01 100644 --- a/Documentation/usage/running.itely +++ b/Documentation/usage/running.itely @@ -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 diff --git a/Documentation/usage/suggestions.itely b/Documentation/usage/suggestions.itely index 24a7bb2e76..2c6fcaca8f 100644 --- a/Documentation/usage/suggestions.itely +++ b/Documentation/usage/suggestions.itely @@ -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 diff --git a/Documentation/usage/updating.itely b/Documentation/usage/updating.itely index 2075925c78..ad92a834e3 100644 --- a/Documentation/usage/updating.itely +++ b/Documentation/usage/updating.itely @@ -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 diff --git a/Documentation/web.texi b/Documentation/web.texi index e6b077d328..621488e92f 100644 --- a/Documentation/web.texi +++ b/Documentation/web.texi @@ -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 index 278256fb91..0000000000 --- a/Documentation/web/GNUmakefile +++ /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) - diff --git a/Documentation/web/community.itexi b/Documentation/web/community.itexi index d06932a3ff..54723d77f5 100644 --- a/Documentation/web/community.itexi +++ b/Documentation/web/community.itexi @@ -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 diff --git a/Documentation/web/download.itexi b/Documentation/web/download.itexi index e0d3b5de0e..91bd1a334c 100644 --- a/Documentation/web/download.itexi +++ b/Documentation/web/download.itexi @@ -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 diff --git a/Documentation/web/introduction.itexi b/Documentation/web/introduction.itexi index 5feb5a7f00..01172cc00f 100644 --- a/Documentation/web/introduction.itexi +++ b/Documentation/web/introduction.itexi @@ -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}. diff --git a/Documentation/web/manuals.itexi b/Documentation/web/manuals.itexi index a46ab720da..956ac12976 100644 --- a/Documentation/web/manuals.itexi +++ b/Documentation/web/manuals.itexi @@ -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} diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi index 0de5407942..5828ad3728 100644 --- a/Documentation/web/news-front.itexi +++ b/Documentation/web/news-front.itexi @@ -9,21 +9,106 @@ @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 diff --git a/Documentation/web/news.itexi b/Documentation/web/news.itexi index 1331adfcf2..ea3ba36ad9 100644 --- a/Documentation/web/news.itexi +++ b/Documentation/web/news.itexi @@ -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 index 99edf28d03..0000000000 --- a/Documentation/web/server/GNUmakefile +++ /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 - diff --git a/Documentation/web/server/lilypond.org.htaccess b/Documentation/web/server/lilypond.org.htaccess index d696f1093e..5e7dfae3d9 100644 --- a/Documentation/web/server/lilypond.org.htaccess +++ b/Documentation/web/server/lilypond.org.htaccess @@ -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 diff --git a/Documentation/web/server/robots.txt b/Documentation/web/server/robots.txt index 27db672a39..ccc8ed800d 100644 --- a/Documentation/web/server/robots.txt +++ b/Documentation/web/server/robots.txt @@ -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/ diff --git a/Documentation/web/server/tweets.xml b/Documentation/web/server/tweets.xml index 1eb2eb29e1..d6f425ed24 100644 --- a/Documentation/web/server/tweets.xml +++ b/Documentation/web/server/tweets.xml @@ -1,60 +1,25 @@ - -<a target="_blank" -href="http://www.inadiutorium.xf.cz"> -Project</a> in adiutorium provides chants to the catholic Divine -Office in the Czech language. We use LilyPond for the typesetting. - - -28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton -de Lully au -<a -href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm" -target="_blank" -> -festival -de Beaune</a>, -en utilisant un <a -href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39" -target="_blank" -> -matériel créé avec LilyPond. -</a> - - -28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton -de Lully au -<a -href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm" -target="_blank" -> -festival -de Beaune</a>, -en utilisant un <a -href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39" -target="_blank" -> -matériel créé avec LilyPond</a>. - - -2012.07.28: Christophe Rousset and Les Talens Lyriques play Phaëton by Lully -at the -<a -href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm" -target="_blank" -> -Beaune festival</a>, using -<a -href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39" -target="_blank" -> -music typeset with LilyPond</a>. - - -Schumann - <a target="_blank" -href="http://superbonus.project.free.fr/spip.php?article50"> -Album pour la Jeunesse</a>, Op. 68. -Currently in French or German, with or without -fingering. LilyPond typeset and freely downloadable! - + + The LilyPond Blog is up and running <a + href="http://www.lilypondblog.org">here</a>! Anyone can + follow and leave comments on the blog. To contribute, + contact <a + href="mailto:janek.lilypond@gmail.com">Janek Warchoł</a>. + + + Adam Spiers has build a web site which uses LilyPond to dynamically + generate images of chords and scales called <a + href="http://scalematcher.adamspiers.org/">Scale matcher</a>. + + + Ben Lemon has created some LilyPond tutorials on YouTube. Read + about them on his <a + href="http://benlemon.me/blog/music/lilypond/operation-lilypond/">blog</a>. + + + Server Acim, composer and professor of Composition and Conducting + in İnönü University - Malatya, Turkey, wrote the + Turkish Ebook <a href="http://yadi.sk/d/fNmncSQ3DR3Ck"> + "GNU/LilyPond, Özgür Bir Nota Yazma Programı"</a>. + diff --git a/Documentation/web/we-wrote.bib b/Documentation/web/we-wrote.bib index 2ed03b5350..6b8b02c627 100644 --- a/Documentation/web/we-wrote.bib +++ b/Documentation/web/we-wrote.bib @@ -42,4 +42,11 @@ 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})} +} diff --git a/Documentation/zh/GNUmakefile b/Documentation/zh/GNUmakefile index c46b13bb43..08ecf84576 100644 --- a/Documentation/zh/GNUmakefile +++ b/Documentation/zh/GNUmakefile @@ -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 index 0000000000..e69de29bb2 diff --git a/Documentation/zh/included/GNUmakefile b/Documentation/zh/included/GNUmakefile deleted file mode 100644 index afe7a4d738..0000000000 --- a/Documentation/zh/included/GNUmakefile +++ /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/zh/search-box.ihtml b/Documentation/zh/search-box.ihtml index 844b22bccb..639cf4d778 100644 --- a/Documentation/zh/search-box.ihtml +++ b/Documentation/zh/search-box.ihtml @@ -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". --> diff --git a/Documentation/zh/texidocs/GNUmakefile b/Documentation/zh/texidocs/GNUmakefile deleted file mode 100644 index 0ffa75869c..0000000000 --- a/Documentation/zh/texidocs/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth=../../.. - -EXTRA_DIST_FILES=$(call src-wildcard,*.texidoc) - -include $(depth)/make/stepmake.make diff --git a/Documentation/zh/translations.itexi b/Documentation/zh/translations.itexi index 7d48824e9b..ed86a34394 100644 --- a/Documentation/zh/translations.itexi +++ b/Documentation/zh/translations.itexi @@ -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 -部分地 +是 @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 -是 +不适用 @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 +不适用 +@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 -部分地 +不适用 @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 -部分地 +部分 @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 -部分 (96 %) +部分 (97 %) @end html @end ifhtml @ifnothtml -部分 (96 %) +部分 (97 %) @end ifnothtml @tab -@tab pre-GDP +@ifhtml + +@html +不适用 +@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 index 425cc1d8e2..0000000000 --- a/Documentation/zh/web/GNUmakefile +++ /dev/null @@ -1,5 +0,0 @@ -depth = ../../.. - -LOCALSTEPMAKE_TEMPLATES = ly - -include $(depth)/make/stepmake.make diff --git a/Documentation/zh/web/community.itexi b/Documentation/zh/web/community.itexi index a01e5abbbe..f073b63069 100644 --- a/Documentation/zh/web/community.itexi +++ b/Documentation/zh/web/community.itexi @@ -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} diff --git a/GNUmakefile.in b/GNUmakefile.in index 512b8ef598..74f2551393 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -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) diff --git a/INSTALL.txt b/INSTALL.txt index 0bd9f80979..dedfe57602 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -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 . Send bug reports to . @@ -736,7 +740,7 @@ to . 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.) /usr/X11R6/lib/X11/fonts 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 753f485dbe..e03b1e19ae 100644 --- 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 index 0000000000..41e80d6039 --- /dev/null +++ b/LICENSE.OFL @@ -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. diff --git a/NEWS.txt b/NEWS.txt index c285a1cdf9..a4897e727a 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -1,296 +1,345 @@ -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 { 1 } + \layout { indent=0 } } , + cello: \score { \new Staff { \clef "bass" } + \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 r r } \\ + { d r a r bes r } >> | + 1 + } + \new Staff \relative + { \clef "treble" \freeBass "1" + r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef "bass" \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 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: + 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'' 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 "• † ©right; &OE; &ss; ¶" [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. -  diff --git a/ROADMAP b/ROADMAP index 99ad6b7fb6..2616c11c16 100644 --- 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 index 783d75f8a5..0000000000 --- a/THANKS +++ /dev/null @@ -1,820 +0,0 @@ -Release 2.16 -************ - -For information about the various official or semi-official positions, -check out - -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 808c65e888..a830836264 100644 --- 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 diff --git a/aclocal.m4 b/aclocal.m4 index 682b6b1bd1..c9f0093381 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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' diff --git a/autogen.sh b/autogen.sh index 34c022e082..46dd22f98b 100755 --- a/autogen.sh +++ b/autogen.sh @@ -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 diff --git a/config.make.in b/config.make.in index aa674379e3..9837fc3e49 100644 --- a/config.make.in +++ b/config.make.in @@ -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 index 0000000000..115f944a61 --- /dev/null +++ b/config/config.guess @@ -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 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 ." + +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 /* 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 + + 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 + #include + + 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 + 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' /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 + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # 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 < +# include +#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 + 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 +# 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 < 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 index 0000000000..204218c073 --- /dev/null +++ b/config/config.sub @@ -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 . 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 ." + +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 index 0000000000..e69de29bb2 diff --git a/configure b/configure index 70107de1bf..33dec6d88f 100755 --- 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 index 0000000000..008befe4ec --- /dev/null +++ b/configure.ac @@ -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 ]) +AC_CHECK_TYPES([scm_t_subr], + [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [], + [#include ]) +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 ], + [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 ], + [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 +#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 <]) -AC_CHECK_TYPES([scm_t_subr], - [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [], - [#include ]) -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 ], - [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 ], - [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 -#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 < -+ -+ * emacsclient.c: Added support for +LINE:COLUMN style arguments. -+ - 1999-12-04 Gerd Moellmann - - * 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 - #include - #include - #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 - #include - -+ - #ifdef HAVE_UNISTD_H - #include - #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 -+ -+ * server.el (server-process-filter,server-visit-files): add support for "LINE:COLUMN" -+ style emacsclient calls. -+ - 1999-12-04 Gerd Moellmann - - * 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))) -+ - - (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~ diff --git a/elisp/lilypond-mode.el b/elisp/lilypond-mode.el index 934d1d6f0b..be05016071 100644 --- a/elisp/lilypond-mode.el +++ b/elisp/lilypond-mode.el @@ -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 index fb3c59f189..0000000000 --- a/elisp/server.el.patch +++ /dev/null @@ -1,165 +0,0 @@ -From: Jan Nieuwenhuizen -Subject: Bugfix and feature for server.el -To: emacs-devel@gnu.org -cc: Han-Wen -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 - - * 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 | GNU LilyPond - The music typesetter -http://www.xs4all.nl/~jantien | http://www.lilypond.org - - - - diff --git a/flower/GNUmakefile b/flower/GNUmakefile index 83fc5576fa..2b5b304cfa 100644 --- a/flower/GNUmakefile +++ b/flower/GNUmakefile @@ -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 diff --git a/flower/file-name.cc b/flower/file-name.cc index c24c0731e4..1746c2c28d 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -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); diff --git a/flower/file-path.cc b/flower/file-path.cc index d0dd3a1f99..b19732d15e 100644 --- a/flower/file-path.cc +++ b/flower/file-path.cc @@ -47,13 +47,13 @@ File_path::directories () const #include 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 index 3ac9dd0fa1..0000000000 --- a/flower/include/GNUmakefile +++ /dev/null @@ -1,10 +0,0 @@ -# flower/lib/include/Makefile - - -depth = ../.. - -STEPMAKE_TEMPLATES=c++ - -include $(depth)/make/stepmake.make - - diff --git a/flower/include/file-name.hh b/flower/include/file-name.hh index 3e9c6d5294..4822783fc6 100644 --- a/flower/include/file-name.hh +++ b/flower/include/file-name.hh @@ -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 diff --git a/flower/include/file-path.hh b/flower/include/file-path.hh index 29ca17f246..8c8049391d 100644 --- a/flower/include/file-path.hh +++ b/flower/include/file-path.hh @@ -38,16 +38,16 @@ class File_path public: vector 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 */ diff --git a/flower/include/guile-compatibility.hh b/flower/include/guile-compatibility.hh index 7c249afe89..3ef0413772 100644 --- a/flower/include/guile-compatibility.hh +++ b/flower/include/guile-compatibility.hh @@ -36,4 +36,12 @@ 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 */ diff --git a/flower/include/international.hh b/flower/include/international.hh index 6dd46c28e9..5797a293f7 100644 --- a/flower/include/international.hh +++ b/flower/include/international.hh @@ -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 */ diff --git a/flower/include/interval-set.hh b/flower/include/interval-set.hh index b0acda6509..6ea7b43173 100644 --- a/flower/include/interval-set.hh +++ b/flower/include/interval-set.hh @@ -23,20 +23,20 @@ #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 allowed_regions_; - +public: Interval_set (); - void set_full (); - void remove_interval (Interval rm); + + static Interval_set interval_union (vector); + + vector const &intervals () const { return intervals_; } + vector::const_iterator upper_bound (Real x) const; + Real nearest_point (Real x, Direction dir = CENTER) const; + Interval_set complement () const; + +private: + vector intervals_; }; #endif /* INTERVAL_SET_HH */ diff --git a/flower/include/std-string.hh b/flower/include/std-string.hh index 5b7d2af11d..6b6e8ef972 100644 --- a/flower/include/std-string.hh +++ b/flower/include/std-string.hh @@ -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 &); diff --git a/flower/include/std-vector.hh b/flower/include/std-vector.hh index dd276df186..8275b92930 100644 --- a/flower/include/std-vector.hh +++ b/flower/include/std-vector.hh @@ -30,6 +30,7 @@ #endif #endif +#include "config.hh" /* needed at least for HAVE_STL_DATA_METHOD */ #include /* find, reverse, sort */ #include /* unary_function */ #include @@ -258,7 +259,7 @@ junk_pointers (vector &v) } vector string_split (string str, char c); -string string_join (vector const &strs, string infix); +string string_join (vector const &strs, const string &infix); #define iterof(i,s) typeof((s).begin()) i((s).begin()) diff --git a/flower/include/string-convert.hh b/flower/include/string-convert.hh index 148005672e..6b4fba023f 100644 --- a/flower/include/string-convert.hh +++ b/flower/include/string-convert.hh @@ -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 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); diff --git a/flower/include/warn.hh b/flower/include/warn.hh index 25240113ca..333e95a94e 100644 --- a/flower/include/warn.hh +++ b/flower/include/warn.hh @@ -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 */ diff --git a/flower/include/yaffut.hh b/flower/include/yaffut.hh index aa54fa6616..148d1a8801 100644 --- a/flower/include/yaffut.hh +++ b/flower/include/yaffut.hh @@ -21,6 +21,7 @@ #include #include #include +#include #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 s_Registrator; Test (): Suite () { - Registrator* r = &s_Registrator; + Registrator *r = &s_Registrator; (void)r; } template @@ -301,7 +302,7 @@ struct Test: public ITest static Registrator s_Registrator; Test () { - Registrator* r = &s_Registrator; + Registrator *r = &s_Registrator; (void)r; } template diff --git a/flower/international.cc b/flower/international.cc index cbdcf58d6e..2e6a09df9f 100644 --- a/flower/international.cc +++ b/flower/international.cc @@ -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 ()); diff --git a/flower/interval-set.cc b/flower/interval-set.cc index 84bde76a9c..f1aaea59fc 100644 --- a/flower/interval-set.cc +++ b/flower/interval-set.cc @@ -22,55 +22,106 @@ /* 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 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::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::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; } diff --git a/flower/std-string.cc b/flower/std-string.cc index d2c2d624d2..7dc9d47311 100644 --- a/flower/std-string.cc +++ b/flower/std-string.cc @@ -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 const &strs, string infix) +string_join (vector const &strs, const string &infix) { string result; for (vsize i = 0; i < strs.size (); i++) diff --git a/flower/string-convert.cc b/flower/string-convert.cc index 68e6a0c0b8..745a98ecea 100644 --- a/flower/string-convert.cc +++ b/flower/string-convert.cc @@ -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(s.c_str ()), s.length ()); } string String_convert::to_lower (string s) { - return strnlwr ((char *)s.c_str (), s.length ()); + return strnlwr (const_cast(s.c_str ()), s.length ()); } string diff --git a/flower/test-interval-set.cc b/flower/test-interval-set.cc new file mode 100644 index 0000000000..5b4d1f637e --- /dev/null +++ b/flower/test-interval-set.cc @@ -0,0 +1,110 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2012 Joe Neeman + + 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 . +*/ + +#include "interval-set.hh" + +#include "yaffut.hh" + +using namespace std; + +FUNC (interval_set_union) +{ + vector 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 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 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); +} diff --git a/flower/warn.cc b/flower/warn.cc index f3f6e1c743..52e2a42508 100644 --- a/flower/warn.cc +++ b/flower/warn.cc @@ -99,7 +99,7 @@ set_loglevel (string level) * expected warnings again. */ vector 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); } diff --git a/input/regression/AAA-intro-regression.tely b/input/regression/AAA-intro-regression.tely old mode 100755 new mode 100644 diff --git a/input/regression/abc2ly/clefs.abc b/input/regression/abc2ly/clefs.abc old mode 100755 new mode 100644 diff --git a/input/regression/accidental-ancient.ly b/input/regression/accidental-ancient.ly index 153ae207b1..b242547058 100644 --- a/input/regression/accidental-ancient.ly +++ b/input/regression/accidental-ancient.ly @@ -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 } diff --git a/input/regression/accidental-cautionary.ly b/input/regression/accidental-cautionary.ly index babfea8703..70f4e8fa0a 100644 --- a/input/regression/accidental-cautionary.ly +++ b/input/regression/accidental-cautionary.ly @@ -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 } diff --git a/input/regression/accidental-clef-change.ly b/input/regression/accidental-clef-change.ly index 4420086565..bab45b8d93 100644 --- a/input/regression/accidental-clef-change.ly +++ b/input/regression/accidental-clef-change.ly @@ -9,10 +9,10 @@ \version "2.16.0" \new Staff \relative c' { - \key g\major - \clef treble - cis dis f - \clef bass - + \key g \major + \clef treble + cis dis f + \clef bass + } diff --git a/input/regression/accidental-collision.ly b/input/regression/accidental-collision.ly index aab51034c8..063c8065b1 100644 --- a/input/regression/accidental-collision.ly +++ b/input/regression/accidental-collision.ly @@ -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 <> +\new Staff \relative c' <> diff --git a/input/regression/accidental-contemporary.ly b/input/regression/accidental-contemporary.ly index f34d2392fa..eb05abcddb 100644 --- a/input/regression/accidental-contemporary.ly +++ b/input/regression/accidental-contemporary.ly @@ -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 index 0000000000..ac7a07e9c0 --- /dev/null +++ b/input/regression/accidental-fingering-collision.ly @@ -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) + | +} \ No newline at end of file diff --git a/input/regression/accidental-grouping.ly b/input/regression/accidental-grouping.ly new file mode 100644 index 0000000000..b8cfce4fbc --- /dev/null +++ b/input/regression/accidental-grouping.ly @@ -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''' { + << { 1 } \\ + { eis, } >> + \set Staff . accidentalGrouping = #'voice + << { 1 } \\ + { eis, } >> +} diff --git a/input/regression/accidental-piano.ly b/input/regression/accidental-piano.ly index 170c4b32a2..c1c64c80cb 100644 --- a/input/regression/accidental-piano.ly +++ b/input/regression/accidental-piano.ly @@ -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 } >> diff --git a/input/regression/accidental-placement-padding.ly b/input/regression/accidental-placement-padding.ly index 0b40e548a1..5cf5c665f8 100644 --- a/input/regression/accidental-placement-padding.ly +++ b/input/regression/accidental-placement-padding.ly @@ -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 1 1 } diff --git a/input/regression/accidental-suggestions.ly b/input/regression/accidental-suggestions.ly index 3beb51a0fd..6e0a867ffa 100644 --- a/input/regression/accidental-suggestions.ly +++ b/input/regression/accidental-suggestions.ly @@ -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' } diff --git a/input/regression/accidental-tie.ly b/input/regression/accidental-tie.ly index c81aed3390..f69a7a8575 100644 --- a/input/regression/accidental-tie.ly +++ b/input/regression/accidental-tie.ly @@ -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 ~ diff --git a/input/regression/accidental-voice.ly b/input/regression/accidental-voice.ly index bd06e7fc66..61cebc5625 100644 --- a/input/regression/accidental-voice.ly +++ b/input/regression/accidental-voice.ly @@ -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 index 0000000000..65940464d8 --- /dev/null +++ b/input/regression/add-grace-property.ly @@ -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 index 0000000000..ab22af643b --- /dev/null +++ b/input/regression/add-stem-support.ly @@ -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 + 2..-> + r16 eeses'16 + \set fingeringOrientations = #'(right) + 8-1-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 diff --git a/input/regression/alignment-order.ly b/input/regression/alignment-order.ly index cbd9fa3098..5a6be94daf 100644 --- a/input/regression/alignment-order.ly +++ b/input/regression/alignment-order.ly @@ -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 } } diff --git a/input/regression/alignment-vertical-manual-setting.ly b/input/regression/alignment-vertical-manual-setting.ly index 3613c57ca2..1314f2941a 100644 --- a/input/regression/alignment-vertical-manual-setting.ly +++ b/input/regression/alignment-vertical-manual-setting.ly @@ -6,7 +6,7 @@ } -\version "2.16.0" +\version "2.17.6" \book { \score { @@ -15,18 +15,15 @@ \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 } diff --git a/input/regression/allfontstyle.ily b/input/regression/allfontstyle.ily index 1a37432f74..c2236ba243 100644 --- a/input/regression/allfontstyle.ily +++ b/input/regression/allfontstyle.ily @@ -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 } diff --git a/input/regression/alter-broken.ly b/input/regression/alter-broken.ly index 43dc32dc5d..14652297e6 100644 --- a/input/regression/alter-broken.ly +++ b/input/regression/alter-broken.ly @@ -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\! diff --git a/input/regression/ambitus-gap.ly b/input/regression/ambitus-gap.ly index adc38287ee..65848e4507 100644 --- a/input/regression/ambitus-gap.ly +++ b/input/regression/ambitus-gap.ly @@ -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' } +>> diff --git a/input/regression/ambitus-with-ligature.ly b/input/regression/ambitus-with-ligature.ly index 2a9c0f4482..fa22244c6d 100644 --- a/input/regression/ambitus-with-ligature.ly +++ b/input/regression/ambitus-with-ligature.ly @@ -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 \] } diff --git a/input/regression/arpeggio-collision.ly b/input/regression/arpeggio-collision.ly index 4f4a22f4b4..5fccbca3a6 100644 --- a/input/regression/arpeggio-collision.ly +++ b/input/regression/arpeggio-collision.ly @@ -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." \arpeggio \arpeggio \arpeggio + << { \arpeggio } \\ { \arpeggio } >> } diff --git a/input/regression/arpeggio-no-overshoot.ly b/input/regression/arpeggio-no-overshoot.ly index 5368458a8a..96ebc54854 100644 --- a/input/regression/arpeggio-no-overshoot.ly +++ b/input/regression/arpeggio-no-overshoot.ly @@ -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) 1\arpeggio 1\arpeggio 2\arpeggio \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 index 0000000000..d5ba546c56 --- /dev/null +++ b/input/regression/arpeggio-span-one-staff-collision.ly @@ -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. 4\arpeggio |} + \\ + {\repeat unfold 12 aes,16 4\arpeggio |} + >> +} diff --git a/input/regression/arpeggio.ly b/input/regression/arpeggio.ly index dc6ae63480..8b3076328b 100644 --- a/input/regression/arpeggio.ly +++ b/input/regression/arpeggio.ly @@ -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. \arpeggio \arpeggioArrowUp \arpeggio - %%\override PianoStaff.SpanArpeggio #'connect = ##t + %%\override PianoStaff.SpanArpeggio.connect = ##t \set PianoStaff.connectArpeggios = ##t \arpeggio } diff --git a/input/regression/auto-beam-bar.ly b/input/regression/auto-beam-bar.ly index 8daa66e330..34fa328dda 100644 --- a/input/regression/auto-beam-bar.ly +++ b/input/regression/auto-beam-bar.ly @@ -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 } diff --git a/input/regression/auto-beam-beaming-override.ly b/input/regression/auto-beam-beaming-override.ly index 6798aa8e83..c811a5d963 100644 --- a/input/regression/auto-beam-beaming-override.ly +++ b/input/regression/auto-beam-beaming-override.ly @@ -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 } diff --git a/input/regression/auto-beam-triplet.ly b/input/regression/auto-beam-triplet.ly index 121a22f79f..a9229e1df2 100644 --- a/input/regression/auto-beam-triplet.ly +++ b/input/regression/auto-beam-triplet.ly @@ -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} } diff --git a/input/regression/auto-beam-tuplets.ly b/input/regression/auto-beam-tuplets.ly index 89a2e7c4bf..1b9e3abb1f 100644 --- a/input/regression/auto-beam-tuplets.ly +++ b/input/regression/auto-beam-tuplets.ly @@ -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 } } diff --git a/input/regression/autobeam-3-4-rules.ly b/input/regression/autobeam-3-4-rules.ly index 4a098e33d8..79aad6b6bb 100644 --- a/input/regression/autobeam-3-4-rules.ly +++ b/input/regression/autobeam-3-4-rules.ly @@ -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. diff --git a/input/regression/autobeam-tuplet-recheck.ly b/input/regression/autobeam-tuplet-recheck.ly index fbd81b8ec2..37a1361d9b 100644 --- a/input/regression/autobeam-tuplet-recheck.ly +++ b/input/regression/autobeam-tuplet-recheck.ly @@ -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 } diff --git a/input/regression/backend-excercise.ly b/input/regression/backend-excercise.ly index aa83c7ff8f..018c014da8 100644 --- a/input/regression/backend-excercise.ly +++ b/input/regression/backend-excercise.ly @@ -2,7 +2,7 @@ texidoc = "Exercise all output functions" } -\version "2.16.0" +\version "2.17.11" \paper { ragged-right = ##t } @@ -11,18 +11,18 @@ \new Staff { \ottava #1 - \times 2/3 { c8[\< f]( f''\!) } + \tuplet 3/2 { c8[\< f]( f''\!) } \ottava #0 4 - \override TextScript #'color = #red + \override TextScript.color = #red g4^"red" } \new Staff \relative c'' { \makeClusters { 8 4 } - \override Glissando #'style = #'zigzag + \override Glissando.style = #'zigzag \slurDashed f2( \glissando f') \easyHeadsOn diff --git a/input/regression/baerenreiter-sarabande.ly b/input/regression/baerenreiter-sarabande.ly index 5c5af19ced..426bbf4b18 100644 --- a/input/regression/baerenreiter-sarabande.ly +++ b/input/regression/baerenreiter-sarabande.ly @@ -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 diff --git a/input/regression/balloon.ly b/input/regression/balloon.ly index 3ba915b3ca..65264d4833 100644 --- a/input/regression/balloon.ly +++ b/input/regression/balloon.ly @@ -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" } 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 } } } diff --git a/input/regression/bar-check-redefine.ly b/input/regression/bar-check-redefine.ly index 6fde50c37e..11d0690743 100644 --- a/input/regression/bar-check-redefine.ly +++ b/input/regression/bar-check-redefine.ly @@ -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 } diff --git a/input/regression/bar-extent.ly b/input/regression/bar-extent.ly index a39a8b7976..0b4fefc86c 100644 --- a/input/regression/bar-extent.ly +++ b/input/regression/bar-extent.ly @@ -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 index 0000000000..cceab759f1 --- /dev/null +++ b/input/regression/bar-line-define-bar-glyph.ly @@ -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 index 0000000000..b181aa3890 --- /dev/null +++ b/input/regression/bar-line-define-bar-line.ly @@ -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 + } +>> diff --git a/input/regression/bar-line-segno.ly b/input/regression/bar-line-segno.ly index 17d5a7dc0e..3bbf05e075 100644 --- a/input/regression/bar-line-segno.ly +++ b/input/regression/bar-line-segno.ly @@ -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 { diff --git a/input/regression/bar-lines.ly b/input/regression/bar-lines.ly index 359ccb4dd2..3beb61a904 100644 --- a/input/regression/bar-lines.ly +++ b/input/regression/bar-lines.ly @@ -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 diff --git a/input/regression/bar-number-volta-repeat.ly b/input/regression/bar-number-volta-repeat.ly index 8672a924f8..6a3e4bf075 100644 --- a/input/regression/bar-number-volta-repeat.ly +++ b/input/regression/bar-number-volta-repeat.ly @@ -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 | diff --git a/input/regression/bar-number.ly b/input/regression/bar-number.ly index 719c3f7acb..ca1d1ff2c9 100644 --- a/input/regression/bar-number.ly +++ b/input/regression/bar-number.ly @@ -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 } diff --git a/input/regression/beam-beamlet-break.ly b/input/regression/beam-beamlet-break.ly index 8e06a82089..6f13e58a9e 100644 --- a/input/regression/beam-beamlet-break.ly +++ b/input/regression/beam-beamlet-break.ly @@ -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 } diff --git a/input/regression/beam-beamlet-grace.ly b/input/regression/beam-beamlet-grace.ly index 73de47896c..75de18e031 100644 --- a/input/regression/beam-beamlet-grace.ly +++ b/input/regression/beam-beamlet-grace.ly @@ -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 } diff --git a/input/regression/beam-break-no-bar.ly b/input/regression/beam-break-no-bar.ly index 7684ece58a..cb5a0b644a 100644 --- a/input/regression/beam-break-no-bar.ly +++ b/input/regression/beam-break-no-bar.ly @@ -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 [ diff --git a/input/regression/beam-break.ly b/input/regression/beam-break.ly index c56fb8d602..0edbf53cd7 100644 --- a/input/regression/beam-break.ly +++ b/input/regression/beam-break.ly @@ -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-] } diff --git a/input/regression/beam-broken-classic.ly b/input/regression/beam-broken-classic.ly index 92b0f00967..22262a8561 100644 --- a/input/regression/beam-broken-classic.ly +++ b/input/regression/beam-broken-classic.ly @@ -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 } diff --git a/input/regression/beam-broken-difficult.ly b/input/regression/beam-broken-difficult.ly index 4c6c8a0302..561ca74d79 100644 --- a/input/regression/beam-broken-difficult.ly +++ b/input/regression/beam-broken-difficult.ly @@ -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 diff --git a/input/regression/beam-center-slope.ly b/input/regression/beam-center-slope.ly index efad10820a..2e09fa6342 100644 --- a/input/regression/beam-center-slope.ly +++ b/input/regression/beam-center-slope.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.17.6" \header{ texidoc="Simple beams on middle staffline are allowed to be @@ -14,11 +14,11 @@ } \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] diff --git a/input/regression/beam-collision-basic.ly b/input/regression/beam-collision-basic.ly index e7951e15ab..507b5a5560 100644 --- a/input/regression/beam-collision-basic.ly +++ b/input/regression/beam-collision-basic.ly @@ -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 { @@ -45,14 +45,14 @@ << \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, diff --git a/input/regression/beam-collision-beamcount.ly b/input/regression/beam-collision-beamcount.ly index 3e852029b9..8f499e3683 100644 --- a/input/regression/beam-collision-beamcount.ly +++ b/input/regression/beam-collision-beamcount.ly @@ -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 { diff --git a/input/regression/beam-collision-classic.ly b/input/regression/beam-collision-classic.ly index b4e717c8f7..95dd35c78b 100644 --- a/input/regression/beam-collision-classic.ly +++ b/input/regression/beam-collision-classic.ly @@ -7,7 +7,7 @@ % debug-beam-scoring = ##t } -\version "2.16.0" +\version "2.17.6" \new Staff { @@ -36,7 +36,7 @@ s4. 4. } \\ { -% \override Beam #'inspect-quants = #'(-4 . -3) +% \override Beam.inspect-quants = #'(-4 . -3) a8[ d e f g] } >> diff --git a/input/regression/beam-collision-grace.ly b/input/regression/beam-collision-grace.ly index 441ed49865..cdc747be20 100644 --- a/input/regression/beam-collision-grace.ly +++ b/input/regression/beam-collision-grace.ly @@ -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'{ diff --git a/input/regression/beam-collision-off.ly b/input/regression/beam-collision-off.ly index 68378389dd..aec8fa6d00 100644 --- a/input/regression/beam-collision-off.ly +++ b/input/regression/beam-collision-off.ly @@ -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 diff --git a/input/regression/beam-collision-prefatory-matter.ly b/input/regression/beam-collision-prefatory-matter.ly index 15cdea9bd3..b601528b95 100644 --- a/input/regression/beam-collision-prefatory-matter.ly +++ b/input/regression/beam-collision-prefatory-matter.ly @@ -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 diff --git a/input/regression/beam-collision-scaled-staff.ly b/input/regression/beam-collision-scaled-staff.ly index 9d01fbe79c..89514aa5ba 100644 --- a/input/regression/beam-collision-scaled-staff.ly +++ b/input/regression/beam-collision-scaled-staff.ly @@ -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] } \\ diff --git a/input/regression/beam-collision-voice-only.ly b/input/regression/beam-collision-voice-only.ly index cf675dfc05..a6bf7d8780 100644 --- a/input/regression/beam-collision-voice-only.ly +++ b/input/regression/beam-collision-voice-only.ly @@ -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'! ] } diff --git a/input/regression/beam-concave-chord.ly b/input/regression/beam-concave-chord.ly index f02962d901..59643345f2 100644 --- a/input/regression/beam-concave-chord.ly +++ b/input/regression/beam-concave-chord.ly @@ -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 { diff --git a/input/regression/beam-concave.ly b/input/regression/beam-concave.ly index 6643e38cef..d165f4e5f4 100644 --- a/input/regression/beam-concave.ly +++ b/input/regression/beam-concave.ly @@ -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 } diff --git a/input/regression/beam-default-lengths.ly b/input/regression/beam-default-lengths.ly index ecf69921f4..3008617671 100644 --- a/input/regression/beam-default-lengths.ly +++ b/input/regression/beam-default-lengths.ly @@ -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] } diff --git a/input/regression/beam-extreme.ly b/input/regression/beam-extreme.ly index 2fa96cb479..21c755c255 100644 --- a/input/regression/beam-extreme.ly +++ b/input/regression/beam-extreme.ly @@ -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 } diff --git a/input/regression/beam-feather-breaking.ly b/input/regression/beam-feather-breaking.ly index b561ff0e5a..0cf2c79aca 100644 --- a/input/regression/beam-feather-breaking.ly +++ b/input/regression/beam-feather-breaking.ly @@ -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 "|" } >> diff --git a/input/regression/beam-feather-knee-stem-length.ly b/input/regression/beam-feather-knee-stem-length.ly index 6d02347132..3b350cab91 100644 --- a/input/regression/beam-feather-knee-stem-length.ly +++ b/input/regression/beam-feather-knee-stem-length.ly @@ -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] } diff --git a/input/regression/beam-feather.ly b/input/regression/beam-feather.ly index b9afa45124..0006976c6e 100644 --- a/input/regression/beam-feather.ly +++ b/input/regression/beam-feather.ly @@ -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 ] diff --git a/input/regression/beam-french.ly b/input/regression/beam-french.ly index 7bb865f849..d0f44becdc 100644 --- a/input/regression/beam-french.ly +++ b/input/regression/beam-french.ly @@ -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] } diff --git a/input/regression/beam-funky-beamlet.ly b/input/regression/beam-funky-beamlet.ly index 303379b326..31bfcb9e54 100644 --- a/input/regression/beam-funky-beamlet.ly +++ b/input/regression/beam-funky-beamlet.ly @@ -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 } diff --git a/input/regression/beam-funky.ly b/input/regression/beam-funky.ly index 3d26b75d47..cf47dc9c50 100644 --- a/input/regression/beam-funky.ly +++ b/input/regression/beam-funky.ly @@ -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 diff --git a/input/regression/beam-manual-beaming.ly b/input/regression/beam-manual-beaming.ly index 15898c58d0..8ec0c42117 100644 --- a/input/regression/beam-manual-beaming.ly +++ b/input/regression/beam-manual-beaming.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.17.6" \header { @@ -18,11 +18,9 @@ %% \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] } diff --git a/input/regression/beam-outside-beamlets.ly b/input/regression/beam-outside-beamlets.ly index 4250947d15..c238057e5a 100644 --- a/input/regression/beam-outside-beamlets.ly +++ b/input/regression/beam-outside-beamlets.ly @@ -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 diff --git a/input/regression/beam-position.ly b/input/regression/beam-position.ly index b0522548d5..9e8b045a12 100644 --- a/input/regression/beam-position.ly +++ b/input/regression/beam-position.ly @@ -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] diff --git a/input/regression/beam-quant-standard.ly b/input/regression/beam-quant-standard.ly index b1e959cb2b..40cfd61fa4 100644 --- a/input/regression/beam-quant-standard.ly +++ b/input/regression/beam-quant-standard.ly @@ -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 diff --git a/input/regression/beam-slope-stemlet.ly b/input/regression/beam-slope-stemlet.ly index eeadbfd798..f64237ab22 100644 --- a/input/regression/beam-slope-stemlet.ly +++ b/input/regression/beam-slope-stemlet.ly @@ -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']} } diff --git a/input/regression/beam-subdivide-tuplets.ly b/input/regression/beam-subdivide-tuplets.ly index 93223c969d..5db5ea1f54 100644 --- a/input/regression/beam-subdivide-tuplets.ly +++ b/input/regression/beam-subdivide-tuplets.ly @@ -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 } } } diff --git a/input/regression/beam-unconnected-beamlets.ly b/input/regression/beam-unconnected-beamlets.ly index f90b743df3..4d8398ac6d 100644 --- a/input/regression/beam-unconnected-beamlets.ly +++ b/input/regression/beam-unconnected-beamlets.ly @@ -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] } diff --git a/input/regression/beaming-tuplet-regular.ly b/input/regression/beaming-tuplet-regular.ly index caac0a6f6d..0c0a4c91cf 100644 --- a/input/regression/beaming-tuplet-regular.ly +++ b/input/regression/beaming-tuplet-regular.ly @@ -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} } diff --git a/input/regression/beaming.ly b/input/regression/beaming.ly index 39cdfe5370..bb8bba1872 100644 --- a/input/regression/beaming.ly +++ b/input/regression/beaming.ly @@ -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] diff --git a/input/regression/beamlet-test.ly b/input/regression/beamlet-test.ly index d2a8667a6d..5ec8e4b5a6 100644 --- a/input/regression/beamlet-test.ly +++ b/input/regression/beamlet-test.ly @@ -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 } } diff --git a/input/regression/bend-after.ly b/input/regression/bend-after.ly index b8c0dc57eb..a5c7a81758 100644 --- a/input/regression/bend-after.ly +++ b/input/regression/bend-after.ly @@ -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 diff --git a/input/regression/bookpart-variable.ly b/input/regression/bookpart-variable.ly index 7165087055..204b98802e 100644 --- a/input/regression/bookpart-variable.ly +++ b/input/regression/bookpart-variable.ly @@ -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. " } diff --git a/input/regression/break-alignment-anchor-alignment.ly b/input/regression/break-alignment-anchor-alignment.ly index 5074966e5f..5cf9f3ccd9 100644 --- a/input/regression/break-alignment-anchor-alignment.ly +++ b/input/regression/break-alignment-anchor-alignment.ly @@ -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 } diff --git a/input/regression/break-alignment-anchors.ly b/input/regression/break-alignment-anchors.ly index 54554b20c2..cb02069ac5 100644 --- a/input/regression/break-alignment-anchors.ly +++ b/input/regression/break-alignment-anchors.ly @@ -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 diff --git a/input/regression/breathing-sign-ancient.ly b/input/regression/breathing-sign-ancient.ly index 5178c65c6d..8e1a528753 100644 --- a/input/regression/breathing-sign-ancient.ly +++ b/input/regression/breathing-sign-ancient.ly @@ -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 +} } diff --git a/input/regression/breathing-sign-custom-staff.ly b/input/regression/breathing-sign-custom-staff.ly index 90022d6853..ecf0f65244 100644 --- a/input/regression/breathing-sign-custom-staff.ly +++ b/input/regression/breathing-sign-custom-staff.ly @@ -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 } diff --git a/input/regression/breathing-sign.ly b/input/regression/breathing-sign.ly index 765aa9d7ec..f9e3787859 100644 --- a/input/regression/breathing-sign.ly +++ b/input/regression/breathing-sign.ly @@ -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 | } diff --git a/input/regression/breve-extent.ly b/input/regression/breve-extent.ly index 257445615d..f55588e524 100644 --- a/input/regression/breve-extent.ly +++ b/input/regression/breve-extent.ly @@ -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 @@ -11,21 +11,20 @@ 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 index 0000000000..8340d26cd9 --- /dev/null +++ b/input/regression/cadenza-grace-autobeam.ly @@ -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 index 0000000000..2877cc85b0 --- /dev/null +++ b/input/regression/chord-name-override-text.ly @@ -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 diff --git a/input/regression/chord-repetition-times.ly b/input/regression/chord-repetition-times.ly index d70b80aab0..ba8f1fdbe6 100644 --- a/input/regression/chord-repetition-times.ly +++ b/input/regression/chord-repetition-times.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.11" \header { @@ -11,5 +11,5 @@ correctly on them. \relative c' { 4 r 2 ~ | - \times 2/3 { 4 q q } \times 2/3 { q q q } | + \tuplet 3/2 { 4 q q } \tuplet 3/2 { q q q } | } diff --git a/input/regression/chord-repetition.ly b/input/regression/chord-repetition.ly index 524a3bd4e5..52d001d273 100644 --- a/input/regression/chord-repetition.ly +++ b/input/regression/chord-repetition.ly @@ -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' { - 8\p( q) q4-| q8.\(^"text" q16 q4-|\) + 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 index 0000000000..f5a89cb6fb --- /dev/null +++ b/input/regression/chord-tremolo-accidental.ly @@ -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 } + \repeat tremolo 16 { c''32 } + \repeat tremolo 8 { c''32 d'' } + \repeat tremolo 8 { c''32 } + \repeat tremolo 8 { c''32 } + \repeat tremolo 4 { c''32 d'' } + \repeat tremolo 4 { c''32 } + \repeat tremolo 16 { b''32 } +} \ No newline at end of file diff --git a/input/regression/chromatic-scales.ly b/input/regression/chromatic-scales.ly index 9e30bbd0d8..ccfeb1e5be 100644 --- a/input/regression/chromatic-scales.ly +++ b/input/regression/chromatic-scales.ly @@ -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 index 20b9622fa8..0000000000 --- a/input/regression/clef-oct-visibility.ly +++ /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 index f34eae1228..0000000000 --- a/input/regression/clef-oct.ly +++ /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 index c89a547979..0000000000 --- a/input/regression/clef-octavation.ly +++ /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 index 0000000000..c7bc4f0d74 --- /dev/null +++ b/input/regression/clef-transposition-optional.ly @@ -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 index 0000000000..119e00a903 --- /dev/null +++ b/input/regression/clef-transposition-placement.ly @@ -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 index 0000000000..ab82c493b1 --- /dev/null +++ b/input/regression/clef-transposition-visibility.ly @@ -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 index 0000000000..d2ff5730aa --- /dev/null +++ b/input/regression/clef-transposition.ly @@ -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 +} + diff --git a/input/regression/clefs.ly b/input/regression/clefs.ly index b51fcfdd8c..fa08917267 100644 --- a/input/regression/clefs.ly +++ b/input/regression/clefs.ly @@ -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 "|." } diff --git a/input/regression/clip-systems.ly b/input/regression/clip-systems.ly index 24cb829c42..5757b9c8a7 100644 --- a/input/regression/clip-systems.ly +++ b/input/regression/clip-systems.ly @@ -31,13 +31,13 @@ origScore = \score{ d \grace c16 e1 - \key d\major - + \key d \major + f \break \clef bass g, fis - } + } } \book { diff --git a/input/regression/cluster-style.ly b/input/regression/cluster-style.ly index db3ad23783..273d0a4d6d 100644 --- a/input/regression/cluster-style.ly +++ b/input/regression/cluster-style.ly @@ -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 } diff --git a/input/regression/collision-alignment.ly b/input/regression/collision-alignment.ly index b16b029898..87babb6934 100644 --- a/input/regression/collision-alignment.ly +++ b/input/regression/collision-alignment.ly @@ -7,9 +7,9 @@ \layout { ragged-right = ##t } -\version "2.16.0" +\version "2.17.15" -\relative << +\relative c' << \new Staff { << { f g } \\ diff --git a/input/regression/collision-dots-move.ly b/input/regression/collision-dots-move.ly index 801e404063..38f8d4144c 100644 --- a/input/regression/collision-dots-move.ly +++ b/input/regression/collision-dots-move.ly @@ -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 << 4 ^"prefer-dotted-right = #t" \\ { c8. d16 } >> << 4 \\ { d8. d16 } >> << 4 \\ { f'8. d16 } >> << 4 \\ { g'8. d16 } >> - \override Staff.NoteCollision #'prefer-dotted-right = ##f + \override Staff.NoteCollision.prefer-dotted-right = ##f << 4 ^"prefer-dotted-right = #f" \\ { c8. d16 } >> << 4 \\ { d8. d16 } >> << 4 \\ { f'8. d16 } >> diff --git a/input/regression/collision-dots-up-space-dotted.ly b/input/regression/collision-dots-up-space-dotted.ly index 229b12ca99..b9db8bbcfd 100644 --- a/input/regression/collision-dots-up-space-dotted.ly +++ b/input/regression/collision-dots-up-space-dotted.ly @@ -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 } diff --git a/input/regression/collision-head-solfa-fa.ly b/input/regression/collision-head-solfa-fa.ly index ecc8d3688c..8685cd62c1 100644 --- a/input/regression/collision-head-solfa-fa.ly +++ b/input/regression/collision-head-solfa-fa.ly @@ -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 } \\ diff --git a/input/regression/collision-manual.ly b/input/regression/collision-manual.ly index da7b9b8577..685090b78a 100644 --- a/input/regression/collision-manual.ly +++ b/input/regression/collision-manual.ly @@ -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 } >> diff --git a/input/regression/collision-merge-differently-dotted.ly b/input/regression/collision-merge-differently-dotted.ly index 6ecddba53e..9da7bed233 100644 --- a/input/regression/collision-merge-differently-dotted.ly +++ b/input/regression/collision-merge-differently-dotted.ly @@ -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 diff --git a/input/regression/collision-merge-differently-headed.ly b/input/regression/collision-merge-differently-headed.ly index b9300b2e06..7876e6a7fd 100644 --- a/input/regression/collision-merge-differently-headed.ly +++ b/input/regression/collision-merge-differently-headed.ly @@ -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 }\\ diff --git a/input/regression/collision-whole.ly b/input/regression/collision-whole.ly index d34f227a88..3813a09265 100644 --- a/input/regression/collision-whole.ly +++ b/input/regression/collision-whole.ly @@ -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 } \\ diff --git a/input/regression/color.ly b/input/regression/color.ly index 37ad6ee8b6..8f2c608e14 100644 --- a/input/regression/color.ly +++ b/input/regression/color.ly @@ -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 } diff --git a/input/regression/completion-heads-tuplets.ly b/input/regression/completion-heads-tuplets.ly index 305f58a128..e2e397618f 100644 --- a/input/regression/completion-heads-tuplets.ly +++ b/input/regression/completion-heads-tuplets.ly @@ -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 } } diff --git a/input/regression/completion-heads-unit.ly b/input/regression/completion-heads-unit.ly index f88ab32ef9..7f28cf4d31 100644 --- a/input/regression/completion-heads-unit.ly +++ b/input/regression/completion-heads-unit.ly @@ -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 } } diff --git a/input/regression/complex-once.ly b/input/regression/complex-once.ly index 400c350604..d3a5a4553b 100644 --- a/input/regression/complex-once.ly +++ b/input/regression/complex-once.ly @@ -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' { diff --git a/input/regression/compound-time-signatures.ly b/input/regression/compound-time-signatures.ly index 0fb7730f4d..2f10281825 100644 --- a/input/regression/compound-time-signatures.ly +++ b/input/regression/compound-time-signatures.ly @@ -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 diff --git a/input/regression/context-mod-context.ly b/input/regression/context-mod-context.ly index 81241dc982..5f3bb9901b 100644 --- a/input/regression/context-mod-context.ly +++ b/input/regression/context-mod-context.ly @@ -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 diff --git a/input/regression/context-mod-with.ly b/input/regression/context-mod-with.ly index abc8baec71..3857cd1593 100644 --- a/input/regression/context-mod-with.ly +++ b/input/regression/context-mod-with.ly @@ -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 } >> } diff --git a/input/regression/cue-clef-after-barline.ly b/input/regression/cue-clef-after-barline.ly index d514fc1873..0969fbcb62 100644 --- a/input/regression/cue-clef-after-barline.ly +++ b/input/regression/cue-clef-after-barline.ly @@ -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 index 73e3302572..0000000000 --- a/input/regression/cue-clef-octavation.ly +++ /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 index 0000000000..caeaf13193 --- /dev/null +++ b/input/regression/cue-clef-transposition-optional.ly @@ -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 index 0000000000..dd26c9f25d --- /dev/null +++ b/input/regression/cue-clef-transposition.ly @@ -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 + >> +} diff --git a/input/regression/custos.ly b/input/regression/custos.ly index 1ffaddae8d..b129343a6e 100644 --- a/input/regression/custos.ly +++ b/input/regression/custos.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.6" \header { texidoc = "Custodes may be engraved in various styles." } @@ -14,21 +14,21 @@ { - \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 } diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly index 64075f0fde..a4abc604d1 100644 --- a/input/regression/display-lily-tests.ly +++ b/input/regression/display-lily-tests.ly @@ -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. diff --git a/input/regression/dot-column-engraver.ly b/input/regression/dot-column-engraver.ly index 8c6b087f51..f87e23f038 100644 --- a/input/regression/dot-column-engraver.ly +++ b/input/regression/dot-column-engraver.ly @@ -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 << { 4. c c b g f a a -} \\ \times 1/2 { +} \\ \tuplet 2/1 { 2. a-- -. a2. a-- a a b \bar "|." } >> } diff --git a/input/regression/dot-dot-count-override.ly b/input/regression/dot-dot-count-override.ly index 3b4d7af790..7d2d1ab293 100644 --- a/input/regression/dot-dot-count-override.ly +++ b/input/regression/dot-dot-count-override.ly @@ -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 } diff --git a/input/regression/double-repeat.ly b/input/regression/double-repeat.ly index 08cc5f835d..9ce981dc59 100644 --- a/input/regression/double-repeat.ly +++ b/input/regression/double-repeat.ly @@ -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 ":|.|:" diff --git a/input/regression/drums.ly b/input/regression/drums.ly index 706fe0214a..b0479b1ddf 100644 --- a/input/regression/drums.ly +++ b/input/regression/drums.ly @@ -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 diff --git a/input/regression/duration-identifier-compressed.ly b/input/regression/duration-identifier-compressed.ly index 71f32a35eb..96b59cb81c 100644 --- a/input/regression/duration-identifier-compressed.ly +++ b/input/regression/duration-identifier-compressed.ly @@ -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' { diff --git a/input/regression/dynamics-alignment-no-line-linebreak.ly b/input/regression/dynamics-alignment-no-line-linebreak.ly index c6165db856..69128631f6 100644 --- a/input/regression/dynamics-alignment-no-line-linebreak.ly +++ b/input/regression/dynamics-alignment-no-line-linebreak.ly @@ -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 diff --git a/input/regression/dynamics-alignment-no-line.ly b/input/regression/dynamics-alignment-no-line.ly index 4211b4f891..fd38e75b99 100644 --- a/input/regression/dynamics-alignment-no-line.ly +++ b/input/regression/dynamics-alignment-no-line.ly @@ -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 index 0000000000..0b0b7b6247 --- /dev/null +++ b/input/regression/dynamics-avoid-cross-staff-stem-3.ly @@ -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 } +>> diff --git a/input/regression/dynamics-avoid-cross-staff-stem.ly b/input/regression/dynamics-avoid-cross-staff-stem.ly index e0f4a738be..078d876ad7 100644 --- a/input/regression/dynamics-avoid-cross-staff-stem.ly +++ b/input/regression/dynamics-avoid-cross-staff-stem.ly @@ -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 } } >> diff --git a/input/regression/dynamics-context-textspan.ly b/input/regression/dynamics-context-textspan.ly index e21ee623e2..083585c31d 100644 --- a/input/regression/dynamics-context-textspan.ly +++ b/input/regression/dynamics-context-textspan.ly @@ -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 index 0000000000..4b06d96fae --- /dev/null +++ b/input/regression/dynamics-empty.ly @@ -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 index 0000000000..a2557d53cf --- /dev/null +++ b/input/regression/dynamics-outside-staff-priority.ly @@ -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 + } +>> diff --git a/input/regression/dynamics-text-right-padding.ly b/input/regression/dynamics-text-right-padding.ly index 0a8b0120e1..1e3c4c6c3c 100644 --- a/input/regression/dynamics-text-right-padding.ly +++ b/input/regression/dynamics-text-right-padding.ly @@ -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\! } diff --git a/input/regression/easy-notation.ly b/input/regression/easy-notation.ly index c810ba9c22..ef2e4532f8 100644 --- a/input/regression/easy-notation.ly +++ b/input/regression/easy-notation.ly @@ -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 } diff --git a/input/regression/episema.ly b/input/regression/episema.ly index 5de09630a0..0e71ae8bdc 100644 --- a/input/regression/episema.ly +++ b/input/regression/episema.ly @@ -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 \] diff --git a/input/regression/event-listener-output.ly b/input/regression/event-listener-output.ly index b7af7fb715..aa3d171c6b 100644 --- a/input/regression/event-listener-output.ly +++ b/input/regression/event-listener-output.ly @@ -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 index 0000000000..000d9da403 --- /dev/null +++ b/input/regression/ferneyhough-hairpins.ly @@ -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 diff --git a/input/regression/figured-bass-continuation-center.ly b/input/regression/figured-bass-continuation-center.ly index 691cc96243..01694b9054 100644 --- a/input/regression/figured-bass-continuation-center.ly +++ b/input/regression/figured-bass-continuation-center.ly @@ -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 diff --git a/input/regression/figured-bass-continuation-modifiers.ly b/input/regression/figured-bass-continuation-modifiers.ly index e05535bd3c..5dc20fa35e 100644 --- a/input/regression/figured-bass-continuation-modifiers.ly +++ b/input/regression/figured-bass-continuation-modifiers.ly @@ -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 { diff --git a/input/regression/figured-bass-continuation.ly b/input/regression/figured-bass-continuation.ly index 916d8e8621..cb3cf4999a 100644 --- a/input/regression/figured-bass-continuation.ly +++ b/input/regression/figured-bass-continuation.ly @@ -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 diff --git a/input/regression/figured-bass-slashed-numbers.ly b/input/regression/figured-bass-slashed-numbers.ly index fc5a718b99..73dce5c744 100644 --- a/input/regression/figured-bass-slashed-numbers.ly +++ b/input/regression/figured-bass-slashed-numbers.ly @@ -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) ) << diff --git a/input/regression/figured-bass.ly b/input/regression/figured-bass.ly index 5d445a1b52..a5a9cde1fc 100644 --- a/input/regression/figured-bass.ly +++ b/input/regression/figured-bass.ly @@ -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]> } diff --git a/input/regression/finger-chords.ly b/input/regression/finger-chords.ly index ba89ec6233..2c5c6b6972 100644 --- a/input/regression/finger-chords.ly +++ b/input/regression/finger-chords.ly @@ -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 index 0000000000..50faefcdab --- /dev/null +++ b/input/regression/fingering-column-snap-radius.ly @@ -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) + 4 + 4 +} diff --git a/input/regression/fingering-column.ly b/input/regression/fingering-column.ly new file mode 100644 index 0000000000..d4d2551b2e --- /dev/null +++ b/input/regression/fingering-column.ly @@ -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 + 4 + + +} diff --git a/input/regression/fingering-cross-staff.ly b/input/regression/fingering-cross-staff.ly index 61760733de..26b91610c6 100644 --- a/input/regression/fingering-cross-staff.ly +++ b/input/regression/fingering-cross-staff.ly @@ -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 index 0000000000..ba8d1525e5 --- /dev/null +++ b/input/regression/fingering-directions.ly @@ -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 + \tempo "\\oneVoice" + \oneVoice + 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" "" + } +} diff --git a/input/regression/flags-default.ly b/input/regression/flags-default.ly index 4b27eb8ca0..3e815ea322 100644 --- a/input/regression/flags-default.ly +++ b/input/regression/flags-default.ly @@ -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 } diff --git a/input/regression/flags-in-scheme.ly b/input/regression/flags-in-scheme.ly index 23f2d563e5..d18c1bef2d 100644 --- a/input/regression/flags-in-scheme.ly +++ b/input/regression/flags-in-scheme.ly @@ -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 } diff --git a/input/regression/flags-straight-stockhausen-boulez.ly b/input/regression/flags-straight-stockhausen-boulez.ly index 8fc0d1245e..7bda48a5e0 100644 --- a/input/regression/flags-straight-stockhausen-boulez.ly +++ b/input/regression/flags-straight-stockhausen-boulez.ly @@ -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 diff --git a/input/regression/flags-straight.ly b/input/regression/flags-straight.ly index 877d4ca406..7e96536e6a 100644 --- a/input/regression/flags-straight.ly +++ b/input/regression/flags-straight.ly @@ -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 } diff --git a/input/regression/font-bogus-ligature.ly b/input/regression/font-bogus-ligature.ly index 61166e865a..dac42fe513 100644 --- a/input/regression/font-bogus-ligature.ly +++ b/input/regression/font-bogus-ligature.ly @@ -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 } } } diff --git a/input/regression/font-family-override.ly b/input/regression/font-family-override.ly index 84a0a4fcea..228bcaa072 100644 --- a/input/regression/font-family-override.ly +++ b/input/regression/font-family-override.ly @@ -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 } } diff --git a/input/regression/font-name.ly b/input/regression/font-name.ly index 523fc6f66d..d0e9a472c5 100644 --- a/input/regression/font-name.ly +++ b/input/regression/font-name.ly @@ -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 { diff --git a/input/regression/footnote-auto-numbering-page-reset.ly b/input/regression/footnote-auto-numbering-page-reset.ly index 0d8c91b0c0..58799d03dc 100644 --- a/input/regression/footnote-auto-numbering-page-reset.ly +++ b/input/regression/footnote-auto-numbering-page-reset.ly @@ -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 diff --git a/input/regression/footnote-auto-numbering-vertical-order.ly b/input/regression/footnote-auto-numbering-vertical-order.ly index 0206dc1e34..61c156b3ff 100644 --- a/input/regression/footnote-auto-numbering-vertical-order.ly +++ b/input/regression/footnote-auto-numbering-vertical-order.ly @@ -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 } diff --git a/input/regression/footnote-auto-numbering.ly b/input/regression/footnote-auto-numbering.ly index 333bcbdfa6..9520780fce 100644 --- a/input/regression/footnote-auto-numbering.ly +++ b/input/regression/footnote-auto-numbering.ly @@ -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 | diff --git a/input/regression/footnote-break-visibility.ly b/input/regression/footnote-break-visibility.ly index e6a3698c71..4e0821ab63 100644 --- a/input/regression/footnote-break-visibility.ly +++ b/input/regression/footnote-break-visibility.ly @@ -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 "|." diff --git a/input/regression/footnote-spanner.ly b/input/regression/footnote-spanner.ly index 64b34e308a..9798709ef9 100644 --- a/input/regression/footnote-spanner.ly +++ b/input/regression/footnote-spanner.ly @@ -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 diff --git a/input/regression/fret-diagram-origins.ly b/input/regression/fret-diagram-origins.ly index 2c8803d426..89e3be9d17 100644 --- a/input/regression/fret-diagram-origins.ly +++ b/input/regression/fret-diagram-origins.ly @@ -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 } } diff --git a/input/regression/fret-diagrams-capo.ly b/input/regression/fret-diagrams-capo.ly index b8f887469c..e5b272fd6e 100644 --- a/input/regression/fret-diagrams-capo.ly +++ b/input/regression/fret-diagrams-capo.ly @@ -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) diff --git a/input/regression/fret-diagrams-dots.ly b/input/regression/fret-diagrams-dots.ly index 569878084a..1189c0b82c 100644 --- a/input/regression/fret-diagrams-dots.ly +++ b/input/regression/fret-diagrams-dots.ly @@ -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) diff --git a/input/regression/fret-diagrams-fingering.ly b/input/regression/fret-diagrams-fingering.ly index 7827f048c3..786d34110c 100644 --- a/input/regression/fret-diagrams-fingering.ly +++ b/input/regression/fret-diagrams-fingering.ly @@ -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) diff --git a/input/regression/fret-diagrams-fret-label.ly b/input/regression/fret-diagrams-fret-label.ly index 9f8a8b0732..6ae0e392b1 100644 --- a/input/regression/fret-diagrams-fret-label.ly +++ b/input/regression/fret-diagrams-fret-label.ly @@ -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) diff --git a/input/regression/fret-diagrams-landscape.ly b/input/regression/fret-diagrams-landscape.ly index 95f4f5f4eb..db52341ec7 100644 --- a/input/regression/fret-diagrams-landscape.ly +++ b/input/regression/fret-diagrams-landscape.ly @@ -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;"} diff --git a/input/regression/fret-diagrams-opposing-landscape.ly b/input/regression/fret-diagrams-opposing-landscape.ly index 60c8737253..29d617e5c2 100644 --- a/input/regression/fret-diagrams-opposing-landscape.ly +++ b/input/regression/fret-diagrams-opposing-landscape.ly @@ -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;"} diff --git a/input/regression/fret-diagrams-size.ly b/input/regression/fret-diagrams-size.ly index 95942f78e5..1dce8a9f45 100644 --- a/input/regression/fret-diagrams-size.ly +++ b/input/regression/fret-diagrams-size.ly @@ -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 } diff --git a/input/regression/fret-diagrams-string-thickness.ly b/input/regression/fret-diagrams-string-thickness.ly index aff93e9f4b..d3ea85fd3d 100644 --- a/input/regression/fret-diagrams-string-thickness.ly +++ b/input/regression/fret-diagrams-string-thickness.ly @@ -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) diff --git a/input/regression/fret-diagrams-xo-label.ly b/input/regression/fret-diagrams-xo-label.ly index bfb0aa6125..b54f5cf254 100644 --- a/input/regression/fret-diagrams-xo-label.ly +++ b/input/regression/fret-diagrams-xo-label.ly @@ -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;"} diff --git a/input/regression/fretboard-chordchanges.ly b/input/regression/fretboard-chordchanges.ly index c583c6a1c3..d98479a4bb 100644 --- a/input/regression/fretboard-chordchanges.ly +++ b/input/regression/fretboard-chordchanges.ly @@ -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 } << diff --git a/input/regression/general-scheme-bindings.ly b/input/regression/general-scheme-bindings.ly index d3af8ab84e..bf00be2fc4 100644 --- a/input/regression/general-scheme-bindings.ly +++ b/input/regression/general-scheme-bindings.ly @@ -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)) diff --git a/input/regression/glissando-broken-multiple.ly b/input/regression/glissando-broken-multiple.ly index f766c18d33..ce150f885d 100644 --- a/input/regression/glissando-broken-multiple.ly +++ b/input/regression/glissando-broken-multiple.ly @@ -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 diff --git a/input/regression/glissando-broken-unkilled.ly b/input/regression/glissando-broken-unkilled.ly index d1f46c5ea5..29659bac61 100644 --- a/input/regression/glissando-broken-unkilled.ly +++ b/input/regression/glissando-broken-unkilled.ly @@ -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 diff --git a/input/regression/glissando-broken.ly b/input/regression/glissando-broken.ly index c397a7fc3c..baf5993d99 100644 --- a/input/regression/glissando-broken.ly +++ b/input/regression/glissando-broken.ly @@ -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 diff --git a/input/regression/glissando-index.ly b/input/regression/glissando-index.ly index 8eb0b1cd86..5611773909 100644 --- a/input/regression/glissando-index.ly +++ b/input/regression/glissando-index.ly @@ -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)) 1 \glissando s1 } diff --git a/input/regression/glissando-skip.ly b/input/regression/glissando-skip.ly index be8ce1515b..94dd576dcc 100644 --- a/input/regression/glissando-skip.ly +++ b/input/regression/glissando-skip.ly @@ -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, } diff --git a/input/regression/glissando.ly b/input/regression/glissando.ly index 057b8d3c4e..bdb5124483 100644 --- a/input/regression/glissando.ly +++ b/input/regression/glissando.ly @@ -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 index 0000000000..4e7ff31b57 --- /dev/null +++ b/input/regression/grace-auto-beam-engraver.ly @@ -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 + >> +} diff --git a/input/regression/grace-bar-line.ly b/input/regression/grace-bar-line.ly index dbd2c32082..badaa1ae74 100644 --- a/input/regression/grace-bar-line.ly +++ b/input/regression/grace-bar-line.ly @@ -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 } diff --git a/input/regression/grace-beam.ly b/input/regression/grace-beam.ly index 0aa75547f8..8566a522ea 100644 --- a/input/regression/grace-beam.ly +++ b/input/regression/grace-beam.ly @@ -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] } diff --git a/input/regression/grace-end.ly b/input/regression/grace-end.ly index 9f9551e656..bacb821e1f 100644 --- a/input/regression/grace-end.ly +++ b/input/regression/grace-end.ly @@ -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 } } diff --git a/input/regression/grace-slashed-no-slur.ly b/input/regression/grace-slashed-no-slur.ly index 17456f0fb6..f167a9794e 100644 --- a/input/regression/grace-slashed-no-slur.ly +++ b/input/regression/grace-slashed-no-slur.ly @@ -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 } diff --git a/input/regression/grace-start.ly b/input/regression/grace-start.ly index 5e295964cb..419ee40de8 100644 --- a/input/regression/grace-start.ly +++ b/input/regression/grace-start.ly @@ -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. } diff --git a/input/regression/grace-stem-length.ly b/input/regression/grace-stem-length.ly index 45eb1b4c44..6bae7e187c 100644 --- a/input/regression/grace-stem-length.ly +++ b/input/regression/grace-stem-length.ly @@ -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 } diff --git a/input/regression/grace-stems.ly b/input/regression/grace-stems.ly index c45799d0eb..62f576b57d 100644 --- a/input/regression/grace-stems.ly +++ b/input/regression/grace-stems.ly @@ -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 diff --git a/input/regression/grace-sync.ly b/input/regression/grace-sync.ly index 9032eb8c2e..cd24450032 100644 --- a/input/regression/grace-sync.ly +++ b/input/regression/grace-sync.ly @@ -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 "|." } >> diff --git a/input/regression/grace-volta-repeat-2.ly b/input/regression/grace-volta-repeat-2.ly index 113de90be8..1a150fcc8a 100644 --- a/input/regression/grace-volta-repeat-2.ly +++ b/input/regression/grace-volta-repeat-2.ly @@ -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 diff --git a/input/regression/grace-volta-repeat.ly b/input/regression/grace-volta-repeat.ly index b347600cb3..b19a9a7c5f 100644 --- a/input/regression/grace-volta-repeat.ly +++ b/input/regression/grace-volta-repeat.ly @@ -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 | } } diff --git a/input/regression/grace.ly b/input/regression/grace.ly index 820386f114..f86551e089 100644 --- a/input/regression/grace.ly +++ b/input/regression/grace.ly @@ -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 16 c8[ c8] % \grace c16 c8[ c8] %% broken? diff --git a/input/regression/grid-lines.ly b/input/regression/grid-lines.ly index 4ee9efe7cf..b67f7b5d33 100644 --- a/input/regression/grid-lines.ly +++ b/input/regression/grid-lines.ly @@ -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. diff --git a/input/regression/grob-indirect-tweak.ly b/input/regression/grob-indirect-tweak.ly index c53bc4b143..d09d4a01be 100644 --- a/input/regression/grob-indirect-tweak.ly +++ b/input/regression/grob-indirect-tweak.ly @@ -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 } diff --git a/input/regression/grob-tweak.ly b/input/regression/grob-tweak.ly index 93f55d7ee7..9a065a3217 100644 --- a/input/regression/grob-tweak.ly +++ b/input/regression/grob-tweak.ly @@ -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 } diff --git a/input/regression/hairpin-barline-break.ly b/input/regression/hairpin-barline-break.ly index 3a94a5292b..3dffd61e59 100644 --- a/input/regression/hairpin-barline-break.ly +++ b/input/regression/hairpin-barline-break.ly @@ -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\! } diff --git a/input/regression/hairpin-circled.ly b/input/regression/hairpin-circled.ly index bfda3413cc..2da785101c 100644 --- a/input/regression/hairpin-circled.ly +++ b/input/regression/hairpin-circled.ly @@ -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 index 0000000000..43acfdf0fb --- /dev/null +++ b/input/regression/hairpin-clef.ly @@ -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\! | +} diff --git a/input/regression/hairpin-dashed.ly b/input/regression/hairpin-dashed.ly index ac6c007e94..8e860fa22a 100644 --- a/input/regression/hairpin-dashed.ly +++ b/input/regression/hairpin-dashed.ly @@ -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\! } diff --git a/input/regression/hairpin-ending.ly b/input/regression/hairpin-ending.ly index 38508a1167..3c70b07330 100644 --- a/input/regression/hairpin-ending.ly +++ b/input/regression/hairpin-ending.ly @@ -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 index 0000000000..0811099115 --- /dev/null +++ b/input/regression/hairpin-key-signature.ly @@ -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\! | +} diff --git a/input/regression/hairpin-neighboring-span-dynamics.ly b/input/regression/hairpin-neighboring-span-dynamics.ly index 84392607e1..9527267ff7 100644 --- a/input/regression/hairpin-neighboring-span-dynamics.ly +++ b/input/regression/hairpin-neighboring-span-dynamics.ly @@ -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 diff --git a/input/regression/hairpin-to-barline.ly b/input/regression/hairpin-to-barline.ly index 2bc3a9bec8..be083aaacf 100644 --- a/input/regression/hairpin-to-barline.ly +++ b/input/regression/hairpin-to-barline.ly @@ -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\! } diff --git a/input/regression/hara-kiri-alive-with.ly b/input/regression/hara-kiri-alive-with.ly index f8dc4d921b..4a2a7f6bdb 100644 --- a/input/regression/hara-kiri-alive-with.ly +++ b/input/regression/hara-kiri-alive-with.ly @@ -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 } } diff --git a/input/regression/hara-kiri-keep-previous-settings.ly b/input/regression/hara-kiri-keep-previous-settings.ly index 0f9dca6466..545500c90b 100644 --- a/input/regression/hara-kiri-keep-previous-settings.ly +++ b/input/regression/hara-kiri-keep-previous-settings.ly @@ -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" } diff --git a/input/regression/harp-pedals-sanity-checks.ly b/input/regression/harp-pedals-sanity-checks.ly index 1482e24579..e239adc6bb 100644 --- a/input/regression/harp-pedals-sanity-checks.ly +++ b/input/regression/harp-pedals-sanity-checks.ly @@ -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: diff --git a/input/regression/harp-pedals-tweaking.ly b/input/regression/harp-pedals-tweaking.ly index 3a2f3af762..d071833768 100644 --- a/input/regression/harp-pedals-tweaking.ly +++ b/input/regression/harp-pedals-tweaking.ly @@ -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^" } diff --git a/input/regression/horizontal-bracket-tweak.ly b/input/regression/horizontal-bracket-tweak.ly index 1ce625fe6f..3ffb66efc5 100644 --- a/input/regression/horizontal-bracket-tweak.ly +++ b/input/regression/horizontal-bracket-tweak.ly @@ -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 diff --git a/input/regression/id.ly b/input/regression/id.ly index e90f11d3c6..7595621102 100644 --- a/input/regression/id.ly +++ b/input/regression/id.ly @@ -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 } diff --git a/input/regression/identifier-following-chordmode.ly b/input/regression/identifier-following-chordmode.ly index 7269e91cb4..63790a7b55 100644 --- a/input/regression/identifier-following-chordmode.ly +++ b/input/regression/identifier-following-chordmode.ly @@ -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 index 0000000000..fa60533851 --- /dev/null +++ b/input/regression/identifier-quoted.ly @@ -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" >> +} diff --git a/input/regression/in-note.ly b/input/regression/in-note.ly index 6963f99477..2e3bffb754 100644 --- a/input/regression/in-note.ly +++ b/input/regression/in-note.ly @@ -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\! } } } diff --git a/input/regression/incipit.ly b/input/regression/incipit.ly index 7e8ea62a77..a5545558e8 100644 --- a/input/regression/incipit.ly +++ b/input/regression/incipit.ly @@ -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) diff --git a/input/regression/instrument-name-hara-kiri.ly b/input/regression/instrument-name-hara-kiri.ly index 58de023f9e..7e6db4ac3b 100644 --- a/input/regression/instrument-name-hara-kiri.ly +++ b/input/regression/instrument-name-hara-kiri.ly @@ -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 diff --git a/input/regression/instrument-name-x-align.ly b/input/regression/instrument-name-x-align.ly index cbceec3d99..68d030ad85 100644 --- a/input/regression/instrument-name-x-align.ly +++ b/input/regression/instrument-name-x-align.ly @@ -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" diff --git a/input/regression/instrument-switch-invalid-warning.ly b/input/regression/instrument-switch-invalid-warning.ly index 7a99c9d474..80df393fce 100644 --- a/input/regression/instrument-switch-invalid-warning.ly +++ b/input/regression/instrument-switch-invalid-warning.ly @@ -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" diff --git a/input/regression/instrument-switch.ly b/input/regression/instrument-switch.ly index 2e0198591f..fc6542c8c2 100644 --- a/input/regression/instrument-switch.ly +++ b/input/regression/instrument-switch.ly @@ -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" diff --git a/input/regression/key-clefs.ly b/input/regression/key-clefs.ly index 44c499e277..cef2ac4b52 100644 --- a/input/regression/key-clefs.ly +++ b/input/regression/key-clefs.ly @@ -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 } - - diff --git a/input/regression/key-signature-padding.ly b/input/regression/key-signature-padding.ly index 4d2dbd66ab..4f46271696 100644 --- a/input/regression/key-signature-padding.ly +++ b/input/regression/key-signature-padding.ly @@ -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 diff --git a/input/regression/key-signature-space.ly b/input/regression/key-signature-space.ly index 28425c62e1..fdb11dddc1 100644 --- a/input/regression/key-signature-space.ly +++ b/input/regression/key-signature-space.ly @@ -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 { diff --git a/input/regression/keys.ly b/input/regression/keys.ly index 207f932095..46079b264f 100644 --- a/input/regression/keys.ly +++ b/input/regression/keys.ly @@ -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 index 0000000000..fe78032044 --- /dev/null +++ b/input/regression/kievan-notation.ly @@ -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" { + Го -- спо -- ди по -- ми -- луй. + } + >> +} diff --git a/input/regression/laissez-vibrer-chords.ly b/input/regression/laissez-vibrer-chords.ly index c756ec6630..26d284654c 100644 --- a/input/regression/laissez-vibrer-chords.ly +++ b/input/regression/laissez-vibrer-chords.ly @@ -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' { diff --git a/input/regression/laissez-vibrer-tie-head-direction.ly b/input/regression/laissez-vibrer-tie-head-direction.ly index 9d28c006b1..af166fece5 100644 --- a/input/regression/laissez-vibrer-tie-head-direction.ly +++ b/input/regression/laissez-vibrer-tie-head-direction.ly @@ -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 } diff --git a/input/regression/laissez-vibrer-ties.ly b/input/regression/laissez-vibrer-ties.ly index a693c2109e..53d868c1f0 100644 --- a/input/regression/laissez-vibrer-ties.ly +++ b/input/regression/laissez-vibrer-ties.ly @@ -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 4.\laissezVibrer r8 4\laissezVibrer r - \override LaissezVibrerTieColumn #'tie-configuration + \override LaissezVibrerTieColumn.tie-configuration = #'((-7 . -1) (-5 . -1) (-3 . 1) diff --git a/input/regression/layout-from.ly b/input/regression/layout-from.ly index 05ca6d628b..80892c6c95 100644 --- a/input/regression/layout-from.ly +++ b/input/regression/layout-from.ly @@ -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 index 0000000000..a6e2d80c4c --- /dev/null +++ b/input/regression/ledger-lines-dynamics.ly @@ -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. | +} diff --git a/input/regression/ledger-lines-varying-staves.ly b/input/regression/ledger-lines-varying-staves.ly index b36b52730d..9a9f160119 100644 --- a/input/regression/ledger-lines-varying-staves.ly +++ b/input/regression/ledger-lines-varying-staves.ly @@ -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 } diff --git a/input/regression/les-nereides.ly b/input/regression/les-nereides.ly index ebe1cb221d..c87772419d 100644 --- a/input/regression/les-nereides.ly +++ b/input/regression/les-nereides.ly @@ -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 8(\mf % \fingerUp - \override Fingering #'direction = #UP + \override Fingering.direction = #UP 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''{ 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 8[( | %6 )] cis'4. d4 @@ -119,7 +115,7 @@ bass = \new Voice \relative c{ r8. e,16(\f_2 8[ ] | %2 - %\override Staff.SustainPedalLineSpanner #'staff-padding = #5 %tweak + %\override Staff.SustainPedalLineSpanner.staff-padding = #5 %tweak 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 32(\sustainOff\sustainOn - \revert Flag #'stroke-style + \revert Flag.stroke-style } 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(]) @@ -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 diff --git a/input/regression/lily-in-scheme.ly b/input/regression/lily-in-scheme.ly index 1232a90aac..cc59cbd152 100644 --- a/input/regression/lily-in-scheme.ly +++ b/input/regression/lily-in-scheme.ly @@ -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" diff --git a/input/regression/lilypond-book/GNUmakefile b/input/regression/lilypond-book/GNUmakefile index 3f27361283..935f068db7 100644 --- a/input/regression/lilypond-book/GNUmakefile +++ b/input/regression/lilypond-book/GNUmakefile @@ -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 index 0b6e885d6a..0000000000 --- a/input/regression/lilypond-book/include/GNUmakefile +++ /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 index 0000000000..e9879a2681 --- /dev/null +++ b/input/regression/lilypond-book/include/def.tex @@ -0,0 +1 @@ +\def\signature{The LilyPond Team} diff --git a/input/regression/lilypond-book/include/myvar.ily b/input/regression/lilypond-book/include/myvar.ily index 48c9439466..b383544d4e 100644 --- a/input/regression/lilypond-book/include/myvar.ily +++ b/input/regression/lilypond-book/include/myvar.ily @@ -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 index 0000000000..a3815f21e2 --- /dev/null +++ b/input/regression/lilypond-book/tex-include-preamble.lytex @@ -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} diff --git a/input/regression/line-arrows.ly b/input/regression/line-arrows.ly index affd3a7ab0..1b3bccc8a3 100644 --- a/input/regression/line-arrows.ly +++ b/input/regression/line-arrows.ly @@ -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 diff --git a/input/regression/line-dash-small-period.ly b/input/regression/line-dash-small-period.ly index a3542cb43e..c572d2375e 100644 --- a/input/regression/line-dash-small-period.ly +++ b/input/regression/line-dash-small-period.ly @@ -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 diff --git a/input/regression/line-dashed-period.ly b/input/regression/line-dashed-period.ly index 3f63d32b5d..3302f88cdf 100644 --- a/input/regression/line-dashed-period.ly +++ b/input/regression/line-dashed-period.ly @@ -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\! } diff --git a/input/regression/line-style-zigzag-spacing.ly b/input/regression/line-style-zigzag-spacing.ly index 9d0a28137d..ab35aa1d95 100644 --- a/input/regression/line-style-zigzag-spacing.ly +++ b/input/regression/line-style-zigzag-spacing.ly @@ -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 } diff --git a/input/regression/line-style.ly b/input/regression/line-style.ly index 31f284e82f..2d77edd91d 100644 --- a/input/regression/line-style.ly +++ b/input/regression/line-style.ly @@ -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 } diff --git a/input/regression/lyric-combine-switch-voice-2.ly b/input/regression/lyric-combine-switch-voice-2.ly index 4236de7c86..d084e8f2bd 100644 --- a/input/regression/lyric-combine-switch-voice-2.ly +++ b/input/regression/lyric-combine-switch-voice-2.ly @@ -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 diff --git a/input/regression/lyric-combine-switch-voice.ly b/input/regression/lyric-combine-switch-voice.ly index d78a8a86b4..ccf444b682 100644 --- a/input/regression/lyric-combine-switch-voice.ly +++ b/input/regression/lyric-combine-switch-voice.ly @@ -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 } } diff --git a/input/regression/lyric-combine.ly b/input/regression/lyric-combine.ly index 9d0943f390..cedcb39d2d 100644 --- a/input/regression/lyric-combine.ly +++ b/input/regression/lyric-combine.ly @@ -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 diff --git a/input/regression/lyric-extender-includegraces.ly b/input/regression/lyric-extender-includegraces.ly index cb34df9dcb..1100f625e9 100644 --- a/input/regression/lyric-extender-includegraces.ly +++ b/input/regression/lyric-extender-includegraces.ly @@ -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 { diff --git a/input/regression/lyric-hyphen-retain.ly b/input/regression/lyric-hyphen-retain.ly index 9428c029ab..6a45c767d9 100644 --- a/input/regression/lyric-hyphen-retain.ly +++ b/input/regression/lyric-hyphen-retain.ly @@ -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 } diff --git a/input/regression/lyric-hyphen.ly b/input/regression/lyric-hyphen.ly index bbff245607..7fcc3a5258 100644 --- a/input/regression/lyric-hyphen.ly +++ b/input/regression/lyric-hyphen.ly @@ -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 } diff --git a/input/regression/lyric-melisma-melisma.ly b/input/regression/lyric-melisma-melisma.ly index ae46077db4..b75c2b0377 100644 --- a/input/regression/lyric-melisma-melisma.ly +++ b/input/regression/lyric-melisma-melisma.ly @@ -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. " } diff --git a/input/regression/lyric-tweak.ly b/input/regression/lyric-tweak.ly index aed4b8aae2..ccaad3d469 100644 --- a/input/regression/lyric-tweak.ly +++ b/input/regression/lyric-tweak.ly @@ -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. } diff --git a/input/regression/lyrics-bar.ly b/input/regression/lyrics-bar.ly index c559bedebe..633e041bb6 100644 --- a/input/regression/lyrics-bar.ly +++ b/input/regression/lyrics-bar.ly @@ -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) } } diff --git a/input/regression/lyrics-includegraces.ly b/input/regression/lyrics-includegraces.ly index ab2491d4ca..ec3dfe2fc3 100644 --- a/input/regression/lyrics-includegraces.ly +++ b/input/regression/lyrics-includegraces.ly @@ -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 diff --git a/input/regression/lyrics-no-notes.ly b/input/regression/lyrics-no-notes.ly index cb3fe3e868..30d2535c59 100644 --- a/input/regression/lyrics-no-notes.ly +++ b/input/regression/lyrics-no-notes.ly @@ -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" { diff --git a/input/regression/lyrics-tenor-clef.ly b/input/regression/lyrics-tenor-clef.ly index 66acd5b324..acea89d45b 100644 --- a/input/regression/lyrics-tenor-clef.ly +++ b/input/regression/lyrics-tenor-clef.ly @@ -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 index 0000000000..0947e72eac --- /dev/null +++ b/input/regression/make-relative-copies.ly @@ -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 index 0000000000..25941d290c --- /dev/null +++ b/input/regression/make-relative-music.ly @@ -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 | + 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 index 0000000000..362a283fcd --- /dev/null +++ b/input/regression/make-relative.ly @@ -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 | 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 | 1\fermata \bar "|." | +} + +\score { + \new PianoStaff << + \compressFullBarRests + \new Staff = "up" { + << \high \\ \middle >> + } + \new Staff = "down" { + \clef bass + \low + } + >> +} diff --git a/input/regression/markup-center-align-nocollision.ly b/input/regression/markup-center-align-nocollision.ly index bb13a4cadb..c161af8cc6 100644 --- a/input/regression/markup-center-align-nocollision.ly +++ b/input/regression/markup-center-align-nocollision.ly @@ -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} } diff --git a/input/regression/markup-commands.ly b/input/regression/markup-commands.ly index f3ececfd80..56506da8e1 100644 --- a/input/regression/markup-commands.ly +++ b/input/regression/markup-commands.ly @@ -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 index 0000000000..b24ab95298 --- /dev/null +++ b/input/regression/markup-frame-text.ly @@ -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 index 0000000000..5cbf5edae4 --- /dev/null +++ b/input/regression/markup-line-styles.ly @@ -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 diff --git a/input/regression/markup-line-thickness.ly b/input/regression/markup-line-thickness.ly index 274e4f89b7..c226ae21de 100644 --- a/input/regression/markup-line-thickness.ly +++ b/input/regression/markup-line-thickness.ly @@ -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 } diff --git a/input/regression/markup-note-grob-style.ly b/input/regression/markup-note-grob-style.ly index 24f8545c60..d40aee8718 100644 --- a/input/regression/markup-note-grob-style.ly +++ b/input/regression/markup-note-grob-style.ly @@ -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 diff --git a/input/regression/markup-note-styles.ly b/input/regression/markup-note-styles.ly index bb1406b4cc..f5fbc9b60d 100644 --- a/input/regression/markup-note-styles.ly +++ b/input/regression/markup-note-styles.ly @@ -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) + } } diff --git a/input/regression/markup-note.ly b/input/regression/markup-note.ly index 1fece8436e..c600fab42f 100644 --- a/input/regression/markup-note.ly +++ b/input/regression/markup-note.ly @@ -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 index 0000000000..5ed826230a --- /dev/null +++ b/input/regression/markup-rest-styles.ly @@ -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 index 0000000000..3c4895df9d --- /dev/null +++ b/input/regression/markup-rest.ly @@ -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 diff --git a/input/regression/markup-score.ly b/input/regression/markup-score.ly index 71860fb49f..ffac9f2e68 100644 --- a/input/regression/markup-score.ly +++ b/input/regression/markup-score.ly @@ -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 } diff --git a/input/regression/markup-special-characters.ly b/input/regression/markup-special-characters.ly index 8d3f2ce58f..b65a6f728e 100644 --- a/input/regression/markup-special-characters.ly +++ b/input/regression/markup-special-characters.ly @@ -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 { №2 – &OE;dipe… } - \vspace #0.5 + \combine \null \vspace #0.5 \bold "Lyric example:" } \new Lyrics \lyricmode { diff --git a/input/regression/markup-syntax.ly b/input/regression/markup-syntax.ly index cd475a1bbf..dc56d260ac 100644 --- a/input/regression/markup-syntax.ly +++ b/input/regression/markup-syntax.ly @@ -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 } } diff --git a/input/regression/markup-user.ly b/input/regression/markup-user.ly index 24a4fe4b8b..e9f1bba990 100644 --- a/input/regression/markup-user.ly +++ b/input/regression/markup-user.ly @@ -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 index 0000000000..06e1508a2d --- /dev/null +++ b/input/regression/measure-counter-broken.ly @@ -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 index 0000000000..095d1a5f96 --- /dev/null +++ b/input/regression/measure-counter.ly @@ -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 + } +} diff --git a/input/regression/mensural-ligatures.ly b/input/regression/mensural-ligatures.ly index 246a514811..bf15f85e7b 100644 --- a/input/regression/mensural-ligatures.ly +++ b/input/regression/mensural-ligatures.ly @@ -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 @@ -213,14 +213,14 @@ \] \[ - \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. \] @@ -233,11 +233,11 @@ \] \[ - \override NoteHead #'style = #'blackpetrucci + \override NoteHead.style = #'blackpetrucci e'1^\markup { "SSB" } a g\breve - \revert NoteHead #'style + \revert NoteHead.style \] \[ @@ -248,29 +248,29 @@ \] \[ - \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 @@ -303,13 +303,13 @@ \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 \[ diff --git a/input/regression/mensural.ly b/input/regression/mensural.ly index bf2fae37d8..3f028f97ff 100644 --- a/input/regression/mensural.ly +++ b/input/regression/mensural.ly @@ -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 } }} diff --git a/input/regression/metronome-mark-broken-bound.ly b/input/regression/metronome-mark-broken-bound.ly index e75549626a..52f5b13962 100644 --- a/input/regression/metronome-mark-broken-bound.ly +++ b/input/regression/metronome-mark-broken-bound.ly @@ -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 } diff --git a/input/regression/metronome-mark-loose-column.ly b/input/regression/metronome-mark-loose-column.ly index dd6f44b004..deca81dd52 100644 --- a/input/regression/metronome-mark-loose-column.ly +++ b/input/regression/metronome-mark-loose-column.ly @@ -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 } } } diff --git a/input/regression/metronome-marking-align-order.ly b/input/regression/metronome-marking-align-order.ly index 18edbe5859..21410c6e6c 100644 --- a/input/regression/metronome-marking-align-order.ly +++ b/input/regression/metronome-marking-align-order.ly @@ -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 diff --git a/input/regression/metronome-marking-break-align.ly b/input/regression/metronome-marking-break-align.ly index 849ebb6146..90e99212b8 100644 --- a/input/regression/metronome-marking-break-align.ly +++ b/input/regression/metronome-marking-break-align.ly @@ -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 } diff --git a/input/regression/metronome-marking.ly b/input/regression/metronome-marking.ly index e987176b7e..6fd2ed2441 100644 --- a/input/regression/metronome-marking.ly +++ b/input/regression/metronome-marking.ly @@ -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' } diff --git a/input/regression/metronome-range.ly b/input/regression/metronome-range.ly index ac6b5c67a3..e85394570e 100644 --- a/input/regression/metronome-range.ly +++ b/input/regression/metronome-range.ly @@ -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 index 0000000000..6aca01bc1e --- /dev/null +++ b/input/regression/midi-grace-after-tie.ly @@ -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 { } +} diff --git a/input/regression/midi-tuplets.ly b/input/regression/midi-tuplets.ly index 11153ded7d..49cda2ccc4 100644 --- a/input/regression/midi-tuplets.ly +++ b/input/regression/midi-tuplets.ly @@ -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 index 0000000000..29ba2f7127 --- /dev/null +++ b/input/regression/minimum-length-end-line.ly @@ -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\! +} diff --git a/input/regression/modern-tab-clef-scaled.ly b/input/regression/modern-tab-clef-scaled.ly index 186b71c0eb..ceafcc05db 100644 --- a/input/regression/modern-tab-clef-scaled.ly +++ b/input/regression/modern-tab-clef-scaled.ly @@ -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 } >> diff --git a/input/regression/morgenlied.ly b/input/regression/morgenlied.ly index 1a19c523ff..2a2e93dca3 100644 --- a/input/regression/morgenlied.ly +++ b/input/regression/morgenlied.ly @@ -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 ) | 8( ) 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 | 4. r8 \clef bass | @@ -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 8([ )] r | @@ -141,7 +141,7 @@ pianoLH = \relative c'' \repeat volta 2 { fis r4 8( | 4.) - \once \override Slur #'height-limit = #1.0 + \once \override Slur.height-limit = #1.0 4.( | 4.) | 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 { diff --git a/input/regression/mozart-hrn3-allegro.ily b/input/regression/mozart-hrn3-allegro.ily index 5aff496652..1494f4e299 100644 --- a/input/regression/mozart-hrn3-allegro.ily +++ b/input/regression/mozart-hrn3-allegro.ily @@ -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 diff --git a/input/regression/mozart-hrn3-defs.ily b/input/regression/mozart-hrn3-defs.ily index 4fe4973efe..3fca03fd3f 100644 --- a/input/regression/mozart-hrn3-defs.ily +++ b/input/regression/mozart-hrn3-defs.ily @@ -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 } } diff --git a/input/regression/mozart-hrn3-romanze.ily b/input/regression/mozart-hrn3-romanze.ily index 145551b2a9..403d7aaf49 100644 --- a/input/regression/mozart-hrn3-romanze.ily +++ b/input/regression/mozart-hrn3-romanze.ily @@ -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~ diff --git a/input/regression/multi-measure-rest-center.ly b/input/regression/multi-measure-rest-center.ly index bc1a648567..67130754de 100644 --- a/input/regression/multi-measure-rest-center.ly +++ b/input/regression/multi-measure-rest-center.ly @@ -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 } diff --git a/input/regression/multi-measure-rest-multi-staff-center.ly b/input/regression/multi-measure-rest-multi-staff-center.ly index 2b9aa7e169..b063413003 100644 --- a/input/regression/multi-measure-rest-multi-staff-center.ly +++ b/input/regression/multi-measure-rest-multi-staff-center.ly @@ -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 } diff --git a/input/regression/multi-measure-rest-staff-position.ly b/input/regression/multi-measure-rest-staff-position.ly index 241cd92040..bd917b8849 100644 --- a/input/regression/multi-measure-rest-staff-position.ly +++ b/input/regression/multi-measure-rest-staff-position.ly @@ -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 } diff --git a/input/regression/multi-measure-rest-text.ly b/input/regression/multi-measure-rest-text.ly index cc58c2470f..44c45ffb01 100644 --- a/input/regression/multi-measure-rest-text.ly +++ b/input/regression/multi-measure-rest-text.ly @@ -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 } +}} diff --git a/input/regression/multi-measure-rest-tweaks.ly b/input/regression/multi-measure-rest-tweaks.ly index e05c7964ee..af157a37c7 100644 --- a/input/regression/multi-measure-rest-tweaks.ly +++ b/input/regression/multi-measure-rest-tweaks.ly @@ -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. diff --git a/input/regression/music-function-end-spanners.ly b/input/regression/music-function-end-spanners.ly index f86e1a0c7f..30028a284a 100644 --- a/input/regression/music-function-end-spanners.ly +++ b/input/regression/music-function-end-spanners.ly @@ -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 } diff --git a/input/regression/music-function.ly b/input/regression/music-function.ly index 0a1d36825a..8f4da124fa 100644 --- a/input/regression/music-function.ly +++ b/input/regression/music-function.ly @@ -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 } diff --git a/input/regression/music-map.ly b/input/regression/music-map.ly index 43f346deac..ee6e1eeb1c 100644 --- a/input/regression/music-map.ly +++ b/input/regression/music-map.ly @@ -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 } diff --git a/input/regression/musicxml/12a-Clefs.xml b/input/regression/musicxml/12a-Clefs.xml index 85be49ec1a..4e03079069 100644 --- a/input/regression/musicxml/12a-Clefs.xml +++ b/input/regression/musicxml/12a-Clefs.xml @@ -5,8 +5,8 @@ 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. diff --git a/input/regression/musicxml/GNUmakefile b/input/regression/musicxml/GNUmakefile index 65e73ea867..5d1b8fc658 100644 --- a/input/regression/musicxml/GNUmakefile +++ b/input/regression/musicxml/GNUmakefile @@ -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) ) diff --git a/input/regression/no-staff.ly b/input/regression/no-staff.ly index 0c4e28f113..7d18f1af19 100644 --- a/input/regression/no-staff.ly +++ b/input/regression/no-staff.ly @@ -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" diff --git a/input/regression/non-centered-bar-lines.ly b/input/regression/non-centered-bar-lines.ly index 79e8ec88dc..d63e91abe6 100644 --- a/input/regression/non-centered-bar-lines.ly +++ b/input/regression/non-centered-bar-lines.ly @@ -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 "|." } diff --git a/input/regression/non-empty-text.ly b/input/regression/non-empty-text.ly index a3ba0d92a6..c6e520bd55 100644 --- a/input/regression/non-empty-text.ly +++ b/input/regression/non-empty-text.ly @@ -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 } diff --git a/input/regression/note-head-solfa.ly b/input/regression/note-head-solfa.ly index 67fffc1313..2725b20e08 100644 --- a/input/regression/note-head-solfa.ly +++ b/input/regression/note-head-solfa.ly @@ -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 diff --git a/input/regression/note-head-style.ly b/input/regression/note-head-style.ly index 9ddc8b6ae8..987b312feb 100644 --- a/input/regression/note-head-style.ly +++ b/input/regression/note-head-style.ly @@ -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 } } diff --git a/input/regression/note-line.ly b/input/regression/note-line.ly index c1be7be234..88131f516d 100644 --- a/input/regression/note-line.ly +++ b/input/regression/note-line.ly @@ -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 diff --git a/input/regression/number-staff-lines.ly b/input/regression/number-staff-lines.ly index 489e62be63..fdb44a041b 100644 --- a/input/regression/number-staff-lines.ly +++ b/input/regression/number-staff-lines.ly @@ -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 index 0000000000..878664e4dd --- /dev/null +++ b/input/regression/offsets.ly @@ -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 + 1\arpeggio + 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 +} diff --git a/input/regression/optimal-page-breaking-hstretch.ly b/input/regression/optimal-page-breaking-hstretch.ly index 973e1f580d..c37be4fd24 100644 --- a/input/regression/optimal-page-breaking-hstretch.ly +++ b/input/regression/optimal-page-breaking-hstretch.ly @@ -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} } diff --git a/input/regression/optional-args.ly b/input/regression/optional-args.ly index 1fbce42da9..83ebf7886a 100644 --- a/input/regression/optional-args.ly +++ b/input/regression/optional-args.ly @@ -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 } diff --git a/input/regression/ottava-edge.ly b/input/regression/ottava-edge.ly index 3dc29fbcb7..667e0c01db 100644 --- a/input/regression/ottava-edge.ly +++ b/input/regression/ottava-edge.ly @@ -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} @@ -20,21 +20,21 @@ %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 index 0000000000..9bc9fdd0c3 --- /dev/null +++ b/input/regression/outside-staff-placement-directive.ly @@ -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 } diff --git a/input/regression/override-nest-scheme.ly b/input/regression/override-nest-scheme.ly index 3a629ee556..03a710b679 100644 --- a/input/regression/override-nest-scheme.ly +++ b/input/regression/override-nest-scheme.ly @@ -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 diff --git a/input/regression/override-nest.ly b/input/regression/override-nest.ly index 6c899c7b6c..08a45d36d6 100644 --- a/input/regression/override-nest.ly +++ b/input/regression/override-nest.ly @@ -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] } diff --git a/input/regression/page-breaking-good-estimation.ly b/input/regression/page-breaking-good-estimation.ly index 438d5f63c2..b2038ad65b 100644 --- a/input/regression/page-breaking-good-estimation.ly +++ b/input/regression/page-breaking-good-estimation.ly @@ -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 { diff --git a/input/regression/page-breaking-min-distance2.ly b/input/regression/page-breaking-min-distance2.ly index fdfdd79327..2e148b303a 100644 --- a/input/regression/page-breaking-min-distance2.ly +++ b/input/regression/page-breaking-min-distance2.ly @@ -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)) } } diff --git a/input/regression/page-breaking-min-distance3.ly b/input/regression/page-breaking-min-distance3.ly index 3b4ed80620..a316608e6b 100644 --- a/input/regression/page-breaking-min-distance3.ly +++ b/input/regression/page-breaking-min-distance3.ly @@ -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))) } } diff --git a/input/regression/page-headers-and-footers.ly b/input/regression/page-headers-and-footers.ly index edec830b0e..f50c73c822 100644 --- a/input/regression/page-headers-and-footers.ly +++ b/input/regression/page-headers-and-footers.ly @@ -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" diff --git a/input/regression/page-label.ly b/input/regression/page-label.ly index 21fa1fe80b..b0d426ea89 100644 --- a/input/regression/page-label.ly +++ b/input/regression/page-label.ly @@ -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" } diff --git a/input/regression/page-layout-manual-position.ly b/input/regression/page-layout-manual-position.ly index 0067cf34dc..60ff82d3e1 100644 --- a/input/regression/page-layout-manual-position.ly +++ b/input/regression/page-layout-manual-position.ly @@ -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 index 6af1fc1616..0000000000 --- a/input/regression/page-limited-space.ly +++ /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 } >> -} diff --git a/input/regression/page-spacing-bass-figures.ly b/input/regression/page-spacing-bass-figures.ly index c068be2f33..7ce93d0e61 100644 --- a/input/regression/page-spacing-bass-figures.ly +++ b/input/regression/page-spacing-bass-figures.ly @@ -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 << diff --git a/input/regression/page-spacing-dynamics.ly b/input/regression/page-spacing-dynamics.ly index d83ece346c..3b8a17caa4 100644 --- a/input/regression/page-spacing-dynamics.ly +++ b/input/regression/page-spacing-dynamics.ly @@ -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))) } } diff --git a/input/regression/page-spacing-nonstaff-lines-and-markup.ly b/input/regression/page-spacing-nonstaff-lines-and-markup.ly index 1e26dfe317..1f7f6ef350 100644 --- a/input/regression/page-spacing-nonstaff-lines-and-markup.ly +++ b/input/regression/page-spacing-nonstaff-lines-and-markup.ly @@ -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 } + >> + } } diff --git a/input/regression/page-spacing-nonstaff-lines-between.ly b/input/regression/page-spacing-nonstaff-lines-between.ly index 355edee9dd..40e13626a9 100644 --- a/input/regression/page-spacing-nonstaff-lines-between.ly +++ b/input/regression/page-spacing-nonstaff-lines-between.ly @@ -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 diff --git a/input/regression/page-spacing-nonstaff-lines-bottom.ly b/input/regression/page-spacing-nonstaff-lines-bottom.ly index ec4dceeaf4..656f700241 100644 --- a/input/regression/page-spacing-nonstaff-lines-bottom.ly +++ b/input/regression/page-spacing-nonstaff-lines-bottom.ly @@ -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 } } << diff --git a/input/regression/page-spacing-nonstaff-lines-header-padding.ly b/input/regression/page-spacing-nonstaff-lines-header-padding.ly index 99749aa80b..aff5f0a9d4 100644 --- a/input/regression/page-spacing-nonstaff-lines-header-padding.ly +++ b/input/regression/page-spacing-nonstaff-lines-header-padding.ly @@ -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 } diff --git a/input/regression/page-spacing-nonstaff-lines-independent.ly b/input/regression/page-spacing-nonstaff-lines-independent.ly index 35b583429b..96f1c1df12 100644 --- a/input/regression/page-spacing-nonstaff-lines-independent.ly +++ b/input/regression/page-spacing-nonstaff-lines-independent.ly @@ -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)) } } diff --git a/input/regression/page-spacing-nonstaff-lines-top.ly b/input/regression/page-spacing-nonstaff-lines-top.ly index 05566ca813..9e9ce607f1 100644 --- a/input/regression/page-spacing-nonstaff-lines-top.ly +++ b/input/regression/page-spacing-nonstaff-lines-top.ly @@ -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 } } << diff --git a/input/regression/page-spacing-nonstaff-lines-unrelated.ly b/input/regression/page-spacing-nonstaff-lines-unrelated.ly index 16e5588d27..82d07a9be8 100644 --- a/input/regression/page-spacing-nonstaff-lines-unrelated.ly +++ b/input/regression/page-spacing-nonstaff-lines-unrelated.ly @@ -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 } >> diff --git a/input/regression/page-spacing-staff-group-hara-kiri.ly b/input/regression/page-spacing-staff-group-hara-kiri.ly index 34dd520512..5dc6a67576 100644 --- a/input/regression/page-spacing-staff-group-hara-kiri.ly +++ b/input/regression/page-spacing-staff-group-hara-kiri.ly @@ -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 } diff --git a/input/regression/page-spacing-staff-group-nested.ly b/input/regression/page-spacing-staff-group-nested.ly index 3d0ca6b0ca..865b84b4b6 100644 --- a/input/regression/page-spacing-staff-group-nested.ly +++ b/input/regression/page-spacing-staff-group-nested.ly @@ -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 diff --git a/input/regression/page-spacing-stretchability.ly b/input/regression/page-spacing-stretchability.ly index 3fec3cf67b..b662df5d66 100644 --- a/input/regression/page-spacing-stretchability.ly +++ b/input/regression/page-spacing-stretchability.ly @@ -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 } >> diff --git a/input/regression/page-spacing.ly b/input/regression/page-spacing.ly index 197dbe38ea..f62e472255 100644 --- a/input/regression/page-spacing.ly +++ b/input/regression/page-spacing.ly @@ -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 diff --git a/input/regression/page-top-space.ly b/input/regression/page-top-space.ly index bceef72a62..80494988c3 100644 --- a/input/regression/page-top-space.ly +++ b/input/regression/page-top-space.ly @@ -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" } } diff --git a/input/regression/page-turn-page-breaking.ly b/input/regression/page-turn-page-breaking.ly index 30a2270e9c..e54292fa0b 100644 --- a/input/regression/page-turn-page-breaking.ly +++ b/input/regression/page-turn-page-breaking.ly @@ -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 { diff --git a/input/regression/parenthesize.ly b/input/regression/parenthesize.ly index 52401ae0ab..a39a61ca79 100644 --- a/input/regression/parenthesize.ly +++ b/input/regression/parenthesize.ly @@ -12,12 +12,14 @@ 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 } diff --git a/input/regression/part-combine-force-mmrest-position.ly b/input/regression/part-combine-force-mmrest-position.ly index 0d3de55492..430fb27719 100644 --- a/input/regression/part-combine-force-mmrest-position.ly +++ b/input/regression/part-combine-force-mmrest-position.ly @@ -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}. " } diff --git a/input/regression/part-combine-force.ly b/input/regression/part-combine-force.ly index 47d64fd7cc..46894fa0e4 100644 --- a/input/regression/part-combine-force.ly +++ b/input/regression/part-combine-force.ly @@ -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 index 0000000000..9fae671303 --- /dev/null +++ b/input/regression/part-combine-mmrest-apart.ly @@ -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 } + >> +>> diff --git a/input/regression/part-combine-tuplet-end.ly b/input/regression/part-combine-tuplet-end.ly index a1636a7e6f..0c1c5ce195 100644 --- a/input/regression/part-combine-tuplet-end.ly +++ b/input/regression/part-combine-tuplet-end.ly @@ -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 } >> diff --git a/input/regression/part-combine-tuplet-single.ly b/input/regression/part-combine-tuplet-single.ly index 37029bae09..1cdd5009e7 100644 --- a/input/regression/part-combine-tuplet-single.ly +++ b/input/regression/part-combine-tuplet-single.ly @@ -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 } } >> diff --git a/input/regression/pedal-ped.ly b/input/regression/pedal-ped.ly index a9cb0e4b8c..8c4c8d1a12 100644 --- a/input/regression/pedal-ped.ly +++ b/input/regression/pedal-ped.ly @@ -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 } diff --git a/input/regression/phrasing-slur-dash.ly b/input/regression/phrasing-slur-dash.ly index cf0118a44d..fc8e69a7e3 100644 --- a/input/regression/phrasing-slur-dash.ly +++ b/input/regression/phrasing-slur-dash.ly @@ -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\) | diff --git a/input/regression/phrasing-slur-tuplet.ly b/input/regression/phrasing-slur-tuplet.ly index 5be066d2ce..0f5aa8302a 100644 --- a/input/regression/phrasing-slur-tuplet.ly +++ b/input/regression/phrasing-slur-tuplet.ly @@ -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.\) diff --git a/input/regression/prefatory-spacing-matter.ly b/input/regression/prefatory-spacing-matter.ly index 7ab076858f..8eb6b0b20a 100644 --- a/input/regression/prefatory-spacing-matter.ly +++ b/input/regression/prefatory-spacing-matter.ly @@ -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 } diff --git a/input/regression/property-nested-override.ly b/input/regression/property-nested-override.ly index 911e238437..d7929a210a 100644 --- a/input/regression/property-nested-override.ly +++ b/input/regression/property-nested-override.ly @@ -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 } diff --git a/input/regression/property-nested-revert.ly b/input/regression/property-nested-revert.ly index b7fb7f61a4..b8d6558842 100644 --- a/input/regression/property-nested-revert.ly +++ b/input/regression/property-nested-revert.ly @@ -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 } diff --git a/input/regression/property-once.ly b/input/regression/property-once.ly index 642d18104b..5d5b8f4b57 100644 --- a/input/regression/property-once.ly +++ b/input/regression/property-once.ly @@ -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 index 0000000000..8268aa28cf --- /dev/null +++ b/input/regression/property-unset.ly @@ -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 + } +} diff --git a/input/regression/quote-during.ly b/input/regression/quote-during.ly index 1f25719d09..b84a83aa52 100644 --- a/input/regression/quote-during.ly +++ b/input/regression/quote-during.ly @@ -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. } } >> diff --git a/input/regression/quote-overrides.ly b/input/regression/quote-overrides.ly index 3c72a3fbb1..4a7c5d22d7 100644 --- a/input/regression/quote-overrides.ly +++ b/input/regression/quote-overrides.ly @@ -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 diff --git a/input/regression/quote-transposition.ly b/input/regression/quote-transposition.ly index 438cdb822c..ceec1d58e5 100644 --- a/input/regression/quote-transposition.ly +++ b/input/regression/quote-transposition.ly @@ -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." } diff --git a/input/regression/quote-tuplet-end.ly b/input/regression/quote-tuplet-end.ly index 55798ba5a2..c796d79b3e 100644 --- a/input/regression/quote-tuplet-end.ly +++ b/input/regression/quote-tuplet-end.ly @@ -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 << diff --git a/input/regression/quote-tuplet.ly b/input/regression/quote-tuplet.ly index 943bc453eb..420f8641ba 100644 --- a/input/regression/quote-tuplet.ly +++ b/input/regression/quote-tuplet.ly @@ -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 { diff --git a/input/regression/quote.ly b/input/regression/quote.ly index ffa937775b..aa63a632bd 100644 --- a/input/regression/quote.ly +++ b/input/regression/quote.ly @@ -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. } } >> diff --git a/input/regression/rehearsal-mark-align-priority.ly b/input/regression/rehearsal-mark-align-priority.ly index ed1bb1fb92..d5cdfa8503 100644 --- a/input/regression/rehearsal-mark-align-priority.ly +++ b/input/regression/rehearsal-mark-align-priority.ly @@ -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" diff --git a/input/regression/rehearsal-mark-align-staff-context.ly b/input/regression/rehearsal-mark-align-staff-context.ly index 8350db59c6..6472c57a51 100644 --- a/input/regression/rehearsal-mark-align-staff-context.ly +++ b/input/regression/rehearsal-mark-align-staff-context.ly @@ -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 diff --git a/input/regression/rehearsal-mark-align.ly b/input/regression/rehearsal-mark-align.ly index e2ba0068fc..a684113ab7 100644 --- a/input/regression/rehearsal-mark-align.ly +++ b/input/regression/rehearsal-mark-align.ly @@ -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 diff --git a/input/regression/rehearsal-mark-direction.ly b/input/regression/rehearsal-mark-direction.ly index 3e9d577497..f0abe4d228 100644 --- a/input/regression/rehearsal-mark-direction.ly +++ b/input/regression/rehearsal-mark-direction.ly @@ -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." } >> diff --git a/input/regression/relative-repeat.ly b/input/regression/relative-repeat.ly index b3ff68fded..0fb40e07b4 100644 --- a/input/regression/relative-repeat.ly +++ b/input/regression/relative-repeat.ly @@ -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 } diff --git a/input/regression/remove-empty-staves-auto-knee.ly b/input/regression/remove-empty-staves-auto-knee.ly index 39abb34ffc..285bc85076 100644 --- a/input/regression/remove-empty-staves-auto-knee.ly +++ b/input/regression/remove-empty-staves-auto-knee.ly @@ -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 } } diff --git a/input/regression/remove-empty-staves-with-rests.ly b/input/regression/remove-empty-staves-with-rests.ly index 651147fa2a..9aa077f1b2 100644 --- a/input/regression/remove-empty-staves-with-rests.ly +++ b/input/regression/remove-empty-staves-with-rests.ly @@ -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 } } } diff --git a/input/regression/repeat-percent-grace.ly b/input/regression/repeat-percent-grace.ly index 8fd1ea0e52..baa5fc134f 100644 --- a/input/regression/repeat-percent-grace.ly +++ b/input/regression/repeat-percent-grace.ly @@ -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 } >> diff --git a/input/regression/repeat-percent-kerning.ly b/input/regression/repeat-percent-kerning.ly index d9aafb8596..601f310983 100644 --- a/input/regression/repeat-percent-kerning.ly +++ b/input/regression/repeat-percent-kerning.ly @@ -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' } } >> diff --git a/input/regression/repeat-sign-global-size-10.ly b/input/regression/repeat-sign-global-size-10.ly index 3fea78a4a8..aa8f3cbc35 100644 --- a/input/regression/repeat-sign-global-size-10.ly +++ b/input/regression/repeat-sign-global-size-10.ly @@ -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 ":|." } >> diff --git a/input/regression/repeat-sign-global-size-30.ly b/input/regression/repeat-sign-global-size-30.ly index f3ac22d60a..a5beda8c69 100644 --- a/input/regression/repeat-sign-global-size-30.ly +++ b/input/regression/repeat-sign-global-size-30.ly @@ -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 ":|." } >> diff --git a/input/regression/repeat-sign-global-size-5.ly b/input/regression/repeat-sign-global-size-5.ly index 1686722e01..4d386efa32 100644 --- a/input/regression/repeat-sign-global-size-5.ly +++ b/input/regression/repeat-sign-global-size-5.ly @@ -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 ":|." } >> diff --git a/input/regression/repeat-sign-layout-size.ly b/input/regression/repeat-sign-layout-size.ly index 0856984dd7..73d267d362 100644 --- a/input/regression/repeat-sign-layout-size.ly +++ b/input/regression/repeat-sign-layout-size.ly @@ -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 ":|." } >> } diff --git a/input/regression/repeat-sign.ly b/input/regression/repeat-sign.ly index b40c08d590..dfe00bfc55 100644 --- a/input/regression/repeat-sign.ly +++ b/input/regression/repeat-sign.ly @@ -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 diff --git a/input/regression/repeat-slash-mixed.ly b/input/regression/repeat-slash-mixed.ly index 0daf8a185e..3c0decb5e3 100644 --- a/input/regression/repeat-slash-mixed.ly +++ b/input/regression/repeat-slash-mixed.ly @@ -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. 16 } \repeat percent 2 { - \times 2/3 { + \tuplet 3/2 { r8 d e } c4 diff --git a/input/regression/rest-collision-beam-note.ly b/input/regression/rest-collision-beam-note.ly index d2be3073b3..9980affc9d 100644 --- a/input/regression/rest-collision-beam-note.ly +++ b/input/regression/rest-collision-beam-note.ly @@ -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 } \\ { 8[ r ] } diff --git a/input/regression/rest-collision-beam-restdir.ly b/input/regression/rest-collision-beam-restdir.ly index 16e19464a1..24cc53d8c8 100644 --- a/input/regression/rest-collision-beam-restdir.ly +++ b/input/regression/rest-collision-beam-restdir.ly @@ -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] } diff --git a/input/regression/rest-ledger.ly b/input/regression/rest-ledger.ly index 94eb2bdaac..f06bda4a7e 100644 --- a/input/regression/rest-ledger.ly +++ b/input/regression/rest-ledger.ly @@ -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 diff --git a/input/regression/rest-on-nonstandard-staff.ly b/input/regression/rest-on-nonstandard-staff.ly index 8f43fb5b17..4e8a039e2a 100644 --- a/input/regression/rest-on-nonstandard-staff.ly +++ b/input/regression/rest-on-nonstandard-staff.ly @@ -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 index 0000000000..a34b773586 --- /dev/null +++ b/input/regression/rest-positioning.ly @@ -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 } +} diff --git a/input/regression/scheme-book-scores.ly b/input/regression/scheme-book-scores.ly index 678844e2a8..fd1609f1b6 100644 --- a/input/regression/scheme-book-scores.ly +++ b/input/regression/scheme-book-scores.ly @@ -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)) %%% diff --git a/input/regression/scheme-text-spanner.ly b/input/regression/scheme-text-spanner.ly index a83bec87aa..14e095e954 100644 --- a/input/regression/scheme-text-spanner.ly +++ b/input/regression/scheme-text-spanner.ly @@ -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 | diff --git a/input/regression/script-shift.ly b/input/regression/script-shift.ly index ad625693e0..88f8f72f02 100644 --- a/input/regression/script-shift.ly +++ b/input/regression/script-shift.ly @@ -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_. } diff --git a/input/regression/script-stack-horizontal.ly b/input/regression/script-stack-horizontal.ly index ad6e9565f9..d307d9cf7b 100644 --- a/input/regression/script-stack-horizontal.ly +++ b/input/regression/script-stack-horizontal.ly @@ -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 index 0000000000..0b1c837e0e --- /dev/null +++ b/input/regression/script-tie-collision.ly @@ -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. >4--~ | -> ~ -> 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 index 0000000000..68d72f5852 --- /dev/null +++ b/input/regression/semi-tie-cross-staff.ly @@ -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 } +>> diff --git a/input/regression/set-once.ly b/input/regression/set-once.ly index 2566eb9c21..ad65384e70 100644 --- a/input/regression/set-once.ly +++ b/input/regression/set-once.ly @@ -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) 1 | \once \set fingeringOrientations = #'(right) diff --git a/input/regression/shape-other-curves.ly b/input/regression/shape-other-curves.ly index 6e8bda7774..c76991235c 100644 --- a/input/regression/shape-other-curves.ly +++ b/input/regression/shape-other-curves.ly @@ -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 } diff --git a/input/regression/shape-slurs.ly b/input/regression/shape-slurs.ly index 8b4ad53a6d..3427965c34 100644 --- a/input/regression/shape-slurs.ly +++ b/input/regression/shape-slurs.ly @@ -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 @@ -21,13 +21,13 @@ % 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) diff --git a/input/regression/shift-durations-negative-dots.ly b/input/regression/shift-durations-negative-dots.ly index 057cd93ede..e59a3f4f6d 100644 --- a/input/regression/shift-durations-negative-dots.ly +++ b/input/regression/shift-durations-negative-dots.ly @@ -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 index 0000000000..e1a7af5934 --- /dev/null +++ b/input/regression/shorthands.ly @@ -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. } +>> diff --git a/input/regression/skip-of-length.ly b/input/regression/skip-of-length.ly index c65c57075b..57e6d1a830 100644 --- a/input/regression/skip-of-length.ly +++ b/input/regression/skip-of-length.ly @@ -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. diff --git a/input/regression/skiptypesetting-all-true.ly b/input/regression/skiptypesetting-all-true.ly index d33f2c5ac2..171cae4084 100644 --- a/input/regression/skiptypesetting-all-true.ly +++ b/input/regression/skiptypesetting-all-true.ly @@ -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")) diff --git a/input/regression/skiptypesetting-tuplet.ly b/input/regression/skiptypesetting-tuplet.ly index 8849fa4907..b2f6262915 100644 --- a/input/regression/skiptypesetting-tuplet.ly +++ b/input/regression/skiptypesetting-tuplet.ly @@ -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 diff --git a/input/regression/skyline-horizontal-padding.ly b/input/regression/skyline-horizontal-padding.ly index 4862ab71dd..a7c0131c84 100644 --- a/input/regression/skyline-horizontal-padding.ly +++ b/input/regression/skyline-horizontal-padding.ly @@ -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' 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 index 0000000000..ceb27b2490 --- /dev/null +++ b/input/regression/skyline-point-extent.ly @@ -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-> +} diff --git a/input/regression/skyline-vertical-placement.ly b/input/regression/skyline-vertical-placement.ly index 748aa68dfc..49c0376092 100644 --- a/input/regression/skyline-vertical-placement.ly +++ b/input/regression/skyline-vertical-placement.ly @@ -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" diff --git a/input/regression/slur-broken-trend.ly b/input/regression/slur-broken-trend.ly index aa1813e05c..81f31fc078 100644 --- a/input/regression/slur-broken-trend.ly +++ b/input/regression/slur-broken-trend.ly @@ -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 diff --git a/input/regression/slur-cross-staff-beam.ly b/input/regression/slur-cross-staff-beam.ly index 12c9c1f7a9..834696a5be 100644 --- a/input/regression/slur-cross-staff-beam.ly +++ b/input/regression/slur-cross-staff-beam.ly @@ -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 } >> } diff --git a/input/regression/slur-dash.ly b/input/regression/slur-dash.ly index 0bcf3691a7..bf8235d5e2 100644 --- a/input/regression/slur-dash.ly +++ b/input/regression/slur-dash.ly @@ -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) | diff --git a/input/regression/slur-dynamics.ly b/input/regression/slur-dynamics.ly index 6e76f750c7..a3739a48b3 100644 --- a/input/regression/slur-dynamics.ly +++ b/input/regression/slur-dynamics.ly @@ -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,) } diff --git a/input/regression/slur-extreme.ly b/input/regression/slur-extreme.ly index 786b23e735..a1380cf539 100644 --- a/input/regression/slur-extreme.ly +++ b/input/regression/slur-extreme.ly @@ -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)] } diff --git a/input/regression/slur-manual.ly b/input/regression/slur-manual.ly index 49613d4ba0..4a9cf8d94f 100644 --- a/input/regression/slur-manual.ly +++ b/input/regression/slur-manual.ly @@ -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) } diff --git a/input/regression/slur-scoring.ly b/input/regression/slur-scoring.ly index 87b544202f..4c2f6ae7f1 100644 --- a/input/regression/slur-scoring.ly +++ b/input/regression/slur-scoring.ly @@ -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]) } diff --git a/input/regression/slur-script-inside.ly b/input/regression/slur-script-inside.ly index 56c0b8138f..a7ce4e3b13 100644 --- a/input/regression/slur-script-inside.ly +++ b/input/regression/slur-script-inside.ly @@ -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 } diff --git a/input/regression/slur-script.ly b/input/regression/slur-script.ly index b2fb1c50ab..8ba9e19b80 100644 --- a/input/regression/slur-script.ly +++ b/input/regression/slur-script.ly @@ -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) } diff --git a/input/regression/slur-shift-region.ly b/input/regression/slur-shift-region.ly index 5d3304f382..8a43894cd5 100644 --- a/input/regression/slur-shift-region.ly +++ b/input/regression/slur-shift-region.ly @@ -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) } } diff --git a/input/regression/slur-tuplet.ly b/input/regression/slur-tuplet.ly index 3296fefa1d..202ea32713 100644 --- a/input/regression/slur-tuplet.ly +++ b/input/regression/slur-tuplet.ly @@ -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,) } diff --git a/input/regression/slur-vestigial-outside-staff-callback.ly b/input/regression/slur-vestigial-outside-staff-callback.ly index 2388777846..a858017427 100644 --- a/input/regression/slur-vestigial-outside-staff-callback.ly +++ b/input/regression/slur-vestigial-outside-staff-callback.ly @@ -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 16 b 16( b) diff --git a/input/regression/song-reordering.ly b/input/regression/song-reordering.ly index c774699fe2..1c9083597b 100644 --- a/input/regression/song-reordering.ly +++ b/input/regression/song-reordering.ly @@ -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 } } diff --git a/input/regression/song-reordering2.ly b/input/regression/song-reordering2.ly index cd63ae0429..57595c22ad 100644 --- a/input/regression/song-reordering2.ly +++ b/input/regression/song-reordering2.ly @@ -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 } } diff --git a/input/regression/song-slurs.ly b/input/regression/song-slurs.ly index 8dd068162e..25aba696f5 100644 --- a/input/regression/song-slurs.ly +++ b/input/regression/song-slurs.ly @@ -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 diff --git a/input/regression/spacing-accidental-stretch.ly b/input/regression/spacing-accidental-stretch.ly index 8c2c1f6daa..02312f6042 100644 --- a/input/regression/spacing-accidental-stretch.ly +++ b/input/regression/spacing-accidental-stretch.ly @@ -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 diff --git a/input/regression/spacing-bar-accidental.ly b/input/regression/spacing-bar-accidental.ly index eee994d286..98c26482e7 100644 --- a/input/regression/spacing-bar-accidental.ly +++ b/input/regression/spacing-bar-accidental.ly @@ -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 diff --git a/input/regression/spacing-bar-arpeggio.ly b/input/regression/spacing-bar-arpeggio.ly index 1079310431..2511e308ae 100644 --- a/input/regression/spacing-bar-arpeggio.ly +++ b/input/regression/spacing-bar-arpeggio.ly @@ -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 2\arpeggio diff --git a/input/regression/spacing-bar-stem.ly b/input/regression/spacing-bar-stem.ly index a3ba1f82b8..2567773e83 100644 --- a/input/regression/spacing-bar-stem.ly +++ b/input/regression/spacing-bar-stem.ly @@ -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 diff --git a/input/regression/spacing-bar-whole-measure.ly b/input/regression/spacing-bar-whole-measure.ly index 3fb2543b05..a8503b1a32 100644 --- a/input/regression/spacing-bar-whole-measure.ly +++ b/input/regression/spacing-bar-whole-measure.ly @@ -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. } diff --git a/input/regression/spacing-folded-clef2.ly b/input/regression/spacing-folded-clef2.ly index 0df8f7cd31..6f5777b93d 100644 --- a/input/regression/spacing-folded-clef2.ly +++ b/input/regression/spacing-folded-clef2.ly @@ -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 } } diff --git a/input/regression/spacing-grace.ly b/input/regression/spacing-grace.ly index 78e1fb11a1..3d64bb03e8 100644 --- a/input/regression/spacing-grace.ly +++ b/input/regression/spacing-grace.ly @@ -5,7 +5,7 @@ run are spaced accordingly. " } -\version "2.16.0" +\version "2.17.28" \paper { ragged-right = ##t } @@ -16,11 +16,11 @@ 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 diff --git a/input/regression/spacing-horizontal-skyline-grace.ly b/input/regression/spacing-horizontal-skyline-grace.ly index a8430674d1..b99c173eef 100644 --- a/input/regression/spacing-horizontal-skyline-grace.ly +++ b/input/regression/spacing-horizontal-skyline-grace.ly @@ -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. | diff --git a/input/regression/spacing-knee-compressed.ly b/input/regression/spacing-knee-compressed.ly index ca7611d6c0..abebf5a399 100644 --- a/input/regression/spacing-knee-compressed.ly +++ b/input/regression/spacing-knee-compressed.ly @@ -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 } } diff --git a/input/regression/spacing-knee.ly b/input/regression/spacing-knee.ly index 050606112b..2ef25e5675 100644 --- a/input/regression/spacing-knee.ly +++ b/input/regression/spacing-knee.ly @@ -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''] } diff --git a/input/regression/spacing-loose-grace-error.ly b/input/regression/spacing-loose-grace-error.ly index f55dc72360..6f299e8cb3 100644 --- a/input/regression/spacing-loose-grace-error.ly +++ b/input/regression/spacing-loose-grace-error.ly @@ -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 } diff --git a/input/regression/spacing-loose-grace-linebreak.ly b/input/regression/spacing-loose-grace-linebreak.ly index 1ddfe3cdf7..655e8b17ee 100644 --- a/input/regression/spacing-loose-grace-linebreak.ly +++ b/input/regression/spacing-loose-grace-linebreak.ly @@ -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 } } diff --git a/input/regression/spacing-loose-grace.ly b/input/regression/spacing-loose-grace.ly index 225e8292a0..3852ed4598 100644 --- a/input/regression/spacing-loose-grace.ly +++ b/input/regression/spacing-loose-grace.ly @@ -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 diff --git a/input/regression/spacing-loose-polyphony.ly b/input/regression/spacing-loose-polyphony.ly index 18f2ba4628..43fdb6e8d4 100644 --- a/input/regression/spacing-loose-polyphony.ly +++ b/input/regression/spacing-loose-polyphony.ly @@ -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' diff --git a/input/regression/spacing-mark-width.ly b/input/regression/spacing-mark-width.ly index 3b86929f36..8010f4edfb 100644 --- a/input/regression/spacing-mark-width.ly +++ b/input/regression/spacing-mark-width.ly @@ -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 " } diff --git a/input/regression/spacing-measure-length.ly b/input/regression/spacing-measure-length.ly index 0b2d6ee98e..2400a0343a 100644 --- a/input/regression/spacing-measure-length.ly +++ b/input/regression/spacing-measure-length.ly @@ -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. } diff --git a/input/regression/spacing-multi-tuplet.ly b/input/regression/spacing-multi-tuplet.ly index acc53cc8fe..bab9232a8d 100644 --- a/input/regression/spacing-multi-tuplet.ly +++ b/input/regression/spacing-multi-tuplet.ly @@ -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 index 0000000000..67389f996f --- /dev/null +++ b/input/regression/spacing-non-adjacent-columns3.ly @@ -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 { 8[ f a] } + 4 r4 + \set fingeringOrientations = #'(right) + 4 \grace { d''8 e'' d''} + g'4 + } +>> diff --git a/input/regression/spacing-packed.ly b/input/regression/spacing-packed.ly index a187223b1f..d3a01b6f92 100644 --- a/input/regression/spacing-packed.ly +++ b/input/regression/spacing-packed.ly @@ -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 } diff --git a/input/regression/spacing-paper-column-padding.ly b/input/regression/spacing-paper-column-padding.ly index 77984552d8..8168fcc51a 100644 --- a/input/regression/spacing-paper-column-padding.ly +++ b/input/regression/spacing-paper-column-padding.ly @@ -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 } } diff --git a/input/regression/spacing-proportional.ly b/input/regression/spacing-proportional.ly index 9160af59af..73c13dcdf2 100644 --- a/input/regression/spacing-proportional.ly +++ b/input/regression/spacing-proportional.ly @@ -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 } >> diff --git a/input/regression/spacing-space-to-barline.ly b/input/regression/spacing-space-to-barline.ly index 996406aacb..e1539e59b8 100644 --- a/input/regression/spacing-space-to-barline.ly +++ b/input/regression/spacing-space-to-barline.ly @@ -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 } diff --git a/input/regression/spacing-stem-bar.ly b/input/regression/spacing-stem-bar.ly index 7d568f8cd0..7665030801 100644 --- a/input/regression/spacing-stem-bar.ly +++ b/input/regression/spacing-stem-bar.ly @@ -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 diff --git a/input/regression/spacing-stem-direction.ly b/input/regression/spacing-stem-direction.ly index 7b15bfc6ca..fbca840c55 100644 --- a/input/regression/spacing-stem-direction.ly +++ b/input/regression/spacing-stem-direction.ly @@ -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 } diff --git a/input/regression/spacing-stem-same-direction.ly b/input/regression/spacing-stem-same-direction.ly index 9ff4b55fb2..03a20bc679 100644 --- a/input/regression/spacing-stem-same-direction.ly +++ b/input/regression/spacing-stem-same-direction.ly @@ -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 diff --git a/input/regression/spacing-strict-notespacing.ly b/input/regression/spacing-strict-notespacing.ly index 250366491c..6e17724c1f 100644 --- a/input/regression/spacing-strict-notespacing.ly +++ b/input/regression/spacing-strict-notespacing.ly @@ -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 } diff --git a/input/regression/spacing-strict-spacing-grace.ly b/input/regression/spacing-strict-spacing-grace.ly index 1a9fefd824..38843d131e 100644 --- a/input/regression/spacing-strict-spacing-grace.ly +++ b/input/regression/spacing-strict-spacing-grace.ly @@ -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 diff --git a/input/regression/spacing-to-empty-barline.ly b/input/regression/spacing-to-empty-barline.ly index 2a98453f55..16cb6656fb 100644 --- a/input/regression/spacing-to-empty-barline.ly +++ b/input/regression/spacing-to-empty-barline.ly @@ -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 } } diff --git a/input/regression/spacing-uniform-stretching.ly b/input/regression/spacing-uniform-stretching.ly index 3b889d2d41..16cd079404 100644 --- a/input/regression/spacing-uniform-stretching.ly +++ b/input/regression/spacing-uniform-stretching.ly @@ -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] } diff --git a/input/regression/span-bar-allow-span-bar.ly b/input/regression/span-bar-allow-span-bar.ly index c4e150cec1..c6fe94815b 100644 --- a/input/regression/span-bar-allow-span-bar.ly +++ b/input/regression/span-bar-allow-span-bar.ly @@ -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 { diff --git a/input/regression/span-bar-break.ly b/input/regression/span-bar-break.ly index 5bd5b074df..aac291494d 100644 --- a/input/regression/span-bar-break.ly +++ b/input/regression/span-bar-break.ly @@ -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 } >> diff --git a/input/regression/span-bar-partial.ly b/input/regression/span-bar-partial.ly index 66ba86bbd0..adf890e5fc 100644 --- a/input/regression/span-bar-partial.ly +++ b/input/regression/span-bar-partial.ly @@ -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." } @@ -13,13 +13,13 @@ \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 { diff --git a/input/regression/span-bar.ly b/input/regression/span-bar.ly index f36f2c7878..4984602916 100644 --- a/input/regression/span-bar.ly +++ b/input/regression/span-bar.ly @@ -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 "|." } diff --git a/input/regression/spanner-after-line-breaking.ly b/input/regression/spanner-after-line-breaking.ly index 95bebac832..100d81346a 100644 --- a/input/regression/spanner-after-line-breaking.ly +++ b/input/regression/spanner-after-line-breaking.ly @@ -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 diff --git a/input/regression/spanner-break-overshoot.ly b/input/regression/spanner-break-overshoot.ly index 696f4fda0d..02ffba9a5c 100644 --- a/input/regression/spanner-break-overshoot.ly +++ b/input/regression/spanner-break-overshoot.ly @@ -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.] } } diff --git a/input/regression/staff-ledger-positions.ly b/input/regression/staff-ledger-positions.ly index ba6137e25f..3e8c191937 100644 --- a/input/regression/staff-ledger-positions.ly +++ b/input/regression/staff-ledger-positions.ly @@ -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 } diff --git a/input/regression/staff-line-positions.ly b/input/regression/staff-line-positions.ly index de355e7dc0..e8c9d4fa8f 100644 --- a/input/regression/staff-line-positions.ly +++ b/input/regression/staff-line-positions.ly @@ -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 } diff --git a/input/regression/staff-mixed-size.ly b/input/regression/staff-mixed-size.ly index 82e34418fd..7e42a72a5c 100644 --- a/input/regression/staff-mixed-size.ly +++ b/input/regression/staff-mixed-size.ly @@ -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( ])\! \times 2/3 { d4 d d } + \override DynamicText.extra-offset = #'(0 . 3) + s1-\f c8[(\< r a g]) e[ r d( ])\! \tuplet 3/2 { d4 d d } } << \new Staff \with { fontSize = #-4 - \override StaffSymbol #'staff-space = #(magstep -4) + \override StaffSymbol.staff-space = #(magstep -4) } { \melody } diff --git a/input/regression/staff-tweak.ly b/input/regression/staff-tweak.ly index 0240b0d88e..36e75dba38 100644 --- a/input/regression/staff-tweak.ly +++ b/input/regression/staff-tweak.ly @@ -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 diff --git a/input/regression/stem-direction-context.ly b/input/regression/stem-direction-context.ly index 76891556b3..f4eaf78f1e 100644 --- a/input/regression/stem-direction-context.ly +++ b/input/regression/stem-direction-context.ly @@ -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 diff --git a/input/regression/stem-length-estimation.ly b/input/regression/stem-length-estimation.ly index d7c50ba466..4a206696a9 100644 --- a/input/regression/stem-length-estimation.ly +++ b/input/regression/stem-length-estimation.ly @@ -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 { diff --git a/input/regression/stem-length.ly b/input/regression/stem-length.ly index c8a72976f5..39aa092181 100644 --- a/input/regression/stem-length.ly +++ b/input/regression/stem-length.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.17.6" \header { texidoc = "Stem length and stem-begin-position can be set manually. @@ -10,11 +10,11 @@ \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 } diff --git a/input/regression/stem-stemlet-whole.ly b/input/regression/stem-stemlet-whole.ly index ff835d7d80..2faa2de0d2 100644 --- a/input/regression/stem-stemlet-whole.ly +++ b/input/regression/stem-stemlet-whole.ly @@ -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 } diff --git a/input/regression/stem-stemlet.ly b/input/regression/stem-stemlet.ly index caf7240d52..4799eb5c8c 100644 --- a/input/regression/stem-stemlet.ly +++ b/input/regression/stem-stemlet.ly @@ -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 index 0000000000..6b5b32a93c --- /dev/null +++ b/input/regression/stem-tremolo-note-collision.ly @@ -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 32 + } +>> +} \ No newline at end of file diff --git a/input/regression/stem-tremolo-note-column.ly b/input/regression/stem-tremolo-note-column.ly index 6848dd26e7..f62e6ddbd5 100644 --- a/input/regression/stem-tremolo-note-column.ly +++ b/input/regression/stem-tremolo-note-column.ly @@ -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 } } diff --git a/input/regression/stem-tremolo-staff-space.ly b/input/regression/stem-tremolo-staff-space.ly index 2194434559..c89ded2dbd 100644 --- a/input/regression/stem-tremolo-staff-space.ly +++ b/input/regression/stem-tremolo-staff-space.ly @@ -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 diff --git a/input/regression/stem-tremolo.ly b/input/regression/stem-tremolo.ly index b692c38922..032f900ecc 100644 --- a/input/regression/stem-tremolo.ly +++ b/input/regression/stem-tremolo.ly @@ -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 diff --git a/input/regression/stencil-color-rotation.ly b/input/regression/stencil-color-rotation.ly index 788a2cd445..b8c9815344 100644 --- a/input/regression/stencil-color-rotation.ly +++ b/input/regression/stencil-color-rotation.ly @@ -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'\! } diff --git a/input/regression/stencil-hacking.ly b/input/regression/stencil-hacking.ly index dc5bf9ed6a..41192b986a 100644 --- a/input/regression/stencil-hacking.ly +++ b/input/regression/stencil-hacking.ly @@ -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) diff --git a/input/regression/stencil-scale.ly b/input/regression/stencil-scale.ly index fb75e14c60..eee897cfc3 100644 --- a/input/regression/stencil-scale.ly +++ b/input/regression/stencil-scale.ly @@ -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 diff --git a/input/regression/system-extents.ly b/input/regression/system-extents.ly index e0ba0dcf79..df9cdd96da 100644 --- a/input/regression/system-extents.ly +++ b/input/regression/system-extents.ly @@ -1,4 +1,4 @@ -\version "2.16.0" +\version "2.17.6" \header { texidoc = "The size of every system is correctly determined; this @@ -10,14 +10,13 @@ \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) } diff --git a/input/regression/system-start-bar-collapse-staffspace.ly b/input/regression/system-start-bar-collapse-staffspace.ly index 165dfd1aa0..8c3012cf9d 100644 --- a/input/regression/system-start-bar-collapse-staffspace.ly +++ b/input/regression/system-start-bar-collapse-staffspace.ly @@ -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 } diff --git a/input/regression/system-start-heavy-bar.ly b/input/regression/system-start-heavy-bar.ly index cded6cb372..d79dcd3b0f 100644 --- a/input/regression/system-start-heavy-bar.ly +++ b/input/regression/system-start-heavy-bar.ly @@ -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 } >> diff --git a/input/regression/system-start-nesting.ly b/input/regression/system-start-nesting.ly index d637b667f4..41a4a72a2a 100644 --- a/input/regression/system-start-nesting.ly +++ b/input/regression/system-start-nesting.ly @@ -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 } diff --git a/input/regression/tablature-chord-repetition.ly b/input/regression/tablature-chord-repetition.ly index 01c93ff777..7fd2a30eef 100644 --- a/input/regression/tablature-chord-repetition.ly +++ b/input/regression/tablature-chord-repetition.ly @@ -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 } } diff --git a/input/regression/tablature-full-notation.ly b/input/regression/tablature-full-notation.ly index 2fbe808836..55f6547911 100644 --- a/input/regression/tablature-full-notation.ly +++ b/input/regression/tablature-full-notation.ly @@ -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 } diff --git a/input/regression/tablature-harmonic-functions.ly b/input/regression/tablature-harmonic-functions.ly index aa1123aacf..9cb31cf1af 100644 --- a/input/regression/tablature-harmonic-functions.ly +++ b/input/regression/tablature-harmonic-functions.ly @@ -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 } diff --git a/input/regression/tablature-letter.ly b/input/regression/tablature-letter.ly index 2431769f91..b1e85522a0 100644 --- a/input/regression/tablature-letter.ly +++ b/input/regression/tablature-letter.ly @@ -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 { } + stringTunings = \stringTuning tablatureFormat = #fret-letter-tablature-format } \new TabVoice { diff --git a/input/regression/tablature-repeat.ly b/input/regression/tablature-repeat.ly index 69cc1ea09b..fc3d8a94e5 100644 --- a/input/regression/tablature-repeat.ly +++ b/input/regression/tablature-repeat.ly @@ -3,7 +3,7 @@ texidoc = "How a repeat sign looks in tablature." } -\version "2.16.0" +\version "2.17.2" \paper { ragged-right = ##t diff --git a/input/regression/tablature-slide.ly b/input/regression/tablature-slide.ly index 295d882e93..54b7c62daf 100644 --- a/input/regression/tablature-slide.ly +++ b/input/regression/tablature-slide.ly @@ -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 { 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 index 0000000000..1425ed6807 --- /dev/null +++ b/input/regression/tablature-slurs-with-beams.ly @@ -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 ]) -. 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 + >> +} diff --git a/input/regression/tablature-tie-behaviour.ly b/input/regression/tablature-tie-behaviour.ly index 9b32989b6f..a784576ee6 100644 --- a/input/regression/tablature-tie-behaviour.ly +++ b/input/regression/tablature-tie-behaviour.ly @@ -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 index 0000000000..d9d62a0e0d --- /dev/null +++ b/input/regression/tag-multiple.ly @@ -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 diff --git a/input/regression/test-output-distance.ly b/input/regression/test-output-distance.ly index 6ea91213b7..ef10b57f9c 100644 --- a/input/regression/test-output-distance.ly +++ b/input/regression/test-output-distance.ly @@ -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 index 0000000000..3657bc274d --- /dev/null +++ b/input/regression/text-script-vertical-skylines.ly @@ -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 } +} diff --git a/input/regression/text-spanner-attachment-alignment.ly b/input/regression/text-spanner-attachment-alignment.ly index 4060ef4c56..098ef131db 100644 --- a/input/regression/text-spanner-attachment-alignment.ly +++ b/input/regression/text-spanner-attachment-alignment.ly @@ -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" } } } >> diff --git a/input/regression/text-spanner-override-order.ly b/input/regression/text-spanner-override-order.ly index 9df1e12c69..cf1d6f1904 100644 --- a/input/regression/text-spanner-override-order.ly +++ b/input/regression/text-spanner-override-order.ly @@ -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 } >> diff --git a/input/regression/tie-accidental.ly b/input/regression/tie-accidental.ly index fb00bbd844..aea5616fce 100644 --- a/input/regression/tie-accidental.ly +++ b/input/regression/tie-accidental.ly @@ -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 ~ } diff --git a/input/regression/tie-broken-minimum-length.ly b/input/regression/tie-broken-minimum-length.ly index 5157e69b62..fab5dc33e8 100644 --- a/input/regression/tie-broken-minimum-length.ly +++ b/input/regression/tie-broken-minimum-length.ly @@ -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 } diff --git a/input/regression/tie-chord-broken-extremal.ly b/input/regression/tie-chord-broken-extremal.ly index 5c209bbecf..64844ae5a4 100644 --- a/input/regression/tie-chord-broken-extremal.ly +++ b/input/regression/tie-chord-broken-extremal.ly @@ -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 1 ~ \break - \override Tie #'(details multi-tie-region-size) = #1 + \override Tie.details.multi-tie-region-size = #1 \time 3/4 2.~ \break \time 4/4 1 } diff --git a/input/regression/tie-chord.ly b/input/regression/tie-chord.ly index d830bd01a9..af3ec740a9 100644 --- a/input/regression/tie-chord.ly +++ b/input/regression/tie-chord.ly @@ -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) diff --git a/input/regression/tie-dash.ly b/input/regression/tie-dash.ly index 82b34a194a..147d78a160 100644 --- a/input/regression/tie-dash.ly +++ b/input/regression/tie-dash.ly @@ -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 | diff --git a/input/regression/tie-manual-vertical-tune.ly b/input/regression/tie-manual-vertical-tune.ly index 9442bd3b20..b882d21e0f 100644 --- a/input/regression/tie-manual-vertical-tune.ly +++ b/input/regression/tie-manual-vertical-tune.ly @@ -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 } diff --git a/input/regression/tie-manual.ly b/input/regression/tie-manual.ly index b7720bf78b..b9a535b8fe 100644 --- a/input/regression/tie-manual.ly +++ b/input/regression/tie-manual.ly @@ -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 ~ - \once \override TieColumn #'tie-configuration = + \once \override TieColumn.tie-configuration = #'((0 . -1) (2 . -1) (5.5 . 1) (7 . 1)) diff --git a/input/regression/tie-semi-single.ly b/input/regression/tie-semi-single.ly index 421dd11912..e4ba0bd066 100644 --- a/input/regression/tie-semi-single.ly +++ b/input/regression/tie-semi-single.ly @@ -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 } diff --git a/input/regression/tie-single-manual.ly b/input/regression/tie-single-manual.ly index 24679f4268..23df905a94 100644 --- a/input/regression/tie-single-manual.ly +++ b/input/regression/tie-single-manual.ly @@ -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' } diff --git a/input/regression/tie-whole.ly b/input/regression/tie-whole.ly index 1b9dd8411e..5b62f19c22 100644 --- a/input/regression/tie-whole.ly +++ b/input/regression/tie-whole.ly @@ -5,10 +5,10 @@ } -\version "2.16.0" +\version "2.17.15" \paper { ragged-right = ##t } -\relative +\relative c' { 1~ 1~ diff --git a/input/regression/trill-spanner-chained.ly b/input/regression/trill-spanner-chained.ly index 49d3a8052d..502e32bd39 100644 --- a/input/regression/trill-spanner-chained.ly +++ b/input/regression/trill-spanner-chained.ly @@ -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 } diff --git a/input/regression/trill-spanner-grace.ly b/input/regression/trill-spanner-grace.ly index ae0ff5a4a2..6cb82618f8 100644 --- a/input/regression/trill-spanner-grace.ly +++ b/input/regression/trill-spanner-grace.ly @@ -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 } diff --git a/input/regression/trill-spanner-scaled.ly b/input/regression/trill-spanner-scaled.ly index 3cdc11bc51..19d7b9eb53 100644 --- a/input/regression/trill-spanner-scaled.ly +++ b/input/regression/trill-spanner-scaled.ly @@ -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 | diff --git a/input/regression/tuplet-beam.ly b/input/regression/tuplet-beam.ly index e65cbd8d95..6b84baa674 100644 --- a/input/regression/tuplet-beam.ly +++ b/input/regression/tuplet-beam.ly @@ -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] } } diff --git a/input/regression/tuplet-bracket-avoid-fingering.ly b/input/regression/tuplet-bracket-avoid-fingering.ly index da2167cf1c..719851b26d 100644 --- a/input/regression/tuplet-bracket-avoid-fingering.ly +++ b/input/regression/tuplet-bracket-avoid-fingering.ly @@ -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 } } diff --git a/input/regression/tuplet-bracket-avoid-scripts.ly b/input/regression/tuplet-bracket-avoid-scripts.ly index 8df61c5950..1cccccde46 100644 --- a/input/regression/tuplet-bracket-avoid-scripts.ly +++ b/input/regression/tuplet-bracket-avoid-scripts.ly @@ -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 } } diff --git a/input/regression/tuplet-bracket-avoid-string-number.ly b/input/regression/tuplet-bracket-avoid-string-number.ly index 0553472d6a..62ce79a461 100644 --- a/input/regression/tuplet-bracket-avoid-string-number.ly +++ b/input/regression/tuplet-bracket-avoid-string-number.ly @@ -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 8 } + \override TupletBracket.direction = #UP + \tuplet 3/2 { d4 8 } } diff --git a/input/regression/tuplet-bracket-cross-staff.ly b/input/regression/tuplet-bracket-cross-staff.ly index 5fb976ed58..2e6c9d0f34 100644 --- a/input/regression/tuplet-bracket-cross-staff.ly +++ b/input/regression/tuplet-bracket-cross-staff.ly @@ -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 { diff --git a/input/regression/tuplet-bracket-direction.ly b/input/regression/tuplet-bracket-direction.ly index ea8c1ea752..1713160738 100644 --- a/input/regression/tuplet-bracket-direction.ly +++ b/input/regression/tuplet-bracket-direction.ly @@ -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 } } diff --git a/input/regression/tuplet-bracket-outside-staff-priority.ly b/input/regression/tuplet-bracket-outside-staff-priority.ly index 46204a8efe..ecfa6814f7 100644 --- a/input/regression/tuplet-bracket-outside-staff-priority.ly +++ b/input/regression/tuplet-bracket-outside-staff-priority.ly @@ -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 index 0000000000..752f595128 --- /dev/null +++ b/input/regression/tuplet-bracket-vertical-skylines.ly @@ -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' } +} diff --git a/input/regression/tuplet-bracket-visibility.ly b/input/regression/tuplet-bracket-visibility.ly index adac9915b6..1d4a986ac5 100644 --- a/input/regression/tuplet-bracket-visibility.ly +++ b/input/regression/tuplet-bracket-visibility.ly @@ -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" >> } } diff --git a/input/regression/tuplet-broken.ly b/input/regression/tuplet-broken.ly index 172d28cabc..9021ead4b1 100644 --- a/input/regression/tuplet-broken.ly +++ b/input/regression/tuplet-broken.ly @@ -8,7 +8,7 @@ } -\version "2.16.0" +\version "2.17.11" \paper { ragged-right = ##t @@ -17,18 +17,18 @@ \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 } diff --git a/input/regression/tuplet-full-length-extent.ly b/input/regression/tuplet-full-length-extent.ly index 4bf1509f5e..f7cf547b16 100644 --- a/input/regression/tuplet-full-length-extent.ly +++ b/input/regression/tuplet-full-length-extent.ly @@ -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" } diff --git a/input/regression/tuplet-full-length-note.ly b/input/regression/tuplet-full-length-note.ly index 9553f9101a..06806188b4 100644 --- a/input/regression/tuplet-full-length-note.ly +++ b/input/regression/tuplet-full-length-note.ly @@ -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 diff --git a/input/regression/tuplet-full-length.ly b/input/regression/tuplet-full-length.ly index 5e4b46bab5..484d24762b 100644 --- a/input/regression/tuplet-full-length.ly +++ b/input/regression/tuplet-full-length.ly @@ -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 } - diff --git a/input/regression/tuplet-gap.ly b/input/regression/tuplet-gap.ly index 5e142e2502..4bf91a6e4d 100644 --- a/input/regression/tuplet-gap.ly +++ b/input/regression/tuplet-gap.ly @@ -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} } diff --git a/input/regression/tuplet-nest-beam.ly b/input/regression/tuplet-nest-beam.ly index 65a5773794..a163eb262b 100644 --- a/input/regression/tuplet-nest-beam.ly +++ b/input/regression/tuplet-nest-beam.ly @@ -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'' } } diff --git a/input/regression/tuplet-nest-broken.ly b/input/regression/tuplet-nest-broken.ly index dc273e3698..33876e0034 100644 --- a/input/regression/tuplet-nest-broken.ly +++ b/input/regression/tuplet-nest-broken.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.17.11" \header { texidoc = "Broken nested tuplets avoid each other correctly. @@ -15,28 +15,28 @@ \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 diff --git a/input/regression/tuplet-nest.ly b/input/regression/tuplet-nest.ly index 8b727c2a5c..093c57f289 100644 --- a/input/regression/tuplet-nest.ly +++ b/input/regression/tuplet-nest.ly @@ -1,5 +1,5 @@ -\version "2.16.0" +\version "2.17.11" \header { texidoc=" Tuplets may be nested." @@ -11,24 +11,24 @@ } \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 } } @@ -36,11 +36,11 @@ 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 } } diff --git a/input/regression/tuplet-no-stems.ly b/input/regression/tuplet-no-stems.ly index 5608e9b293..8898eec6d3 100644 --- a/input/regression/tuplet-no-stems.ly +++ b/input/regression/tuplet-no-stems.ly @@ -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 index 0000000000..8cdb353a6d --- /dev/null +++ b/input/regression/tuplet-number-outside-staff-positioning.ly @@ -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 diff --git a/input/regression/tuplet-number-outside-staff-priority.ly b/input/regression/tuplet-number-outside-staff-priority.ly index 7320677be0..1a21d0cf77 100644 --- a/input/regression/tuplet-number-outside-staff-priority.ly +++ b/input/regression/tuplet-number-outside-staff-priority.ly @@ -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 } } diff --git a/input/regression/tuplet-number-slur-script.ly b/input/regression/tuplet-number-slur-script.ly index b22f5ee35f..fa92b7cc43 100644 --- a/input/regression/tuplet-number-slur-script.ly +++ b/input/regression/tuplet-number-slur-script.ly @@ -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) } } diff --git a/input/regression/tuplet-properties.ly b/input/regression/tuplet-properties.ly index 3b6d8d9888..4af8ddd23c 100644 --- a/input/regression/tuplet-properties.ly +++ b/input/regression/tuplet-properties.ly @@ -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 } } diff --git a/input/regression/tuplet-rest.ly b/input/regression/tuplet-rest.ly index 14d3364cbc..beda1ec33e 100644 --- a/input/regression/tuplet-rest.ly +++ b/input/regression/tuplet-rest.ly @@ -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 } } diff --git a/input/regression/tuplet-single-note.ly b/input/regression/tuplet-single-note.ly index 56509d27af..322a4d635b 100644 --- a/input/regression/tuplet-single-note.ly +++ b/input/regression/tuplet-single-note.ly @@ -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"|." } >> diff --git a/input/regression/tuplet-slope.ly b/input/regression/tuplet-slope.ly index cccb4ab56d..c112f0c9af 100644 --- a/input/regression/tuplet-slope.ly +++ b/input/regression/tuplet-slope.ly @@ -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 } } } diff --git a/input/regression/tuplet-staffline-collision.ly b/input/regression/tuplet-staffline-collision.ly index 9ae2b584b1..8729d9747a 100644 --- a/input/regression/tuplet-staffline-collision.ly +++ b/input/regression/tuplet-staffline-collision.ly @@ -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 } } diff --git a/input/regression/tuplet-subdivision.ly b/input/regression/tuplet-subdivision.ly index 7a3b8b6f45..82fd4b9780 100644 --- a/input/regression/tuplet-subdivision.ly +++ b/input/regression/tuplet-subdivision.ly @@ -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 } } } diff --git a/input/regression/tuplet-text-different-numbers.ly b/input/regression/tuplet-text-different-numbers.ly index 0fae824667..7e01d344db 100644 --- a/input/regression/tuplet-text-different-numbers.ly +++ b/input/regression/tuplet-text-different-numbers.ly @@ -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. } } diff --git a/input/regression/tuplet-text-fraction-with-notes.ly b/input/regression/tuplet-text-fraction-with-notes.ly index 944b592fb7..9a63ebdf45 100644 --- a/input/regression/tuplet-text-fraction-with-notes.ly +++ b/input/regression/tuplet-text-fraction-with-notes.ly @@ -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. } } diff --git a/input/regression/tuplet-text-note-appended.ly b/input/regression/tuplet-text-note-appended.ly index 8a53c80e8d..c29e1f1997 100644 --- a/input/regression/tuplet-text-note-appended.ly +++ b/input/regression/tuplet-text-note-appended.ly @@ -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 } } diff --git a/input/regression/tuplets.ly b/input/regression/tuplets.ly index dc71b7f216..c250c5bea4 100644 --- a/input/regression/tuplets.ly +++ b/input/regression/tuplets.ly @@ -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 } } diff --git a/input/regression/typography-demo.ly b/input/regression/typography-demo.ly index 1e8a1acb93..92bab85643 100644 --- a/input/regression/typography-demo.ly +++ b/input/regression/typography-demo.ly @@ -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 ) | 8( \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 } } diff --git a/input/regression/unpure-pure-container.ly b/input/regression/unpure-pure-container.ly index b60479dc17..09971b0e27 100644 --- a/input/regression/unpure-pure-container.ly +++ b/input/regression/unpure-pure-container.ly @@ -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 index 0000000000..158c64c792 --- /dev/null +++ b/input/regression/volta-bracket-add-volta-hook.ly @@ -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 index 0000000000..40b788ddb0 --- /dev/null +++ b/input/regression/volta-bracket-vertical-skylines.ly @@ -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 diff --git a/input/regression/whiteout-lower-layers.ly b/input/regression/whiteout-lower-layers.ly index 514f740079..3b1c30971f 100644 --- a/input/regression/whiteout-lower-layers.ly +++ b/input/regression/whiteout-lower-layers.ly @@ -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 } diff --git a/input/regression/whiteout.ly b/input/regression/whiteout.ly index b998e5867b..c2802628ea 100644 --- a/input/regression/whiteout.ly +++ b/input/regression/whiteout.ly @@ -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 } diff --git a/input/regression/zero-staff-space.ly b/input/regression/zero-staff-space.ly index 65d2eb95de..6e3eb0a428 100644 --- a/input/regression/zero-staff-space.ly +++ b/input/regression/zero-staff-space.ly @@ -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 ":|." } } diff --git a/lily/GNUmakefile b/lily/GNUmakefile index 1872af74ce..6d9afd770c 100644 --- a/lily/GNUmakefile +++ b/lily/GNUmakefile @@ -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 diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 9c4d8976fe..ac525d27de 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -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 (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 ", diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index ff67181434..da23e57194 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -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 const &elts, Grob struct Accidental_placement_entry { - Skyline left_skyline_; - Skyline right_skyline_; - Interval vertical_extent_; - vector extents_; + Skyline_pair horizontal_skylines_; vector 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 *apes) vector 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 > 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 ()); + 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 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 @@ -318,9 +342,8 @@ extract_heads_and_stems (vector 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 ()); - uniq (ret); + + uniquify (ret); return ret; } @@ -350,7 +373,7 @@ build_heads_skyline (vector 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; } diff --git a/lily/accidental.cc b/lily/accidental.cc index 77129b6f9d..ce05dfff72 100644 --- a/lily/accidental.cc +++ b/lily/accidental.cc @@ -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 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 -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 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 " diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 0e350c1426..8a2a8d9b81 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -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 (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 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 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 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 " diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index 36ede54bb4..cf0d4e9086 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -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); diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc index 92fee10a50..99d3f8a335 100644 --- a/lily/ambitus-engraver.cc +++ b/lily/ambitus-engraver.cc @@ -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]); diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index 19f635f7f1..2a6d3771d7 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -19,14 +19,15 @@ #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 */ diff --git a/lily/arpeggio.cc b/lily/arpeggio.cc index 96b6bbd3d5..4de173da06 100644 --- a/lily/arpeggio.cc +++ b/lily/arpeggio.cc @@ -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 ); diff --git a/lily/articulations.cc b/lily/articulations.cc index 07f74e11c7..9034494965 100644 --- a/lily/articulations.cc +++ b/lily/articulations.cc @@ -38,7 +38,6 @@ articulation_list (vector note_events, vector articulation_events, char const *articulation_name) { - vector string_events; SCM articulations = SCM_EOL; vsize j = 0; diff --git a/lily/audio-item.cc b/lily/audio-item.cc index 201e8fd98e..a41357b28f 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -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 = "#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 } +}; diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index fe9c94ae54..b5c7f88ce6 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -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 *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 */ + "" + ); diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index b52fb16bb4..1efa379e9d 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -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; diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 10ad7f5992..295ba8b403 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -17,9 +17,10 @@ along with LilyPond. If not, see . */ -#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" @@ -28,11 +29,54 @@ #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 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 " ); diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index febff36afb..1e945f2f9e 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -19,11 +19,14 @@ #include "axis-group-interface.hh" +#include + #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" @@ -40,6 +43,14 @@ 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 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 (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 *const boxes, Skyline_pair *skylines) +add_interior_skylines (Grob *me, Grob *x_common, Grob *y_common, vector *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 const &other_v_skylines, + vector const &other_padding, + vector 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 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 > *all_v_skylines, + Drul_array > *all_paddings, + Drul_array > *all_horizon_paddings, vector elements, Grob *x_common, - Grob *y_common) + Grob *y_common, + multimap const &riders) { - vector boxes; - Drul_array 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 boxes; + vector 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 last_end (-infinity_f, -infinity_f); + vector 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::const_iterator GrobMapIterator; + pair range = riders.equal_range (elt); + vector 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 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 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 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 riders; vsize i = 0; - vector boxes; + vector 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 (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 > all_v_skylines; + Drul_array > all_paddings; + Drul_array > 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 current_elts; current_elts.push_back (elements[i]); @@ -767,9 +951,26 @@ Axis_group_interface::skyline_spacing (Grob *me, vector 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 " ); diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index c2abb8cd85..cf217be3b0 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -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 (); diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc index b700dc733d..9771799c18 100644 --- a/lily/beam-collision-engraver.cc +++ b/lily/beam-collision-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon 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); diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index a89435de68..846e4a245c 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -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 (info.grob ()); if (Stem::get_beam (stem)) return; diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc index ac845103ea..c590802675 100644 --- a/lily/beam-quanting.cc +++ b/lily/beam-quanting.cc @@ -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; diff --git a/lily/beam.cc b/lily/beam.cc index d73169a917..fbd158aeca 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -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 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 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); diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 411b5fbedb..088cdc1a65 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -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; diff --git a/lily/bezier.cc b/lily/bezier.cc index c4cdbb1c7b..d926712403 100644 --- a/lily/bezier.cc +++ b/lily/bezier.cc @@ -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} */ diff --git a/lily/box.cc b/lily/box.cc index df4770ff78..df5ccb75b2 100644 --- a/lily/box.cc +++ b/lily/box.cc @@ -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 diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc index 242e39eacc..8e231cf271 100644 --- a/lily/break-alignment-interface.cc +++ b/lily/break-alignment-interface.cc @@ -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" diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 02b29858af..e568e358e9 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -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 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::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); diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index 0adac3b8b3..aa505f9fe1 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -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")); diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index eab4d94d07..26b4a607bb 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -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); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 00c3457717..9e2a3eaa7f 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -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 ", diff --git a/lily/clef.cc b/lily/clef.cc index 3c1ca37525..b58bef9987 100644 --- a/lily/clef.cc +++ b/lily/clef.cc @@ -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 (); } diff --git a/lily/coherent-ligature-engraver.cc b/lily/coherent-ligature-engraver.cc index d0451afa92..3e2915e719 100644 --- a/lily/coherent-ligature-engraver.cc +++ b/lily/coherent-ligature-engraver.cc @@ -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) +Coherent_ligature_engraver::collect_accidentals (Spanner *, + vector 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 primitives) +compute_delta_pitches (vector const &primitives) { int prev_pitch = 0; int delta_pitch = 0; @@ -162,7 +166,7 @@ compute_delta_pitches (vector primitives) void Coherent_ligature_engraver::typeset_ligature (Spanner *ligature, - vector primitives) + vector const &primitives) { // compute some commonly needed context info stored as grob // properties diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index e0b57b8248..52a7d6c0bd 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -59,8 +59,6 @@ class Completion_heads_engraver : public Engraver vector notes_; vector prev_notes_; // Must remember notes for explicit ties. - vector tie_note_candidates_; - vector tie_note_candidate_events_; vector ties_; vector 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 " diff --git a/lily/completion-rest-engraver.cc b/lily/completion-rest-engraver.cc index 3f918e2d0e..61255226ea 100644 --- a/lily/completion-rest-engraver.cc +++ b/lily/completion-rest-engraver.cc @@ -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 rests_; - vector prev_rests_; vector 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 ¬e_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 ", diff --git a/lily/concurrent-hairpin-engraver.cc b/lily/concurrent-hairpin-engraver.cc index 5d04d258fe..ec677ec68c 100644 --- a/lily/concurrent-hairpin-engraver.cc +++ b/lily/concurrent-hairpin-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index c8b7fc1d74..f8d4b0f5b2 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -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; diff --git a/lily/context-def.cc b/lily/context-def.cc index b4e1e2567c..9ef10bea96 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -93,6 +93,9 @@ Context_def::print_smob (SCM smob, SCM port, scm_print_state *) scm_puts ("#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; diff --git a/lily/context-property.cc b/lily/context-property.cc index 1ccfe5a970..00108cf314 100644 --- a/lily/context-property.cc +++ b/lily/context-property.cc @@ -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)); } } diff --git a/lily/context-scheme.cc b/lily/context-scheme.cc index 64f8dd8e15..f58a793ed4 100644 --- a/lily/context-scheme.cc +++ b/lily/context-scheme.cc @@ -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); -} diff --git a/lily/context.cc b/lily/context.cc index 4d949e8379..491ea8f0d8 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -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 (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 (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_; } diff --git a/lily/control-track-performer.cc b/lily/control-track-performer.cc index 84f8044b47..9b0d676870 100644 --- a/lily/control-track-performer.cc +++ b/lily/control-track-performer.cc @@ -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); diff --git a/lily/cue-clef-engraver.cc b/lily/cue-clef-engraver.cc index dad382a27a..aebf071b9e 100644 --- a/lily/cue-clef-engraver.cc +++ b/lily/cue-clef-engraver.cc @@ -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 */ "" diff --git a/lily/default-bar-line-engraver.cc b/lily/default-bar-line-engraver.cc index 3b5555f581..a4c1bf6e2a 100644 --- a/lily/default-bar-line-engraver.cc +++ b/lily/default-bar-line-engraver.cc @@ -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)) { diff --git a/lily/dimension-cache.cc b/lily/dimension-cache.cc index 2d2fce49f3..4538f17bc1 100644 --- a/lily/dimension-cache.cc +++ b/lily/dimension-cache.cc @@ -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 (); diff --git a/lily/dispatcher.cc b/lily/dispatcher.cc index 0d899f94ba..eb612d35c4 100644 --- a/lily/dispatcher.cc +++ b/lily/dispatcher.cc @@ -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. diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 1aa0b728c0..6cba432639 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -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); } diff --git a/lily/dot-formatting-problem.cc b/lily/dot-formatting-problem.cc index be375b540d..863aa5fc02 100644 --- a/lily/dot-formatting-problem.cc +++ b/lily/dot-formatting-problem.cc @@ -45,7 +45,7 @@ Dot_formatting_problem::best () const Dot_formatting_problem::Dot_formatting_problem (vector 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]); diff --git a/lily/dots.cc b/lily/dots.cc index 43c47b7719..20503ca5ae 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -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); } } diff --git a/lily/drum-note-engraver.cc b/lily/drum-note-engraver.cc index 251d2099fe..06d24fdea6 100644 --- a/lily/drum-note-engraver.cc +++ b/lily/drum-note-engraver.cc @@ -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 ()); } } diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc index 265498658a..37f93cd5c4 100644 --- a/lily/dynamic-align-engraver.cc +++ b/lily/dynamic-align-engraver.cc @@ -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 ()); } diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index c492e59c55..a4d4e06f5a 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 2008--2012 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,97 +17,63 @@ along with LilyPond. If not, see . */ -#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 accepted_spanevents_drul_; - - vector pending_columns_; - vector 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 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 (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 (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 */ "" diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 86734d7ee6..936060bfc6 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -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_); diff --git a/lily/engraver.cc b/lily/engraver.cc index db1303d63c..b8bf1234c0 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -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))) diff --git a/lily/figured-bass-position-engraver.cc b/lily/figured-bass-position-engraver.cc index 5fa27a69cb..9b55e04f49 100644 --- a/lily/figured-bass-position-engraver.cc +++ b/lily/figured-bass-position-engraver.cc @@ -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); diff --git a/lily/file-name-map.cc b/lily/file-name-map.cc index 96be62c9a2..b124fda9b1 100644 --- a/lily/file-name-map.cc +++ b/lily/file-name-map.cc @@ -26,10 +26,10 @@ using namespace std; map 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 index 0000000000..1c5b904809 --- /dev/null +++ b/lily/fingering-column-engraver.cc @@ -0,0 +1,118 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2012 Mike Solomon + + 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 . +*/ + +#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 fingering_columns_; + Drul_array > scripts_; + vector 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 (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 index 0000000000..62d7d08db1 --- /dev/null +++ b/lily/fingering-column.cc @@ -0,0 +1,172 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2012 Mike Solomon + + 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 . +*/ + +#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 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 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 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 " + ); diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index a364947b08..56d7b3257e 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -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 */ diff --git a/lily/flag.cc b/lily/flag.cc index f997d6fe45..f4fcce8e0e 100644 --- a/lily/flag.cc +++ b/lily/flag.cc @@ -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 " ); diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 6990afe547..892319f3b8 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -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; diff --git a/lily/footnote-engraver.cc b/lily/footnote-engraver.cc index efa7900b00..20ee7c149f 100644 --- a/lily/footnote-engraver.cc +++ b/lily/footnote-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon 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 events_; + vector > 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; } } diff --git a/lily/freetype-error.cc b/lily/freetype-error.cc index 00e5cae351..88af76c1ae 100644 --- a/lily/freetype-error.cc +++ b/lily/freetype-error.cc @@ -31,7 +31,7 @@ const struct Freetype_error_message const char *err_msg; } ft_errors[] = -#include +#include FT_ERRORS_H ; diff --git a/lily/freetype.cc b/lily/freetype.cc index f19b164968..55a3fb3780 100644 --- a/lily/freetype.cc +++ b/lily/freetype.cc @@ -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; +} diff --git a/lily/fretboard-engraver.cc b/lily/fretboard-engraver.cc index d53c9132eb..4530642144 100644 --- a/lily/fretboard-engraver.cc +++ b/lily/fretboard-engraver.cc @@ -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 diff --git a/lily/function-documentation.cc b/lily/function-documentation.cc index b1384076b1..ec23557333 100644 --- a/lily/function-documentation.cc +++ b/lily/function-documentation.cc @@ -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 type_names; void ly_add_type_predicate (void *ptr, - string name) + const string &name) { type_names[ptr] = name; } diff --git a/lily/global-context-scheme.cc b/lily/global-context-scheme.cc index 1267793cf3..86ee2b05b9 100644 --- a/lily/global-context-scheme.cc +++ b/lily/global-context-scheme.cc @@ -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; diff --git a/lily/global-context.cc b/lily/global-context.cc index 005c54b45e..3fa5089e80 100644 --- a/lily/global-context.cc +++ b/lily/global-context.cc @@ -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 index 0000000000..f12e957d5e --- /dev/null +++ b/lily/global-vars.cc @@ -0,0 +1,59 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1997--2012 Han-Wen Nienhuys + + 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 . +*/ + +#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 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 start_environment_global; diff --git a/lily/gregorian-ligature-engraver.cc b/lily/gregorian-ligature-engraver.cc index 6ab68c8c9b..bfc7bfd883 100644 --- a/lily/gregorian-ligature-engraver.cc +++ b/lily/gregorian-ligature-engraver.cc @@ -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 primitives) +void check_and_fix_all_prefixes (vector 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 primitives) * Marks those heads that participate in a pes or flexa. */ void -provide_context_info (vector primitives) +provide_context_info (vector const &primitives) { Grob *prev_primitive = 0; int prev_prefix_set = 0; @@ -253,7 +253,7 @@ provide_context_info (vector primitives) void Gregorian_ligature_engraver::build_ligature (Spanner *ligature, - vector primitives) + vector const &primitives) { // apply style-independent checking and transformation check_and_fix_all_prefixes (primitives); diff --git a/lily/gregorian-ligature.cc b/lily/gregorian-ligature.cc index e6e16e4393..a0f54ed162 100644 --- a/lily/gregorian-ligature.cc +++ b/lily/gregorian-ligature.cc @@ -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) { diff --git a/lily/grob-array.cc b/lily/grob-array.cc index 62d071cee1..d0cf111068 100644 --- a/lily/grob-array.cc +++ b/lily/grob-array.cc @@ -98,8 +98,7 @@ Grob_array::remove_duplicates () { assert (!ordered_); - vector_sort (grobs_, less ()); - ::uniq (grobs_); + uniquify (grobs_); } bool diff --git a/lily/grob-closure.cc b/lily/grob-closure.cc index 4f6c0adc81..4c63fe3c0c 100644 --- a/lily/grob-closure.cc +++ b/lily/grob-closure.cc @@ -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); diff --git a/lily/grob-property.cc b/lily/grob-property.cc index 22c5fe2e71..f9773e5ec5 100644 --- a/lily/grob-property.cc +++ b/lily/grob-property.cc @@ -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; } diff --git a/lily/grob-scheme.cc b/lily/grob-scheme.cc index 81ff7864ff..9ae9c14fcb 100644 --- a/lily/grob-scheme.cc +++ b/lily/grob-scheme.cc @@ -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 +#include #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 const &arr, Grob *common, Axis a) return common; } +Grob * +common_refpoint_of_array (set const &arr, Grob *common, Axis a) +{ + set::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 & grobs) +{ + vector 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; +} diff --git a/lily/hairpin.cc b/lily/hairpin.cc index cacfb0f51c..40e165dd6d 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -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 index 243d9cbaf5..0000000000 --- a/lily/hara-kiri-engraver.cc +++ /dev/null @@ -1,105 +0,0 @@ -/* - This file is part of LilyPond, the GNU music typesetter. - - Copyright (C) 2005--2012 Han-Wen Nienhuys - - 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 . -*/ - -#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 */ - "" - ); - diff --git a/lily/hara-kiri-group-spanner.cc b/lily/hara-kiri-group-spanner.cc index cb5aacecc5..610ab950f4 100644 --- a/lily/hara-kiri-group-spanner.cc +++ b/lily/hara-kiri-group-spanner.cc @@ -134,8 +134,12 @@ void Hara_kiri_group_spanner::consider_suicide (Grob *me) { Spanner *sp = dynamic_cast (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; diff --git a/lily/includable-lexer.cc b/lily/includable-lexer.cc index 806eb1512f..8c00965744 100644 --- a/lily/includable-lexer.cc +++ b/lily/includable-lexer.cc @@ -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 index ae2bfb62f3..0000000000 --- a/lily/include/GNUmakefile +++ /dev/null @@ -1,8 +0,0 @@ -# lily/include/Makefile - -depth = ../.. -STEPMAKE_TEMPLATES=c++ - -include $(depth)/make/stepmake.make - - diff --git a/lily/include/accidental-interface.hh b/lily/include/accidental-interface.hh index bf4bfb7a58..f58563cbbb 100644 --- a/lily/include/accidental-interface.hh +++ b/lily/include/accidental-interface.hh @@ -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 accurate_boxes (Grob *me, Grob **common); static SCM get_stencil (Grob *me); }; diff --git a/lily/include/accidental-placement.hh b/lily/include/accidental-placement.hh index fa0902e1ae..08ba1e163f 100644 --- a/lily/include/accidental-placement.hh +++ b/lily/include/accidental-placement.hh @@ -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 get_relevant_accidentals (vector const &elts, Grob *left); static void split_accidentals (Grob *accs, diff --git a/lily/include/all-font-metrics.hh b/lily/include/all-font-metrics.hh index 3bb5b58377..7f2ca8326a 100644 --- a/lily/include/all-font-metrics.hh +++ b/lily/include/all-font-metrics.hh @@ -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; }; diff --git a/lily/include/arpeggio.hh b/lily/include/arpeggio.hh index a03beaa7a8..1347219812 100644 --- a/lily/include/arpeggio.hh +++ b/lily/include/arpeggio.hh @@ -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)); diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 45dcc7b799..43ed2e05a9 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -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 index 9f87aa3e52..0000000000 --- a/lily/include/axis-group-engraver.hh +++ /dev/null @@ -1,45 +0,0 @@ -/* - This file is part of LilyPond, the GNU music typesetter. - - Copyright (C) 2005--2012 Han-Wen Nienhuys - - 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 . -*/ - -#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 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 */ diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index 19bdc1e2ee..5995c70e65 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -25,9 +25,13 @@ #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 const &list, Grob *common, Axis); static Interval relative_maybe_bound_group_extent (vector 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 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); diff --git a/lily/include/beam-scoring-problem.hh b/lily/include/beam-scoring-problem.hh index 6e2302d19a..7e77d6794d 100644 --- a/lily/include/beam-scoring-problem.hh +++ b/lily/include/beam-scoring-problem.hh @@ -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* scores) const; + void generate_quants (vector *scores) const; void score_collisions (Beam_configuration *config) const; }; diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index 1e88dbb764..d09c0ac8be 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -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; diff --git a/lily/include/box.hh b/lily/include/box.hh index af5695b3bc..b0f8994311 100644 --- a/lily/include/box.hh +++ b/lily/include/box.hh @@ -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 diff --git a/lily/include/change-iterator.hh b/lily/include/change-iterator.hh index 482f53d970..2c9cb33125 100644 --- a/lily/include/change-iterator.hh +++ b/lily/include/change-iterator.hh @@ -31,7 +31,7 @@ public: DECLARE_CLASSNAME (Change_iterator); private: - void error (string); + void error (const string&); }; #endif diff --git a/lily/include/coherent-ligature-engraver.hh b/lily/include/coherent-ligature-engraver.hh index cc3ed8d695..bf422c40d1 100644 --- a/lily/include/coherent-ligature-engraver.hh +++ b/lily/include/coherent-ligature-engraver.hh @@ -29,12 +29,12 @@ public: protected: virtual void build_ligature (Spanner *ligature, - vector primitives) = 0; + vector const &primitives) = 0; virtual void typeset_ligature (Spanner *ligature, - vector primitives); + vector const &primitives); virtual void move_related_items_to_column (Item *, Paper_column *, Real); private: - void collect_accidentals (Spanner *, vector); + void collect_accidentals (Spanner *, vector const &); }; #endif // COHERENT_LIGATURE_ENGRAVER_HH diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index 731e20c1e3..cb4c4f70be 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -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 */ diff --git a/lily/include/context-def.hh b/lily/include/context-def.hh index 2fddd980b7..2776c81105 100644 --- a/lily/include/context-def.hh +++ b/lily/include/context-def.hh @@ -28,7 +28,7 @@ #include /* - 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 diff --git a/lily/include/context-mod.hh b/lily/include/context-mod.hh index 297ec4bb39..d384d73a04 100644 --- a/lily/include/context-mod.hh +++ b/lily/include/context-mod.hh @@ -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 (); diff --git a/lily/include/context.hh b/lily/include/context.hh index 5543235c25..c779074007 100644 --- a/lily/include/context.hh +++ b/lily/include/context.hh @@ -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 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); diff --git a/lily/include/dimension-cache.hh b/lily/include/dimension-cache.hh index 581bcff8a9..6210be1285 100644 --- a/lily/include/dimension-cache.hh +++ b/lily/include/dimension-cache.hh @@ -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 (); }; diff --git a/lily/include/event-chord-iterator.hh b/lily/include/event-chord-iterator.hh index aaecc3d923..04168f4209 100644 --- a/lily/include/event-chord-iterator.hh +++ b/lily/include/event-chord-iterator.hh @@ -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 { diff --git a/lily/include/file-name-map.hh b/lily/include/file-name-map.hh index 3e25d7e5cf..5999f75582 100644 --- a/lily/include/file-name-map.hh +++ b/lily/include/file-name-map.hh @@ -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 index 0000000000..5052322f12 --- /dev/null +++ b/lily/include/fingering-column.hh @@ -0,0 +1,36 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1999--2012 Han-Wen Nienhuys + + 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 . +*/ + +#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 */ diff --git a/lily/include/font-metric.hh b/lily/include/font-metric.hh index 4743e42b60..4c11989729 100644 --- a/lily/include/font-metric.hh +++ b/lily/include/font-metric.hh @@ -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); diff --git a/lily/include/freetype.hh b/lily/include/freetype.hh index 3ddc07e67f..89104bc888 100644 --- a/lily/include/freetype.hh +++ b/lily/include/freetype.hh @@ -20,14 +20,21 @@ #ifndef FREETYPE_HH #define FREETYPE_HH +// This include file loads the header file macros for FreeType. #include #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 */ diff --git a/lily/include/global-context.hh b/lily/include/global-context.hh index 079162d272..1ea2b38dc7 100644 --- a/lily/include/global-context.hh +++ b/lily/include/global-context.hh @@ -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: diff --git a/lily/include/gregorian-ligature-engraver.hh b/lily/include/gregorian-ligature-engraver.hh index 3ebf372eed..a65d54f67b 100644 --- a/lily/include/gregorian-ligature-engraver.hh +++ b/lily/include/gregorian-ligature-engraver.hh @@ -33,9 +33,10 @@ protected: Gregorian_ligature_engraver (); virtual void listen_pes_or_flexa (Stream_event *ev); - virtual void build_ligature (Spanner *ligature, vector primitives); + virtual void build_ligature (Spanner *ligature, + vector const &primitives); virtual void transform_heads (Spanner *ligature, - vector primitives) = 0; + vector const &primitives) = 0; void stop_translation_timestep (); }; diff --git a/lily/include/grob.hh b/lily/include/grob.hh index fd55dbf209..a0902d6d89 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -25,6 +25,8 @@ #include "dimension-cache.hh" #include "grob-interface.hh" +#include + 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 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 &); + /* refpoints */ Grob *common_refpoint_of_list (SCM elt_list, Grob *, Axis a); Grob *common_refpoint_of_array (vector const &, Grob *, Axis a); +Grob *common_refpoint_of_array (set const &, Grob *, Axis a); System *get_root_system (Grob *me); /* extents */ diff --git a/lily/include/includable-lexer.hh b/lily/include/includable-lexer.hh index c9595f923b..8378404513 100644 --- a/lily/include/includable-lexer.hh +++ b/lily/include/includable-lexer.hh @@ -53,9 +53,9 @@ public: vector 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; }; diff --git a/lily/include/input.hh b/lily/include/input.hh index 2ae9f093ee..a11f8f8c1b 100644 --- a/lily/include/input.hh +++ b/lily/include/input.hh @@ -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" diff --git a/lily/include/interval-minefield.hh b/lily/include/interval-minefield.hh index b618b94720..e7e237e949 100644 --- a/lily/include/interval-minefield.hh +++ b/lily/include/interval-minefield.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon Jan Nieuwenhuizen 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 index 0000000000..cb6494ca79 --- /dev/null +++ b/lily/include/kievan-ligature.hh @@ -0,0 +1,32 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2013 Aleksandr Andreev + + 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 . +*/ + +#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 */ diff --git a/lily/include/ligature-engraver.hh b/lily/include/ligature-engraver.hh index afb349980f..1ad21499b8 100644 --- a/lily/include/ligature-engraver.hh +++ b/lily/include/ligature-engraver.hh @@ -36,7 +36,7 @@ protected: void process_music (); virtual Spanner *create_ligature_spanner () = 0; virtual void typeset_ligature (Spanner *ligature, - vector primitives) = 0; + vector const &primitives) = 0; virtual Spanner *current_ligature (); SCM brew_ligature_primitive_proc; diff --git a/lily/include/lily-guile-macros.hh b/lily/include/lily-guile-macros.hh index c0df658498..a273f5ac5d 100644 --- a/lily/include/lily-guile-macros.hh +++ b/lily/include/lily-guile-macros.hh @@ -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 \ diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index f2b8f08ba1..4592b2497d 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -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 robust_scm2drul (SCM, Drul_array); Drul_array robust_scm2booldrul (SCM, Drul_array); Interval robust_scm2interval (SCM, Drul_array); Offset robust_scm2offset (SCM, Offset); -string robust_scm2string (SCM, string); +string robust_scm2string (SCM, const string&); Rational robust_scm2rational (SCM, Rational); vector ly_scm2floatvector (SCM); SCM ly_floatvector2scm (vector v); diff --git a/lily/include/lily-lexer.hh b/lily/include/lily-lexer.hh index caa3b4b44b..4bc4cbe887 100644 --- a/lily/include/lily-lexer.hh +++ b/lily/include/lily-lexer.hh @@ -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 (); diff --git a/lily/include/lily-parser.hh b/lily/include/lily-parser.hh index 2e065ff31d..3b4c757d65 100644 --- a/lily/include/lily-parser.hh +++ b/lily/include/lily-parser.hh @@ -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); diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 9ecb1b44aa..80240d5923 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -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 */ diff --git a/lily/include/lilypond-version.hh b/lily/include/lilypond-version.hh index 952b19b8e1..e79f01137a 100644 --- a/lily/include/lilypond-version.hh +++ b/lily/include/lilypond-version.hh @@ -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; diff --git a/lily/include/main.hh b/lily/include/main.hh index e9113b4e08..06a1a09991 100644 --- a/lily/include/main.hh +++ b/lily/include/main.hh @@ -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 get_inclusion_names (); void set_inclusion_names (vector); diff --git a/lily/include/midi-chunk.hh b/lily/include/midi-chunk.hh index d73b6af790..c87adf6491 100644 --- a/lily/include/midi-chunk.hh +++ b/lily/include/midi-chunk.hh @@ -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); diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index c5a9cc9fdd..492e2e9fc8 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -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: diff --git a/lily/include/midi-stream.hh b/lily/include/midi-stream.hh index ee1534da07..7ea838fdd0 100644 --- a/lily/include/midi-stream.hh +++ b/lily/include/midi-stream.hh @@ -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 (); diff --git a/lily/include/misc.hh b/lily/include/misc.hh index b70d2c2ce2..9bba2d09e9 100644 --- a/lily/include/misc.hh +++ b/lily/include/misc.hh @@ -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 diff --git a/lily/include/modified-font-metric.hh b/lily/include/modified-font-metric.hh index cd5cd6116f..40533cb3c3 100644 --- a/lily/include/modified-font-metric.hh +++ b/lily/include/modified-font-metric.hh @@ -26,12 +26,13 @@ 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; diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh index 55943c4b44..d012a77b07 100644 --- a/lily/include/multi-measure-rest.hh +++ b/lily/include/multi-measure-rest.hh @@ -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)); diff --git a/lily/include/music.hh b/lily/include/music.hh index b0f4837104..83cc5ff4c3 100644 --- a/lily/include/music.hh +++ b/lily/include/music.hh @@ -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); diff --git a/lily/include/note-collision.hh b/lily/include/note-collision.hh index ae0f3271b0..db192bf19a 100644 --- a/lily/include/note-collision.hh +++ b/lily/include/note-collision.hh @@ -40,6 +40,7 @@ public: static SCM automatic_shift (Grob *, Drul_array >); static SCM forced_shift (Grob *); + static vector note_head_positions (Grob *me); static Drul_array > get_clash_groups (Grob *me); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM smob)); static void add_column (Grob *me, Grob *ncol); diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index 280a5c969f..c2723f0ba8 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -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); diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh index 532933b84b..6155dd7dc6 100644 --- a/lily/include/note-head.hh +++ b/lily/include/note-head.hh @@ -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 diff --git a/lily/include/open-type-font.hh b/lily/include/open-type-font.hh index 6ee62823ec..cb55e9744b 100644 --- a/lily/include/open-type-font.hh +++ b/lily/include/open-type-font.hh @@ -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 */ diff --git a/lily/include/output-def.hh b/lily/include/output-def.hh index 3f44061513..eff52c2c38 100644 --- a/lily/include/output-def.hh +++ b/lily/include/output-def.hh @@ -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 (); diff --git a/lily/include/pango-font.hh b/lily/include/pango-font.hh index 6b4ad4b68f..ad559551d1 100644 --- a/lily/include/pango-font.hh +++ b/lily/include/pango-font.hh @@ -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; }; diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh index 1ac0a74dfd..02bc2746a2 100644 --- a/lily/include/paper-outputter.hh +++ b/lily/include/paper-outputter.hh @@ -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 */ diff --git a/lily/include/performer.hh b/lily/include/performer.hh index 0e6729a81f..1601625690 100644 --- a/lily/include/performer.hh +++ b/lily/include/performer.hh @@ -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 { diff --git a/lily/include/program-option.hh b/lily/include/program-option.hh index ae131d3f5d..83526816de 100644 --- a/lily/include/program-option.hh +++ b/lily/include/program-option.hh @@ -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); diff --git a/lily/include/pure-from-neighbor-interface.hh b/lily/include/pure-from-neighbor-interface.hh index 015ea1948b..5cf10fee35 100644 --- a/lily/include/pure-from-neighbor-interface.hh +++ b/lily/include/pure-from-neighbor-interface.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/relocate.hh b/lily/include/relocate.hh index 1a3e8a38d9..5fda3c73a7 100644 --- a/lily/include/relocate.hh +++ b/lily/include/relocate.hh @@ -22,11 +22,11 @@ #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; diff --git a/lily/include/rest.hh b/lily/include/rest.hh index 208da0499a..d5dbae9e25 100644 --- a/lily/include/rest.hh +++ b/lily/include/rest.hh @@ -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); diff --git a/lily/include/rhythmic-music-iterator.hh b/lily/include/rhythmic-music-iterator.hh index f639a1c051..c2a5f851fc 100644 --- a/lily/include/rhythmic-music-iterator.hh +++ b/lily/include/rhythmic-music-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2012 Mike Solomon + Copyright (C) 2012 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/include/self-alignment-interface.hh b/lily/include/self-alignment-interface.hh index c3c7e9c878..dd69f86630 100644 --- a/lily/include/self-alignment-interface.hh +++ b/lily/include/self-alignment-interface.hh @@ -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)); }; diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index edb6dc6a7a..e7c1637471 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -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 *); }; diff --git a/lily/include/skyline-pair.hh b/lily/include/skyline-pair.hh index 22dd639332..566b9be3f7 100644 --- a/lily/include/skyline-pair.hh +++ b/lily/include/skyline-pair.hh @@ -30,11 +30,17 @@ private: DECLARE_SIMPLE_SMOBS (Skyline_pair); public: Skyline_pair (); - Skyline_pair (vector const &boxes, Real horizon_padding, Axis a); - Skyline_pair (Box const &, Real horizon_padding, Axis a); + Skyline_pair (vector const &boxes, Axis a); + Skyline_pair (vector > const &buildings, Axis a); + Skyline_pair (vector 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; diff --git a/lily/include/skyline.hh b/lily/include/skyline.hh index 0715c545a6..6846474857 100644 --- a/lily/include/skyline.hh +++ b/lily/include/skyline.hh @@ -32,20 +32,21 @@ 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 buildings_; Direction sky_; - void internal_merge_skyline (list*, list*, - list *const result); - list internal_build_skyline (list*, Real, Axis, Direction); + void internal_merge_skyline (list *, list *, + list *result) const; + list internal_build_skyline (list *) 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 const &bldgs, Real horizon_padding, Axis a, Direction sky); - Skyline (Box const &b, Real horizon_padding, Axis a, Direction sky); + Skyline (vector const &bldgs, Axis a, Direction sky); + Skyline (vector > const &bldgs, Axis a, Direction sky); + Skyline (vector const &skypairs, Direction sky); + Skyline (Box const &b, Axis a, Direction sky); vector 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 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; diff --git a/lily/include/slur-configuration.hh b/lily/include/slur-configuration.hh index 48ec736448..5114815619 100644 --- a/lily/include/slur-configuration.hh +++ b/lily/include/slur-configuration.hh @@ -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 const &); diff --git a/lily/include/slur-proto-engraver.hh b/lily/include/slur-proto-engraver.hh new file mode 100644 index 0000000000..e27c96a759 --- /dev/null +++ b/lily/include/slur-proto-engraver.hh @@ -0,0 +1,73 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2013 Mike Solomon + + 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 . +*/ + +#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 start_events_; + vector stop_events_; + vector slurs_; + vector end_slurs_; + vector 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 diff --git a/lily/include/slur.hh b/lily/include/slur.hh index d1f743ca8e..b20311785d 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -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&, vector&); + static void auxiliary_acknowledge_extra_object (Grob_info const &, vector &, vector &); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM)); DECLARE_SCHEME_CALLBACK (calc_direction, (SCM)); diff --git a/lily/include/smobs.hh b/lily/include/smobs.hh index fb4fa530ee..cd111981bb 100644 --- a/lily/include/smobs.hh +++ b/lily/include/smobs.hh @@ -40,9 +40,23 @@ 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 diff --git a/lily/include/source-file.hh b/lily/include/source-file.hh index e4bdc3f638..5f3553aea0 100644 --- a/lily/include/source-file.hh +++ b/lily/include/source-file.hh @@ -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 gulp_file (string fn, int desired); +vector gulp_file (const string &fn, int desired); #endif /* SOURCE_FILE_HH */ diff --git a/lily/include/stem-tremolo.hh b/lily/include/stem-tremolo.hh index 03a6f8c908..7137046d30 100644 --- a/lily/include/stem-tremolo.hh +++ b/lily/include/stem-tremolo.hh @@ -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); diff --git a/lily/include/stem.hh b/lily/include/stem.hh index de1b7d6c9a..101c00341a 100644 --- a/lily/include/stem.hh +++ b/lily/include/stem.hh @@ -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)); diff --git a/lily/include/stencil.hh b/lily/include/stencil.hh index 00c295316c..34bafa6d41 100644 --- a/lily/include/stencil.hh +++ b/lily/include/stencil.hh @@ -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 index 000ec16f1c..0000000000 --- a/lily/include/stream.hh +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of LilyPond, the GNU music typesetter. - - Copyright (C) 2001--2012 Han-Wen Nienhuys - - 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 . -*/ - -#ifndef STREAM_HH -#define STREAM_HH - -#include "std-string.hh" - -#include -#include -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 */ - diff --git a/lily/include/system.hh b/lily/include/system.hh index 453e48234d..a5efe750ad 100644 --- a/lily/include/system.hh +++ b/lily/include/system.hh @@ -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 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 index 8a2a16a907..0000000000 --- a/lily/include/tie-column-format.hh +++ /dev/null @@ -1,48 +0,0 @@ -/* - This file is part of LilyPond, the GNU music typesetter. - - Copyright (C) 2005--2012 Han-Wen Nienhuys - - 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 . -*/ - -#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 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_drul, - vector ties, - Grob *common); - -void -set_manual_tie_configuration (Ties_configuration *tie_configs, - bool *manual_override, - SCM manual_configs - ); - -#endif /* TIE_COLUMN_FORMAT_HH */ diff --git a/lily/include/tie-configuration.hh b/lily/include/tie-configuration.hh index 32ffb45a95..9da9e45a40 100644 --- a/lily/include/tie-configuration.hh +++ b/lily/include/tie-configuration.hh @@ -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 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; diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index e5004c2925..ad044de860 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -43,7 +43,7 @@ struct Translator_method_binding void invoke () { if (method_) - (*method_) (translator_); + (translator_->*method_) (); } }; diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 41e2d9745b..be6781eb03 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -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 (); diff --git a/lily/input.cc b/lily/input.cc index bc1e79b373..2b29c828ba 100644 --- a/lily/input.cc +++ b/lily/input.cc @@ -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 "?"; } diff --git a/lily/interval-minefield.cc b/lily/interval-minefield.cc index ffe784fae8..d26e3e0d28 100644 --- a/lily/interval-minefield.cc +++ b/lily/interval-minefield.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon Jan Nieuwenhuizen 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; diff --git a/lily/item.cc b/lily/item.cc index 9941bc13c2..9cc808dde4 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -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) diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc index a7b65530fc..fb691c00d8 100644 --- a/lily/key-signature-interface.cc +++ b/lily/key-signature-interface.cc @@ -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 index 0000000000..92b9848c5b --- /dev/null +++ b/lily/kievan-ligature-engraver.cc @@ -0,0 +1,154 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2013 Aleksandr Andreev + + 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 . +*/ + +#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 const &primitives); + DECLARE_TRANSLATOR_LISTENER (ligature); + +public: + TRANSLATOR_DECLARATIONS (Kievan_ligature_engraver); + +private: + void fold_up_primitives (vector 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 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 (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 (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 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 index 0000000000..21ea23e16a --- /dev/null +++ b/lily/kievan-ligature.cc @@ -0,0 +1,39 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2013 Aleksandr Andreev + + 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 . +*/ + +#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 " + ); diff --git a/lily/ledger-line-engraver.cc b/lily/ledger-line-engraver.cc index 614874a8e8..2bb12c9cdc 100644 --- a/lily/ledger-line-engraver.cc +++ b/lily/ledger-line-engraver.cc @@ -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; } } diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc index 114ddb3f02..de88ba402f 100644 --- a/lily/ledger-line-spanner.cc +++ b/lily/ledger-line-spanner.cc @@ -40,20 +40,15 @@ set_rods (Drul_array const ¤t_extents, Drul_array 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 const ¤t_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 current_extents; Drul_array 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 diff --git a/lily/lexer.ll b/lily/lexer.ll index 9fb4cb6d55..3bad9f2e7e 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -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 \\sourcefileline{WHITE}* { yy_push_state (sourcefileline); } -\"[^"]*\" { /* got the version number */ +\"[^""]*\" { /* 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; - - + } } \"[^""]*\" { 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 ()); } \\include { @@ -384,8 +388,8 @@ BOM_UTF8 \357\273\277 } \"[^""]* { // 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 {RESTNAME}/[-_] | // pseudo backup rule {RESTNAME} { char const *s = YYText (); - yylval.scm = scm_from_locale_string (s); + yylval = scm_from_locale_string (s); return RESTNAME; } q/[-_] | // pseudo backup rule q { + yylval = SCM_UNSPECIFIED; return CHORD_REPETITION; } R/[-_] | // pseudo backup rule R { + yylval = SCM_UNSPECIFIED; return MULTI_MEASURE_REST; } # { //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; } { \<\< { + yylval = SCM_UNSPECIFIED; return DOUBLE_ANGLE_OPEN; } \>\> { + yylval = SCM_UNSPECIFIED; return DOUBLE_ANGLE_CLOSE; } } { \< { + yylval = SCM_UNSPECIFIED; return ANGLE_OPEN; } \> { + yylval = SCM_UNSPECIFIED; return ANGLE_CLOSE; } } { _ { + 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]; + } } { @@ -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; } } -{ +{ \\{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); } } { \" { - 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]; } } { @@ -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. - } } { \\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]; } } <> { 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 (); } -<> { if (is_main_input_) +<> { + LexerError (_ ("EOF found inside string").c_str ()); + yy_pop_state (); +} + +<> { + 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 (); } +{ANY_CHAR} { + while (include_stack_.size () > main_input_level_ + && close_input ()) + ; + yyterminate (); +} + { {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; -} - -. { +{SPECIAL} { + yylval = SCM_UNSPECIFIED; return YYText ()[0]; } -\\. { - 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; - } +{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; } diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index fb6f54c706..297337a976 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -44,9 +44,14 @@ * 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 diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index e8380324fb..06018c4c9c 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -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 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; } diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index 39aeb78dd1..c72ff8fc12 100644 --- a/lily/lily-lexer.cc +++ b/lily/lily-lexer.cc @@ -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 () { diff --git a/lily/lily-parser-scheme.cc b/lily/lily-parser-scheme.cc index 059cac3149..74d3feb653 100644 --- a/lily/lily-parser-scheme.cc +++ b/lily/lily-parser-scheme.cc @@ -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 (); } diff --git a/lily/lily-parser.cc b/lily/lily-parser.cc index 833fe6e158..cd7819e9c8 100644 --- a/lily/lily-parser.cc +++ b/lily/lily-parser.cc @@ -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_ = ""; - 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 ("", 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; diff --git a/lily/lilypond-version.cc b/lily/lilypond-version.cc index 28bb08d761..9c6d2130a3 100644 --- a/lily/lilypond-version.cc +++ b/lily/lilypond-version.cc @@ -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; diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index 2d43a71fa4..6c5e627442 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -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)); diff --git a/lily/lookup.cc b/lily/lookup.cc index 1acb34f783..e903d5a9a4 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -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]), diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index 48c8af205e..3c47335b35 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -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")); } } diff --git a/lily/main.cc b/lily/main.cc index 239ff1b39d..5ac75067a0 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -60,31 +60,34 @@ using namespace std; */ /* Names of header fields to be dumped to a separate file. */ -vector dump_header_fieldnames_global; +//vector 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 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 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); diff --git a/lily/melody-engraver.cc b/lily/melody-engraver.cc index 0ebd132450..c6ab972c74 100644 --- a/lily/melody-engraver.cc +++ b/lily/melody-engraver.cc @@ -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; } diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index 35b8614b0d..8f70fa4e48 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -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 primitives); + virtual void build_ligature (Spanner *ligature, + vector const &primitives); DECLARE_TRANSLATOR_LISTENER (ligature); public: TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver); private: - void transform_heads (vector primitives); - void propagate_properties (Spanner *ligature, vector primitives); - void fold_up_primitives (vector primitives); + void transform_heads (vector const &primitives); + void propagate_properties (Spanner *ligature, + vector const &primitives, + Real &min_length); + void fold_up_primitives (vector 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 primitives) +Mensural_ligature_engraver::transform_heads (vector const &primitives) { if (primitives.size () < 2) { @@ -336,7 +340,8 @@ Mensural_ligature_engraver::transform_heads (vector primitives) */ void Mensural_ligature_engraver::propagate_properties (Spanner *ligature, - vector primitives) + vector 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 primitives) +Mensural_ligature_engraver::fold_up_primitives (vector const &primitives, + Real &min_length) { Item *first = 0; Real distance = 0.0; @@ -416,7 +426,7 @@ Mensural_ligature_engraver::fold_up_primitives (vector 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 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 primitives) void Mensural_ligature_engraver::build_ligature (Spanner *ligature, - vector primitives) + vector 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); diff --git a/lily/mensural-ligature.cc b/lily/mensural-ligature.cc index 3bffcb841c..4695eef986 100644 --- a/lily/mensural-ligature.cc +++ b/lily/mensural-ligature.cc @@ -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); diff --git a/lily/midi-chunk.cc b/lily/midi-chunk.cc index 699ec7e898..f98c76373e 100644 --- a/lily/midi-chunk.cc +++ b/lily/midi-chunk.cc @@ -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 index 0000000000..ff0855d15c --- /dev/null +++ b/lily/midi-control-function-performer.cc @@ -0,0 +1,133 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2013 by Heikki Tauriainen . + Adapted from performer implementations + Copyright (C) 1996--2012 Jan Nieuwenhuizen , + Han-Wen Nienhyus 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 . +*/ + +#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 */ + "" + ); diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 0d0edbb4c7..54d00ff683 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -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 (a)) return new Midi_text (i); + else if (Audio_control_function_value_change *i + = dynamic_cast (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 { diff --git a/lily/midi-stream.cc b/lily/midi-stream.cc index 9409762d66..289bb1494a 100644 --- a/lily/midi-stream.cc +++ b/lily/midi-stream.cc @@ -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 (); diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index 6d0b1290a3..b97630b0d1 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -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)) { diff --git a/lily/misc.cc b/lily/misc.cc index 801266d79b..58d0a6e9d3 100644 --- a/lily/misc.cc +++ b/lily/misc.cc @@ -18,7 +18,10 @@ along with LilyPond. If not, see . */ +#include + #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 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 orig_c (orig[X_AXIS], orig[Y_AXIS]); + complex to_move = polar (dist, angle); + complex res = orig_c + to_move; + + return Offset (real (res), imag (res)); +} diff --git a/lily/modified-font-metric.cc b/lily/modified-font-metric.cc index 0acee12649..1657cf5a9e 100644 --- a/lily/modified-font-metric.cc +++ b/lily/modified-font-metric.cc @@ -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 (orig_)) diff --git a/lily/module-scheme.cc b/lily/module-scheme.cc index 4fc43ca32b..0da0445c9c 100644 --- a/lily/module-scheme.cc +++ b/lily/module-scheme.cc @@ -17,8 +17,7 @@ along with LilyPond. If not, see . */ -#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 } diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 47718a2fec..e823c298e3 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -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++; diff --git a/lily/music-scheme.cc b/lily/music-scheme.cc index ffa903b4eb..dc2d9a6aa2 100644 --- a/lily/music-scheme.cc +++ b/lily/music-scheme.cc @@ -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 (); } diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc index 7ab62470b5..b40597df24 100644 --- a/lily/music-sequence.cc +++ b/lily/music-sequence.cc @@ -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); diff --git a/lily/music.cc b/lily/music.cc index 7a38d7af41..eea6a9ca81 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -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 index 749f9aaa16..0000000000 --- a/lily/new-dynamic-engraver.cc +++ /dev/null @@ -1,306 +0,0 @@ -/* - This file is part of LilyPond, the GNU music typesetter. - - Copyright (C) 2008--2012 Han-Wen Nienhuys - - 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 . -*/ - -#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 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 */ - "" - ); diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index 574591a23e..a605f0f4ae 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -194,7 +194,7 @@ New_fingering_engraver::position_scripts (SCM orientations, vector *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"))) diff --git a/lily/note-collision.cc b/lily/note-collision.cc index 3ab245ca5e..aad09a95a9 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -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 +Note_collision_interface::note_head_positions (Grob *me) +{ + vector 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 nhp = Stem::note_head_positions (stem); + out.insert (out.end (), nhp.begin (), nhp.end ()); + } + + vector_sort (out, less ()); + return out; +} + ADD_INTERFACE (Note_collision_interface, "An object that handles collisions between notes with" " different stem directions and horizontal shifts. Most of" diff --git a/lily/note-column.cc b/lily/note-column.cc index da52093797..42bd9b484c 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -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 " diff --git a/lily/note-head.cc b/lily/note-head.cc index 287b10dc04..5d8352e72d 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -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; diff --git a/lily/note-performer.cc b/lily/note-performer.cc index 01086620ef..ddf9fe3921 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -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_); + } } } } diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc index 477236775d..1d0d21fbbb 100644 --- a/lily/note-spacing.cc +++ b/lily/note-spacing.cc @@ -79,7 +79,7 @@ Note_spacing::get_spacing (Grob *me, Item *right_col, adjust things so there are no collisions. */ Drul_array 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; diff --git a/lily/open-type-font.cc b/lily/open-type-font.cc index fc97b99687..76bbff86ed 100644 --- a/lily/open-type-font.cc +++ b/lily/open-type-font.cc @@ -18,14 +18,16 @@ */ #include "open-type-font.hh" +#include "freetype.hh" #include using namespace std; -#include +#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 { diff --git a/lily/optimal-page-breaking.cc b/lily/optimal-page-breaking.cc index 2b0910f887..3ff29d01bd 100644 --- a/lily/optimal-page-breaking.cc +++ b/lily/optimal-page-breaking.cc @@ -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 index 208de71e12..0000000000 --- a/lily/out/parser.cc +++ /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 -#include -#include -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 -#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 /* 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 /* 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 /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* 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 /* 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 /* 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 /* 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 - - - -#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 */ - - -/*-----------------------------------------------. -| 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; - } -} - - -/* 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 (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 index 2f16b53a3a..0000000000 --- a/lily/out/parser.hh +++ /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 - - diff --git a/lily/output-def.cc b/lily/output-def.cc index e425dbf4f9..addb0ef1ef 100644 --- a/lily/output-def.cc +++ b/lily/output-def.cc @@ -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 ())); } diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index 692244b897..9a6f8f40f2 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -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& cache = last ? last_page_height_cache_ : page_height_cache_; + vector &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_) diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index 7c99670551..5885a66135 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -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 footnote_number_markups; // Holds the numbering markups. - vector 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); diff --git a/lily/page-spacing.cc b/lily/page-spacing.cc index 9434fb910a..a705827d22 100644 --- a/lily/page-spacing.cc +++ b/lily/page-spacing.cc @@ -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_; diff --git a/lily/page-turn-page-breaking.cc b/lily/page-turn-page-breaking.cc index 2055214c82..047ba6a82f 100644 --- a/lily/page-turn-page-breaking.cc +++ b/lily/page-turn-page-breaking.cc @@ -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"); diff --git a/lily/pango-font.cc b/lily/pango-font.cc index 70810b5e27..e7b5489df5 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -22,7 +22,8 @@ #define PANGO_ENABLE_BACKEND #include -#include +#include "freetype.hh" +#include FT_XFREE86_H #include #include @@ -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 diff --git a/lily/pango-select.cc b/lily/pango-select.cc index cb05b0c183..082bcd8243 100644 --- a/lily/pango-select.cc +++ b/lily/pango-select.cc @@ -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; } diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index 8ff894d8fa..cb39f58d1e 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -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")); diff --git a/lily/paper-column.cc b/lily/paper-column.cc index cdf3d595ca..4379ce1a1d 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -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 (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 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 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); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index aa3a296c1f..4c6dc86ebe 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -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)); diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 57efb2fb35..34110554dc 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -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 diff --git a/lily/parser.yy b/lily/parser.yy index 020a998886..f6baee2096 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -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. @@ -33,13 +33,26 @@ /* 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 E_UNSIGNED -%token UNSIGNED +%token E_UNSIGNED +%token UNSIGNED /* Artificial tokens, for more generic function syntax */ -%token EXPECT_MARKUP "markup?" -%token EXPECT_PITCH "ly:pitch?" -%token EXPECT_DURATION "ly:duration?" -%token EXPECT_SCM "scheme?" -%token BACKUP "(backed-up?)" -%token REPARSE "(reparsed?)" -%token EXPECT_MARKUP_LIST "markup-list?" -%token 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 EXPECT_NO_MORE_ARGS; +%token EXPECT_NO_MORE_ARGS; /* An artificial token for parsing embedded Lilypond */ -%token EMBEDDED_LILY "#{" - -%token BOOK_IDENTIFIER -%token CHORDMODIFIER_PITCH -%token CHORD_MODIFIER -%token CHORD_REPETITION -%token CONTEXT_DEF_IDENTIFIER -%token CONTEXT_MOD_IDENTIFIER -%token DRUM_PITCH -%token PITCH_IDENTIFIER -%token DURATION_IDENTIFIER -%token EVENT_IDENTIFIER -%token EVENT_FUNCTION -%token FRACTION -%token LYRICS_STRING -%token LYRIC_ELEMENT -%token LYRIC_MARKUP_IDENTIFIER -%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 RESTNAME -%token SCM_FUNCTION -%token SCM_IDENTIFIER -%token SCM_TOKEN -%token SCORE_IDENTIFIER -%token STRING -%token STRING_IDENTIFIER -%token TONICNAME_PITCH - - -%type book_block -%type book_body -%type bookpart_block -%type bookpart_body - -%type bare_unsigned -%type figured_bass_alteration -%type dots -%type exclamations -%type optional_rest -%type questions -%type script_dir -%type sub_quotes -%type sup_quotes -%type tremolo_type - -/* Music */ -%type composite_music -%type grouped_music_list -%type braced_music_list -%type closed_music -%type music -%type music_bare -%type music_arg -%type music_assign -%type music_embedded -%type music_or_context_def -%type complex_music -%type complex_music_prefix -%type mode_changed_music -%type repeated_music -%type sequential_music -%type simple_music -%type simultaneous_music -%type chord_body -%type chord_body_element -%type command_element -%type command_event -%type context_modification -%type context_change -%type direction_less_event -%type direction_reqd_event -%type embedded_lilypond -%type event_chord -%type fingering -%type gen_text_def -%type music_property_def -%type note_chord_element -%type post_event -%type post_event_nofinger -%type re_rhythmed_music -%type simple_element -%type simple_music_property_def -%type start_symbol -%type string_number_event -%type tempo_event - -%type output_def_body -%type output_def_head -%type output_def_head_with_mode_switch -%type output_def -%type paper_block - -%type music_function_call -%type music_list -%type assignment_id -%type bare_number -%type bare_number_closed -%type unsigned_number -%type bass_figure -%type figured_bass_modification -%type br_bass_figure -%type bass_number -%type chord_body_elements -%type chord_item -%type chord_items -%type chord_separator -%type context_def_mod -%type context_def_spec_block -%type context_def_spec_body -%type context_mod -%type context_mod_arg -%type context_mod_embedded -%type context_mod_list -%type context_prop_spec -%type direction_less_char -%type duration_length -%type embedded_scm -%type embedded_scm_arg -%type embedded_scm_arg_closed -%type embedded_scm_bare -%type embedded_scm_bare_arg -%type embedded_scm_closed -%type event_function_event -%type figure_list -%type figure_spec -%type full_markup -%type full_markup_list -%type function_arglist -%type function_arglist_optional -%type function_arglist_backup -%type function_arglist_nonbackup -%type function_arglist_nonbackup_common -%type function_arglist_closed_nonbackup -%type function_arglist_skip -%type function_arglist_bare -%type function_arglist_closed -%type function_arglist_closed_optional -%type function_arglist_common -%type function_arglist_common_lyric -%type function_arglist_common_minus -%type function_arglist_closed_common -%type function_arglist_keep -%type function_arglist_closed_keep -%type identifier_init -%type lilypond -%type lilypond_header -%type lyric_element -%type lyric_element_arg -%type lyric_element_music -%type lyric_markup -%type markup -%type markup_braced_list -%type markup_braced_list_body -%type markup_composed_list -%type markup_command_list -%type markup_command_list_arguments -%type markup_command_basic_arguments -%type markup_head_1_item -%type markup_head_1_list -%type markup_list -%type markup_top -%type maybe_notemode_duration -%type mode_changing_head -%type mode_changing_head_with_context -%type multiplied_duration -%type music_function_call_closed -%type music_function_chord_body -%type new_chord -%type new_lyrics -%type number_expression -%type number_factor -%type number_term -%type octave_check -%type optional_context_mod -%type optional_id -%type optional_notemode_duration -%type pitch -%type pitch_also_in_chords -%type post_events -%type property_operation -%type property_path property_path_revved -%type scalar -%type scalar_closed -%type scm_function_call -%type scm_function_call_closed -%type script_abbreviation -%type simple_chord_elements -%type simple_markup -%type simple_string -%type steno_duration -%type steno_pitch -%type steno_tonic_pitch -%type step_number -%type step_numbers -%type string -%type tempo_range - -%type score_block -%type 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 (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 (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; diff --git a/lily/part-combine-iterator.cc b/lily/part-combine-iterator.cc index c0c9acc893..654edc35be 100644 --- a/lily/part-combine-iterator.cc +++ b/lily/part-combine-iterator.cc @@ -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)); } diff --git a/lily/partial-iterator.cc b/lily/partial-iterator.cc index 2b1ff3eb5b..7c3b3e965b 100644 --- a/lily/partial-iterator.cc +++ b/lily/partial-iterator.cc @@ -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 (); diff --git a/lily/pdf-scheme.cc b/lily/pdf-scheme.cc index 1801ae286d..544ce97461 100644 --- a/lily/pdf-scheme.cc +++ b/lily/pdf-scheme.cc @@ -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) { diff --git a/lily/performance.cc b/lily/performance.cc index 4e19544d41..dfd23a871a 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -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); } diff --git a/lily/phrasing-slur-engraver.cc b/lily/phrasing-slur-engraver.cc index 123878b644..6d9aac7af6 100644 --- a/lily/phrasing-slur-engraver.cc +++ b/lily/phrasing-slur-engraver.cc @@ -24,141 +24,33 @@ #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 start_events_; - vector stop_events_; - vector slurs_; - vector end_slurs_; - vector 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 (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, diff --git a/lily/pitch-scheme.cc b/lily/pitch-scheme.cc index 0433325523..238d235e72 100644 --- a/lily/pitch-scheme.cc +++ b/lily/pitch-scheme.cc @@ -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); diff --git a/lily/pitched-trill-engraver.cc b/lily/pitched-trill-engraver.cc index ef49b217d1..c2a02e71d9 100644 --- a/lily/pitched-trill-engraver.cc +++ b/lily/pitched-trill-engraver.cc @@ -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, diff --git a/lily/program-option-scheme.cc b/lily/program-option-scheme.cc index 616e99397a..302b48e3f4 100644 --- a/lily/program-option-scheme.cc +++ b/lily/program-option-scheme.cc @@ -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; diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index af1b38d159..6352f16399 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -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, diff --git a/lily/pure-from-neighbor-engraver.cc b/lily/pure-from-neighbor-engraver.cc index 1018dc54f6..24925d29b8 100644 --- a/lily/pure-from-neighbor-engraver.cc +++ b/lily/pure-from-neighbor-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon 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 ()); } diff --git a/lily/pure-from-neighbor-interface.cc b/lily/pure-from-neighbor-interface.cc index ce202bcf82..4f70da828b 100644 --- a/lily/pure-from-neighbor-interface.cc +++ b/lily/pure-from-neighbor-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc index 69c580f5d5..d35bb54b2c 100644 --- a/lily/quote-iterator.cc +++ b/lily/quote-iterator.cc @@ -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 (); diff --git a/lily/relative-octave-music.cc b/lily/relative-octave-music.cc index 94f566357c..2f31e20a22 100644 --- a/lily/relative-octave-music.cc +++ b/lily/relative-octave-music.cc @@ -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; } diff --git a/lily/relocate.cc b/lily/relocate.cc index 0d600820ae..3a13f03701 100644 --- a/lily/relocate.cc +++ b/lily/relocate.cc @@ -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)) diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index 6d3234c6c6..779323e07d 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -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 "". diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc index 13e12df2a4..78ffd6b880 100644 --- a/lily/repeated-music.cc +++ b/lily/repeated-music.cc @@ -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) { diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index e2b0db5ef2..46435b73ad 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -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); } } diff --git a/lily/rest.cc b/lily/rest.cc index 8e45405de2..3a448546b0 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -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 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 linepos = Staff_symbol::line_positions (staff); - std::sort (linepos.begin (), linepos.end ()); - std::vector::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::const_iterator it + = std::upper_bound (linepos.begin (), linepos.end (), pos); + if (it != linepos.end ()) + pos = *it; + else + pos = linepos.back (); } + else + { + std::vector::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 ())); diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index e4e78ecee6..1955498fc4 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -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 */ diff --git a/lily/rhythmic-music-iterator.cc b/lily/rhythmic-music-iterator.cc index b50122e8bb..64daa8ea5b 100644 --- a/lily/rhythmic-music-iterator.cc +++ b/lily/rhythmic-music-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2012 Mike Solomon + Copyright (C) 2012 Mike Solomon 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)) diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 9dc229a48d..1ab23e096f 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -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 (); } - diff --git a/lily/score-scheme.cc b/lily/score-scheme.cc index 7a306af442..98ff693ad2 100644 --- a/lily/score-scheme.cc +++ b/lily/score-scheme.cc @@ -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; } diff --git a/lily/script-column.cc b/lily/script-column.cc index 0a014a3800..8c963929bf 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -152,11 +152,12 @@ Script_column::order_grobs (vector 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 diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 288d771ef2..3085f4f155 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -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); diff --git a/lily/script-interface.cc b/lily/script-interface.cc index 40a251a077..28b978d329 100644 --- a/lily/script-interface.cc +++ b/lily/script-interface.cc @@ -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 " diff --git a/lily/self-alignment-interface.cc b/lily/self-alignment-interface.cc index a37b587100..1b4e421b70 100644 --- a/lily/self-alignment-interface.cc +++ b/lily/self-alignment-interface.cc @@ -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 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 ivs; - - Item *refp = dynamic_cast (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) { diff --git a/lily/semi-tie-column.cc b/lily/semi-tie-column.cc index f47171fb5a..07ef344440 100644 --- a/lily/semi-tie-column.cc +++ b/lily/semi-tie-column.cc @@ -28,12 +28,12 @@ #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 " diff --git a/lily/separation-item.cc b/lily/separation-item.cc index b3e574dad8..ebee8d6bf3 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -80,8 +80,7 @@ Skyline Separation_item::conditional_skyline (Grob *me, Grob *left) { vector 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 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 Separation_item::boxes (Grob *me, Grob *left) @@ -111,7 +124,19 @@ Separation_item::boxes (Grob *me, Grob *left) vector elts; if (left) - elts = Accidental_placement::get_relevant_accidentals (read_only_elts, left); + { + vector accidental_elts; + vector 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)); diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 6fad89ea54..a53fa6a750 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -21,24 +21,32 @@ #include // ceil. #include +#include +#include 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 +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 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 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 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 (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 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 (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 boxes; + vector skyps; + set::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 (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 " diff --git a/lily/simple-closure.cc b/lily/simple-closure.cc index 0c5dca8e95..59f9fd995b 100644 --- a/lily/simple-closure.cc +++ b/lily/simple-closure.cc @@ -18,6 +18,7 @@ along with LilyPond. If not, see . */ #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? diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 88ebae09d8..aef524da87 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -370,9 +370,12 @@ get_column_description (vector 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 (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 (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 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)))); } } diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index 3b891e8e79..3e0ad4fae7 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -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) diff --git a/lily/skyline-pair.cc b/lily/skyline-pair.cc index 6f6b4e1b88..164117c35b 100644 --- a/lily/skyline-pair.cc +++ b/lily/skyline-pair.cc @@ -28,13 +28,23 @@ Skyline_pair::Skyline_pair () { } -Skyline_pair::Skyline_pair (vector const &boxes, Real padding, Axis a) - : skylines_ (Skyline (boxes, padding, a, DOWN), Skyline (boxes, padding, a, UP)) +Skyline_pair::Skyline_pair (vector 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 > const &buildings, Axis a) + : skylines_ (Skyline (buildings, a, DOWN), Skyline (buildings, a, UP)) +{ +} + +Skyline_pair::Skyline_pair (vector 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 diff --git a/lily/skyline.cc b/lily/skyline.cc index 0250fc07f4..a462015866 100644 --- a/lily/skyline.cc +++ b/lily/skyline.cc @@ -18,6 +18,7 @@ */ #include "skyline.hh" +#include "skyline-pair.hh" #include #include @@ -53,11 +54,18 @@ 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 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 *const s, Real start_x) +first_intersection (Building const &b, list *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::iterator i; + + for (i = buildings_.begin (); i != buildings_.end (); i++) + { + if (last_empty && i->y_intercept_ == -infinity_f) + { + list::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::iterator left = buildings_.begin (); + list::iterator center = buildings_.begin (); + list::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 *s1, list *s2, - list *const result) + list *const result) const { if (s1->empty () || s2->empty ()) { @@ -204,33 +281,59 @@ Skyline::internal_merge_skyline (list *s1, list *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::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 *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 *const ret) +single_skyline (Building b, list *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 -non_overlapping_skyline (list *const boxes, Real horizon_padding, Axis horizon_axis, Direction sky) +non_overlapping_skyline (list *const buildings) { list result; Real last_end = -infinity_f; - list::iterator i = boxes->begin (); - while (i != boxes->end ()) + Building last_building (-infinity_f, -infinity_f, -infinity_f, infinity_f); + list::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::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::iterator j = i++; - boxes->erase (j); - last_end = result.front ().end_; + list::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 -Skyline::internal_build_skyline (list *boxes, Real horizon_padding, Axis horizon_axis, Direction sky) +Skyline::internal_build_skyline (list *buildings) const { - vsize size = boxes->size (); + vsize size = buildings->size (); if (size == 0) { @@ -333,16 +436,14 @@ Skyline::internal_build_skyline (list *boxes, Real horizon_padding, Axis ho else if (size == 1) { list 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 > 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::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 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 boxes; + list 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::const_iterator end = src.buildings_.end (); - for (list::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 const &boxes, Real horizon_padding, Axis horizon_axis, Direction sky) +Skyline::Skyline (vector > const &segments, Axis horizon_axis, Direction sky) { - list filtered_boxes; + list 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 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 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 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 other_bld (other.buildings_); list 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 other_bld; list my_bld; @@ -477,15 +598,13 @@ Skyline::insert (Box const &b, Real horizon_padding, Axis a) } /* do the same filtering as in Skyline (vector 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::iterator end = buildings_.end (); for (list::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 pad_buildings; + for (list::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::const_iterator i = padded_this->buildings_.begin (); - list::const_iterator j = padded_other->buildings_.begin (); + // The buildings may be overlapping, so resolve that. + list pad_skyline = internal_build_skyline (&pad_buildings); + + // Merge the padding with the original, to make a new skyline. + Skyline padded (sky_); + list 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::const_iterator i = buildings_.begin (); + list::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::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::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::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 ()); +} diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc index b144b2656f..332995ac99 100644 --- a/lily/slur-configuration.cc +++ b/lily/slur-configuration.cc @@ -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) { diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 03f5a5c430..a8a54f535a 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -24,298 +24,40 @@ #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 start_events_; - vector stop_events_; - vector slurs_; - vector end_slurs_; - vector 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 (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 index 0000000000..f2e3456913 --- /dev/null +++ b/lily/slur-proto-engraver.cc @@ -0,0 +1,297 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2013 Mike Solomon + + 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 . +*/ + +#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 (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 diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index e1025fa545..47bb40611c 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -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_; diff --git a/lily/slur.cc b/lily/slur.cc index 6d0d84203e..0aa96c787d 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -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 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 " ); diff --git a/lily/source-file.cc b/lily/source-file.cc index d847605425..788c78a69e 100644 --- a/lily/source-file.cc +++ b/lily/source-file.cc @@ -55,7 +55,7 @@ Source_file::load_stdin () return contents of FILENAME. *Not 0-terminated!* */ vector -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; } diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 657ff0cd6a..022c6a1219 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -223,79 +223,66 @@ Spacing_spanner::generate_pair_spacing (Grob *me, static void set_column_rods (vector const &cols, Real padding) { - /* distances[i] will be the minimum distance between column i and column i+1 */ - vector 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 distances (cols.size ()); + vector 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 (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 r_cols (r, rb); - Drul_array 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 (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]); } } diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 61ebd16dfe..f68f904d56 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -21,10 +21,11 @@ #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 arpeggios_; + vector 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.", diff --git a/lily/span-bar-stub-engraver.cc b/lily/span-bar-stub-engraver.cc index 10d97241bd..b813bbb25d 100644 --- a/lily/span-bar-stub-engraver.cc +++ b/lily/span-bar-stub-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lily/spanner.cc b/lily/spanner.cc index af2ea7137f..e0e1c18e1d 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -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; diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 77dc986cfe..4daa2ca9a2 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -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::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& channel_map + map &channel_map = (channel_mapping != ly_symbol2scm ("instrument")) ? channel_map_ : static_channel_map_; diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index 49f42ea4a6..e8bedd2e70 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -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. */ diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index d48091537a..1f9d2d8a7a 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -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 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 avoid_me (false, false); + vector 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 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 " diff --git a/lily/stem.cc b/lily/stem.cc index 8069a456c8..5f072fac6a 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -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 index 0000000000..4ae14e4609 --- /dev/null +++ b/lily/stencil-integral.cc @@ -0,0 +1,1173 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2012 Mike Solomon + + 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 . +*/ + +/* +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 +#include +#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 &boxes, vector > &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 &boxes, vector > &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 (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 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 &boxes, vector > &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 sunit = polar (1.0, start); + complex 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 > 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 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 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 &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 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 &boxes, vector > &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 &boxes, vector > &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 > 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 &boxes, vector > &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 &boxes, vector > &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 &boxes, vector > &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 &boxes, vector > &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 + (dynamic_cast(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(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 &boxes, vector > &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 widths; + vector heights; + vector xos; + vector yos; + vector char_ids; + ////////////////////// + Pango_font *pango_fm = dynamic_cast (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 &boxes, vector > &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 +stencil_traverser (PangoMatrix trans, SCM expr) +{ + if (scm_is_null (expr)) + return vector (); + else if (expr == ly_string2scm ("")) + return vector (); + else if (scm_car (expr) == ly_symbol2scm ("combine-stencil")) + { + vector out; + for (SCM s = scm_cdr (expr); scm_is_pair (s); s = scm_cdr (s)) + { + vector 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 (); + 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 (); + 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 out; + out.push_back (Transform_matrix_and_expression (trans, expr)); + return out; + } + warning ("Stencil expression not supported by the veritcal skylines."); + return vector (); +} + +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 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 data + = stencil_traverser (make_transform_matrix (1.0, 0.0, 0.0, 1.0, 0.0, 0.0), + s->expr ()); + vector boxes; + vector > 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 x_pos; + vector 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); +} diff --git a/lily/stencil-interpret.cc b/lily/stencil-interpret.cc index 8214af5dcc..734eb60806 100644 --- a/lily/stencil-interpret.cc +++ b/lily/stencil-interpret.cc @@ -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 diff --git a/lily/stencil-scheme.cc b/lily/stencil-scheme.cc index 7e346ca7f8..ab0f8cf745 100644 --- a/lily/stencil-scheme.cc +++ b/lily/stencil-scheme.cc @@ -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", diff --git a/lily/stencil.cc b/lily/stencil.cc index a488c59813..c8985105ea 100644 --- a/lily/stencil.cc +++ b/lily/stencil.cc @@ -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 { diff --git a/lily/stream-event-scheme.cc b/lily/stream-event-scheme.cc index 8a83f499e2..16703d33f5 100644 --- a/lily/stream-event-scheme.cc +++ b/lily/stream-event-scheme.cc @@ -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!", diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index d4b523c06c..a45b7dd13a 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -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); diff --git a/lily/system.cc b/lily/system.cc index be3c9ec192..ad4d0bab77 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -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 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 (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 const &breaking) { @@ -516,8 +548,7 @@ System::post_processing () anyway. */ vector all_elts_sorted (all_elements_->array ()); - vector_sort (all_elts_sorted, std::less ()); - 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_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 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 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 (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 (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 " ); diff --git a/lily/text-interface.cc b/lily/text-interface.cc index cd906c2e8e..c406beaab5 100644 --- a/lily/text-interface.cc +++ b/lily/text-interface.cc @@ -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 diff --git a/lily/tie-column.cc b/lily/tie-column.cc index bc14eb9bdf..7bc35584c5 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -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" diff --git a/lily/tie-configuration.cc b/lily/tie-configuration.cc index 79992fb808..19bcbd822c 100644 --- a/lily/tie-configuration.cc +++ b/lily/tie-configuration.cc @@ -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; diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 40da0d3e84..637a73ef32 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -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. ~ 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 now_heads_; vector 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 ~ 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 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 */ diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index f514b39095..304e4b3b2a 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -243,8 +243,7 @@ Tie_formatting_problem::set_column_chord_outline (vector 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)); diff --git a/lily/time-signature.cc b/lily/time-signature.cc index f00c2563f6..89f20278bf 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -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); diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index c6b245ba61..67832e3cc5 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -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 ()); diff --git a/lily/translator-dispatch-list.cc b/lily/translator-dispatch-list.cc index 6c74b259be..dffaa095f6 100644 --- a/lily/translator-dispatch-list.cc +++ b/lily/translator-dispatch-list.cc @@ -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); } } diff --git a/lily/ttf.cc b/lily/ttf.cc index be7cfe543c..6d7f97bf37 100644 --- a/lily/ttf.cc +++ b/lily/ttf.cc @@ -20,7 +20,7 @@ #include #include "freetype.hh" -#include +#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; diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index d211dcae38..1eccaabc06 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -92,8 +92,10 @@ Tuplet_bracket::parallel_beam (Grob *me_grob, vector const &cols, { Spanner *me = dynamic_cast (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 stems (Note_column::get_stem (cols[0]), diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 1b75bf923c..1fc30d898a 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -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 (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); } } diff --git a/lily/tuplet-iterator.cc b/lily/tuplet-iterator.cc index 872ccae48d..bf9a223684 100644 --- a/lily/tuplet-iterator.cc +++ b/lily/tuplet-iterator.cc @@ -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 (); diff --git a/lily/tweak-engraver.cc b/lily/tweak-engraver.cc index d6fb785522..a5d7ff68dd 100644 --- a/lily/tweak-engraver.cc +++ b/lily/tweak-engraver.cc @@ -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)); diff --git a/lily/unpure-pure-container.cc b/lily/unpure-pure-container.cc index 2caba1216e..9b2f871769 100644 --- a/lily/unpure-pure-container.cc +++ b/lily/unpure-pure-container.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011--2012 Mike Solomon + Copyright (C) 2011--2012 Mike Solomon 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 ("#", 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); diff --git a/lily/vaticana-ligature-engraver.cc b/lily/vaticana-ligature-engraver.cc index 2e3148cc28..9b1485777c 100644 --- a/lily/vaticana-ligature-engraver.cc +++ b/lily/vaticana-ligature-engraver.cc @@ -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 primitives, + Real align_heads (vector 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 primitives); + vector 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 primitives, +Vaticana_ligature_engraver::align_heads (vector 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 primitives) + vector const &primitives) { Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2); diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 97f14fdce0..65cf6e7f77 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -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 (); diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 317b47ee8d..7b0fd13411 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -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 (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 " ); diff --git a/lily/volta-repeat-iterator.cc b/lily/volta-repeat-iterator.cc index 2e386e6fd1..8dbc7b85e6 100644 --- a/lily/volta-repeat-iterator.cc +++ b/lily/volta-repeat-iterator.cc @@ -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"), diff --git a/ly/arabic.ly b/ly/arabic.ly index 0f63188562..645b47ae68 100644 --- a/ly/arabic.ly +++ b/ly/arabic.ly @@ -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 diff --git a/ly/articulate.ly b/ly/articulate.ly index 4f748f35b9..6992c87ebd 100644 --- a/ly/articulate.ly +++ b/ly/articulate.ly @@ -31,7 +31,7 @@ % %%%USAGE % In the \score section do: -% \unfoldRepeats \articulate << +% \articulate << % all the rest of the score % >> % or use the lilywrap script. @@ -89,8 +89,10 @@ % * 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)) @@ -113,12 +115,23 @@ % 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. @@ -147,12 +160,60 @@ (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. @@ -291,7 +352,7 @@ pre-t (let loop ((len (ly:music-length music))) (if (ly:momentexact (round (/ (ly:moment-main-numerator c1) @@ -350,10 +411,77 @@ '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. @@ -375,11 +503,23 @@ (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))) @@ -462,13 +602,12 @@ #(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= 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) diff --git a/ly/bagpipe.ly b/ly/bagpipe.ly index 85b216ab40..9252f723b5 100644 --- a/ly/bagpipe.ly +++ b/ly/bagpipe.ly @@ -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 diff --git a/ly/chord-repetition-init.ly b/ly/chord-repetition-init.ly index aad9ac2f3e..8cef710250 100644 --- a/ly/chord-repetition-init.ly +++ b/ly/chord-repetition-init.ly @@ -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))) diff --git a/ly/context-mods-init.ly b/ly/context-mods-init.ly index 1b8201879e..b57fd71337 100644 --- a/ly/context-mods-init.ly +++ b/ly/context-mods-init.ly @@ -16,18 +16,10 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\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}." } diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly index f417f10d94..f3f5eef668 100644 --- a/ly/declarations-init.ly +++ b/ly/declarations-init.ly @@ -16,10 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\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) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 4d2329032d..4d002257fb 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -16,7 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\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 @@ -100,6 +99,7 @@ \defaultchild "Voice" \accepts "Voice" \accepts "CueVoice" + \accepts "NullVoice" \description "Handles clefs, bar lines, keys, accidentals. It can contain @code{Voice} contexts." @@ -125,7 +125,7 @@ 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 diff --git a/ly/event-listener.ly b/ly/event-listener.ly index 6c0f75970e..9e5282de89 100644 --- a/ly/event-listener.ly +++ b/ly/event-listener.ly @@ -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 diff --git a/ly/grace-init.ly b/ly/grace-init.ly index abbfd8a3d9..6fe32f49fb 100644 --- a/ly/grace-init.ly +++ b/ly/grace-init.ly @@ -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 } diff --git a/ly/gregorian.ly b/ly/gregorian.ly index 9c6bd051a6..b0fe9f24c2 100644 --- a/ly/gregorian.ly +++ b/ly/gregorian.ly @@ -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 } } diff --git a/ly/init.ly b/ly/init.ly index a8bcc65d11..acaa2c9899 100644 --- a/ly/init.ly +++ b/ly/init.ly @@ -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) diff --git a/ly/makam.ly b/ly/makam.ly index 1209bc130d..cf6852a028 100644 --- a/ly/makam.ly +++ b/ly/makam.ly @@ -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 } } diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 0fa79af3dd..bf738074cd 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -18,7 +18,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.16.0" +\version "2.17.11" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -31,6 +31,14 @@ %% 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?) diff --git a/ly/paper-defaults-init.ly b/ly/paper-defaults-init.ly index c50681c278..07ee79176b 100644 --- a/ly/paper-defaults-init.ly +++ b/ly/paper-defaults-init.ly @@ -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 diff --git a/ly/performer-init.ly b/ly/performer-init.ly index fddfbf0918..1a383607f1 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -16,7 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.16.0" +\version "2.17.14" %% %% setup for Request->Element conversion. @@ -26,17 +26,19 @@ \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 { @@ -170,7 +175,6 @@ \context { \Voice \name TabVoice - autoBeaming = ##f % needed for consistent melismata with engravers } \context { @@ -178,6 +182,20 @@ \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 @@ -185,6 +203,7 @@ \alias Staff \accepts TabVoice \defaultchild TabVoice + autoBeaming = ##f % needed for consistent melismata with engravers } \context { @@ -193,12 +212,11 @@ \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 @@ -230,12 +248,13 @@ %% 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" @@ -267,12 +286,12 @@ \type "Performer_group" \consists "Staff_performer" \accepts ChordNameVoice + \defaultchild ChordNameVoice \name ChordNames } \context { - \type "Performer_group" - \consists "Note_performer" + \Voice \name ChordNameVoice } diff --git a/ly/predefined-fretboards-init.ly b/ly/predefined-fretboards-init.ly index 71000148b6..705e962872 100644 --- a/ly/predefined-fretboards-init.ly +++ b/ly/predefined-fretboards-init.ly @@ -30,14 +30,13 @@ % 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))) diff --git a/ly/property-init.ly b/ly/property-init.ly index e36c3c0465..42a1d5100c 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -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 = diff --git a/ly/script-init.ly b/ly/script-init.ly index ed7aed5948..0cb37947e7 100644 --- a/ly/script-init.ly +++ b/ly/script-init.ly @@ -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") diff --git a/ly/spanners-init.ly b/ly/spanners-init.ly index b507d01829..44dcdb6633 100644 --- a/ly/spanners-init.ly +++ b/ly/spanners-init.ly @@ -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) diff --git a/ly/titling-init.ly b/ly/titling-init.ly index 98ad8b2e63..da2bf166c9 100644 --- a/ly/titling-init.ly +++ b/ly/titling-init.ly @@ -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 } } diff --git a/ly/toc-init.ly b/ly/toc-init.ly index 5511ed4689..32eeb462f8 100644 --- a/ly/toc-init.ly +++ b/ly/toc-init.ly @@ -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 index 1f26abcd58..0000000000 --- a/make/GNUmakefile +++ /dev/null @@ -1,8 +0,0 @@ -depth = .. - -STEPMAKE_TEMPLATES=makedir install - -include $(depth)/make/stepmake.make - -default: spec - diff --git a/make/abc-vars.make b/make/abc-vars.make index f8fda6c5b1..ef394cd41e 100644 --- a/make/abc-vars.make +++ b/make/abc-vars.make @@ -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) diff --git a/make/doc-i18n-root-rules.make b/make/doc-i18n-root-rules.make index d374e5ca73..e36acd7356 100644 --- a/make/doc-i18n-root-rules.make +++ b/make/doc-i18n-root-rules.make @@ -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) diff --git a/make/doc-i18n-root-targets.make b/make/doc-i18n-root-targets.make index cd5001174a..875617a503 100644 --- a/make/doc-i18n-root-targets.make +++ b/make/doc-i18n-root-targets.make @@ -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) diff --git a/make/doc-i18n-root-vars.make b/make/doc-i18n-root-vars.make index 2b2242427b..48cfcdbb12 100644 --- a/make/doc-i18n-root-vars.make +++ b/make/doc-i18n-root-vars.make @@ -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) diff --git a/make/lilypond-book-rules.make b/make/lilypond-book-rules.make index d12c27ebcd..b27aa56e14 100644 --- a/make/lilypond-book-rules.make +++ b/make/lilypond-book-rules.make @@ -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 diff --git a/make/lilypond-vars.make b/make/lilypond-vars.make index 5c5e1efe3e..e67a570c92 100644 --- a/make/lilypond-vars.make +++ b/make/lilypond-vars.make @@ -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 diff --git a/make/ly-rules.make b/make/ly-rules.make index 954626f6bc..25dd5b2fbb 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -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 diff --git a/make/ly-vars.make b/make/ly-vars.make index 7d572adb75..e60159ab08 100644 --- a/make/ly-vars.make +++ b/make/ly-vars.make @@ -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 diff --git a/make/midi-vars.make b/make/midi-vars.make index 7b3a27613f..8aef6eea4b 100644 --- a/make/midi-vars.make +++ b/make/midi-vars.make @@ -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) diff --git a/make/musicxml-vars.make b/make/musicxml-vars.make index 7706e58151..84dc36446b 100644 --- a/make/musicxml-vars.make +++ b/make/musicxml-vars.make @@ -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) diff --git a/make/website.make b/make/website.make index ad11f04379..3e8df628d5 100644 --- a/make/website.make +++ b/make/website.make @@ -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)" $$<; ) \ )) diff --git a/mf/GNUmakefile b/mf/GNUmakefile index f81b56dabe..9da619c823 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -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) \ diff --git a/mf/feta-accidentals.mf b/mf/feta-accidentals.mf index 905d1c3e8e..1130672440 100644 --- a/mf/feta-accidentals.mf +++ b/mf/feta-accidentals.mf @@ -3,11 +3,11 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% -% 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 diff --git a/mf/feta-accordion.mf b/mf/feta-accordion.mf index c96ff8d06c..68271bf995 100644 --- a/mf/feta-accordion.mf +++ b/mf/feta-accordion.mf @@ -3,10 +3,11 @@ % % Copyright (C) 1998--2012 Han-Wen Nienhuys % -% 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; diff --git a/mf/feta-arrowheads.mf b/mf/feta-arrowheads.mf index f80afc91b9..e202692182 100644 --- a/mf/feta-arrowheads.mf +++ b/mf/feta-arrowheads.mf @@ -3,10 +3,10 @@ % % Copyright (C) 2005--2012 Han-Wen Nienhuys % -% 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 diff --git a/mf/feta-autometric.mf b/mf/feta-autometric.mf index a12b4ebda6..e24f1605db 100644 --- a/mf/feta-autometric.mf +++ b/mf/feta-autometric.mf @@ -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 diff --git a/mf/feta-braces-a.mf b/mf/feta-braces-a.mf index 2436c6f1f3..1210262421 100644 --- a/mf/feta-braces-a.mf +++ b/mf/feta-braces-a.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-b.mf b/mf/feta-braces-b.mf index cf4adea384..df91510af7 100644 --- a/mf/feta-braces-b.mf +++ b/mf/feta-braces-b.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-c.mf b/mf/feta-braces-c.mf index eacfc57a24..87fc66047d 100644 --- a/mf/feta-braces-c.mf +++ b/mf/feta-braces-c.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-d.mf b/mf/feta-braces-d.mf index 4f4a6e961a..ffad571c0c 100644 --- a/mf/feta-braces-d.mf +++ b/mf/feta-braces-d.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-e.mf b/mf/feta-braces-e.mf index 31201f184d..a0b130bdad 100644 --- a/mf/feta-braces-e.mf +++ b/mf/feta-braces-e.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-f.mf b/mf/feta-braces-f.mf index 920ac35a55..ad31d2bcc8 100644 --- a/mf/feta-braces-f.mf +++ b/mf/feta-braces-f.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-g.mf b/mf/feta-braces-g.mf index 9c233e0ade..545ca5a855 100644 --- a/mf/feta-braces-g.mf +++ b/mf/feta-braces-g.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-h.mf b/mf/feta-braces-h.mf index f8ea48dcac..646e153106 100644 --- a/mf/feta-braces-h.mf +++ b/mf/feta-braces-h.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces-i.mf b/mf/feta-braces-i.mf index c8e7a73a10..0f3fcd3567 100644 --- a/mf/feta-braces-i.mf +++ b/mf/feta-braces-i.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % % -% 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 diff --git a/mf/feta-braces.mf b/mf/feta-braces.mf index 5ecd5b71a8..c948f345fd 100644 --- a/mf/feta-braces.mf +++ b/mf/feta-braces.mf @@ -4,10 +4,10 @@ % Copyright (C) 1997--2012 Han-Wen Nienhuys % Jan Nieuwenhuizen % -% 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 diff --git a/mf/feta-brackettips.mf b/mf/feta-brackettips.mf index 2971f1e416..d3b29cab54 100644 --- a/mf/feta-brackettips.mf +++ b/mf/feta-brackettips.mf @@ -3,10 +3,10 @@ % % Copyright (C) 2005--2012 Han-Wen Nienhuys % -% 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 diff --git a/mf/feta-clefs.mf b/mf/feta-clefs.mf index e1c513f94d..d76b341453 100644 --- a/mf/feta-clefs.mf +++ b/mf/feta-clefs.mf @@ -5,10 +5,10 @@ % Jan Nieuwenhuizen , % Juergen Reuter % -% 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 diff --git a/mf/feta-dots.mf b/mf/feta-dots.mf index c568aed737..be38847a2c 100644 --- a/mf/feta-dots.mf +++ b/mf/feta-dots.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% 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 diff --git a/mf/feta-dynamics.mf b/mf/feta-dynamics.mf index c2728c3f08..c1b7c43a6a 100644 --- a/mf/feta-dynamics.mf +++ b/mf/feta-dynamics.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Jan Nieuwenhuizen % -% 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 diff --git a/mf/feta-flags-generic.mf b/mf/feta-flags-generic.mf index a40e5d9b1e..947cc8a35a 100644 --- a/mf/feta-flags-generic.mf +++ b/mf/feta-flags-generic.mf @@ -3,11 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% -% 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 diff --git a/mf/feta-flags.mf b/mf/feta-flags.mf index 81d68a49a3..2cd890f3b0 100644 --- a/mf/feta-flags.mf +++ b/mf/feta-flags.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% 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 diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index 16c31a7beb..0d253ce653 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -3,11 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% -% 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 diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf index b111c94445..c464c3f7f8 100644 --- a/mf/feta-macros.mf +++ b/mf/feta-macros.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% 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 diff --git a/mf/feta-noteheads-generic.mf b/mf/feta-noteheads-generic.mf index 70cf9a4395..3c255073c8 100644 --- a/mf/feta-noteheads-generic.mf +++ b/mf/feta-noteheads-generic.mf @@ -3,11 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% -% 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 diff --git a/mf/feta-noteheads.mf b/mf/feta-noteheads.mf index c45969ed6a..82abf14e54 100644 --- a/mf/feta-noteheads.mf +++ b/mf/feta-noteheads.mf @@ -5,11 +5,10 @@ % & Han-Wen Nienhuys % & Juergen Reuter % -% -% 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; diff --git a/mf/feta-numbers.mf b/mf/feta-numbers.mf index 0e637550ca..8ec75697ae 100644 --- a/mf/feta-numbers.mf +++ b/mf/feta-numbers.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Jan Nieuwenhuizen % -% 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 diff --git a/mf/feta-params.mf b/mf/feta-params.mf index a61edfe73b..8336df3306 100644 --- a/mf/feta-params.mf +++ b/mf/feta-params.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% 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 diff --git a/mf/feta-pedals.mf b/mf/feta-pedals.mf index edad126265..b4979ca4a6 100644 --- a/mf/feta-pedals.mf +++ b/mf/feta-pedals.mf @@ -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 diff --git a/mf/feta-rests.mf b/mf/feta-rests.mf index b109d3bac2..09439853a0 100644 --- a/mf/feta-rests.mf +++ b/mf/feta-rests.mf @@ -3,10 +3,10 @@ % % Copyright (C) 1997--2012 Jan Nieuwenhuizen % -% 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 diff --git a/mf/feta-scripts.mf b/mf/feta-scripts.mf index 83859dbe66..91c3ae1fe4 100644 --- a/mf/feta-scripts.mf +++ b/mf/feta-scripts.mf @@ -5,10 +5,10 @@ % Jan Nieuwenhuizen % % -% 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; diff --git a/mf/feta-ties.mf b/mf/feta-ties.mf index 62702e92ff..6df5e7ca5c 100644 --- a/mf/feta-ties.mf +++ b/mf/feta-ties.mf @@ -3,10 +3,10 @@ % % Copyright (C) 2011--2012 Bertrand Bordage % -% 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 diff --git a/mf/feta-timesignatures.mf b/mf/feta-timesignatures.mf index 2bbb7d91a5..0098f0ad42 100644 --- a/mf/feta-timesignatures.mf +++ b/mf/feta-timesignatures.mf @@ -4,10 +4,10 @@ % Copyright (C) 1998--2012 Mats Bengtsson , % Christian Mondrup % -% 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 diff --git a/mf/feta-trills.mf b/mf/feta-trills.mf index 9ad4e69888..ea63af0bfb 100644 --- a/mf/feta-trills.mf +++ b/mf/feta-trills.mf @@ -3,11 +3,10 @@ % % Copyright (C) 1998--2012 Jan Nieuwenhuizen % -% -% 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 diff --git a/mf/parmesan-accidentals.mf b/mf/parmesan-accidentals.mf index 7ea7f14f68..f7cf78563b 100644 --- a/mf/parmesan-accidentals.mf +++ b/mf/parmesan-accidentals.mf @@ -3,11 +3,10 @@ % % Copyright (C) 2001--2012 Juergen Reuter % -% -% 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 diff --git a/mf/parmesan-clefs.mf b/mf/parmesan-clefs.mf index 34a09cf20b..ec6561dc8e 100644 --- a/mf/parmesan-clefs.mf +++ b/mf/parmesan-clefs.mf @@ -3,11 +3,10 @@ % % Copyright (C) 2001--2012 Juergen Reuter % -% -% 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; diff --git a/mf/parmesan-custodes.mf b/mf/parmesan-custodes.mf index 3729679d72..08bf714858 100644 --- a/mf/parmesan-custodes.mf +++ b/mf/parmesan-custodes.mf @@ -3,11 +3,10 @@ % % Copyright (C) 2000--2012 Juergen Reuter % -% -% 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 diff --git a/mf/parmesan-dots.mf b/mf/parmesan-dots.mf index 4e77d9c465..86a8ee7f4c 100644 --- a/mf/parmesan-dots.mf +++ b/mf/parmesan-dots.mf @@ -3,11 +3,10 @@ % % Copyright (C) 2006--2012 Juergen Reuter % -% -% 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 diff --git a/mf/parmesan-flags.mf b/mf/parmesan-flags.mf index 13febbca6c..9c136745d6 100644 --- a/mf/parmesan-flags.mf +++ b/mf/parmesan-flags.mf @@ -3,11 +3,10 @@ % % Copyright (C) 2001--2012 Juergen Reuter % -% -% 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; diff --git a/mf/parmesan-generic.mf b/mf/parmesan-generic.mf index c07bd21966..31b35ff25b 100644 --- a/mf/parmesan-generic.mf +++ b/mf/parmesan-generic.mf @@ -3,11 +3,10 @@ % % Copyright (C) 2002--2012 Juergen Reuter % -% -% 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 diff --git a/mf/parmesan-macros.mf b/mf/parmesan-macros.mf index 6554c8b210..a42a1db393 100644 --- a/mf/parmesan-macros.mf +++ b/mf/parmesan-macros.mf @@ -4,10 +4,10 @@ % Copyright (C) 2001--2012 Juergen Reuter % % -% 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 diff --git a/mf/parmesan-noteheads-generic.mf b/mf/parmesan-noteheads-generic.mf index 3ccaca9094..a4103791ff 100644 --- a/mf/parmesan-noteheads-generic.mf +++ b/mf/parmesan-noteheads-generic.mf @@ -3,11 +3,10 @@ % % Copyright (C) 1997--2012 Han-Wen Nienhuys % -% -% 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 diff --git a/mf/parmesan-noteheads.mf b/mf/parmesan-noteheads.mf index afc713f352..cf1bfae111 100644 --- a/mf/parmesan-noteheads.mf +++ b/mf/parmesan-noteheads.mf @@ -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; diff --git a/mf/parmesan-rests.mf b/mf/parmesan-rests.mf index b8b3c51ce8..d238211b7e 100644 --- a/mf/parmesan-rests.mf +++ b/mf/parmesan-rests.mf @@ -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 diff --git a/mf/parmesan-scripts.mf b/mf/parmesan-scripts.mf index 7899fcba42..cc96bbc465 100644 --- a/mf/parmesan-scripts.mf +++ b/mf/parmesan-scripts.mf @@ -4,10 +4,10 @@ % Copyright (C) 2002--2012 Juergen Reuter % % -% 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 diff --git a/mf/parmesan-timesignatures.mf b/mf/parmesan-timesignatures.mf index 598835586a..ef0fa621a5 100644 --- a/mf/parmesan-timesignatures.mf +++ b/mf/parmesan-timesignatures.mf @@ -5,11 +5,10 @@ % Christian Mondrup % Copyright (C) 2002--2012 Juergen Reuter % -% -% 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 diff --git a/out/ChangeLog b/out/ChangeLog index c62e64887e..31c763c7f3 100644 --- a/out/ChangeLog +++ b/out/ChangeLog @@ -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 diff --git a/out/RELEASE-COMMIT b/out/RELEASE-COMMIT index a4e5ae7a0c..2424106466 100644 --- a/out/RELEASE-COMMIT +++ b/out/RELEASE-COMMIT @@ -1,100 +1,21 @@ -commit 11cdcc31caf00b9b4931bcda846e14fdfddcfd41 +commit aef26ebc6cc020fb83c5ad6150a8be7d41f44862 Author: Phil Holmes -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 index 0000000000..519b5aaf05 --- /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 , 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 \n" +"Language-Team: Catalan \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 )\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 )\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 )\n" +"\n" +msgstr "" +"la dimensió del pentagrama s'hauria de caviar al primer nivell\n" +"amb\n" +" #(set-global-staff-size )\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 ( in MusicXML) are not yet implemented." +msgstr "No s'han implementat encara Les marques de metrònom amb relacions complexes ( 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 ,\n" +" Jan Nieuwenhuizen and\n" +" Reinhold Kainhofer \n" +msgstr "" +"Copyright (c) 2005--2012 per\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen i\n" +" Reinhold Kainhofer \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 automatic language selection." +msgstr "Sobre selecció automàtica de llengua." + +#: 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?" diff --git a/po/cs.po b/po/cs.po index 91e6aff463..7abaa3a906 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,10 +6,10 @@ # Pavel Fric , 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 \n" "Language-Team: Czech \n" "Language: cs\n" diff --git a/po/da.po b/po/da.po index 81fc38df62..bc35d60622 100644 --- a/po/da.po +++ b/po/da.po @@ -6,1023 +6,867 @@ 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 \n" "Language-Team: Danish \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 ." - -#: 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 " -#: 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 ." - -#: 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 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 \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 ..." -#~ 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 "#" +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 "" #~ msgstr "" +#~ 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" diff --git a/po/de.po b/po/de.po index b70463f054..21b0d49c15 100644 --- 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 , 1999 # Roland Stigge , 2003, 2004, 2005, 2006, 2007 -# Till Paala , 2007, 2008, 2009, 2010, 2011, 2012. -# +# Till Paala , 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 \n" "Language-Team: German \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 )\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 )\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 automatic language selection." msgstr "Über die automatische Sprachauswahl." @@ -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." diff --git a/po/el.po b/po/el.po index f46e5e34a9..62b018a995 100644 --- 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 ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \n" msgstr "" -"Copyright (c) 2005--2012 από\n" +"Copyright (c) 2005--2011 από\n" " Han-Wen Nienhuys ,\n" " Jan Nieuwenhuizen και\n" " Reinhold Kainhofer \n" diff --git a/po/eo.po b/po/eo.po index 8315e39da4..f52ed60720 100644 --- 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 , 2012 +# Felipe Castro , 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 \n" "Language-Team: Esperanto \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 )\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 "DAŬ" #: midi2ly.py:1053 msgid "quantise note durations on DUR" -msgstr "proksimigi noto-daÅ­roj per DUR" +msgstr "proksimigi noto-daÅ­roj per DAŬ" #: 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 DAŬ" #: 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 "DAŬ*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 DAŬ*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 automatic language selection." msgstr "Pri aÅ­tomata elekto de lingvo." @@ -1625,22 +1654,22 @@ msgstr "Pri aÅ­tomata elekto de lingvo." #: 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" diff --git a/po/es.po b/po/es.po index ecaa6adf27..368931372d 100644 --- 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 , 2002, 2004. # Daniel Tonda , 2006. # This file is distributed under the same license as the lilypond package. -# Francisco Vila , 2007, 2008, 2009, 2010, 2011, 2012. +# Francisco Vila , 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 \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 \n" "Language-Team: Spanish \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 )\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 automatic language selection." msgstr "Acerca de la selección automática del idioma." @@ -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" diff --git a/po/fi.po b/po/fi.po index 6b4b3d9d73..a83fbc483f 100644 --- 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 , 2003-2008. +# Heikki Junes , 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 \n" +"PO-Revision-Date: 2006-11-04 02:19+0200\n" +"Last-Translator: Heikki Junes \n" "Language-Team: Finnish \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 to ~S" -msgstr "ei voida muuntaa kohteeksi ~S" +msgstr "ei voida konvertoida ~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 \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)" - diff --git a/po/fr.po b/po/fr.po index e76c0f828d..a57aa8f398 100644 --- 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 , 1996-2007. -# Jean-Charles Malahieude , 2007-2012 +# Jean-Charles Malahieude , 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 \n" "Language-Team: French \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 )\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 automatic language selection." msgstr "À propos de la sélection automatique de la langue." @@ -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" diff --git a/po/it.po b/po/it.po index c743596bd0..f427b73c21 100644 --- a/po/it.po +++ b/po/it.po @@ -4,14 +4,14 @@ # # Tineke de Munnik , 1998. # Maurizio Umberto Puxeddu , 1999 -# Federico Bruni , 2009-2012, 2012. +# Federico Bruni , 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 \n" "Language-Team: Italian \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 )\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 automatic language selection." msgstr "Informazioni sulla selezione automatica della lingua." @@ -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" diff --git a/po/lilypond.pot b/po/lilypond.pot index f8cd484df0..c267d7f93c 100644 --- a/po/lilypond.pot +++ b/po/lilypond.pot @@ -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 \n" "Language-Team: LANGUAGE \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" diff --git a/po/nl.po b/po/nl.po index c80bfaa63b..0f1f35fa7c 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,319 +1,377 @@ -# nl.po -- GNU LilyPond's dutch language file -# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Jan Nieuwenhuizen , Han-Wen Nienhuys . +# 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 , 1998. -# Han-Wen Nienhuys , 1998. # -# Donnot change the format of the first three lines, -# the TP robot needs them to be like this. -# Of course, Han-Wen also is FIRST AUTHOR. +# "Occasionally it troubles me just how far one strays +# from the normal measures of civility." # +# Han-Wen Nienhuys , 1998. +# Jan Nieuwenhuizen , 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007. +# Benno Schulenberg , 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 \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 \n" "Language-Team: Dutch \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: \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 )\n" +" \\applyoutput #(outputproperty-compatibility %s '%s )\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 of ." +"Rapporteer gebreken in het programma aan <%s>;\n" +"meld vertaalfouten aan ." -#: 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 ( in MusicXML) are " -"not yet implemented." +#: musicxml2ly.py:1461 +msgid "Metronome marks with complex relations ( 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 ,\n" @@ -1333,125 +1485,165 @@ msgid "" " Reinhold Kainhofer \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 automatic language selection." +msgstr "Gebruik van automatische taalkeuze." + #: 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 -b 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 to ~S" -#~ msgstr "kan 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 of ." +#~ "meld onjuistheden in de vertaling aan of ." #~ 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 to ~S" +#~ msgstr "kan 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 ..." #~ msgstr "%s uitvoer naar ..." @@ -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 %(mail_address)s." -#~ msgstr "" -#~ "Meld fouten naar %(mail_address)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 "About automatic language selection." -#~ msgstr "Gebruik van automatische taalkeuze.\n" +#~ msgid "Report errors to %(mail_address)s." +#~ msgstr "Meld fouten naar %(mail_address)s." #~ msgid "stable-branch" #~ msgstr "stabiele tak" diff --git a/po/ru.po b/po/ru.po index cf49539a67..404e80c88e 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,19 +1,18 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# FIRST AUTHOR , YEAR. +# Russian translation for Lilypond. +# Copyright (C) 2006 Free Software Foundation, Inc. +# August S. Sigov , 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 \n" -"Language-Team: Russian \n" +"Last-Translator: August S. Sigov \n" +"Language-Team: Russian \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 diff --git a/po/sv.po b/po/sv.po index 95774a1e74..98e061332c 100644 --- a/po/sv.po +++ b/po/sv.po @@ -5,3001 +5,2324 @@ 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 \n" "Language-Team: Swedish \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 +#. Jan Nieuwenhuizen +#. ## 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 /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 " -#: 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 +#. Jan Nieuwenhuizen +#. 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 /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 " +#: 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
? +#. 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

, 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

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 +#. +#. (?Pregex) -- 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 +#. Jan Nieuwenhuizen +#. This is the third incarnation of ly2dvi. +#. +#. Earlier incarnations of ly2dvi were written by +#. Jeffrey B. Reed (Python version) +#. Jan Arne Fagertun (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 /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 ..." +msgstr "%s skrivet till ..." -#: 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 +#. Jan Nieuwenhuizen +#. ############################################################### +#. 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 " - -#: 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 +#. +#. 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 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 \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 ..." -#~ msgstr "%s skrivet till ..." +#: 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 "#" +msgstr "#" -#~ 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 "pplycontext 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 "pply 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 "#" -#~ msgstr "#" +#: 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 "" #~ msgstr "" +#~ 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" diff --git a/po/tr.po b/po/tr.po index 127059a468..4d1e4f1490 100644 --- 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 \n" "Language-Team: Turkish \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ı 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ı 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 ..." +msgstr "%s çıktısı 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ı 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 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 \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 ..." -#~ msgstr "%s çıktısı 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 "#" #~ msgstr "#" #~ msgid "\\apply takes function argument" #~ msgstr "\\uygulama argüman işlevi alır" + +#~ msgid "Can't find music" +#~ msgstr "Müzik bulunamıyor" diff --git a/po/uk.po b/po/uk.po index fa19302fe0..3eaa1a535d 100644 --- 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 , 2007. # diff --git a/po/vi.po b/po/vi.po index f8b94d2f58..d63ee3f90a 100644 --- 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 , 2007-2009. +# Clytie Siddall , 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 \n" "Language-Team: Vietnamese \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 ,\n" " Jan Nieuwenhuizen and\n" " Reinhold Kainhofer \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 ,\n" " Jan Nieuwenhuizen \n" " Reinhold Kainhofer \n" diff --git a/po/zh_TW.po b/po/zh_TW.po index b1138edd0b..fd6445d85c 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -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 \n" "Language-Team: Chinese (traditional) \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 to ~S" +#: framework-ps.scm:368 +#, lisp-format +msgid "can't convert 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 \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" diff --git a/python/auxiliar/GNUmakefile b/python/auxiliar/GNUmakefile index 665812d00f..b8f5edecf5 100644 --- a/python/auxiliar/GNUmakefile +++ b/python/auxiliar/GNUmakefile @@ -1,7 +1,5 @@ depth=../.. -EXTRA_DIST_FILES = $(call src-wildcard,*.py) - include $(depth)/make/stepmake.make default: diff --git a/python/auxiliar/postprocess_html.py b/python/auxiliar/postprocess_html.py index 8453c147b2..7e379dcbb8 100644 --- a/python/auxiliar/postprocess_html.py +++ b/python/auxiliar/postprocess_html.py @@ -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 help us by reporting errors to our bug list.') +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) + ### add footer if footer_tag_re.search (s) == None: if 'web' in file_name: diff --git a/python/book_latex.py b/python/book_latex.py index f2aa5e36cf..a47c950e24 100644 --- a/python/book_latex.py +++ b/python/book_latex.py @@ -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\\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: diff --git a/python/book_snippets.py b/python/book_snippets.py index f3a11ccca9..69fdc4fa68 100644 --- a/python/book_snippets.py +++ b/python/book_snippets.py @@ -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 () diff --git a/python/convertrules.py b/python/convertrules.py index 78512310c3..28c27fb8b8 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -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) # diff --git a/python/lilylib.py b/python/lilylib.py index 7e3eb410bd..647061f4c7 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -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 index 0000000000..eba1bb4733 --- /dev/null +++ b/scm/accreg.scm @@ -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 } + { \\glissando + \\glissando } + \\new Staff \\with { \\omit TimeSignature } + { \\clef bass + \\glissando + \\glissando + } +>> +@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 } + { 2\\glissando } + \\new Staff \\with { \\omit TimeSignature } + { \\clef bass + \\glissando + } +>> +@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 } + { 2\\glissando } + \\new Staff \\with { \\omit TimeSignature } + { \\clef bass + \\glissando + } +>> +@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 } + { \\glissando + \\glissando } + \\new Staff \\with { \\omit TimeSignature } + { \\clef bass + \\glissando + \\glissando + } +>> +@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))))) diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index b77022f2fc..14e0209675 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -50,13 +50,13 @@ (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:momentmoment 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)) @@ -118,4 +118,3 @@ (if (null? exception-grouping) (beat-end? pos beat-endings) ;; no exception, so check beat ending (member pos exception-moments))))))) ;; check exception rule - diff --git a/scm/autochange.scm b/scm/autochange.scm index 14252e4b1d..b358c22b53 100644 --- a/scm/autochange.scm +++ b/scm/autochange.scm @@ -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)) diff --git a/scm/backend-library.scm b/scm/backend-library.scm index 0734a1a834..a167718187 100644 --- a/scm/backend-library.scm +++ b/scm/backend-library.scm @@ -16,25 +16,25 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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) @@ -43,81 +43,84 @@ (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 '()) @@ -126,8 +129,8 @@ (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) @@ -135,48 +138,47 @@ (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) "" file-name)) + key + (if (equal? "-" file-name) "" 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 '()) @@ -187,21 +189,20 @@ (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)) @@ -211,8 +212,8 @@ 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))))) diff --git a/scm/bar-line.scm b/scm/bar-line.scm index 25cf20ea27..302936e49c 100644 --- a/scm/bar-line.scm +++ b/scm/bar-line.scm @@ -15,157 +15,273 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -;; 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 (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")) @@ -204,34 +320,28 @@ 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) @@ -244,7 +354,9 @@ (/ 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")) @@ -254,38 +366,41 @@ (- 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))) @@ -293,274 +408,283 @@ (- 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)) @@ -568,11 +692,12 @@ 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))) @@ -580,69 +705,106 @@ (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 a 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) @@ -650,69 +812,272 @@ ;; 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 #', + ;; 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 ":|][|:") diff --git a/scm/bezier-tools.scm b/scm/bezier-tools.scm index 04859d03bb..defefc7bc4 100644 --- a/scm/bezier-tools.scm +++ b/scm/bezier-tools.scm @@ -16,67 +16,67 @@ ;;;; along with LilyPond. If not, see . (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))) diff --git a/scm/c++.scm b/scm/c++.scm index ded5e9b120..a131e7f342 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -25,6 +25,10 @@ (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)))) @@ -48,23 +52,39 @@ (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) @@ -82,8 +102,8 @@ (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)) diff --git a/scm/chord-entry.scm b/scm/chord-entry.scm index d8587dcf83..009887bf67 100644 --- a/scm/chord-entry.scm +++ b/scm/chord-entry.scm @@ -15,7 +15,7 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -; 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= 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 '()))) diff --git a/scm/chord-generic-names.scm b/scm/chord-generic-names.scm index abc39e3518..f7ba6b4edf 100644 --- a/scm/chord-generic-names.scm +++ b/scm/chord-generic-names.scm @@ -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)))) diff --git a/scm/chord-ignatzek-names.scm b/scm/chord-ignatzek-names.scm index 69381836a7..fc32e6ba75 100644 --- a/scm/chord-ignatzek-names.scm +++ b/scm/chord-ignatzek-names.scm @@ -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 '()))) diff --git a/scm/chord-name.scm b/scm/chord-name.scm index 9823d8a08b..a80d4e2b6e 100644 --- a/scm/chord-name.scm +++ b/scm/chord-name.scm @@ -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." @@ -54,10 +54,10 @@ (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}." @@ -73,38 +73,38 @@ (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 ..., - ;; 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 ..., + ;; 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))) - diff --git a/scm/clip-region.scm b/scm/clip-region.scm index 3585a12bc3..5cfc4449e7 100644 --- a/scm/clip-region.scm +++ b/scm/clip-region.scm @@ -25,18 +25,18 @@ ;; 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->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->file-string a) +;; (define-public (rhythmic-location->string a) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -45,66 +45,66 @@ ;; ;; 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= 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)) diff --git a/scm/coverage.scm b/scm/coverage.scm index 3c210555ae..0f1ae319ad 100644 --- a/scm/coverage.scm +++ b/scm/coverage.scm @@ -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)) stringalist coverage-table)) string= 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)) + ))) diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 16a1b21b1e..20d77ea72f 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -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)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index 2beabeeff7..dd6405a73e 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -22,38 +22,44 @@ (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)) @@ -62,29 +68,59 @@ (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 @@ -98,24 +134,24 @@ (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) (stringmake-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))) diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index 8d9c457037..59a97b6967 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -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 diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 6502dd9d72..00cbaeb55c 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -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.") diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 76f578ab4a..af69d66971 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -24,350 +24,371 @@ ;; 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) @@ -378,2210 +399,2358 @@ (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. @@ -2589,11 +2758,11 @@ ;; (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) @@ -2602,10 +2771,10 @@ (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))) @@ -2614,7 +2783,7 @@ (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))) @@ -2624,148 +2793,11 @@ ;; 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= 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))))) diff --git a/scm/define-music-callbacks.scm b/scm/define-music-callbacks.scm index de442ba6d6..42aaf58ace 100644 --- a/scm/define-music-callbacks.scm +++ b/scm/define-music-callbacks.scm @@ -1,7 +1,7 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; ;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys -;;;; Jan Nieuwenhuizen +;;;; Jan Nieuwenhuizen ;;;; Neil Puttock ;;;; Carl Sorensen ;;;; @@ -24,15 +24,15 @@ "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)))) diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index 9631da734d..fd759d52d1 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -18,21 +18,21 @@ (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") - (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") + (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) diff --git a/scm/define-music-properties.scm b/scm/define-music-properties.scm index 42aa0e0238..5c9c12538e 100644 --- a/scm/define-music-properties.scm +++ b/scm/define-music-properties.scm @@ -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.") + ))) diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index 0b828c1516..184b4e5485 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -1,7 +1,7 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; ;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys -;;;; Jan Nieuwenhuizen +;;;; Jan Nieuwenhuizen ;;;; ;;;; 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 . -; 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. @@ -29,25 +29,25 @@ 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))) diff --git a/scm/define-note-names.scm b/scm/define-note-names.scm index fbef9183f8..62ef21a72c 100644 --- a/scm/define-note-names.scm +++ b/scm/define-note-names.scm @@ -57,80 +57,80 @@ ;; 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 -----------------------------------------------; @@ -149,58 +149,58 @@ ;; 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 -----------------------------------------------; @@ -221,78 +221,78 @@ ;; 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 -----------------------------------------------; @@ -310,119 +310,119 @@ ;; 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 -----------------------------------------------; @@ -444,83 +444,83 @@ ;; 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 ----------------------------------------------; @@ -541,77 +541,77 @@ ;; 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 -------------------------------------------------; @@ -631,79 +631,79 @@ ;; 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 ---------------------------------------------; @@ -723,77 +723,77 @@ ;; 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 -------------------------------------------------; @@ -809,45 +809,45 @@ ;; 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 -----------------------------------------------; @@ -863,42 +863,42 @@ ;; 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 ------------------------------------------------; @@ -914,58 +914,68 @@ ;; 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)))) diff --git a/scm/define-stencil-commands.scm b/scm/define-stencil-commands.scm index fddd6855b2..4c834591a3 100644 --- a/scm/define-stencil-commands.scm +++ b/scm/define-stencil-commands.scm @@ -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))) diff --git a/scm/define-woodwind-diagrams.scm b/scm/define-woodwind-diagrams.scm index f60ba5a43b..0847d4c93f 100644 --- a/scm/define-woodwind-diagrams.scm +++ b/scm/define-woodwind-diagrams.scm @@ -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)) diff --git a/scm/display-lily.scm b/scm/display-lily.scm index 16f809fc8b..f67125337b 100644 --- a/scm/display-lily.scm +++ b/scm/display-lily.scm @@ -40,18 +40,18 @@ "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 . ) 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 . ) 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 . ) 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 . ) 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 ...) elements ((music ...) - ?var2 - (music ...))) + ?var2 + (music ...))) The properties of `music-expr' are checked against the values given in the pattern (the name property being the 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") - diff --git a/scm/display-woodwind-diagrams.scm b/scm/display-woodwind-diagrams.scm index 1737890f5f..5b34ac94fc 100644 --- a/scm/display-woodwind-diagrams.scm +++ b/scm/display-woodwind-diagrams.scm @@ -64,10 +64,10 @@ (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." @@ -111,63 +111,63 @@ (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)) @@ -177,153 +177,153 @@ (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 @@ -332,87 +332,87 @@ (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 @@ -421,600 +421,600 @@ (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 @@ -1027,683 +1027,681 @@ (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) @@ -1756,94 +1754,94 @@ (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))) diff --git a/scm/document-backend.scm b/scm/document-backend.scm index 71ba5a274f..c1288deff5 100644 --- a/scm/document-backend.scm +++ b/scm/document-backend.scm @@ -24,96 +24,96 @@ ;; 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-citexi - '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-cistring + (hashq-ref iface->grob-table + (car interface) + '())) + ly:string-ci #: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) @@ -121,26 +121,26 @@ 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-cistring 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-cistring name)) + (engraver-names (map symbol->string + (map ly:translator-name engravers))) + (engraver-list (human-listify + (map ref-ify + (map engraver-name engraver-names))))) (make #: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 @@ -207,9 +207,9 @@ node." (define (backend-properties-doc-string lst) (let* ((ps (sort (map symbol->string lst) ly:string-citexi '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 ) diff --git a/scm/document-context-mods.scm b/scm/document-context-mods.scm index d115389a1f..f5034d2ecc 100644 --- a/scm/document-context-mods.scm +++ b/scm/document-context-mods.scm @@ -73,19 +73,16 @@ " 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 @@ -94,11 +91,9 @@ @end table " (string-join - (filter - identity - (map - document-mod - (sort - (ly:module->alist (current-module)) - identifieralist (current-module)) + identifier #: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 ) diff --git a/scm/document-identifiers.scm b/scm/document-identifiers.scm index fcd8f93214..22088605d7 100644 --- a/scm/document-identifiers.scm +++ b/scm/document-identifiers.scm @@ -23,53 +23,48 @@ (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)) - identifieralist (current-module)) + identifierstring (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 #:appendix #t #:name category-name #:desc "" #:text (string-append "@table @asis" - (apply string-append - (map doc-markup-function - (sort markup-functions markup-function. -(define doc-context (ly:make-global-context $defaultlayout)) - (define (music-props-doc) (make #:name "Music properties" #:desc "All music properties, including descriptions." #:text (let* ((ps (sort (map symbol->string all-music-properties) ly:string-citexi '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 #:name (symbol->string (car entry)) #:text @@ -66,16 +63,16 @@ (symbol->string (car entry)) "} is in music objects of type " (human-listify - (map ref-ify (sort (map symbol->string (cdr entry)) - ly:string-cistring (cdr entry)) + ly:string-cialist music-types->names) ly:alist-cialist music-types->names) ly:alist-cilisp-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-cilisp-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-cistring 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-cistring accepted) ly:string-citexi - (map (lambda (x) (property->texi 'translation x '())) - (sort propsr ly:symbol-citexi + (map (lambda (x) (property->texi 'translation x '())) + (sort propsr ly:symbol-citexi - (map (lambda (x) (property->texi 'translation x '())) - (sort propsw ly:symbol-citexi + (map (lambda (x) (property->texi 'translation x '())) + (sort propsw ly:symbol-cistring contexts) - ly:string-cistring contexts) + ly:string-ciengraver-table (make-hash-table 61)) -(map +(for-each (lambda (x) (hash-set! name->engraver-table (ly:translator-name x) x)) (ly:get-all-translators)) @@ -129,45 +128,45 @@ (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-cistring 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 name @@ -175,72 +174,71 @@ (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-cistring accepts) - ly:string-cistring accepts) + ly:string-citexi - (map document-engraver-by-name (sort consists ly:symbol-citexi + (map document-engraver-by-name (sort consists ly:symbol-cistring (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-cistring (map car layout-alist)) ly:string-cistring (map car layout-alist)) ly:string-ci #:name "Contexts" @@ -251,8 +249,8 @@ (define all-engravers-list (ly:get-all-translators)) (set! all-engravers-list (sort all-engravers-list - (lambda (a b) (ly:string-cistring (ly:translator-name a)) - (symbol->string (ly:translator-name b)))))) + (lambda (a b) (ly:string-cistring (ly:translator-name a)) + (symbol->string (ly:translator-name b)))))) (define (all-engravers-doc) (make @@ -264,12 +262,12 @@ (define (translation-properties-doc-string lst) (let* ((ps (sort (map symbol->string lst) ly:string-cisymbol 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) @@ -284,10 +282,10 @@ #:name "Tunable context properties" #:desc "All tunable context properties." #:text (translation-properties-doc-string - all-user-translation-properties)) + all-user-translation-properties)) (make #:name "Internal context properties" #:desc "All internal context properties." #:text (translation-properties-doc-string - all-internal-translation-properties))))) + all-internal-translation-properties))))) diff --git a/scm/document-type-predicates.scm b/scm/document-type-predicates.scm index e6cff904c3..2e94f2c3f8 100644 --- a/scm/document-type-predicates.scm +++ b/scm/document-type-predicates.scm @@ -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. (use-modules (oop goops) - (srfi srfi-13) - (srfi srfi-1)) + (srfi srfi-13) + (srfi srfi-1)) (define-class () (appendix #:init-value #f #:accessor appendix? #:init-keyword #:appendix) @@ -47,13 +47,13 @@ (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)) @@ -71,21 +71,21 @@ (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))) - diff --git a/scm/editor.scm b/scm/editor.scm index 66c3709fb2..e474a557e5 100644 --- a/scm/editor.scm +++ b/scm/editor.scm @@ -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&)") @@ -53,12 +53,12 @@ (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))) @@ -67,18 +67,18 @@ (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)) diff --git a/scm/encoding.scm b/scm/encoding.scm index 1868e7600f..aaeed727b1 100644 --- a/scm/encoding.scm +++ b/scm/encoding.scm @@ -17,44 +17,44 @@ (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) @@ -62,10 +62,10 @@ 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))))))) diff --git a/scm/file-cache.scm b/scm/file-cache.scm index 221a6e2837..21db866eb8 100644 --- a/scm/file-cache.scm +++ b/scm/file-cache.scm @@ -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)) diff --git a/scm/flag-styles.scm b/scm/flag-styles.scm index 23ff235201..59495ba40b 100644 --- a/scm/flag-styles.scm +++ b/scm/flag-styles.scm @@ -16,7 +16,8 @@ ;;;; along with LilyPond. If not, see . ;;;; 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))))) diff --git a/scm/font.scm b/scm/font.scm index d759d60934..45a54b5f8d 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -43,23 +43,23 @@ (make #:default-size size #:size-vector size-font-vector)) (define (make-font-tree-node - qualifier default) + qualifier default) (make #:qualifier qualifier #:default default #:children (make-hash-table 11))) (define-method (display (leaf ) port) - (map (lambda (x) (display x port)) - (list - "#" - ))) + (for-each (lambda (x) (display x port)) + (list + "#" + ))) (define-method (display (node ) port) - (map + (for-each (lambda (x) (display x port)) (list @@ -84,10 +84,10 @@ (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 @@ -97,34 +97,34 @@ ((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 ) fprops size-family) (throw "must add to node, not leaf")) (define-method (g-lookup-font (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 ) 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)) diff --git a/scm/framework-eps.scm b/scm/framework-eps.scm index 697073642d..4028a42468 100644 --- a/scm/framework-eps.scm +++ b/scm/framework-eps.scm @@ -20,15 +20,15 @@ ;;; 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) diff --git a/scm/framework-null.scm b/scm/framework-null.scm index bcc58142e5..9671527185 100644 --- a/scm/framework-null.scm +++ b/scm/framework-null.scm @@ -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) diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index b412ab3269..d92affb11c 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -20,13 +20,13 @@ ;;; 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) @@ -76,13 +76,13 @@ (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" @@ -105,77 +105,77 @@ (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 stringstring 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 @@ -189,12 +189,12 @@ (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) @@ -205,70 +205,70 @@ /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))) @@ -276,107 +276,107 @@ (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) (stringstring 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)) @@ -442,31 +442,31 @@ (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)) @@ -475,70 +475,71 @@ (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) @@ -546,36 +547,36 @@ (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) @@ -586,76 +587,76 @@ (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") "-") @@ -664,19 +665,19 @@ (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) diff --git a/scm/framework-scm.scm b/scm/framework-scm.scm index a47eb185fd..915e97ded3 100644 --- a/scm/framework-scm.scm +++ b/scm/framework-scm.scm @@ -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) diff --git a/scm/framework-socket.scm b/scm/framework-socket.scm index dd54293555..3eaf4710d1 100644 --- a/scm/framework-socket.scm +++ b/scm/framework-socket.scm @@ -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) diff --git a/scm/framework-svg.scm b/scm/framework-svg.scm index 84deff1b5f..dad8bfa0f7 100644 --- a/scm/framework-svg.scm +++ b/scm/framework-svg.scm @@ -32,15 +32,15 @@ (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)) @@ -61,40 +61,40 @@ (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)))) diff --git a/scm/fret-diagrams.scm b/scm/fret-diagrams.scm index a6645dc762..3359608345 100644 --- a/scm/fret-diagrams.scm +++ b/scm/fret-diagrams.scm @@ -15,16 +15,13 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -; -; 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)))) - - diff --git a/scm/graphviz.scm b/scm/graphviz.scm index 247d30c4a7..fc2076be24 100644 --- a/scm/graphviz.scm +++ b/scm/graphviz.scm @@ -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))) @@ -37,21 +37,21 @@ (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) @@ -59,19 +59,19 @@ (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))) diff --git a/scm/guile-debugger.scm b/scm/guile-debugger.scm index 8027b4f955..defd663317 100644 --- a/scm/guile-debugger.scm +++ b/scm/guile-debugger.scm @@ -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: @@ -31,45 +31,45 @@ #: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 proc - #:behaviour debug-trap))) + #:procedure proc + #:behaviour debug-trap))) (define (clear-break! proc) (uninstall-trap (make - #:procedure proc - #:behaviour debug-trap))) + #:procedure proc + #:behaviour debug-trap))) (define (set-trace-call! proc) (install-trap (make - #: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 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 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 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") diff --git a/scm/harp-pedals.scm b/scm/harp-pedals.scm index 8fa02fb5a0..ea5db93f18 100644 --- a/scm/harp-pedals.scm +++ b/scm/harp-pedals.scm @@ -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)))))) diff --git a/scm/layout-beam.scm b/scm/layout-beam.scm index f72afacf0d..fb39a4e784 100644 --- a/scm/layout-beam.scm +++ b/scm/layout-beam.scm @@ -18,57 +18,56 @@ (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)))) diff --git a/scm/layout-slur.scm b/scm/layout-slur.scm index ff47dbb938..7e5ab5858c 100644 --- a/scm/layout-slur.scm +++ b/scm/layout-slur.scm @@ -14,8 +14,8 @@ ;;;; ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . - ; -; 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) diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 854980012c..43b05e57c2 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -16,10 +16,10 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -; 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 @@ -78,6 +80,42 @@ (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) @@ -90,15 +128,15 @@ "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) @@ -108,70 +146,61 @@ (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 (aliststring (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)))) diff --git a/scm/lily-sort.scm b/scm/lily-sort.scm index 19fba423d4..95d3e33ffb 100644 --- a/scm/lily-sort.scm +++ b/scm/lily-sort.scm @@ -68,14 +68,14 @@ ((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-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)) diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index 9cbec5fc4f..b3d7f3f0f0 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -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))) @@ -51,29 +51,29 @@ ;; 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) @@ -87,51 +87,45 @@ (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)) @@ -140,71 +134,88 @@ "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)))) diff --git a/scm/markup-macros.scm b/scm/markup-macros.scm index 26390a6bd7..72b107f846 100644 --- a/scm/markup-macros.scm +++ b/scm/markup-macros.scm @@ -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)) diff --git a/scm/markup.scm b/scm/markup.scm index 31bbaeeb42..64a1139738 100644 --- a/scm/markup.scm +++ b/scm/markup.scm @@ -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")))) diff --git a/scm/memory-trace.scm b/scm/memory-trace.scm index 345d1327f0..d8ffeb93cf 100644 --- a/scm/memory-trace.scm +++ b/scm/memory-trace.scm @@ -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))) @@ -26,41 +26,41 @@ (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)) @@ -69,17 +69,17 @@ (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))) @@ -95,33 +95,33 @@ ) (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)))) @@ -140,20 +140,16 @@ (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)) - - - - diff --git a/scm/midi.scm b/scm/midi.scm index 4888ee3a81..e673555d93 100644 --- a/scm/midi.scm +++ b/scm/midi.scm @@ -23,46 +23,46 @@ ;; 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) @@ -73,192 +73,192 @@ (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) @@ -275,7 +275,7 @@ (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 @@ -293,14 +293,14 @@ (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))))))) diff --git a/scm/modal-transforms.scm b/scm/modal-transforms.scm index 9617329d77..71892bde65 100644 --- a/scm/modal-transforms.scm +++ b/scm/modal-transforms.scm @@ -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)) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index e231299bf0..4329e1c400 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -16,7 +16,7 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -; 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}?" @@ -37,23 +37,23 @@ ;; 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. @@ -61,13 +61,13 @@ 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. #" (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) diff --git a/scm/output-lib.scm b/scm/output-lib.scm index af55cc8fde..02170918a1 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -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))) @@ -53,14 +50,137 @@ (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)) @@ -94,10 +214,10 @@ 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))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -109,6 +229,32 @@ (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 @@ -116,22 +262,6 @@ (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)))) @@ -150,8 +280,8 @@ (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 @@ -159,16 +289,15 @@ (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 @@ -176,11 +305,11 @@ (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:momentstring 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)))) diff --git a/scm/output-ps.scm b/scm/output-ps.scm index 7c8a6ed394..813211f060 100644 --- a/scm/output-ps.scm +++ b/scm/output-ps.scm @@ -28,12 +28,12 @@ #: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 ;;; @@ -45,10 +45,10 @@ (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) @@ -60,15 +60,15 @@ (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) @@ -79,112 +79,113 @@ (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) "") @@ -196,24 +197,24 @@ (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") @@ -221,9 +222,9 @@ ;; 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 ") @@ -233,55 +234,55 @@ (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 @@ -294,7 +295,7 @@ (define (setscale x y) (ly:format "gsave ~4l scale\n" - (list x y))) + (list x y))) (define (resetscale) "grestore\n") diff --git a/scm/output-socket.scm b/scm/output-socket.scm index 352ff2989d..3532fc9732 100644 --- a/scm/output-socket.scm +++ b/scm/output-socket.scm @@ -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 @@ -50,26 +50,26 @@ (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") @@ -81,16 +81,16 @@ (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))) diff --git a/scm/output-svg.scm b/scm/output-svg.scm index 9f10629eac..cb9f598d3f 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -17,46 +17,37 @@ ;;;; along with LilyPond. If not, see . (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)))) @@ -91,21 +82,21 @@ (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)) @@ -117,8 +108,8 @@ (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]+) ?(.*>)")) @@ -137,24 +128,24 @@ (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)))) @@ -164,21 +155,21 @@ (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") @@ -210,112 +201,112 @@ ;; (define (glyph-element-regexp name) (make-regexp (string-append ""))) + "(([[: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 "")) - (end (string-contains svg-font ""))) + (end (string-contains svg-font ""))) (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)) @@ -330,46 +321,45 @@ ;;; (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) @@ -379,38 +369,38 @@ (* (* 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))) @@ -419,158 +409,183 @@ (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 - "~a" - (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 + "~a" + (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 "\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) "\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) "\n") @@ -583,54 +598,54 @@ (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 "\n" - (* 100 r) (* 100 g) (* 100 b))) + (* 100 r) (* 100 g) (* 100 b))) ;; rotate around given point (define (setrotation ang x y) (ly:format "\n" - (- ang) x (- y))) + (- ang) x (- y))) (define (setscale x y) (ly:format "\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 - "<" "<" - (string-regexp-substitute "&" "&" string)))) - (dispatch `(fontify ,pango-font-description - ,(entity 'tspan escaped-string))))) + "<" "<" + (string-regexp-substitute "&" "&" string)))) + (fontify pango-font-description + (entity 'tspan escaped-string)))) diff --git a/scm/page.scm b/scm/page.scm index ada4a890f9..f6bb29d701 100644 --- a/scm/page.scm +++ b/scm/page.scm @@ -18,25 +18,25 @@ (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)) @@ -84,61 +84,61 @@ (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)) @@ -147,16 +147,16 @@ ((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)) @@ -172,13 +172,13 @@ (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) @@ -195,7 +195,7 @@ (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)) ) @@ -225,114 +225,114 @@ (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)) @@ -352,18 +352,18 @@ ((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)) @@ -373,4 +373,3 @@ (page-set-property! page 'printable-height (calc-printable-height page))) (page-property page 'printable-height)) - diff --git a/scm/paper-system.scm b/scm/paper-system.scm index 5a368dbe62..e75440b968 100644 --- a/scm/paper-system.scm +++ b/scm/paper-system.scm @@ -18,12 +18,12 @@ (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)) @@ -64,199 +64,199 @@ (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))) diff --git a/scm/paper.scm b/scm/paper.scm index ccbfe50176..454371fa34 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -15,38 +15,38 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -; 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). @@ -104,23 +104,23 @@ (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 @@ -240,50 +240,64 @@ )) ;; 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) @@ -294,53 +308,39 @@ (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 @@ -349,19 +349,19 @@ (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) diff --git a/scm/parser-clef.scm b/scm/parser-clef.scm index 6d46cc626c..6ba1261ca7 100644 --- a/scm/parser-clef.scm +++ b/scm/parser-clef.scm @@ -16,10 +16,10 @@ ;;;; along with LilyPond. If not, see . -;; (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)) @@ -57,16 +57,23 @@ ("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)) @@ -97,6 +104,7 @@ ("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) @@ -111,106 +119,87 @@ "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) stringnumber (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 () (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 ) file) - (display (when x) file) + (display (moment x) file) (display " evs = " file) (display (events x) file) (display " active = " file) @@ -46,10 +46,10 @@ (define-method (previous-voice-state (vs )) (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))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -58,15 +58,15 @@ (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 ) f) - (display (when x) f) + (display (moment x) f) (display " = " f) (display (configuration x) f) (if (synced? x) @@ -82,13 +82,13 @@ (define (make-voice-states evl) (let ((vec (list->vector (map (lambda (v) - (make - #:when (caar v) - #:tuning (cdar v) - #:events (map car (cdr v)))) - evl)))) + (make + #: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 - #: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 + #: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 (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 (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)) diff --git a/scm/predefined-fretboards.scm b/scm/predefined-fretboards.scm index d3286c45d1..5140ae6e91 100644 --- a/scm/predefined-fretboards.scm +++ b/scm/predefined-fretboards.scm @@ -19,40 +19,39 @@ (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))) diff --git a/scm/ps-to-png.scm b/scm/ps-to-png.scm index 5e78d0c7c0..948e56e145 100644 --- a/scm/ps-to-png.scm +++ b/scm/ps-to-png.scm @@ -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))) @@ -67,33 +67,33 @@ (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) @@ -108,25 +108,27 @@ (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\ @@ -137,46 +139,46 @@ -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))) diff --git a/scm/safe-lily.scm b/scm/safe-lily.scm index 202cad6883..25209e5a0b 100644 --- a/scm/safe-lily.scm +++ b/scm/safe-lily.scm @@ -15,7 +15,7 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -(map +(for-each (lambda (sym) (set! safe-objects (cons (cons sym (primitive-eval sym)) safe-objects))) @@ -135,6 +135,7 @@ ly:stencil-combine-at-edge ly:stencil-expr ly:stencil-extent + ly:stencil-stack ly:stencil-translate ly:stencil-translate-axis ly:stencil? diff --git a/scm/safe-utility-defs.scm b/scm/safe-utility-defs.scm index 57941b2b9a..057639d7fa 100644 --- a/scm/safe-utility-defs.scm +++ b/scm/safe-utility-defs.scm @@ -19,12 +19,12 @@ ;;; 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 index 0000000000..0766cbc19c --- /dev/null +++ b/scm/scheme-engravers.scm @@ -0,0 +1,103 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2012 David Nalesnik +;;;; +;;;; 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 . + + +(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"))))))) diff --git a/scm/script.scm b/scm/script.scm index 905a9f5a62..6564d5f2d4 100644 --- a/scm/script.scm +++ b/scm/script.scm @@ -19,340 +19,336 @@ `( ("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 index 0000000000..0889414cbc --- /dev/null +++ b/scm/skyline.scm @@ -0,0 +1,25 @@ +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2013 Mike Solomon +;;;; +;;;; 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 . + +(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)))) diff --git a/scm/song-util.scm b/scm/song-util.scm index 5eec46fdd6..31cb1e8d48 100644 --- a/scm/song-util.scm +++ b/scm/song-util.scm @@ -77,15 +77,14 @@ (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))) diff --git a/scm/song.scm b/scm/song.scm index 171ef6e191..db7a8ee679 100644 --- a/scm/song.scm +++ b/scm/song.scm @@ -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. @@ -139,26 +139,26 @@ (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 @@ -173,8 +173,8 @@ (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) @@ -182,7 +182,7 @@ (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)))) @@ -214,12 +214,12 @@ ((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) @@ -227,9 +227,9 @@ ;; 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) @@ -259,9 +259,10 @@ ) (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 @@ -295,10 +296,10 @@ (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) @@ -317,10 +318,10 @@ (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) @@ -350,7 +351,7 @@ 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 @@ -363,29 +364,29 @@ (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)) @@ -396,21 +397,21 @@ (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)))) @@ -503,12 +504,12 @@ (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)) @@ -519,32 +520,32 @@ (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. @@ -563,66 +564,66 @@ (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! @@ -642,13 +643,13 @@ (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)) @@ -662,19 +663,19 @@ (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 '()) @@ -694,8 +695,8 @@ (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 @@ -709,20 +710,20 @@ (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) @@ -736,13 +737,13 @@ (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)))))) @@ -751,7 +752,7 @@ (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) @@ -760,15 +761,15 @@ (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. @@ -791,7 +792,7 @@ (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)))) @@ -815,17 +816,17 @@ (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)))) diff --git a/scm/standalone.scm b/scm/standalone.scm index bd3b7593ac..ee44d43878 100644 --- a/scm/standalone.scm +++ b/scm/standalone.scm @@ -24,26 +24,26 @@ (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) diff --git a/scm/stencil.scm b/scm/stencil.scm index 0ecc9abe8e..a457087b15 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -34,32 +34,36 @@ ,(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)) - diff --git a/scm/tablature.scm b/scm/tablature.scm index 3304e24af7..e32d712e19 100644 --- a/scm/tablature.scm +++ b/scm/tablature.scm @@ -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 @@ -142,10 +142,10 @@ ;; 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))))) @@ -169,14 +169,14 @@ (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 @@ -196,7 +196,7 @@ (* 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))) @@ -231,48 +231,48 @@ (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 @@ -290,13 +290,13 @@ ;; 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) @@ -332,25 +332,25 @@ (- 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 @@ -359,29 +359,29 @@ (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)) diff --git a/scm/text.scm b/scm/text.scm index ee399f94ba..1454105912 100644 --- a/scm/text.scm +++ b/scm/text.scm @@ -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))) diff --git a/scm/time-signature-settings.scm b/scm/time-signature-settings.scm index af852575dc..82e22fe591 100644 --- a/scm/time-signature-settings.scm +++ b/scm/time-signature-settings.scm @@ -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 @@ -102,7 +102,7 @@ ;; 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 @@ -110,8 +110,8 @@ ;; 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 @@ -123,7 +123,7 @@ ;; 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 @@ -134,7 +134,7 @@ ;; 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 @@ -145,7 +145,7 @@ ;; 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 @@ -156,12 +156,12 @@ ;; 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 @@ -173,33 +173,32 @@ "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))))) diff --git a/scm/titling.scm b/scm/titling.scm index b6c1e0583d..b5f8b1bb8a 100644 --- a/scm/titling.scm +++ b/scm/titling.scm @@ -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)))) ;;;;;;;;;;;;;;;;;; @@ -29,46 +29,46 @@ 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))) diff --git a/scm/to-xml.scm b/scm/to-xml.scm index ea7ce7a0fc..2407fe3766 100644 --- a/scm/to-xml.scm +++ b/scm/to-xml.scm @@ -19,14 +19,14 @@ (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 #: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 #: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 '(("\"" . """) @@ -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)) - diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index 33acfbc7b4..9bc12cc53c 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -1,7 +1,7 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; ;;;; (c) 1998--2012 Han-Wen Nienhuys -;;;; Jan Nieuwenhuizen +;;;; Jan Nieuwenhuizen ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -17,60 +17,78 @@ ;;;; along with LilyPond. If not, see . +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; 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)))) @@ -89,7 +107,7 @@ (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))))) @@ -105,13 +123,13 @@ (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))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -119,79 +137,79 @@ (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))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -201,12 +219,12 @@ "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= 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:pitchplacement-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))) diff --git a/scm/x11-color.scm b/scm/x11-color.scm index 5be7657292..f3d65b90c2 100644 --- a/scm/x11-color.scm +++ b/scm/x11-color.scm @@ -15,7 +15,7 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . -(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) @@ -677,32 +677,32 @@ (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)) diff --git a/scripts/GNUmakefile b/scripts/GNUmakefile index b3170cdbf9..f270c000e3 100644 --- a/scripts/GNUmakefile +++ b/scripts/GNUmakefile @@ -1,6 +1,6 @@ depth = .. -SUBDIRS=auxiliar build +SUBDIRS=build SEXECUTABLES=convert-ly lilypond-book abc2ly etf2ly midi2ly lilypond-invoke-editor musicxml2ly lilysong lilymidi diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py index 15161032f2..77d47d7dcd 100644 --- a/scripts/abc2ly.py +++ b/scripts/abc2ly.py @@ -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 index d70ff71da4..0000000000 --- a/scripts/auxiliar/GNUmakefile +++ /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 index 0000000000..d806a89bdf --- /dev/null +++ b/scripts/auxiliar/NoTagline.ly @@ -0,0 +1,6 @@ +\version "2.16.0" + +\paper { + #(set-paper-size "a4") +} +\header { tagline = ##f } diff --git a/scripts/auxiliar/build-coverage.sh b/scripts/auxiliar/build-coverage.sh index d774bee3fd..4c15937c7c 100755 --- a/scripts/auxiliar/build-coverage.sh +++ b/scripts/auxiliar/build-coverage.sh @@ -1,6 +1,6 @@ #!/bin/sh -if test "$1" == "--fresh"; then +if test "$1" = "--fresh"; then fresh=yes fi diff --git a/scripts/auxiliar/build-profile.sh b/scripts/auxiliar/build-profile.sh index da110c7916..b6c2bc77f6 100755 --- a/scripts/auxiliar/build-profile.sh +++ b/scripts/auxiliar/build-profile.sh @@ -1,6 +1,6 @@ #!/bin/sh -if test "$1" == "--fresh"; then +if test "$1" = "--fresh"; then fresh=yes fi diff --git a/scripts/auxiliar/cg-section.sh b/scripts/auxiliar/cg-section.sh index 77d0bdee96..aaee581268 100755 --- a/scripts/auxiliar/cg-section.sh +++ b/scripts/auxiliar/cg-section.sh @@ -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 index 0000000000..9c8f2f3f65 --- /dev/null +++ b/scripts/auxiliar/fixscm.sh @@ -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 index 0000000000..01610e8ac3 --- /dev/null +++ b/scripts/auxiliar/make-regtest-pngs.sh @@ -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 diff --git a/scripts/auxiliar/ref_check.py b/scripts/auxiliar/ref_check.py index 09c3449599..33a610d9c0 100755 --- a/scripts/auxiliar/ref_check.py +++ b/scripts/auxiliar/ref_check.py @@ -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]) diff --git a/scripts/auxiliar/ref_check.tely b/scripts/auxiliar/ref_check.tely index ed7363148e..2c689cbefc 100644 --- a/scripts/auxiliar/ref_check.tely +++ b/scripts/auxiliar/ref_check.tely @@ -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 index 0000000000..6fc63143c9 --- /dev/null +++ b/scripts/auxiliar/show_skyline_command.py @@ -0,0 +1,156 @@ +# This file is part of LilyPond, the GNU music typesetter. +# +# Copyright (C) 2012 Joe Neeman +# +# 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 . + +# 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 index 0000000000..83e45f80f7 --- /dev/null +++ b/scripts/auxiliar/skyline_viewer.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python + +# This file is part of LilyPond, the GNU music typesetter. +# +# Copyright (C) 2012 Joe Neeman +# +# 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 . + +# 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) diff --git a/scripts/auxiliar/strip-whitespace.py b/scripts/auxiliar/strip-whitespace.py index 10da1162c5..1d4a6e4ff3 100755 --- a/scripts/auxiliar/strip-whitespace.py +++ b/scripts/auxiliar/strip-whitespace.py @@ -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() diff --git a/scripts/build/GNUmakefile b/scripts/build/GNUmakefile index 5407e1adfb..5a62a47a98 100644 --- a/scripts/build/GNUmakefile +++ b/scripts/build/GNUmakefile @@ -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 diff --git a/scripts/build/create-weblinks-itexi.py b/scripts/build/create-weblinks-itexi.py index 7d87e8b5d6..e7caa31161 100644 --- a/scripts/build/create-weblinks-itexi.py +++ b/scripts/build/create-weblinks-itexi.py @@ -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 ************" diff --git a/scripts/build/gen-emmentaler-scripts.py b/scripts/build/gen-emmentaler-scripts.py index dafb50c0ef..9f645b5929 100644 --- a/scripts/build/gen-emmentaler-scripts.py +++ b/scripts/build/gen-emmentaler-scripts.py @@ -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 index 0000000000..9818543a3f --- /dev/null +++ b/scripts/build/install.py @@ -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 index 0000000000..4b6a0aa56e --- /dev/null +++ b/scripts/build/make-version.py @@ -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 */ +''') + diff --git a/scripts/build/mass-link.py b/scripts/build/mass-link.py index 33b8dac467..7851353fe2 100644 --- a/scripts/build/mass-link.py +++ b/scripts/build/mass-link.py @@ -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) diff --git a/scripts/build/mf-to-table.py b/scripts/build/mf-to-table.py index f191d0aa8f..7c193987ec 100644 --- a/scripts/build/mf-to-table.py +++ b/scripts/build/mf-to-table.py @@ -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 index 0000000000..2456202778 --- /dev/null +++ b/scripts/build/text2html.py @@ -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""" + + + + + + +

+%s
+
+""" % txt2html (open (a).read ()) + open (outfile, 'w').write (s) + + diff --git a/scripts/build/website_post.py b/scripts/build/website_post.py index d002dac6f0..317cf5ac9c 100644 --- a/scripts/build/website_post.py +++ b/scripts/build/website_post.py @@ -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("
") >= 0): outfile.write("
\n") diff --git a/scripts/build/yyout2grammar.py b/scripts/build/yyout2grammar.py index d46f648cd5..8b4b262aaa 100755 --- a/scripts/build/yyout2grammar.py +++ b/scripts/build/yyout2grammar.py @@ -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') diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index 2772acc738..ede9d4a98b 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -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 () diff --git a/scripts/etf2ly.py b/scripts/etf2ly.py index 0e7fb9c83e..bb61108383 100644 --- a/scripts/etf2ly.py +++ b/scripts/etf2ly.py @@ -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 diff --git a/scripts/lilymidi.py b/scripts/lilymidi.py index 40047207ad..498682ef26 100644 --- a/scripts/lilymidi.py +++ b/scripts/lilymidi.py @@ -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) diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 1e0f7abf66..8dea1fc1a7 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -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: diff --git a/scripts/lilypond-invoke-editor.scm b/scripts/lilypond-invoke-editor.scm index fe1227cc1b..49800c067f 100644 --- a/scripts/lilypond-invoke-editor.scm +++ b/scripts/lilypond-invoke-editor.scm @@ -89,7 +89,7 @@ Options: uri)) (define (is-textedit-uri? uri) - (string-match "^textedit://" uri)) + (string-match "^textedit:" uri)) (define (dissect-uri uri) diff --git a/scripts/musicxml2ly.py b/scripts/musicxml2ly.py index 8738b2a073..ec827b5d39 100644 --- a/scripts/musicxml2ly.py +++ b/scripts/musicxml2ly.py @@ -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": "?", diff --git a/smart-autogen.sh b/smart-autogen.sh index 6dcb3ab37c..6f4525dac1 100755 --- a/smart-autogen.sh +++ b/smart-autogen.sh @@ -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 index 8a3eb0159a..0000000000 --- a/stepmake/GNUmakefile +++ /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 index bfc62cf766..0000000000 --- a/stepmake/INSTALL.texi +++ /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 index a29e0e50e5..0000000000 --- a/stepmake/README +++ /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 -ftp://pcnov095.win.tue.nl/pub/lilypond/development - diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 deleted file mode 100644 index 682b6b1bd1..0000000000 --- a/stepmake/aclocal.m4 +++ /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 struct foo { static int baz; }; - template int foo::baz = 1; - ]], [[ return foo::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 < $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 < $mf -print 'include \$(depth)/config\$(if \$(conf),-\$(conf),).make' -print 'include \$(configure-srcdir)/$mf' -EOF - done - done - - rm -f GNUmakefile - cat < 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 -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 < conftest.cc -using namespace std; -#include -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 -using namespace std; -vector 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 index 34c022e082..0000000000 --- a/stepmake/autogen.sh +++ /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 < 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 ." - -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 /* 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 - - 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 - #include - - 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 - 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' /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 - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # 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 < -# include -#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 - 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 -# 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 < 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 index 204218c073..0000000000 --- a/stepmake/bin/config.sub +++ /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 . 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 ." - -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 index 1a97f8d510..0000000000 --- a/stepmake/bin/fake-msgfmt.sh +++ /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 index e69de29bb2..0000000000 diff --git a/stepmake/bin/install.py b/stepmake/bin/install.py deleted file mode 100644 index 9818543a3f..0000000000 --- a/stepmake/bin/install.py +++ /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 index 61247fb8aa..0000000000 --- a/stepmake/bin/make-version.py +++ /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 index a4838b36b8..0000000000 --- a/stepmake/bin/ntpwd.py +++ /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 index e2ae7cfe8b..0000000000 --- a/stepmake/bin/stepmakeise.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/sh -# stepmakeise.sh - -help () { - cat < $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 <' : '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""" - - - - - - -
-%s
-
-""" % 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 index 58f6d8b230..0000000000 --- a/stepmake/config.hh.in +++ /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 index 3900ffd9fd..0000000000 --- a/stepmake/configure.in +++ /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 index f2c693ba22..0000000000 --- a/stepmake/stepmake/GNUmakefile +++ /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) - diff --git a/stepmake/stepmake/c++-rules.make b/stepmake/stepmake/c++-rules.make index a368f4f666..8de00bce07 100644 --- a/stepmake/stepmake/c++-rules.make +++ b/stepmake/stepmake/c++-rules.make @@ -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$@ $< diff --git a/stepmake/stepmake/c-rules.make b/stepmake/stepmake/c-rules.make index 620275baa1..954e7a33a0 100644 --- a/stepmake/stepmake/c-rules.make +++ b/stepmake/stepmake/c-rules.make @@ -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$@ $< diff --git a/stepmake/stepmake/documentation-vars.make b/stepmake/stepmake/documentation-vars.make index b22da2e9f5..2ca0bb97bd 100644 --- a/stepmake/stepmake/documentation-vars.make +++ b/stepmake/stepmake/documentation-vars.make @@ -1,4 +1,2 @@ at-dir = $(doc-dir) at-ext = .in - -EXTRA_DIST_FILES += $(call src-wildcard,*.ihtml) diff --git a/stepmake/stepmake/generic-rules.make b/stepmake/stepmake/generic-rules.make index 0b04186db4..3e527e2eb7 100644 --- a/stepmake/stepmake/generic-rules.make +++ b/stepmake/stepmake/generic-rules.make @@ -3,6 +3,3 @@ $(outdir)/%: %.m4 %.gz: % gzip -c9 $< > $@ - -$(outdir)/%.css: $(CSS_DIRECTORY)/%.css - ln -f $< $@ diff --git a/stepmake/stepmake/generic-targets.make b/stepmake/stepmake/generic-targets.make index 9a51aaa728..7e29760e42 100644 --- a/stepmake/stepmake/generic-targets.make +++ b/stepmake/stepmake/generic-targets.make @@ -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 diff --git a/stepmake/stepmake/generic-vars.make b/stepmake/stepmake/generic-vars.make index 5eba1cc214..b0fc521e93 100644 --- a/stepmake/stepmake/generic-vars.make +++ b/stepmake/stepmake/generic-vars.make @@ -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) #? diff --git a/stepmake/stepmake/makedir-vars.make b/stepmake/stepmake/makedir-vars.make index ac5d1b6e87..7847928593 100644 --- a/stepmake/stepmake/makedir-vars.make +++ b/stepmake/stepmake/makedir-vars.make @@ -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 - - diff --git a/stepmake/stepmake/metafont-rules.make b/stepmake/stepmake/metafont-rules.make index 5b6ad17d91..5be005a198 100644 --- a/stepmake/stepmake/metafont-rules.make +++ b/stepmake/stepmake/metafont-rules.make @@ -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 . \ diff --git a/stepmake/stepmake/metafont-vars.make b/stepmake/stepmake/metafont-vars.make index f4d5332a92..73f35a53ed 100644 --- a/stepmake/stepmake/metafont-vars.make +++ b/stepmake/stepmake/metafont-vars.make @@ -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 ) && diff --git a/stepmake/stepmake/po-targets.make b/stepmake/stepmake/po-targets.make index c971e513c0..8a0dd76053 100644 --- a/stepmake/stepmake/po-targets.make +++ b/stepmake/stepmake/po-targets.make @@ -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 diff --git a/stepmake/stepmake/podir-vars.make b/stepmake/stepmake/podir-vars.make index b8e53f4b2c..cdb95a45e8 100644 --- a/stepmake/stepmake/podir-vars.make +++ b/stepmake/stepmake/podir-vars.make @@ -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) - diff --git a/stepmake/stepmake/python-module-vars.make b/stepmake/stepmake/python-module-vars.make index 5d0e06c127..fc6ea3fb8a 100644 --- a/stepmake/stepmake/python-module-vars.make +++ b/stepmake/stepmake/python-module-vars.make @@ -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) - diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index 838219a673..063a346091 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -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 > $@ diff --git a/stepmake/stepmake/texinfo-vars.make b/stepmake/stepmake/texinfo-vars.make index d164356555..20170d33b3 100644 --- a/stepmake/stepmake/texinfo-vars.make +++ b/stepmake/stepmake/texinfo-vars.make @@ -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) diff --git a/stepmake/stepmake/topdocs-vars.make b/stepmake/stepmake/topdocs-vars.make index f2fc5610ed..ca9a782aa1 100644 --- a/stepmake/stepmake/topdocs-vars.make +++ b/stepmake/stepmake/topdocs-vars.make @@ -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\ - # diff --git a/stepmake/stepmake/toplevel-targets.make b/stepmake/stepmake/toplevel-targets.make index d2748a97a3..f26070db82 100644 --- a/stepmake/stepmake/toplevel-targets.make +++ b/stepmake/stepmake/toplevel-targets.make @@ -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 diff --git a/stepmake/stepmake/toplevel-vars.make b/stepmake/stepmake/toplevel-vars.make index e260f4b97b..c8c34a4e5e 100644 --- a/stepmake/stepmake/toplevel-vars.make +++ b/stepmake/stepmake/toplevel-vars.make @@ -1,7 +1,3 @@ - -# override Generic_vars.make: -DIST_FILES := $(EXTRA_DIST_FILES) - # urg? include $(stepdir)/documentation-vars.make