]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of /home/jcharles/GIT/Lily/. into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Sun, 7 Jun 2015 13:09:57 +0000 (15:09 +0200)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Sun, 7 Jun 2015 13:09:57 +0000 (15:09 +0200)
788 files changed:
Documentation/ca/learning/common-notation.itely
Documentation/ca/learning/fundamental.itely
Documentation/ca/learning/tutorial.itely
Documentation/ca/learning/tweaks.itely
Documentation/changes.tely
Documentation/contributor/programming-work.itexi
Documentation/cs/learning/common-notation.itely
Documentation/cs/learning/fundamental.itely
Documentation/cs/learning/tutorial.itely
Documentation/cs/learning/tweaks.itely
Documentation/de/essay/engraving.itely
Documentation/de/extending/programming-interface.itely
Documentation/de/extending/scheme-tutorial.itely
Documentation/de/learning/common-notation.itely
Documentation/de/learning/fundamental.itely
Documentation/de/learning/tutorial.itely
Documentation/de/learning/tweaks.itely
Documentation/de/notation/ancient.itely
Documentation/de/notation/changing-defaults.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/pitches.itely
Documentation/de/notation/rhythms.itely
Documentation/de/notation/simultaneous.itely
Documentation/de/notation/spacing.itely
Documentation/de/notation/staff.itely
Documentation/de/notation/vocal.itely
Documentation/de/notation/world.itely
Documentation/es/essay/engraving.itely
Documentation/es/extending/programming-interface.itely
Documentation/es/extending/scheme-tutorial.itely
Documentation/es/learning/common-notation.itely
Documentation/es/learning/fundamental.itely
Documentation/es/learning/tutorial.itely
Documentation/es/learning/tweaks.itely
Documentation/es/notation/ancient.itely
Documentation/es/notation/changing-defaults.itely
Documentation/es/notation/editorial.itely
Documentation/es/notation/fretted-strings.itely
Documentation/es/notation/input.itely
Documentation/es/notation/pitches.itely
Documentation/es/notation/rhythms.itely
Documentation/es/notation/simultaneous.itely
Documentation/es/notation/spacing.itely
Documentation/es/notation/staff.itely
Documentation/es/notation/vocal.itely
Documentation/es/notation/world.itely
Documentation/essay/engraving.itely
Documentation/extending/programming-interface.itely
Documentation/extending/scheme-tutorial.itely
Documentation/fr/essay/engraving.itely
Documentation/fr/extending/programming-interface.itely
Documentation/fr/extending/scheme-tutorial.itely
Documentation/fr/learning/common-notation.itely
Documentation/fr/learning/fundamental.itely
Documentation/fr/learning/tutorial.itely
Documentation/fr/learning/tweaks.itely
Documentation/fr/notation/ancient.itely
Documentation/fr/notation/changing-defaults.itely
Documentation/fr/notation/editorial.itely
Documentation/fr/notation/fretted-strings.itely
Documentation/fr/notation/input.itely
Documentation/fr/notation/pitches.itely
Documentation/fr/notation/rhythms.itely
Documentation/fr/notation/simultaneous.itely
Documentation/fr/notation/spacing.itely
Documentation/fr/notation/staff.itely
Documentation/fr/notation/vocal.itely
Documentation/fr/notation/world.itely
Documentation/hu/essay/engraving.itely
Documentation/hu/learning/common-notation.itely
Documentation/hu/learning/fundamental.itely
Documentation/hu/usage/running.itely
Documentation/included/compile.itexi
Documentation/included/display-predefined-string-tunings.ly
Documentation/included/gonville.ly
Documentation/included/script-chart.ly
Documentation/it/learning/common-notation.itely
Documentation/it/learning/fundamental.itely
Documentation/it/learning/tutorial.itely
Documentation/it/learning/tweaks.itely
Documentation/it/notation/editorial.itely
Documentation/it/notation/pitches.itely
Documentation/it/notation/rhythms.itely
Documentation/it/notation/simultaneous.itely
Documentation/it/notation/staff.itely
Documentation/it/notation/vocal.itely
Documentation/ja/learning/common-notation.itely
Documentation/ja/learning/fundamental.itely
Documentation/ja/learning/tutorial.itely
Documentation/ja/learning/tweaks.itely
Documentation/ja/notation/changing-defaults.itely
Documentation/ja/notation/editorial.itely
Documentation/ja/notation/fretted-strings.itely
Documentation/ja/notation/input.itely
Documentation/ja/notation/pitches.itely
Documentation/ja/notation/rhythms.itely
Documentation/ja/notation/simultaneous.itely
Documentation/ja/notation/spacing.itely
Documentation/ja/notation/staff.itely
Documentation/ja/notation/vocal.itely
Documentation/ja/notation/world.itely
Documentation/learning/common-notation.itely
Documentation/learning/fundamental.itely
Documentation/learning/templates.itely
Documentation/learning/tutorial.itely
Documentation/learning/tweaks.itely
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/chart.ly
Documentation/ly-examples/granados.ly
Documentation/ly-examples/tab-example.ly
Documentation/ly-examples/theory.ly
Documentation/music-glossary.tely
Documentation/nl/learning/common-notation.itely
Documentation/nl/learning/fundamental.itely
Documentation/nl/learning/tutorial.itely
Documentation/nl/learning/tweaks.itely
Documentation/notation/ancient.itely
Documentation/notation/changing-defaults.itely
Documentation/notation/editorial.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/input.itely
Documentation/notation/pitches.itely
Documentation/notation/rhythms.itely
Documentation/notation/simultaneous.itely
Documentation/notation/spacing.itely
Documentation/notation/staff.itely
Documentation/notation/vocal.itely
Documentation/notation/world.itely
Documentation/snippets/adding-extra-fingering-with-scheme.ly
Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly
Documentation/snippets/ancient-notation.snippet-list
Documentation/snippets/center-text-below-hairpin-dynamics.ly
Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly
Documentation/snippets/creating-custom-dynamics-in-midi-output.ly
Documentation/snippets/creating-custom-key-signatures.ly
Documentation/snippets/creating-real-parenthesized-dynamics.ly
Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly
Documentation/snippets/displaying-grob-ancestry.ly
Documentation/snippets/dynamics-custom-text-spanner-postfix.ly
Documentation/snippets/extending-glissandi-across-repeats.ly
Documentation/snippets/flute-slap-notation.ly
Documentation/snippets/fretted-headword.ly
Documentation/snippets/generating-whole-scores-also-book-parts-in-scheme-without-using-the-parser.ly
Documentation/snippets/isolated-percent-repeats.ly
Documentation/snippets/making-an-object-invisible-with-the-transparent-property.ly
Documentation/snippets/new/creating-a-sequence-of-notes-on-various-pitches.ly
Documentation/snippets/new/creating-custom-dynamics-in-midi-output.ly [deleted file]
Documentation/snippets/new/creating-custom-key-signatures.ly [deleted file]
Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly [deleted file]
Documentation/snippets/new/displaying-grob-ancestry.ly [deleted file]
Documentation/snippets/new/making-an-object-invisible-with-the-transparent-property.ly
Documentation/snippets/new/non-traditional-key-signatures.ly
Documentation/snippets/new/suppressing-warnings-for-clashing-note-columns.ly [deleted file]
Documentation/snippets/new/tweaking-clef-properties.ly [deleted file]
Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly [deleted file]
Documentation/snippets/new/vocal-ensemble-template.ly [deleted file]
Documentation/snippets/new/vocal-headword.ly [deleted file]
Documentation/snippets/non-traditional-key-signatures.ly
Documentation/snippets/overriding-articulations-of-destinct-type.ly
Documentation/snippets/rhythmic-slashes.ly
Documentation/snippets/score-for-diatonic-accordion.ly
Documentation/snippets/string-number-extender-lines.ly
Documentation/snippets/subdividing-beams.ly
Documentation/snippets/suppressing-warnings-for-clashing-note-columns.ly
Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
Documentation/snippets/tweaking-clef-properties.ly
Documentation/snippets/using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly [new file with mode: 0644]
Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly
Documentation/snippets/vocal-ensemble-template.ly
Documentation/snippets/vocal-headword.ly
Documentation/snippets/vocal-music.snippet-list
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
aclocal.m4
flower/include/pqueue.hh
flower/include/std-string.hh
flower/include/std-vector.hh
input/regression/accidental-ancient.ly
input/regression/accidental-contemporary.ly
input/regression/accidental-fingering-collision.ly
input/regression/accidental-piano.ly
input/regression/accidental-placement-padding.ly
input/regression/accidental-suggestions.ly
input/regression/apply-output.ly
input/regression/arpeggio-no-overshoot.ly
input/regression/arpeggio-span-one-staff-collision.ly
input/regression/auto-beam-breathe.ly
input/regression/auto-beam-partial.ly
input/regression/auto-beam-recheck.ly
input/regression/automatic-polyphony-context-id.ly
input/regression/baerenreiter-sarabande.ly
input/regression/bar-number-visibility.ly
input/regression/bar-number-volta-repeat.ly
input/regression/bar-number.ly
input/regression/beam-beamlet-break.ly
input/regression/beam-beat-grouping.ly
input/regression/beam-break.ly
input/regression/beam-broken-classic.ly
input/regression/beam-collision-basic.ly
input/regression/beam-collision-beamcount.ly
input/regression/beam-collision-classic.ly
input/regression/beam-collision-flag.ly
input/regression/beam-collision-scaled-staff.ly
input/regression/beam-concave-chord.ly
input/regression/beam-cross-staff-slope.ly
input/regression/beam-default-lengths.ly
input/regression/beam-extreme.ly
input/regression/beam-feather-knee-stem-length.ly
input/regression/beam-feather.ly
input/regression/beam-french.ly
input/regression/beam-funky-beamlet.ly
input/regression/beam-funky.ly
input/regression/beam-unconnected-beamlets.ly
input/regression/beamlet-test.ly
input/regression/bend-after.ly
input/regression/breathing-sign-custom-staff.ly
input/regression/chord-changes-alternative.ly
input/regression/chord-tremolo-other-commands.ly
input/regression/chord-tremolo-stem-direction.ly
input/regression/clef-transposition-placement.ly
input/regression/clef-transposition-visibility.ly
input/regression/clip-systems.ly
input/regression/collision-dots-move.ly
input/regression/collision-merge-differently-headed.ly
input/regression/collision-whole.ly
input/regression/color.ly
input/regression/completion-heads-unit.ly
input/regression/compound-time-signature-style.ly
input/regression/compound-time-signatures.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-new-line.ly
input/regression/cue-clef-transposition-optional.ly
input/regression/cue-clef-transposition.ly
input/regression/cue-clef.ly
input/regression/define-event-function.ly
input/regression/display-lily-tests.ly
input/regression/dot-flag-collision.ly
input/regression/double-repeat-default-volta.ly
input/regression/double-repeat.ly
input/regression/dynamics-alignment-no-line-linebreak.ly
input/regression/dynamics-custom-text-spanner-postfix.ly
input/regression/event-listener-output.ly
input/regression/ferneyhough-hairpins.ly
input/regression/figured-bass-slashed-numbers.ly
input/regression/finger-chords-dot.ly
input/regression/fingering-column-snap-radius.ly
input/regression/fingering-column.ly
input/regression/fingering-directions.ly
input/regression/flags-straight-stockhausen-boulez.ly
input/regression/glissando-broken-multiple.ly
input/regression/glissando-broken-unkilled.ly
input/regression/glissando-broken.ly
input/regression/glissando-index.ly
input/regression/grace-direction-polyphony.ly
input/regression/grace-volta-repeat-2.ly
input/regression/hairpin-circled.ly
input/regression/hairpin-dashed.ly
input/regression/hairpin-ending.ly
input/regression/hairpin-neighboring-span-dynamics.ly
input/regression/hairpin-span-bar.ly
input/regression/hairpin-to-barline.ly
input/regression/harp-pedals-sanity-checks.ly
input/regression/harp-pedals-tweaking.ly
input/regression/identifier-following-chordmode.ly
input/regression/instrument-name-dynamic.ly
input/regression/instrument-name-partial.ly
input/regression/instrument-name-volta.ly
input/regression/key-signature-scordatura-persist.ly
input/regression/key-signature-scordatura.ly
input/regression/keys.ly
input/regression/lily-in-scheme.ly
input/regression/line-arrows.ly
input/regression/line-style.ly
input/regression/loglevels.ly
input/regression/lyric-combine-new.ly
input/regression/lyric-combine-switch-voice.ly
input/regression/lyric-combine.ly
input/regression/lyric-extender-completion.ly
input/regression/lyric-melisma-manual.ly
input/regression/lyric-phrasing.ly
input/regression/lyrics-aligned-above-stay-close-to-staff.ly
input/regression/lyrics-melisma-beam.ly
input/regression/magnifyStaff-bar-lines.ly
input/regression/magnifyStaff-space-alist.ly
input/regression/make-relative-copies.ly
input/regression/make-relative-music.ly
input/regression/make-relative.ly
input/regression/markup-line-styles.ly
input/regression/markup-rest-styles.ly
input/regression/markup-rest.ly
input/regression/markup-score.ly
input/regression/metronome-marking-align-order.ly
input/regression/metronome-marking-break-align.ly
input/regression/metronome-parenthesized.ly
input/regression/metronome-text.ly
input/regression/midi-dynamics.ly
input/regression/midi-volume-equaliser.ly
input/regression/midi/key-initial.ly
input/regression/midi/key-option.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/mozart-hrn3-rondo.ily
input/regression/music-function-post-event.ly
input/regression/music-function-string-markup.ly
input/regression/music-function.ly
input/regression/no-staff.ly
input/regression/note-head-style.ly
input/regression/optional-args-backup.ly
input/regression/optional-args-predicate.ly
input/regression/optional-args.ly
input/regression/override-nest-scheme.ly
input/regression/override-nest.ly
input/regression/page-breaks.ly
input/regression/page-headers-and-footers.ly
input/regression/page-layout.ly
input/regression/page-spacing-system-count.ly
input/regression/page-turn-page-breaking-auto-first-page.ly
input/regression/page-turn-page-breaking-repeats.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-override2.ly
input/regression/paper-twosided-bcorr.ly
input/regression/paper-twosided.ly
input/regression/part-combine-silence-mixed.ly
input/regression/part-combine-text-wait.ly
input/regression/part-combine-tuplet-end.ly
input/regression/part-combine-tuplet-single.ly
input/regression/partial-polymetric.ly
input/regression/pedal-bracket.ly
input/regression/phrasing-slur-multiple.ly
input/regression/phrasing-slur-tuplet.ly
input/regression/property-nested-override.ly
input/regression/quote-tuplet.ly
input/regression/rehearsal-mark-align-priority.ly
input/regression/relative.ly [new file with mode: 0644]
input/regression/repeat-percent-count-visibility.ly
input/regression/repeat-percent-grace.ly
input/regression/repeat-slash-mixed.ly
input/regression/repeat-slash-multi.ly
input/regression/repeat-tremolo-one-note-articulation.ly
input/regression/repeat-tremolo-three-notes.ly
input/regression/repeat-unfold.ly
input/regression/repeat-volta-skip-alternatives.ly
input/regression/repeat-volta.ly
input/regression/rest-collision-beam-restdir.ly
input/regression/rest-collision-beam.ly
input/regression/rest-ledger.ly
input/regression/scheme-book-scores.ly
input/regression/script-horizontal-slur.ly
input/regression/script-shift.ly
input/regression/script-stack-horizontal.ly
input/regression/set-once.ly
input/regression/skiptypesetting-tuplet.ly
input/regression/skyline-vertical-placement.ly
input/regression/slur-double.ly
input/regression/slur-extreme.ly
input/regression/slur-flag.ly
input/regression/slur-manual.ly
input/regression/slur-multiple.ly
input/regression/slur-tuplet.ly
input/regression/slur-vestigial-outside-staff-callback.ly
input/regression/song-reordering.ly
input/regression/song-reordering2.ly
input/regression/song-slurs.ly
input/regression/spacing-accidental-stretch.ly
input/regression/spacing-bar-accidental.ly
input/regression/spacing-bar-stem.ly
input/regression/spacing-bar-whole-measure.ly
input/regression/spacing-folded-clef-cross-staff.ly
input/regression/spacing-horizontal-skyline.ly
input/regression/spacing-loose-polyphony.ly
input/regression/spacing-mark-width.ly
input/regression/spacing-multi-tuplet.ly
input/regression/spacing-note-flags.ly
input/regression/spacing-packed.ly
input/regression/spacing-proportional.ly
input/regression/spacing-ragged-last.ly
input/regression/spacing-stem-bar.ly
input/regression/spacing-stem-direction.ly
input/regression/spacing-stem-same-direction.ly
input/regression/spacing-strict-notespacing.ly
input/regression/spacing-uniform-stretching.ly
input/regression/spanner-after-line-breaking.ly
input/regression/spanner-break-overshoot.ly
input/regression/staccato-pos.ly
input/regression/staff-ledger-positions-dotted-notes.ly
input/regression/staff-ledger-positions.ly
input/regression/staff-line-positions.ly
input/regression/stem-direction-context.ly
input/regression/stem-length.ly
input/regression/stem-shorten.ly
input/regression/stem-stemlet.ly
input/regression/stem-tremolo-forced-dir.ly
input/regression/stem-tremolo-note-column.ly
input/regression/system-start-heavy-bar.ly
input/regression/system-start-nesting.ly
input/regression/tablature-tie-behaviour.ly
input/regression/tablature-zero-finger.ly
input/regression/tag-group.ly
input/regression/tag-multiple.ly
input/regression/text-spanner.ly
input/regression/tie-accidental.ly
input/regression/tie-broken-minimum-length.ly
input/regression/tie-chord.ly
input/regression/tie-manual-vertical-tune.ly
input/regression/time-signature-mensural.ly
input/regression/time-signature-numbered.ly
input/regression/time-signature-single-digit.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-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.ly
input/regression/tuplet-gap.ly
input/regression/tuplet-nest-broken.ly
input/regression/tuplet-nest.ly
input/regression/tuplet-number-french-kneed-beams.ly
input/regression/tuplet-number-kneed-beam-even-stem-count.ly
input/regression/tuplet-number-kneed-beam-horizontal-fit.ly
input/regression/tuplet-number-kneed-beam-ledger-lines.ly
input/regression/tuplet-number-kneed-beam-positions.ly
input/regression/tuplet-number-outside-staff-positioning.ly
input/regression/tuplet-number-outside-staff-priority.ly
input/regression/tuplet-number-shift-along-kneed-beam.ly
input/regression/tuplet-numbers-kneed-beams-accidentals.ly
input/regression/tuplet-numbers-kneed-beams.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/unpure-pure-container.ly
input/regression/unset-once.ly
input/regression/voice-follower.ly
input/regression/whiteout-lower-layers.ly
input/regression/whiteout.ly
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/arpeggio.cc
lily/articulations.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/beam-collision-engraver.cc
lily/beam-engraver.cc
lily/beam-quanting.cc
lily/beam.cc
lily/beaming-pattern.cc
lily/bend-engraver.cc
lily/book-scheme.cc
lily/book.cc
lily/break-align-engraver.cc
lily/break-alignment-interface.cc
lily/break-substitution.cc
lily/breathing-sign.cc
lily/chord-name-engraver.cc
lily/chord-name.cc
lily/clef-engraver.cc
lily/clef-modifier.cc
lily/clef.cc
lily/cluster-engraver.cc
lily/cluster.cc
lily/coherent-ligature-engraver.cc
lily/completion-note-heads-engraver.cc
lily/completion-rest-engraver.cc
lily/constrained-breaking.cc
lily/context-def.cc
lily/context-mod-scheme.cc
lily/context-property.cc
lily/context-scheme.cc
lily/context.cc
lily/custos-engraver.cc
lily/custos.cc
lily/dispatcher-scheme.cc
lily/dispatcher.cc
lily/dot-column-engraver.cc
lily/dot-column.cc
lily/dots-engraver.cc
lily/dots.cc
lily/drum-note-performer.cc
lily/duration-scheme.cc
lily/dynamic-align-engraver.cc
lily/dynamic-engraver.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/figured-bass-continuation.cc
lily/figured-bass-engraver.cc
lily/fingering-column.cc
lily/fingering-engraver.cc
lily/flag.cc
lily/font-interface.cc
lily/font-metric-scheme.cc
lily/font-select.cc
lily/footnote-engraver.cc
lily/forbid-break-engraver.cc
lily/function-documentation.cc
lily/global-context-scheme.cc
lily/global-context.cc
lily/grace-engraver.cc
lily/grace-music.cc
lily/grace-spacing-engraver.cc
lily/gregorian-ligature-engraver.cc
lily/grid-line-interface.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-pq-engraver.cc
lily/grob-property.cc
lily/grob-scheme.cc
lily/grob.cc
lily/hairpin.cc
lily/hara-kiri-group-spanner.cc
lily/horizontal-bracket.cc
lily/include/all-font-metrics.hh
lily/include/engraver.hh
lily/include/global-context.hh
lily/include/group-interface.hh [deleted file]
lily/include/item.hh
lily/include/lily-guile-macros.hh
lily/include/listener.hh
lily/include/music.hh
lily/include/paper-score.hh
lily/include/performance.hh
lily/include/performer.hh
lily/include/protected-scm.hh
lily/include/smobs.hh
lily/include/smobs.tcc
lily/include/spanner.hh
lily/include/stencil.hh
lily/include/stream-event.hh
lily/include/time-scaled-music-iterator.hh [deleted file]
lily/input-scheme.cc
lily/input-smob.cc
lily/instrument-name-engraver.cc
lily/item-scheme.cc
lily/keep-alive-together-engraver.cc
lily/key-signature-interface.cc
lily/kievan-ligature-engraver.cc
lily/laissez-vibrer-engraver.cc
lily/ledger-line-engraver.cc
lily/ledger-line-spanner.cc
lily/lexer.ll
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/line-spanner.cc
lily/lookup.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/measure-grouping-engraver.cc
lily/measure-grouping-spanner.cc
lily/melody-spanner.cc
lily/mensural-ligature-engraver.cc
lily/mensural-ligature.cc
lily/metronome-engraver.cc
lily/midi-control-function-performer.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-iterator.cc
lily/music-scheme.cc
lily/music-sequence.cc
lily/music-wrapper-iterator.cc
lily/music-wrapper.cc
lily/music.cc
lily/new-fingering-engraver.cc
lily/note-collision.cc
lily/note-column-scheme.cc
lily/note-column.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/open-type-font-scheme.cc
lily/open-type-font.cc
lily/ottava-bracket.cc
lily/ottava-engraver.cc
lily/output-def-scheme.cc
lily/output-def.cc
lily/page-breaking-scheme.cc
lily/page-breaking.cc
lily/page-layout-problem-scheme.cc
lily/page-layout-problem.cc
lily/page-turn-engraver.cc
lily/pango-font-scheme.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-score-scheme.cc
lily/paper-system-scheme.cc
lily/parse-scm.cc
lily/parser.yy
lily/part-combine-iterator.cc
lily/partial-iterator.cc
lily/percent-repeat-engraver.cc
lily/percent-repeat-item.cc
lily/performance-scheme.cc
lily/performer-group.cc
lily/piano-pedal-align-engraver.cc
lily/piano-pedal-bracket.cc
lily/piano-pedal-engraver.cc
lily/pitch-scheme.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/property-iterator.cc
lily/protected-scm.cc
lily/pure-from-neighbor-interface.cc
lily/quote-iterator.cc
lily/relative-octave-check.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-head.cc
lily/rhythmic-music-iterator.cc
lily/scale.cc
lily/score-performer.cc
lily/score-scheme.cc
lily/score.cc
lily/script-column.cc
lily/script-interface.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-spacer.cc
lily/simultaneous-music-iterator.cc
lily/skyline-pair.cc
lily/skyline.cc
lily/slur-proto-engraver.cc
lily/slur-scoring.cc
lily/slur.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-spanner.cc
lily/span-bar-stub-engraver.cc
lily/spanner-scheme.cc
lily/spanner.cc
lily/spring-smob.cc
lily/staff-grouper-interface.cc
lily/staff-symbol-engraver.cc
lily/staff-symbol-referencer-scheme.cc
lily/staff-symbol-referencer.cc
lily/staff-symbol.cc
lily/stem-engraver.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/stencil-integral.cc
lily/stencil-scheme.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-tie-follow-engraver.cc
lily/tempo-performer.cc
lily/text-engraver.cc
lily/text-interface.cc
lily/text-spanner-engraver.cc
lily/tie-column.cc
lily/tie-engraver.cc
lily/tie-formatting-problem.cc
lily/tie-performer.cc
lily/tie.cc
lily/time-signature-engraver.cc
lily/timing-translator.cc
lily/translator-ctors.cc
lily/translator-dispatch-list.cc
lily/translator-group.cc
lily/translator-scheme.cc
lily/translator.cc
lily/trill-spanner-engraver.cc
lily/tuplet-bracket.cc
lily/tuplet-engraver.cc
lily/tuplet-iterator.cc
lily/tuplet-number.cc
lily/undead.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
ly/articulate.ly
ly/bagpipe.ly
ly/chord-repetition-init.ly
ly/festival.ly
ly/gregorian.ly
ly/init.ly
ly/lyrics-tkit.ly
ly/music-functions-init.ly
ly/piano-tkit.ly
ly/predefined-fretboards-init.ly
ly/property-init.ly
ly/satb.ly
ly/staff-tkit.ly
ly/string-tunings-init.ly
ly/toc-init.ly
ly/vocal-tkit.ly
ly/voice-tkit.ly
po/lilypond.pot
python/convertrules.py
scm/accreg.scm
scm/define-music-display-methods.scm
scm/define-music-types.scm
scm/fret-diagrams.scm
scm/lily.scm
scm/ly-syntax-constructors.scm
scm/music-functions.scm
scm/parser-ly-from-scheme.scm
scm/part-combiner.scm
scm/ps-to-png.scm
scripts/auxiliar/makelsr.py
scripts/auxiliar/update-with-convert-ly.sh
scripts/convert-ly.py
tex/texinfo.tex

index fa380958ecb00a11234fdacc9cc90c31ff5581e3..e58919ca282822d0dd9ad3b175b4addac9b808e9 100644 (file)
@@ -1245,11 +1245,11 @@ lletra a les notes.
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1304,20 +1304,20 @@ del @notation{Judas Macabeu} de Haendel:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index 59ddb2ecc89c382c4327d7e728a7f5ba9f2cf480..34f71459683e5d60fb8da5545be51555cb7fa2f2 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Conceptes fonamentals
 @chapter Conceptes fonamentals
@@ -886,12 +886,12 @@ ignoreu tot el que no entengueu.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Veu u
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Veu dos
     { \voiceTwoStyle
@@ -1061,18 +1061,18 @@ indicacions de dinàmica:
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1093,10 +1093,10 @@ melodia principal està ara dins d'un context d'una sola veu, fent
 que es pugui traçar una lligadura per sobre d'elles.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % Aquesta secció és homofònica
-  c16^( d e f
+  c'16^( d e f
   % Comença una secció simultània de tres veus
   <<
     % Continua la veu principal en paral·lel
@@ -1156,11 +1156,11 @@ notes espaiadores per passar per sobre de les seccions on una veu
 està en silenci, com per exemple:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Inicia la primera veu
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Inicia la segona veu
   \new Voice {
@@ -1259,10 +1259,10 @@ mitjançant @code{\lyricsto@{@}}, usant el nom assignat a la veu.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "una" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "una" {
@@ -1808,13 +1808,13 @@ etiquetat, però no el segon, perquè hem omès el nom del context.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
   }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Incorrecte!
-    d2 d
+    d'2 d
   }
 >>
 @end lilypond
@@ -1859,9 +1859,9 @@ Així, això desactivarà els bequadres addicionals a un pentagrama:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1874,9 +1874,9 @@ i això els desactivarà a tots els pentagrames:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2124,15 +2124,15 @@ partir d'aquesta única veu:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2149,15 +2149,15 @@ pentagrama:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2485,18 +2485,18 @@ musicaBaix = \relative {
 
 lletraBaix = \lletraSoprano
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2715,17 +2715,17 @@ musicaBaix = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 lletraBaix = \lletraSoprano
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3137,9 +3137,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violí = \relative c'' {
+violí = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \padText
     c4.^"hi there!" d8 e' f g d |
     c,4.\fthenp b8 c4 c-. |
@@ -3161,9 +3161,9 @@ reescrit sense cap identificador.  Trobareu que és molt més
 difícil de llegir, sobretot l'última línia.
 
 @example
-violí = \relative c'' @{
+violí = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
@@ -3188,7 +3188,7 @@ El LilyPond també pot gestionar substitucions no estàtiques
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -3299,7 +3299,7 @@ Aquesta instrucció estableix el valor de la propietat
 anterior, arribem al següent resultat
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index 31f7435d6e381d8eef0bdb487207af4f436618d0..5c9e519800b38ba25e23c39954b462057d8f1fa7 100644 (file)
@@ -441,10 +441,10 @@ La @notation{indicació de tempo} i la @notation{indicació
 de metrònom} poden establir-se amb l'ordre @code{\tempo}:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -500,11 +500,11 @@ Aquí teniu un petit exemple que mostra tots els elements anteriors
 a l'hora:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r
index 830a26f1e3d13b65c11424e0a2bfca16838450bb..45a6626fa858e0d0fbc704a0b23c39ef09379edd 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Ajustament de la sortida
 @chapter Ajustament de la sortida
@@ -4149,10 +4149,10 @@ aquí l'efecte dels dos mètodes:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4171,10 +4171,10 @@ aquí l'efecte dels dos mètodes:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4325,13 +4325,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4356,7 +4356,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4374,9 +4374,9 @@ fitxer com @file{musica.ly}).
 @example
 \include "definicions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4392,13 +4392,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4426,7 +4426,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4456,7 +4456,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4477,9 +4477,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4504,7 +4504,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4535,7 +4535,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4552,9 +4552,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4779,7 +4779,7 @@ notes un color que depèn de la seva posició dins del pentagrama.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index 6e4072c50ea178c1916ff0014ec73a6a4702f00c..6735a03b08e3795e2a35cdb9e5e9648cd364e1d8 100644 (file)
@@ -61,6 +61,34 @@ which scares away people.
 
 @end ignore
 
+@item
+The definition of LilyPond functions with
+@code{define-music-function}, @code{define-event-function},
+@code{define-scheme-function} and @code{define-void-function} no
+longer requires specification of @code{parser} and @code{location}
+arguments.  Current parser and input location are part of the
+current dynamic state and can be accessed with the function calls
+@code{(*parser*)} and @code{(*location*)} when required.
+
+LilyPond makes a best-faith attempt of recognizing legacy use of
+@code{parser} and @code{location} arguments and will provide
+backwards-compatible semantics for some time.
+
+@item
+In the "english" notename language, the long notenames for pitches
+with accidentals now contain a hyphen for better readability.  You
+now have to write
+@example
+\key a-flat \major
+@end example
+instead of the previous
+@example
+\key aflat \major
+@end example
+
+Double accidentals do not get another hyphen, so the Dutch
+@code{cisis} has the long English notename @code{c-sharpsharp}.
+
 @item
 The visual style of tremolo slashes (shape, style and slope)
 is now more finely controlled.
index a02910b768f1af603cc4508b46c9e92efb379327..fd850f4b1ca9f349cd749e6db77994d65adb3759 100644 (file)
@@ -913,17 +913,21 @@ The GNU debugger, gdb, is the principal tool for debugging C++ code.
 @subheading Compiling LilyPond for use with gdb
 
 In order to use gdb with LilyPond, it is necessary to compile
-LilyPond with debugging information.  This is accomplished by running
-the following commands in the main LilyPond source directory.
+LilyPond with debugging information.  This is the current default
+mode of compilation.  Often debugging becomes more complicated
+when the compiler has optimised variables and function calls away.
+In that case it may be helpful to run the following command in the
+main LilyPond source directory:
 
 @example
-./configure  --disable-optimising
+./configure --disable-optimising
 make
 @end example
 
-This will create a version of LilyPond containing debugging
-information that will allow the debugger to tie the source code
-to the compiled code.
+This will create a version of LilyPond with minimal optimization
+which will allow the debugger to access all variables and step
+through the source code in-order.  It may not accurately reproduce
+bugs encountered with the optimized version, however.
 
 You should not do @var{make install} if you want to use a debugger
 with LilyPond.  The @var{make install} command will strip debugging
@@ -1204,8 +1208,15 @@ number of different platforms:
 
 In order for the Graphviz tool to work, config.make must be modified.
 It is probably a good idea to first save a copy of config.make under
-a different name.  Then, edit config.make by removing every occurrence
-of @option{-DNDEBUG}.
+a different name.
+
+In order to have the required functionality available, LilyPond
+needs to be compiled with the option @option{-DDEBUG}.  You can
+achieve this by configuring with
+
+@example
+./configure --enable-checking
+@end example
 
 @item Rebuilding LilyPond
 
@@ -1253,10 +1264,10 @@ dot -Tpdf graphviz.log > graphviz.pdf
 
 The pdf file can then be viewed with any pdf viewer.
 
-When compiled without @option{-DNDEBUG}, lilypond may run slower
-than normal.  The original configuration can be restored by either
-renaming the saved copy of @code{config.make} or rerunning
-@code{configure}.  Then rebuild lilypond with
+When compiled with @option{-DDEBUG}, lilypond may run slower
+than normal.  The original configuration can be restored by rerunning
+@code{./configure} with @option{--disable-checking}.  Then
+rebuild lilypond with
 
 @example
 make -C lily clean && make -C lily
@@ -2149,7 +2160,7 @@ Test whether the type of @var{s} is [type].
 often than not, the code checks Lilypond specific C++-implemented
 types using
 
-@subsubheading [Type *] Type::unsmob (SCM s)
+@subsubheading [Type *] unsmob<Type> (SCM s)
 
 This tries converting a Scheme object to a pointer of the desired
 kind.  If the Scheme object is of the wrong type, a pointer value
index 88ced2b973494f4f207962e0f5ceb015c77d1042..ba4277c89c4d88a7c58bebc5927bbea11de493e1 100644 (file)
@@ -1173,11 +1173,11 @@ jimiž lze vyrovnat text s notami:
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1232,20 +1232,20 @@ Händelova díla @notation{Judas Maccabeus}:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index c2320850744bbe840b92793d296c6422b040293e..15084751a57c65545eb13380708a8e4e13aacf64 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 @c Translators: Pavel Fric
 
 @node Základní pojmy
@@ -922,12 +922,12 @@ porozumět.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1093,18 +1093,18 @@ mají příkazy @code{\oneVoice}, @code{\voiceOne} a @code{voiceTwo}
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1122,10 +1122,10 @@ tvaru červeného diamantu ukazují, že se hlavní hlas nachází v prostředí
 jednotlivého hlasu. Tím se může frázovací oblouček malovat nad ně.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % The following notes are monophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1189,11 +1189,11 @@ se dají místa, kde se hlas nevyskytuje, přeskočit pomocí neviditelných not
 jako je tomu zde:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1287,10 +1287,10 @@ se použije označení přiřazené hlasu.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1866,13 +1866,13 @@ nicht, weil der Kontext ausgelassen wurde.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
  }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
  }
 >>
 @end lilypond
@@ -1917,9 +1917,9 @@ ausgeschaltet sind:
   \new Staff \relative {
     ais'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    ais2 aes
+    ais'2 aes
   }
 >>
 @end lilypond
@@ -1932,9 +1932,9 @@ während das dazu dient, sie in allen Systemen auszuschalten:
   \new Staff \relative {
     ais'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    ais2 aes
+    ais'2 aes
   }
 >>
 @end lilypond
@@ -2187,15 +2187,15 @@ und zeigt ihn an:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2212,15 +2212,15 @@ Stimmen in diesem Notensystem errechnet:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2561,17 +2561,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4
+  r4 <a' d fis>2 <a e' a>4
   <d fis d'>4. <d fis d'>8 <a d a'>2
   <g cis g'>4 <a d fis> <a cis e>2
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4
+  <d, d'>4 <d d'>2 <cis cis'>4
   <b b'>4. <b' b'>8 <fis fis'>2
   <e e'>4 <d d'> <a' a'>2
 }
@@ -2799,17 +2799,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4
+  r4 <a' d fis>2 <a e' a>4
   <d fis d'>4. <d fis d'>8 <a d a'>2
   <g cis g'>4 <a d fis> <a cis e>2
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4
+  <d, d'>4 <d d'>2 <cis cis'>4
   <b b'>4. <b' b'>8 <fis fis'>2
   <e e'>4 <d d'> <a' a'>2
 }
@@ -3238,9 +3238,9 @@ fthenp=_\markup {
     \dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b
+    c''4._\dolce b8 a8 g a b
     \padText
     c4.^"hi there!" d8 e' f g d
     c,4.\fthenp b8 c4 c-.
@@ -3262,9 +3262,9 @@ vorige Beispiel ohne jede Benutzung von Variablen.  Es ist
 sehr viel schwerer lesbar, besonders die letzte Zeile.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d
     c,4.\markup @{
@@ -3289,7 +3289,7 @@ kann sie sich als Funktionen vorstellen.
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = $padding
@@ -3398,7 +3398,7 @@ Dieser Befehl setzt die Eigenschaft @code{skipBars} im
 Beispiel:
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index 8b940467bee8a944ba346d3eaf558eb15b77dedd..9719d9d072997d28f45cc7f7ea67dbb0def9b1b1 100644 (file)
@@ -430,10 +430,10 @@ Slovníček: @rglos{tempo indication}, @rglos{metronome}.
 zapsat příkazem @code{\tempo}:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -479,11 +479,11 @@ Slovníček: @rglos{clef}.
 Zde je malý příklad, který obsahuje všechna tato vymezení:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r4
index d5b9ebff0992fa1f4b42f02d6973045bc015c460..e5c9885f13c30dd28260520a235450beac895933 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Ladění výstupu
 @chapter Ladění výstupu
@@ -3848,10 +3848,10 @@ einem entfernten Objekt gezeigt:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \override Score.MetronomeMark.transparent = ##t
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -3867,10 +3867,10 @@ einem entfernten Objekt gezeigt:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4024,13 +4024,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
     #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4060,7 +4060,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
        #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4077,9 +4077,9 @@ Noten (in der Datei @file{music.ly}).
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4098,13 +4098,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4134,7 +4134,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4167,7 +4167,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4188,9 +4188,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4217,7 +4217,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4251,7 +4251,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4268,9 +4268,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4532,7 +4532,7 @@ zu ihrer Position innerhalb der Tonleiter gesetzt.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index f6aaf5414508fe2fceff2909c8cff794a6fa04c7..b968490c7fd34793bd195bb7d9de8e62c970337b 100644 (file)
@@ -494,22 +494,22 @@ global = {
       \override StaffSymbol.staff-space = #(magstep -4)
       \override StaffSymbol.thickness = #(magstep -3)
     }
-    \relative c' {
+    \relative {
       \global
       \set Staff.instrumentName = #"Violin"
-      c8.(\f^> b16 c d) ees8.(^> d16 c b)
+      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
       g8.(^> b16 c ees) g8-.^> r r
       R2.
     }
     \new PianoStaff <<
       \set PianoStaff.instrumentName = #"Piano"
-      \new Staff \relative c' {
+      \new Staff \relative {
         \global
         s2.
-        s4. s8 r8 r16 <c f aes c>
+        s4. s8 r8 r16 <c' f aes c>
         <c f aes c>4.^> <c ees g>8 r r
       }
-      \new Staff \relative {
+      \new Staff \relative {
         \global
         \clef "bass"
         <<
@@ -601,7 +601,7 @@ Anders gesagt: welcher von den drei Konfigurationen sollte für
 den folgenden Bogen ausgewählt werden?
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
@@ -644,7 +644,7 @@ verliehen.  Das erste Beispiel erhält 15.39 Punkte, weil einer der
 Notenköpfe angeschnitten wird:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
@@ -658,7 +658,7 @@ und 9.37 Punkte auf der rechten Seite verliehen, plus weiteren
 Insgesamt also 13.08 Punkte:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
@@ -833,24 +833,24 @@ Version von LilyPond:
 @lilypond[staffsize=19.5,line-width=14\cm]
 global = { \key g \minor }
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
 }
 
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
 }
 
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
@@ -1151,16 +1151,16 @@ Beispiel heranzieht:
 
 \new PianoStaff <<
   \new Staff = "RH" <<
-    \new Voice = "I" \relative c''' {
+    \new Voice = "I" \relative {
       \time 3/4
       \voiceOne
-      \tuplet 7/6 { g8 g g g g g g }
+      \tuplet 7/6 { g''8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
-    \new Voice = "II" \relative c' {
+    \new Voice = "II" \relative {
       \voiceTwo
-      c4
+      c'4
       \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
@@ -1455,8 +1455,8 @@ ausgerichtet, beim zweiten nach oben (rechts).
 
 @lilypond[quote,ragged-right]
 \score {
-  \relative c' {
-    \stemDown <e g b>4_>-\arpeggio
+  \relative {
+    \stemDown <e' g b>4_>-\arpeggio
     \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
@@ -1524,11 +1524,11 @@ die Notenköpfe gezeichnet werden, während des Ausschnitts verändert.
                   ((-2) (make-smaller-markup (make-bold-markup "2")))
                   (else "bla")))))))))
 
-\new Voice \relative c' {
+\new Voice \relative {
   \stemUp
   \set autoBeaming = ##f
   \time 2/4
-  <d f g>4
+  <d' f g>4
   \once \override NoteHead.stencil = #note-head::brew-ez-stencil
   \once \override NoteHead.font-size = #-7
   \once \override NoteHead.font-family = #'sans
@@ -1751,9 +1751,9 @@ LilyPond, version @version{}:
 @lilypond[staffsize=14.3,line-width=15.9\cm]
 global = {\key g \minor}
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
   r2 r8 d16 ees f8 ees16 d
   ees4 ~ 16 d c bes a4 r8 ees'16 d
@@ -1762,9 +1762,9 @@ partI = \relative c' {
   a2 g\fermata \bar "|."
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
   r8 fis16 g a8 g16 fis g2 ~
   2 r8 d' ees g,
@@ -1772,16 +1772,16 @@ partII = \relative c' {
   bes4. <g b>8 <a c> r <d, g> r
   <ees g>4 <d fis> d2
 }
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
   bes2 ~ 8 b16 a g8 a16 b
   c4 r r2
   R1
   r8 d ees g, fis4 g
   r8 a16 bes c8 bes16 a b2
 }
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
index 78e86f1c396992d51ac2a96f68a34ac4da50741d..0694e92680d67900b25c3834bd58045cd3198c8a 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Till Paala
 
@@ -95,7 +95,7 @@ Die übliche Form zur Definition von Scheme-Funktionen ist:
 @example
 function =
 #(define-scheme-function
-     (parser location @var{Arg1} @var{Arg2} @dots{})
+     (@var{Arg1} @var{Arg2} @dots{})
      (@var{Typ1?} @var{Typ2?} @dots{})
    @var{body})
 @end example
@@ -261,7 +261,7 @@ Prädikat @code{void?} erfüllt) wiedergegeben wird.
 @example
 noPointAndClick =
 #(define-void-function
-     (parser location)
+     ()
      ()
    (ly:set-option 'point-and-click #f))
 ...
@@ -311,7 +311,7 @@ Die allgemeine Form zur Definition musikalischer Funktionen ist:
 @example
 function =
 #(define-music-function
-     (parser location @var{Arg1} @var{Arg2} @dots{})
+     (@var{Arg1} @var{Arg2} @dots{})
      (@var{Typ1?} @var{Typ2?} @dots{})
    @var{body})
 @end example
@@ -403,7 +403,7 @@ mit der Variable @code{pair?} weitergeleitet werden:
 @example
 manualBeam =
 #(define-music-function
-     (parser location beg-end)
+     (beg-end)
      (pair?)
    #@{
      \once \override Beam.positions = #beg-end
@@ -422,7 +422,7 @@ augenommen werden:
 @lilypond[quote,verbatim,ragged-right]
 manualBeam =
 #(define-music-function
-     (parser location beg end)
+     (beg end)
      (number? number?)
    #{
      \once \override Beam.positions = #(cons beg end)
@@ -444,7 +444,7 @@ auch Scheme-Programmcode enthalten:
 @lilypond[quote,verbatim,ragged-right]
 AltOn =
 #(define-music-function
-     (parser location mag)
+     (mag)
      (number?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -470,7 +470,7 @@ zu integrieren:
 @lilypond[quote,verbatim,ragged-right]
 withAlt =
 #(define-music-function
-     (parser location mag music)
+     (mag music)
      (number? ly:music?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -505,7 +505,7 @@ musikalische Funktion ohne Argumente zu erstellen:
 @example
 displayBarNum =
 #(define-music-function
-     (parser location)
+     ()
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
        #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
@@ -552,7 +552,7 @@ angehängt, wie @code{c'\pp}.  Das Folgende ist eine Möglichkeit, beliebige
 Dynamikbefehle zu schreiben:
 
 @lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
          (make-dynamic-script arg))
 \relative { c'\dyn pfsss }
 @end lilypond
@@ -1396,10 +1396,10 @@ neu ausgerichtet wird.
              (eq? (car (last-pair siblings)) grob))
      (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
-\relative c'' {
+\relative {
   \override Tie.after-line-breaking =
   #my-callback
-  c1 ~ \break c2 ~ 2
+  c''1 ~ \break c2 ~ 2
 }
 @end lilypond
 
index 3bbd78a3571503b2ac2119196d37d4cb2f4cff17..7eddf993b2215cc9d8c5385a4f81b206d26569ac 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Scheme-Übung
 @chapter Scheme-Übung
@@ -1343,7 +1343,7 @@ keine speziellen Überprüfungen nötig sind, bevor ein anderes
 Element vor die @code{articulations}-Eigenschaft gesetzt wird.
 
 @example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
          "Return: @{ note ( note ) @}.
          `note' is supposed to be a single note."
          (let ((note2 (ly:music-deep-copy note)))
@@ -1543,7 +1543,7 @@ Funktion umgewandelt (hierzu gehört etwas syntaktischer Zuckerguß und
 eine Deklaration des Typs ihres einzigen @qq{wirklichen} Arguments:
 
 @example
-addAccent = #(define-music-function (parser location note-event)
+addAccent = #(define-music-function (note-event)
                                      (ly:music?)
   "Add an accent ArticulationEvent to the articulations of `note-event',
   which is supposed to be a NoteEvent expression."
@@ -1588,7 +1588,7 @@ TODO Find a simple example
 
 
 @lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
 #{
   \once \override TextScript.padding = #padding
 #})
@@ -1609,16 +1609,16 @@ Es kann auch benutzt werden, um Befehle zu erstellen:
 @c It is - 'padding still works
 
 @lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
   (number? markup?)
 #{
   \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
@@ -1627,7 +1627,7 @@ tempoPadded = #(define-music-function (parser location padding tempotext)
 Sogar ganze Musikausdrücke können eingefügt werden:
 
 @lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
 #{
   #x e8 a b $y b a e
 #})
index 073fde82a529a892829a8fe97a96803da8da32c1..63a42bdaea3fe5f90a90cfe3ded13224b55e7649 100644 (file)
@@ -169,7 +169,7 @@ Versetzungszeichen, nicht die wirklichen Tonhöhen! Diese Besonderheit
 scheint am Anfang oft verwirrend, so dass sie hier etwas
 genauer betrachtet wird.
 
-LilyPond unterscheidet strickt zwischen dem musikalischen Inhalt
+LilyPond unterscheidet strikt zwischen dem musikalischen Inhalt
 und dem Satz (Layout). Die Alteration (@notation{B},
 @notation{Kreuz} oder @notation{Auflösungszeichen}) einer Note gehört
 zur Tonhöhe dazu und ist deshalb musikalischer
@@ -1169,11 +1169,11 @@ zeigt, mit denen Text an den Noten ausgerichtet werden kann:
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1228,20 +1228,20 @@ aus Händels @notation{Judas Maccabäus}:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index e466b5e9ae7fdc038028074f771d07765f1aada4..459cf40c3e8f588d46f1eded406249444a3cdfd3 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 @c Translators: Till Paala, Reinhold Kainhofer
 
 @node Grundbegriffe
@@ -937,12 +937,12 @@ verstehen können.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1110,18 +1110,18 @@ mit Text, Bögen und Dynamikbezeichnung anstellen:
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1141,10 +1141,10 @@ einem einzigen Stimmen (@code{voice})-Kontext befindet.  Somit kann ein
 Phrasierungsbogen ober sie gesetzt werden.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % This section is homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1209,11 +1209,11 @@ Hierbei kann man mit unsichtbaren Noten dann die Stellen überspringen,
 an denen die Stimme nicht auftaucht, wie etwa hier:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1317,10 +1317,10 @@ Bezeichnung der Stimme benutzt wird.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1901,13 +1901,13 @@ nicht, weil der Kontext ausgelassen wurde.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
  }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
  }
 >>
 @end lilypond
@@ -1952,9 +1952,9 @@ ausgeschaltet sind:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1967,9 +1967,9 @@ während das dazu dient, sie in allen Systemen auszuschalten:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2222,15 +2222,15 @@ und zeigt ihn an:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2247,15 +2247,15 @@ Stimmen in diesem Notensystem errechnet:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2596,17 +2596,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4
+  r4 <a' d fis>2 <a e' a>4
   <d fis d'>4. <d fis d'>8 <a d a'>2
   <g cis g'>4 <a d fis> <a cis e>2
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4
+  <d, d'>4 <d d'>2 <cis cis'>4
   <b b'>4. <b' b'>8 <fis fis'>2
   <e e'>4 <d d'> <a' a'>2
 }
@@ -2834,17 +2834,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4
+  r4 <a' d fis>2 <a e' a>4
   <d fis d'>4. <d fis d'>8 <a d a'>2
   <g cis g'>4 <a d fis> <a cis e>2
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4
+  <d, d'>4 <d d'>2 <cis cis'>4
   <b b'>4. <b' b'>8 <fis fis'>2
   <e e'>4 <d d'> <a' a'>2
 }
@@ -3273,9 +3273,9 @@ fthenp=_\markup {
     \dynamic f \italic \small { 2nd } \hspace #0.1 dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b
+    c''4._\dolce b8 a8 g a b
     \padText
     c4.^"hi there!" d8 e' f g d
     c,4.\fthenp b8 c4 c-.
@@ -3297,9 +3297,9 @@ vorige Beispiel ohne jede Benutzung von Variablen.  Es ist
 sehr viel schwerer lesbar, besonders die letzte Zeile.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d
     c,4.\markup @{
@@ -3324,7 +3324,7 @@ kann sie sich als Funktionen vorstellen.
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -3433,7 +3433,7 @@ Dieser Befehl setzt die Eigenschaft @code{skipBars} im
 Beispiel:
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index 5c0267795b809d5b5e9c5861e9df7fb4f8e70537..2e5a69e66d3a29b51cfab8f1ce9f4001214b035d 100644 (file)
@@ -440,10 +440,10 @@ Die @notation{Tempobezeichnung} und die @notation{Metronom-Angabe} können
 mit dem @code{\tempo}-Befehl gesetzt werden:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -489,11 +489,11 @@ gesetzt werden:
 Hier ist ein kleines Beispiel, dass all diese Definitionen beinhaltet:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r4
index 70b0dfa25afb85cb7dc3de0e0d98d0122865fcf9..aef584f6861eede182799279f6c938f0823bedc2 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Die Ausgabe verändern
 @chapter Die Ausgabe verändern
@@ -3873,10 +3873,10 @@ einem entfernten Objekt gezeigt:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \override Score.MetronomeMark.transparent = ##t
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -3892,10 +3892,10 @@ einem entfernten Objekt gezeigt:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4049,13 +4049,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
     #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4084,7 +4084,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
        #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4101,9 +4101,9 @@ Noten (in der Datei @file{music.ly}).
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4122,13 +4122,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4158,7 +4158,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4191,7 +4191,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4212,9 +4212,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4241,7 +4241,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4275,7 +4275,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4292,9 +4292,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4521,7 +4521,7 @@ zu ihrer Position innerhalb der Tonleiter gesetzt.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index 326d3a615a859c06f28d3cf779c4858380c073a7..aa88b1cfee5d072d5f5c6541d8012f13bddd3706 100644 (file)
@@ -930,10 +930,10 @@ was man als Variable definieren kann:
 
 @lilypond[quote,verbatim]
 ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
   \new MensuralVoice  {
        \once \set suggestAccidentals = ##t
-  bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+  bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
   }
 }
 @end lilypond
@@ -2839,10 +2839,10 @@ gemacht):
 
 @lilypond[verbatim,ragged-right]
 \include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
   \clef "G_8"
   \set Score.timing = ##f
-  c\breve \hide NoteHead  c c c c c
+  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
@@ -2895,10 +2895,10 @@ können sie mit unsichtbaren (@code{s})-Noten vorgenommen
 werden.
 
 @lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
   \time 1/4
   \override Lyrics.LyricText.X-extent  = #'(0 . 3)
-  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+  d'4 \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
   \tuplet 3/2 { g8 f d } e f g a g4
 }
index e10634e9396fe505a7eecad38f567b3b34fda452..f7d689b260d867442a81d6ad7d33676f0cc846c4 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Till Paala
 
@@ -4315,7 +4315,7 @@ Funktionen ist:
 @example
 Funktion =
 #(define-music-function
-     (parser location @var{Arg1} @var{Arg2} @dots{})
+     (@var{Arg1} @var{Arg2} @dots{})
      (@var{Typ1?} @var{Typ2?} @dots{})
    #@{
      @var{@dots{}Noten@dots{}}
@@ -4398,7 +4398,7 @@ das Verschieben von @code{TextScript} erleichtert:
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -4419,7 +4419,7 @@ als Argumente für musikalische Funktionen eingesetzt werden:
 @lilypond[quote,verbatim,ragged-right]
 custosNote =
 #(define-music-function
-     (parser location note)
+     (note)
      (ly:music?)
    #{
      \tweak NoteHead.stencil #ly:text-interface::print
@@ -4438,16 +4438,16 @@ werden:
 @lilypond[quote,verbatim,ragged-right]
 tempoPadded =
 #(define-music-function
-     (parser location padding tempotext)
+     (padding tempotext)
      (number? markup?)
    #{
      \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
index 0943ad99022546104650e5e184aa2cc87c607077..a3654712488cf7526a3f2a4662b1779893ac3fc5 100644 (file)
@@ -627,11 +627,11 @@ den Linien festgesetzt.
 
 \score {
   \new ChoirStaff <<
-    \new Staff \relative c'' {
+    \new Staff \relative {
       \stemUp
-      c4. d8 e8 f g4
+      c''4. d8 e8 f g4
     }
-    \new Staff \relative {
+    \new Staff \relative {
       \clef bass
       \stemDown
       c4 g' f e
index cb269bdc612ba533bf88f2c4dc60c5bf480af92b..f4c915ad30882afa62aaf165156d7369651f4808 100644 (file)
@@ -323,7 +323,7 @@ c1\!
 Eine Crescendo-Klammer, die mit @code{\!} beendet wird, endet an der rechten
 Seite der Note, welcher @code{\!} zugeordnet ist.  In dem Fall, dass es durch
 den Beginn eines anderen @notation{crescendo}- oder @notation{decrescendo}-Zeichens
-beendet wird, endet es in der Mitt der Note, welche das nächste @code{\<}
+beendet wird, endet es in der Mitte der Note, welche das nächste @code{\<}
 oder @code{\>} angehängt hat.  Die nächste Klammer beginnt dann am rechten
 Rand der selben Note anstatt dem normalerweise linken Rand, wenn die
 vorherige Klammer mit @code{\!} beendet worden wäre.
index aeb07b572dcc7e9a285a4911403c6e2148414aa8..61572685b294848b1fe6f5ddda2892d859fe8310 100644 (file)
@@ -306,9 +306,9 @@ Bindestriche über einen Zeilenumbruch werden standardmäßig in Klammern
 gesetzt.  Das gilt auch für die zweite Klammer einer Wiederholung.
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~
   }
   \alternative {
@@ -346,9 +346,9 @@ Der Befehl @code{\hideSplitTiedTabNotes} hebt das Verhalten auf, dass
 Bundnummern in Klammern gesetzt werden:
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~ }
   \alternative {
     { g4 f2. }
@@ -1750,10 +1750,10 @@ oder Flageoletttöne anzuzeigen.  Flageoletttöne werden normalerweise
 mit einem Text erklärt.
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \clef "treble_8"
   \override Staff.NoteHead.style = #'harmonic-mixed
-  d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+  d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
 
index eabec21b28d41624748160cbfc599f9e859fef7b..9b43f81c605f46e11141ebd465051bb76e22d5c9 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Till Paala
 
@@ -613,10 +613,10 @@ einer @bs{}@code{score}-Umgebung verwenden wollen.}
 }
 
 \score {
-  \new Staff \relative g, {
+  \new Staff \relative {
     \clef bass
     \key g \major
-    \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+    \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
     \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
   }
   \header {
@@ -625,7 +625,7 @@ einer @bs{}@code{score}-Umgebung verwenden wollen.}
 }
 
 \score {
-  \new Staff \relative {
+  \new Staff \relative {
     \clef bass
     \key g \major
     \partial 16 b16 |
@@ -1631,7 +1631,7 @@ einer Oper in das Inhaltsverzeichnis aufzunehmen:
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 @end verbatim
 
@@ -1646,7 +1646,7 @@ tocAct =
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 
 \book {
index 195ade0c15a1cd910dffb2ab5c4245642305233c..b1dd292d50492708dbced0551e14843e27d5cfb9 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Till Paala
 
@@ -63,7 +63,7 @@ für die Note @qq{H} steht.  Die Benutzung deutscher
 Notenbezeichnungen mit der Unterscheidung von b und h ist
 auch möglich, siehe @ref{Notenbezeichnungen in anderen Sprachen}.
 Die Notenbezeichnungen @code{c} bis @code{b}
-werden in der Oktave unter dem zweigestrichenen C
+werden in der Oktave unter dem eingestrichenen C
 gesetzt.
 
 @c don't use c' here.
@@ -2658,7 +2658,7 @@ Die folgende Notlösung kann benutzt werden: Man definiert eine Funktion,
 die den Versetzungszeichenstil kurzzeitig auf @code{forget} umschaltet:
 
 @lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
   \accidentalStyle forget
   #music
   \accidentalStyle modern
index 1f076ec353aaacfc73656dc5d374d4fb74de56e7..6f4f642df7014958da6d44cca4a166054aff0aa7 100644 (file)
@@ -1202,8 +1202,8 @@ Standard zurückgesetzt werden:
 
 @lilypond[quote,verbatim]
 \score{
-  \relative c' {
-    \repeat unfold 8 { c8 } |
+  \relative {
+    \repeat unfold 8 { c'8 } |
     \overrideTimeSignatureSettings
       4/4        % timeSignatureFraction
       1/4        % baseMomentFraction
@@ -1746,9 +1746,9 @@ Zahl den Nenner des Bruches darstellt, während die vorherkommenden
 Zahlen die Zähler sind.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((2 2 2 8))
-  \repeat unfold 6 c8 \repeat unfold 12 c16
+  \repeat unfold 6 c'8 \repeat unfold 12 c16
 }
 @end lilypond
 
@@ -1757,14 +1757,14 @@ werden (von Klammern abgegrenzt).  Automatische Balken werden
 entsprechend der Werte angepasst.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((1 4) (3 8))
-  \repeat unfold 5 c8 \repeat unfold 10 c16
+  \repeat unfold 5 c'8 \repeat unfold 10 c16
 }
 
-\relative c' {
+\relative {
   \compoundMeter #'((1 2 3 8) (3 4))
-  \repeat unfold 12 c8
+  \repeat unfold 12 c'8
 }
 @end lilypond
 
@@ -2169,10 +2169,10 @@ niedrigere befindet.
     }
   }
   \new Voice  = two {
-    \relative c' {
+    \relative {
       \voiceTwo
       \set Voice.beatStructure = #'(1 3 3)
-      f8 f f f f f f
+      f'8 f f f f f f
     }
   }
 >>
index ceb66224ef97850313b4a517593fe5d770b405e9..8e9c93a5d080c20b6c86dbeea66b864ee69a5729 100644 (file)
@@ -201,9 +201,9 @@ wiederholt werden, es sei denn, der gleiche Ereignistyp wird selber mit
 dem @code{q} verwendet:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \chordRepeats #'(articulation-event)
-  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
   q2 c, |
 }
 @end lilypond
index 90f730c04ea8c2fe7dfa729ee4e7cf2634a6dfb1..4b8a5b3fef9ff52bf519c3eeb4cc3f2ee7bebc1b 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Till Paala
 
@@ -2024,7 +2024,7 @@ staffAffinityDown = \with {
 }
 labelContext =
 #(define-music-function
-     (parser location context)
+     (context)
      (string?)
    #{ s1*0^\markup { \typewriter #context } #})
 
index fc243be2d69a42e1df26b3262c422eb106b3bbc6..835bd0cab30662d49dd162199624372bd3eb7258 100644 (file)
@@ -989,14 +989,14 @@ Einzugs (@code{indent} und @code{short-indent}) vergrößert werden.
 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'' {
+\relative {
   <<
     \new Staff \with {
       instrumentName = #"Alto Flute in G"
       shortInstrumentName = #"Flt."
     }
     {
-      f2 g4 f \break
+      f''2 g4 f \break
       g4 f g2
     }
     \new Staff \with {
@@ -1487,7 +1487,7 @@ um die klingenden Töne des Quelleninstruments zu produzieren.
 Um Stichnoten anders zu transponieren, muss @code{\transposedCueDuring}
 benutzt werden.  Dieser Befehl braucht ein zusätzliches Argument, um
 (in absolutem Modus) die gedruckte Tonhöhe vorzugeben, mit der das
-das zweigestrichene C dargestellt werden soll.  Das ist nützlich, wenn
+das eingestrichene C dargestellt werden soll.  Das ist nützlich, wenn
 man Stichnoten von einem Instrument mit einem vollständig anderen
 Register benutzt:
 
index 3bf34b39a27cc42b5662152b9f693b77c73f7ce8..6e7c5cb026b57efc874212b331d4e7a9994f86d7 100644 (file)
@@ -267,13 +267,13 @@ in  @ref{Automatische Silbendauern}.
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e4 d c2
+       s2 s4. f'8 e4 d c2
     }
   >>
 
@@ -498,13 +498,13 @@ Ein Beispiel demonstiert das:
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e8 d4. c2
+       s2 s4. f'8 e8 d4. c2
     }
   >>
 % takes durations and alignment from notes in "one" initially
@@ -627,8 +627,8 @@ gesetzt werden.
 
 @lilypond[quote,ragged-right,verbatim]
 {
-  \relative c'' { \autoBeamOff
-    r8 b c fis, fis c' b e, }
+  \relative { \autoBeamOff
+    r8 b' c fis, fis c' b e, }
   \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 }
   \addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
@@ -1464,8 +1464,8 @@ Dauer, unabhängig vom Wert der auf den Befehl folgenden Zahl.}
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b }
+        \relative {
+          \repeat volta 2 { b'4 b }
           \alternative { { b b } { b c } }
           c4 c
         }
@@ -1514,9 +1514,9 @@ richtige Ausrichtung des Textes zu erreichen.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
+        \relative {
           \set melismaBusyProperties = #'()
-          \repeat volta 2 { b4 b ~}
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           \unset melismaBusyProperties
           c4 c
@@ -1551,8 +1551,8 @@ müssen manuell eingegeben werden:
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1584,8 +1584,8 @@ benutzen wollen, müssen sie manuell notiert werden:
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1661,11 +1661,11 @@ anhängt:
 \score {
   <<
     \new Voice = "melody" {
-      \relative c' {
+      \relative {
         <<
           {
             \voiceOne
-            e4 e8 e
+            e'4 e8 e
           }
           \new Voice = "splitpart" {
             \voiceTwo
@@ -1832,9 +1832,9 @@ vorgenommen.
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
@@ -1919,9 +1919,9 @@ unterschiedlichen Melodien auszurichten.  Das wird mit der
 
 @lilypond[verbatim,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
         \voiceOne
@@ -2795,8 +2795,8 @@ Hier ein Beispiel, das zeigt, wie das gesetzt werden kann.
 @c manually adjusted to suit the imposed line length.  -td
 
 @lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
-  \repeat unfold 3 { a4 a a a }
+music = \relative {
+  \repeat unfold 3 { a'4 a a a }
 }
 
 dialogue = \lyricmode {
index 4d9c13b62c446787a1ec04903a5d6a9f0f644ff3..c2939f1d65b9b2e2c26b3e283e5f160869de0086 100644 (file)
@@ -212,9 +212,9 @@ werden.
 
 @lilypond[quote,verbatim]
 \include "arabic.ly"
-\relative do' {
+\relative {
   \set Staff.extraNatural = ##f
-  dod dob dosd \dwn dob dobsb dodsd do do
+  dod' dob dosd \dwn dob dobsb dodsd do do
 }
 @end lilypond
 
@@ -416,13 +416,13 @@ etwa Zwischenintervalle und ungewöhnliche Modi, zu illustrieren.
 @lilypond[quote,verbatim]
 \include "arabic.ly"
 \score {
-  \relative re' {
+  \relative {
     \set Staff.extraNatural = ##f
     \set Staff.autoBeaming = ##f
     \key re \bayati
     \time 10/8
 
-    re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+    re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
     re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
     fa4 fa16 [misb] misb8. [re16] re8 [misb] re  [do] sisb
     do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
index afed93cd894ab56e35bed296d1d6c8df2237f86b..78962556ef4a63050be76538bcb5dfc4d1bb4b7a 100644 (file)
@@ -504,22 +504,22 @@ global = {
       \override StaffSymbol.staff-space = #(magstep -4)
       \override StaffSymbol.thickness = #(magstep -3)
     }
-    \relative c' {
+    \relative {
       \global
       \set Staff.instrumentName = #"Violin"
-      c8.(\f^> b16 c d) ees8.(^> d16 c b)
+      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
       g8.(^> b16 c ees) g8-.^> r r
       R2.
     }
     \new PianoStaff <<
       \set PianoStaff.instrumentName = #"Piano"
-      \new Staff \relative c' {
+      \new Staff \relative {
         \global
         s2.
-        s4. s8 r8 r16 <c f aes c>
+        s4. s8 r8 r16 <c' f aes c>
         <c f aes c>4.^> <c ees g>8 r r
       }
-      \new Staff \relative {
+      \new Staff \relative {
         \global
         \clef "bass"
         <<
@@ -607,7 +607,7 @@ comparaciones detalladas con grabados de música reales.
 de las tres configuraciones elegiríamos para la siguiente ligadura?
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
@@ -651,7 +651,7 @@ ligadura, y LilyPond ha otorgado una puntuación a cada una en
 rozar la cabeza de una de las figuras:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
@@ -665,7 +665,7 @@ asciende mientras la melodía desciende, dando un total de 13.08 puntos
 de fealdad:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
@@ -838,24 +838,24 @@ LilyPond en segundo:
 @lilypond[staffsize=19.5,line-width=14\cm]
 global = { \key g \minor }
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
 }
 
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
 }
 
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
@@ -1159,16 +1159,16 @@ aparente si tenemos en cuenta un ejemplo musical más complejo:
 
 \new PianoStaff <<
   \new Staff = "RH" <<
-    \new Voice = "I" \relative c''' {
+    \new Voice = "I" \relative {
       \time 3/4
       \voiceOne
-      \tuplet 7/6 { g8 g g g g g g }
+      \tuplet 7/6 { g''8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
-    \new Voice = "II" \relative c' {
+    \new Voice = "II" \relative {
       \voiceTwo
-      c4
+      c'4
       \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
@@ -1465,8 +1465,8 @@ tiene todas las direcciones hacia arriba (o hacia la derecha).
 
 @lilypond[quote,ragged-right]
 \score {
-  \relative c' {
-    \stemDown <e g b>4_>-\arpeggio
+  \relative {
+    \stemDown <e' g b>4_>-\arpeggio
     \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
@@ -1536,11 +1536,11 @@ a lo largo del fragmento musical.
                   ((-2) (make-smaller-markup (make-bold-markup "2")))
                   (else "bla")))))))))
 
-\new Voice \relative c' {
+\new Voice \relative {
   \stemUp
   \set autoBeaming = ##f
   \time 2/4
-  <d f g>4
+  <d' f g>4
   \once \override NoteHead.stencil = #note-head::brew-ez-stencil
   \once \override NoteHead.font-size = #-7
   \once \override NoteHead.font-family = #'sans
@@ -1767,9 +1767,9 @@ LilyPond, versión @version{}:
 @lilypond[staffsize=14.3,line-width=15.9\cm]
 global = {\key g \minor}
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
   r2 r8 d16 ees f8 ees16 d
   ees4 ~ 16 d c bes a4 r8 ees'16 d
@@ -1778,9 +1778,9 @@ partI = \relative c' {
   a2 g\fermata \bar "|."
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
   r8 fis16 g a8 g16 fis g2 ~
   2 r8 d' ees g,
@@ -1788,16 +1788,16 @@ partII = \relative c' {
   bes4. <g b>8 <a c> r <d, g> r
   <ees g>4 <d fis> d2
 }
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
   bes2 ~ 8 b16 a g8 a16 b
   c4 r r2
   R1
   r8 d ees g, fis4 g
   r8 a16 bes c8 bes16 a b2
 }
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
index 3f5507c7d0fe2f069ba2de7cbec545cd44f2d90c..df13c07eacd1a459d0539a6eae958e00defa72fe 100644 (file)
@@ -7,7 +7,7 @@
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Interfaces para programadores
 @chapter Interfaces para programadores
@@ -55,7 +55,7 @@ Los bloques de código de LilyPond tienen el siguiente aspecto:
 He aquí un ejemplo trivial:
 
 @lilypond[verbatim,quote]
-ritpp = #(define-event-function (parser location) ()
+ritpp = #(define-event-function () ()
   #{ ^"rit." \pp #}
 )
 
@@ -127,7 +127,7 @@ La forma general de la definición de una función de Scheme es:
 @example
 funcion =
 #(define-scheme-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{tipo1?} @var{tipo2?} @dots{})
    @var{cuerpo})
 @end example
@@ -307,7 +307,7 @@ satisface el predicado @code{void?}.
 @example
 noApuntarYPulsar =
 #(define-void-function
-     (parser location)
+     ()
      ()
    (ly:set-option 'point-and-click #f))
 @dots{}
@@ -359,7 +359,7 @@ La forma general para definir funciones musicales es:
 @example
 funcion =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{tipo1?} @var{tipo2?} @dots{})
    @var{cuerpo})
 @end example
@@ -444,7 +444,7 @@ usando una variable @code{pair?}:
 @example
 barraManual =
 #(define-music-function
-     (parser location principio-final)
+     (principio-final)
      (pair?)
    #@{
      \once \override Beam.positions = #principio-final
@@ -462,7 +462,7 @@ para crear la pareja se puede incluir dentro de la expresión musical:
 @lilypond[quote,verbatim,ragged-right]
 manualBeam =
 #(define-music-function
-     (parser location beg end)
+     (beg end)
      (number? number?)
    #{
      \once \override Beam.positions = #(cons beg end)
@@ -517,7 +517,7 @@ se habrían fijado los valores predeterminados.
 
 @example
 crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
   (_i "Create cross-staff stems")
   #@{
   \temporary \override Stem.cross-staff = #cross-staff-connect
@@ -539,7 +539,7 @@ además de la simple sustitución:
 @lilypond[quote,verbatim,ragged-right]
 AltOn =
 #(define-music-function
-     (parser location mag)
+     (mag)
      (number?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -565,7 +565,7 @@ musicales:
 @lilypond[quote,verbatim,ragged-right]
 withAlt =
 #(define-music-function
-     (parser location mag music)
+     (mag music)
      (number? ly:music?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -600,7 +600,7 @@ función musical sin argumentos:
 @example
 mostrarNumeroDeCompas =
 #(define-music-function
-     (parser location)
+     ()
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
        #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
@@ -643,7 +643,7 @@ habitualmente sin indicador de dirección, como @code{c'\pp}.  He aquí
 una forma de escribir indicaciones dinámicas arbitrarias:
 
 @lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
          (make-dynamic-script arg))
 \relative { c'\dyn pfsss }
 @end lilypond
@@ -1375,11 +1375,11 @@ para esa propiedad, y que puede verse en el manual de referencia
 interna o en el archivo 'define-grobs.scm':
 
 @example
-\relative c'' @{
+\relative @{
   \override Flag.X-offset = #(lambda (flag)
     (let ((default (ly:flag::calc-x-offset flag)))
       (* default 4.0)))
-  c4. d8 a4. g8
+  c''4. d8 a4. g8
 @}
 @end example
 
@@ -1533,10 +1533,10 @@ arriba.
               (eq? (car (last-pair siblings)) grob))
          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
-\relative c'' {
+\relative {
   \override Tie.after-line-breaking =
   #my-callback
-  c1 ~ \break
+  c''1 ~ \break
   c2 ~ 2
 }
 @end lilypond
index d0ecd4c7392346e0c34140aed95f709dca77218e..6483a5b75e1fe865f87f7fd7c6de05a2f7a6ae3c 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Tutorial de Scheme
 @appendix Tutorial de Scheme
@@ -1431,7 +1431,7 @@ que pongamos otro elemento delante de la propiedad
 
 
 @example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
          "Return: @{ note ( note ) @}.
          `note' is supposed to be a single note."
          (let ((note2 (ly:music-deep-copy note)))
@@ -1616,7 +1616,7 @@ musical (es cuestión de un poco de aderezo sintáctico y una
 declaración del tipo de su único argumento @q{real}).
 
 @example
-addAccent = #(define-music-function (parser location note-event)
+addAccent = #(define-music-function (note-event)
                                      (ly:music?)
   "Add an accent ArticulationEvent to the articulations of `note-event',
   which is supposed to be a NoteEvent expression."
@@ -1660,7 +1660,7 @@ TODO Find a simple example
 
 @ignore
 @lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
 #{
   \once \override TextScript.padding = #padding
 #})
@@ -1683,16 +1683,16 @@ Lo podemos usar para crear instrucciones nuevas:
 
 
 @lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
   (number? markup?)
 #{
   \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
@@ -1702,7 +1702,7 @@ tempoPadded = #(define-music-function (parser location padding tempotext)
 Incluso se le pueden pasar expresiones musicales:
 
 @lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
 #{
   #x e8 a b #y b a e
 #})
index 14db67939730f3e09133b5d4c9f77efed3fa1bdc..b80663df4dc91b28dd04b376ef48ec6385b79120 100644 (file)
@@ -1248,11 +1248,11 @@ las notas.
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1306,20 +1306,20 @@ del @notation{Judas Macabeo} de Haendel:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index 03bdd50ab559d270bc262cce107d0a42ac3e5207..0ceb6e34db3f06e54fa4e1f6815d53def74340dc 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Conceptos fundamentales
 @chapter Conceptos fundamentales
@@ -883,12 +883,12 @@ entienda.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1055,18 +1055,18 @@ las ligaduras de unión y de expresión y las indicaciones de dinámica:
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1086,10 +1086,10 @@ está ahora dentro de un contexto de una sola voz, haciendo que se
 pueda trazar una ligadura por encima de ellas.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % This section is homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1149,11 +1149,11 @@ usando notas espaciadoras para pasar por encima de las secciones en
 que una voz está en silencio, como aquí:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1253,10 +1253,10 @@ usando el nombre asignado a la voz.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1808,13 +1808,13 @@ contexto.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
   }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
   }
 >>
 @end lilypond
@@ -1859,9 +1859,9 @@ Así, esto desactivará los becuadros adicionales en un pentagrama:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1874,9 +1874,9 @@ y esto los desactivará en todos los pentagramas:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2122,15 +2122,15 @@ partir de esa única voz:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2147,15 +2147,15 @@ pentagrama:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2481,18 +2481,18 @@ bassMusic = \relative {
 }
 bassWords = \sopranoWords
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2709,17 +2709,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3132,9 +3132,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \padText
     c4.^"hi there!" d8 e' f g d |
     c,4.\fthenp b8 c4 c-. |
@@ -3156,9 +3156,9 @@ sin ningún identificador.  Encontrará que es mucho más difícil de
 leer, sobre todo la última línea.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
@@ -3183,7 +3183,7 @@ ellas como en funciones).
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -3294,7 +3294,7 @@ silencio y esta opción a la música anterior, llegamos al siguiente
 resultado
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index 892b579443fd8a2c89d44c6cdc899c2c0e119217..2e0199c7121471ecf1201324e7d57d66c10012e3 100644 (file)
@@ -444,10 +444,10 @@ La @notation{indicación de tempo} y la @notation{indicación
 metronómica} pueden establecerse con la instrucción @code{\tempo}:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -503,11 +503,11 @@ He aquí un pequeño ejemplo que muestra todos los elementos anteriores
 juntos:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r
index 62ab388ca0839294f20a8ca5a5fa3c59e95076a2..7421001b67681623a6cfe75c61e54ba0fbc0ca3a 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Trucar la salida
 @chapter Trucar la salida
@@ -4132,10 +4132,10 @@ los dos métodos:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4154,10 +4154,10 @@ los dos métodos:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \override Score.MetronomeMark.stencil = ##f
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4306,13 +4306,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4338,7 +4338,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4356,9 +4356,9 @@ archivo como @file{musica.ly}).
 @example
 \include "definiciones.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinete"
   cis4.\< d8 e4 fis |
@@ -4374,13 +4374,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4407,7 +4407,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4437,7 +4437,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4458,9 +4458,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4485,7 +4485,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4516,7 +4516,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4533,9 +4533,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4757,7 +4757,7 @@ notas un color que depende de su posición dentro del pentagrama.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index ec3c35cb34f24b6287b8a90fc9847d6f3a134bd8..95efa87b53569a0963b0cd00b5559f3cf62f27ed 100644 (file)
@@ -232,8 +232,8 @@ ligadura en particular.  De forma predeterminada, el grabador
 sobre la ligadura:
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c'' {
-  \[ g c, a' f d' \]
+\relative {
+  \[ g' c, a' f d' \]
   a g f
   \[ e f a g \]
 }
@@ -386,9 +386,9 @@ escribir el canto, como lo demuestra el siguiente fragmento:
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new MensuralVoice = "discantus" \relative c'' {
+    \new MensuralVoice = "discantus" \relative {
       \hide Score.BarNumber {
-        c1\melisma bes a g\melismaEnd
+        c''1\melisma bes a g\melismaEnd
         f\breve
         \[ f1\melisma a c\breve d\melismaEnd \]
         c\longa
@@ -917,10 +917,10 @@ definirse como una forma breve muy conveniente:
 
 @lilypond[quote,verbatim]
 ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
   \new MensuralVoice  {
        \once \set suggestAccidentals = ##t
-  bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+  bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
   }
 }
 @end lilypond
@@ -988,13 +988,13 @@ Por ejemplo:
 @c @end example
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \relative c' {
+  \relative {
     \set Score.timing = ##f
     \set Score.defaultBarType = "-"
     \override NoteHead.style = #'petrucci
     \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
-    \[ c'\maxima g \]
+    \[ c''\maxima g \]
     \[ d\longa
        \override NoteHead.ligature-flexa = ##t
        \once \override NoteHead.flexa-width = #3.2
@@ -1017,13 +1017,13 @@ por el @code{Mensural_ligature_engraver}, la misma música se
 transcribe de la siguiente manera:
 
 @lilypond[quote,ragged-right]
-\relative c' {
+\relative {
   \set Score.timing = ##f
   \set Score.defaultBarType = "-"
   \override NoteHead.style = #'petrucci
   \override Staff.TimeSignature.style = #'mensural
   \clef "petrucci-g"
-  \[ c'\maxima g \]
+  \[ c''\maxima g \]
   \[ d\longa
      \override NoteHead.ligature-flexa = ##t
      \once \override NoteHead.flexa-width = #3.2
@@ -1671,9 +1671,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ b \]
+    \[ b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1685,9 +1685,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ \cavum b \]
+    \[ \cavum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1699,9 +1699,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ \linea b \]
+    \[ \linea b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1714,9 +1714,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Auctum Ascendens
-    \[ \auctum \ascendens b \]
+    \[ \auctum \ascendens b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1729,9 +1729,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Auctum Descendens
-    \[ \auctum \descendens b \]
+    \[ \auctum \descendens b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1744,9 +1744,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum
-    \[ \inclinatum b \]
+    \[ \inclinatum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1759,9 +1759,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum Auctum
-    \[ \inclinatum \auctum b \]
+    \[ \inclinatum \auctum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1774,9 +1774,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum Parvum
-    \[ \inclinatum \deminutum b \]
+    \[ \inclinatum \deminutum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1789,9 +1789,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Virga
-    \[ \virga b \]
+    \[ \virga b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1810,9 +1810,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis vel Flexa
-    \[ b \flexa g \]
+    \[ b' \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1826,9 +1826,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis Aucta Descendens
-    \[ b \flexa \auctum \descendens g \]
+    \[ b' \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1841,9 +1841,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis Aucta Ascendens
-    \[ b \flexa \auctum \ascendens g \]
+    \[ b' \flexa \auctum \ascendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1856,9 +1856,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Cephalicus
-    \[ b \flexa \deminutum g \]
+    \[ b' \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1871,9 +1871,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Podatus vel Pes
-    \[ g \pes b \]
+    \[ g' \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1886,9 +1886,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Descendens
-    \[ g \pes \auctum \descendens b \]
+    \[ g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1901,9 +1901,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Ascendens
-    \[ g \pes \auctum \ascendens b \]
+    \[ g' \pes \auctum \ascendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1916,9 +1916,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Epiphonus
-    \[ g \pes \deminutum b \]
+    \[ g' \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1931,9 +1931,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Initio Debilis
-    \[ \deminutum g \pes b \]
+    \[ \deminutum g' \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1946,9 +1946,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Descendens Initio Debilis
-    \[ \deminutum g \pes \auctum \descendens b \]
+    \[ \deminutum g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1968,9 +1968,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus
-    \[ a \pes b \flexa g \]
+    \[ a' \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1983,9 +1983,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Auctus Descendens
-    \[ a \pes b \flexa \auctum \descendens g \]
+    \[ a' \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1998,9 +1998,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Deminutus
-    \[ a \pes b \flexa \deminutum g \]
+    \[ a' \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2013,9 +2013,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Initio Debilis
-    \[ \deminutum a \pes b \flexa g \]
+    \[ \deminutum a' \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2028,9 +2028,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Auctus Descendens Initio Debilis
-    \[ \deminutum a \pes b \flexa \auctum \descendens g \]
+    \[ \deminutum a' \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2043,9 +2043,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Deminutus Initio Debilis
-    \[ \deminutum a \pes b \flexa \deminutum g \]
+    \[ \deminutum a' \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2058,9 +2058,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus
-    \[ a \flexa g \pes b \]
+    \[ a' \flexa g \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2073,9 +2073,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus Auctus Descendens
-    \[ a \flexa g \pes \auctum \descendens b \]
+    \[ a' \flexa g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2088,9 +2088,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus Deminutus
-    \[ a \flexa g \pes \deminutum b \]
+    \[ a' \flexa g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2103,9 +2103,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus
-    \[ \virga b \inclinatum a \inclinatum g \]
+    \[ \virga b' \inclinatum a \inclinatum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2118,9 +2118,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus Auctus
-    \[ \virga b \inclinatum a \inclinatum \auctum g \]
+    \[ \virga b' \inclinatum a \inclinatum \auctum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2133,9 +2133,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus Deminutus
-    \[ \virga b \inclinatum a \inclinatum \deminutum g \]
+    \[ \virga b' \inclinatum a \inclinatum \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2148,9 +2148,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus
-    \[ g \pes a \virga b \]
+    \[ g' \pes a \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2163,9 +2163,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus Auctus Descendens
-    \[ g \pes a \pes \auctum \descendens b \]
+    \[ g' \pes a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2178,9 +2178,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus Deminutus
-    \[ g \pes a \pes \deminutum b \]
+    \[ g' \pes a \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2200,9 +2200,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Quilisma
-    \[ g \pes \quilisma a \pes b \]
+    \[ g' \pes \quilisma a \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2215,9 +2215,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Quilisma Pes Auctus Descendens
-    \[ g \quilisma a \pes \auctum \descendens b \]
+    \[ g' \quilisma a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2230,9 +2230,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Oriscus
-    \[ \oriscus b \]
+    \[ \oriscus b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2245,9 +2245,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Quassus
-    \[ \oriscus g \pes \virga b \]
+    \[ \oriscus g' \pes \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2260,9 +2260,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Quassus Auctus Descendens
-    \[ \oriscus g \pes \auctum \descendens b \]
+    \[ \oriscus g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2275,9 +2275,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Salicus
-    \[ g \oriscus a \pes \virga b \]
+    \[ g' \oriscus a \pes \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2290,9 +2290,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Salicus Auctus Descendens
-    \[ g \oriscus a \pes \auctum \descendens b \]
+    \[ g' \oriscus a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2305,9 +2305,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Stropha
-    \[ \stropha b \]
+    \[ \stropha b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2320,9 +2320,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Stropha Aucta
-    \[ \stropha \auctum b \]
+    \[ \stropha \auctum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2335,9 +2335,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Bistropha
-    \[ \stropha b \stropha b \]
+    \[ \stropha b' \stropha b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2350,9 +2350,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Tristropha
-    \[ \stropha b \stropha b \stropha b \]
+    \[ \stropha b' \stropha b \stropha b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2365,9 +2365,9 @@ Formas @b{Básica} y @emph{Licuescente}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Trigonus
-    \[ \stropha b \stropha b \stropha a \]
+    \[ \stropha b' \stropha b \stropha a \]
   }
   \layout { \neumeDemoLayout }
 }
@@ -2824,10 +2824,10 @@ plicas:
 
 @lilypond[verbatim,ragged-right]
 \include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
   \clef "G_8"
   \set Score.timing = ##f
-  c\breve \hide NoteHead  c c c c c
+  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
@@ -2877,10 +2877,10 @@ más ajustes posteriormente, esto se puede hacer fácilmente con
 @q{notas} @code{s}.
 
 @lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
   \time 1/4
   \override Lyrics.LyricText.X-extent  = #'(0 . 3)
-  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+  d'4 \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
   \tuplet 3/2 { g8 f d } e f g a g4
 }
index dc5864df41c179e525557f2070a2d145a14b35af..baad9ae36f56ca6cfd6f12a1bc002f310891787e 100644 (file)
@@ -8,7 +8,7 @@ Translation of GIT committish: a43fe59b0205af99f84532935b103d0c064b4526
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Cambiar los valores por omisión
 @chapter Cambiar los valores por omisión
@@ -4774,7 +4774,7 @@ de LilyPond.  La forma general de estas funciones es
 @example
 funcion =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{type1?} @var{type2?} @dots{})
    #@{
      @var{@dots{}música@dots{}}
@@ -4854,7 +4854,7 @@ del relleno de un elemento de inscripción de texto TextScript:
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -4875,7 +4875,7 @@ para los argumentos de las funciones musicales:
 @lilypond[quote,verbatim,ragged-right]
 custosNote =
 #(define-music-function
-     (parser location note)
+     (note)
      (ly:music?)
    #{
      \tweak NoteHead.stencil #ly:text-interface::print
@@ -4893,16 +4893,16 @@ Se pueden definir funciones de sustitución con más de un argumento:
 @lilypond[quote,verbatim,ragged-right]
 tempoPadded =
 #(define-music-function
-     (parser location padding tempotext)
+     (padding tempotext)
      (number? markup?)
    #{
      \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
index 164da9219c0a55fb70f127f343a6dd9e263bc890..fb734487891f1f0e3cb5e95cd3152d7c6b127bd2 100644 (file)
@@ -624,11 +624,11 @@ especificar la duración entre las líneas de rejilla.
 
 \score {
   \new ChoirStaff <<
-    \new Staff \relative c'' {
+    \new Staff \relative {
       \stemUp
-      c4. d8 e8 f g4
+      c''4. d8 e8 f g4
     }
-    \new Staff \relative {
+    \new Staff \relative {
       \clef bass
       \stemDown
       c4 g' f e
index 9be1407341a51514e3ea2b81ada7c4c760b52c0b..9b882c3e68789ac3309ac25c248c0ace9194b461 100644 (file)
@@ -309,9 +309,9 @@ forma predeterminada.  Lo mismo rige para la casilla de segunda vez de
 una repetición.
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~
   }
   \alternative {
@@ -349,9 +349,9 @@ La instrucción @code{\hideSplitTiedTabNotes} cancela el comportamiento
 de imprimir los números de traste entre paréntesis:
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~ }
   \alternative {
     { g4 f2. }
@@ -1761,10 +1761,10 @@ o armónicos.  Los armónicos se suelen explicar de forma más completa
 con un marcado de texto.
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \clef "treble_8"
   \override Staff.NoteHead.style = #'harmonic-mixed
-  d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+  d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
 
index e91700f76ab3c63dbc79a806124eb9a5d735d20c..51e01af183808440be53371ac563cc7baceaa15d 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Entrada y salida generales
 @chapter Entrada y salida generales
@@ -689,10 +689,10 @@ como aquí:
 }
 
 \score {
-  \new Staff \relative g, {
+  \new Staff \relative {
     \clef bass
     \key g \major
-    \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+    \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
     \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
   }
   \header {
@@ -701,7 +701,7 @@ como aquí:
 }
 
 \score {
-  \new Staff \relative {
+  \new Staff \relative {
     \clef bass
     \key g \major
     \partial 16 b16 |
@@ -1872,7 +1872,7 @@ nombres de los actos de una ópera en el índice general:
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 @end verbatim
 
@@ -1887,7 +1887,7 @@ tocAct =
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 
 \book {
index 3e103596b35510653e164ed3ecc7fdfdebf73bf8..98e83d3331f37157392812a5025d510144d53aab 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 
 @node Alturas
@@ -2697,7 +2697,7 @@ Se puede usar el siguiente rodeo del problema: definir una función que
 cambie localmente el estilo de alteraciones a @code{forget}:
 
 @lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
   \accidentalStyle forget
   #music
   \accidentalStyle modern
index abede20ed3d5dad0ad817fb2be30ab1246c4a7af..46c091ead7fc9a321c9ab57bf6b5905c815ad1b6 100644 (file)
@@ -1119,9 +1119,9 @@ argumento opcional:
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \relative c' {
+    \relative {
       \time #'(2 2 3) 7/8
-      \repeat unfold 7 { c8 } |
+      \repeat unfold 7 { c'8 } |
       \time #'(3 2 2) 7/8
       \repeat unfold 7 { c8 } |
     }
@@ -1188,8 +1188,8 @@ compás se pueden restaurar a los valores originales:
 
 @lilypond[quote,verbatim]
 \score{
-  \relative c' {
-    \repeat unfold 8 { c8 } |
+  \relative {
+    \repeat unfold 8 { c'8 } |
     \overrideTimeSignatureSettings
       4/4        % timeSignatureFraction
       1/4        % baseMomentFraction
@@ -1759,9 +1759,9 @@ La construcción más simple es una lista única, en la que el
 y los anteriores son los numeradores.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((2 2 2 8))
-  \repeat unfold 6 c8 \repeat unfold 12 c16
+  \repeat unfold 6 c'8 \repeat unfold 12 c16
 }
 @end lilypond
 
@@ -1770,14 +1770,14 @@ adicionales.  Asimismo, los ajustes de barrado se ajustarán
 dependiendo de los valores.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((1 4) (3 8))
-  \repeat unfold 5 c8 \repeat unfold 10 c16
+  \repeat unfold 5 c'8 \repeat unfold 10 c16
 }
 
-\relative c' {
+\relative {
   \compoundMeter #'((1 2 3 8) (3 4))
-  \repeat unfold 12 c8
+  \repeat unfold 12 c'8
 }
 @end lilypond
 
@@ -2174,10 +2174,10 @@ más bajo, se aplican los ajustes del contexto circundante.
       }
     }
     \new Voice = two {
-      \relative c' {
+      \relative {
         \voiceTwo
         \set Voice.beatStructure = #'(1 3 3)
-        f8 f f f f f f
+        f'8 f f f f f f
       }
     }
   >>
@@ -3754,9 +3754,9 @@ hasta 5/8, acortando ese compás en 1/8.  Entonces, la siguiente línea
 divisoria cae en 9/8 en vez de hacerlo en 5/4.
 
 @lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
   \set Timing.measureLength = #(ly:make-moment 5/4)
-  c1 c4 |
+  c'1 c4 |
   c1 c4 |
   c4 c
   \set Timing.measurePosition = #(ly:make-moment 5/8)
index a14619123a8c5e9be7dcb72d70057eb071eef27a..88810dd1baf561d92aea7ac6cb46ed784e312871 100644 (file)
@@ -202,9 +202,9 @@ que los eventos de ese tipo ya estén presentes en el propio acorde
 @code{q}.
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \chordRepeats #'(articulation-event)
-  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
   q2 c, |
 }
 @end lilypond
index 5e18d993c1f060a6d7dd18508b6b92f794ea4019..687c5f8e97a5d8de0120d1f82725ffd4ca030913 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @ignore
 GDP TODO list
@@ -2157,7 +2157,7 @@ lowerCaseChords = \with {
 }
 labelContext =
 #(define-music-function
-     (parser location context)
+     (context)
      (string?)
      #{ s1*0^\markup { \upright {\typewriter #context } } #})
 
index 7142b471449efaffc690826bdc108481dc77241f..acb675740ea96ea423598461ca1ffa509ef68f9c 100644 (file)
@@ -968,14 +968,14 @@ valores del sangrado, @code{indent}, y del sangrado corto,
 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'' {
+\relative {
   <<
     \new Staff \with {
       instrumentName = #"Alto Flute in G"
       shortInstrumentName = #"Flt."
     }
     {
-      f2 g4 f \break
+      f''2 g4 f \break
       g4 f g2
     }
     \new Staff \with {
index c5212cbfc94132d7639dc1b725738be6b7eea5a7..099d4a9af9ceade27bca15c6534524df80ab9099 100644 (file)
@@ -255,13 +255,13 @@ ver más detalles, consulte @ref{Duración automática de las sílabas}.
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e4 d c2
+       s2 s4. f'8 e4 d c2
     }
   >>
 
@@ -493,13 +493,13 @@ He aquí un ejemplo que muestra su uso:
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e8 d4. c2
+       s2 s4. f'8 e8 d4. c2
     }
   >>
 % takes durations and alignment from notes in "one" initially
@@ -1465,8 +1465,8 @@ que se escribe a continuación.}
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b }
+        \relative {
+          \repeat volta 2 { b'4 b }
           \alternative { { b b } { b c } }
           c4 c
         }
@@ -1515,9 +1515,9 @@ manuales.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
+        \relative {
           \set melismaBusyProperties = #'()
-          \repeat volta 2 { b4 b ~}
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           \unset melismaBusyProperties
           c4 c
@@ -1553,8 +1553,8 @@ Cuando la sección repetida tiene textos distintos, no se puede usar
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1587,8 +1587,8 @@ manualmente.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1660,11 +1660,11 @@ contextos de voz y adjuntando la letra a estos contextos específicos:
 \score {
   <<
     \new Voice = "melody" {
-      \relative c' {
+      \relative {
         <<
           {
             \voiceOne
-            e4 e8 e
+            e'4 e8 e
           }
           \new Voice = "splitpart" {
             \voiceTwo
@@ -1951,9 +1951,9 @@ rápida ignore el melisma.  Esto se consigue estableciendo
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
@@ -2042,9 +2042,9 @@ propiedad @code{associatedVoice}:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
         \voiceOne
@@ -2943,8 +2943,8 @@ He aquí un ejemplo que ilustra cómo puede hacerse.
 @c manually adjusted to suit the imposed line length.  -td
 
 @lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
-  \repeat unfold 3 { a4 a a a }
+music = \relative {
+  \repeat unfold 3 { a'4 a a a }
 }
 
 dialogue = \lyricmode {
index d8b22591386307ffa36ca308330dd776ec9bc57b..64ff7e829623510c4148e103dcb22e47222ff664 100644 (file)
@@ -220,9 +220,9 @@ alterar mediante este método.
 
 @lilypond[quote,verbatim]
 \include "arabic.ly"
-\relative do' {
+\relative {
   \set Staff.extraNatural = ##f
-  dod dob dosd \dwn dob dobsb dodsd do do
+  dod' dob dosd \dwn dob dobsb dodsd do do
 }
 @end lilypond
 
@@ -424,13 +424,13 @@ tratamos en esta sección.
 @lilypond[quote,verbatim]
 \include "arabic.ly"
 \score {
-  \relative re' {
+  \relative {
     \set Staff.extraNatural = ##f
     \set Staff.autoBeaming = ##f
     \key re \bayati
     \time 10/8
 
-    re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+    re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
     re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
     fa4 fa16 [misb] misb8. [re16] re8 [misb] re  [do] sisb
     do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
index 412813cd0a5b5ab48db709ef0b79c1f54867cfe1..ef13eaab7702a122fdf75a91e0f78b7124dac7fa 100644 (file)
@@ -462,22 +462,22 @@ global = {
     \new Staff \with {
       \magnifyStaff #2/3
     }
-    \relative c' {
+    \relative {
       \global
       \set Staff.instrumentName = #"Violin"
-      c8.(\f^> b16 c d) ees8.(^> d16 c b)
+      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
       g8.(^> b16 c ees) g8-.^> r r
       R2.
     }
     \new PianoStaff <<
       \set PianoStaff.instrumentName = #"Piano"
-      \new Staff \relative c' {
+      \new Staff \relative {
         \global
         s2.
-        s4. s8 r8 r16 <c f aes c>
+        s4. s8 r8 r16 <c' f aes c>
         <c f aes c>4.^> <c ees g>8 r r
       }
-      \new Staff \relative {
+      \new Staff \relative {
         \global
         \clef "bass"
         <<
@@ -555,7 +555,7 @@ How do we actually make formatting decisions?  In other words, which
 of the three configurations should we choose for the following slur?
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
@@ -595,7 +595,7 @@ has given each one a score in @q{ugly points}.  The first example gets
 15.39 points for grazing one of the noteheads:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
@@ -609,7 +609,7 @@ side, plus another 2 points because the slur ascends while the melody
 descends for a total of 13.08 ugly points:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
@@ -773,24 +773,24 @@ measures 28--29, as shown here with Finale first and LilyPond second:
 @lilypond[staffsize=19.5,line-width=14\cm]
 global = { \key g \minor }
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
 }
 
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
 }
 
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
@@ -1078,16 +1078,16 @@ consider a more complicated musical example:
 
 \new PianoStaff <<
   \new Staff = "RH" <<
-    \new Voice = "I" \relative c''' {
+    \new Voice = "I" \relative {
       \time 3/4
       \voiceOne
-      \tuplet 7/6 { g8 g g g g g g }
+      \tuplet 7/6 { g''8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
-    \new Voice = "II" \relative c' {
+    \new Voice = "II" \relative {
       \voiceTwo
-      c4
+      c'4
       \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
@@ -1364,8 +1364,8 @@ chord has all directions up (right).
 
 @lilypond[quote,ragged-right]
 \score {
-  \relative c' {
-    \stemDown <e g b>4_>-\arpeggio
+  \relative {
+    \stemDown <e' g b>4_>-\arpeggio
     \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
@@ -1434,11 +1434,11 @@ note head symbol is changed during the music fragment.
                   ((-2) (make-smaller-markup (make-bold-markup "2")))
                   (else "bla")))))))))
 
-\new Voice \relative c' {
+\new Voice \relative {
   \stemUp
   \set autoBeaming = ##f
   \time 2/4
-  <d f g>4
+  <d' f g>4
   \once \override NoteHead.stencil = #note-head::brew-ez-stencil
   \once \override NoteHead.font-size = #-7
   \once \override NoteHead.font-family = #'sans
@@ -1653,9 +1653,9 @@ LilyPond, version @version{}:
 @lilypond[staffsize=14.3,line-width=15.9\cm]
 global = {\key g \minor}
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
   r2 r8 d16 ees f8 ees16 d
   ees4 ~ 16 d c bes a4 r8 ees'16 d
@@ -1664,9 +1664,9 @@ partI = \relative c' {
   a2 g\fermata \bar "|."
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
   r8 fis16 g a8 g16 fis g2 ~
   2 r8 d' ees g,
@@ -1674,16 +1674,16 @@ partII = \relative c' {
   bes4. <g b>8 <a c> r <d, g> r
   <ees g>4 <d fis> d2
 }
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
   bes2 ~ 8 b16 a g8 a16 b
   c4 r r2
   R1
   r8 d ees g, fis4 g
   r8 a16 bes c8 bes16 a b2
 }
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
index dd9094e435b5489ee8b6e30ff966175c6ad6956f..e8f41a9338bd33442c6f978fc74c1b564742e3cc 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Interfaces for programmers
 @chapter Interfaces for programmers
@@ -51,7 +51,7 @@ LilyPond code blocks look like
 Here is a trivial example:
 
 @lilypond[verbatim,quote]
-ritpp = #(define-event-function (parser location) ()
+ritpp = #(define-event-function () ()
   #{ ^"rit." \pp #}
 )
 
@@ -63,11 +63,8 @@ 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.
+call to the LilyPond 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
@@ -77,10 +74,8 @@ 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}.
+All music generated inside the code block has its
+@samp{origin} set to the current input 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
@@ -114,7 +109,7 @@ The general form for defining scheme functions is:
 @example
 function =
 #(define-scheme-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{type1?} @var{type2?} @dots{})
    @var{body})
 @end example
@@ -123,15 +118,6 @@ function =
 where
 
 @multitable @columnfractions .33 .66
-@item @code{parser}
-@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
 
@@ -148,7 +134,7 @@ don't follow it with a default value, @code{#f} is used as the default.
 Default values are not verified with @emph{predicate?} at either
 definition or run time: it is your responsibility to deal with the
 values you specify.  Default values that happen to be music expressions
-are copied while setting @code{origin} to the @code{location} parameter.
+are copied while setting @code{origin} to the current input location.
 
 @item @code{@var{body}}
 @tab A sequence of Scheme forms evaluated in order, the last one being
@@ -262,7 +248,7 @@ sure that this special value (the only value satisfying the predicate
 @example
 noPointAndClick =
 #(define-void-function
-     (parser location)
+     ()
      ()
    (ly:set-option 'point-and-click #f))
 @dots{}
@@ -311,7 +297,7 @@ The general form for defining music functions is:
 @example
 function =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{type1?} @var{type2?} @dots{})
    @var{body})
 @end example
@@ -387,7 +373,7 @@ using a @code{pair?} variable:
 @example
 manualBeam =
 #(define-music-function
-     (parser location beg-end)
+     (beg-end)
      (pair?)
    #@{
      \once \override Beam.positions = #beg-end
@@ -406,7 +392,7 @@ music expression:
 @lilypond[quote,verbatim,ragged-right]
 manualBeam =
 #(define-music-function
-     (parser location beg end)
+     (beg end)
      (number? number?)
    #{
      \once \override Beam.positions = #(cons beg end)
@@ -455,7 +441,7 @@ set on exit.
 
 @example
 crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
   (_i "Create cross-staff stems")
   #@{
   \temporary \override Stem.cross-staff = #cross-staff-connect
@@ -476,7 +462,7 @@ addition to simple substitution,
 @lilypond[quote,verbatim,ragged-right]
 AltOn =
 #(define-music-function
-     (parser location mag)
+     (mag)
      (number?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -501,7 +487,7 @@ This example may be rewritten to pass in music expressions,
 @lilypond[quote,verbatim,ragged-right]
 withAlt =
 #(define-music-function
-     (parser location mag music)
+     (mag music)
      (number? ly:music?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -535,7 +521,7 @@ without arguments,
 @example
 displayBarNum =
 #(define-music-function
-     (parser location)
+     ()
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
        #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
@@ -572,7 +558,7 @@ to write dynamics commands, those are usually attached without direction
 indicator, like @code{c'\pp}.  Here is a way to write arbitrary
 dynamics:
 @lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
          (make-dynamic-script arg))
 \relative { c'\dyn pfsss }
 @end lilypond
@@ -1239,7 +1225,7 @@ restrict the modifications to a single music block.  Notice how
 @lilypond[quote,verbatim]
 desaturate =
 #(define-music-function
-   (parser location music) (ly:music?)
+   (music) (ly:music?)
    #{
      \applyContext
      #(lambda (context)
@@ -1257,11 +1243,11 @@ desaturate =
         (for-each revert-color '(NoteHead Stem Beam)))
    #})
 
-\relative g' {
+\relative {
   \override NoteHead.color = #darkblue
   \override Stem.color = #darkblue
   \override Beam.color = #darkblue
-  g8 a b c
+  g'8 a b c
   \desaturate { d c b a }
   g b d b g2
 }
@@ -1367,11 +1353,11 @@ calling the function that is the usual callback for that property, which
 can by found in the Internals Reference or the file 'define-grobs.scm':
 
 @example
-\relative c'' @{
+\relative @{
   \override Flag.X-offset = #(lambda (flag)
     (let ((default (ly:flag::calc-x-offset flag)))
       (* default 4.0)))
-  c4. d8 a4. g8
+  c''4. d8 a4. g8
 @}
 @end example
 
@@ -1494,10 +1480,10 @@ of the broken tie is repositioned.
               (eq? (car (last-pair siblings)) grob))
          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
-\relative c'' {
+\relative {
   \override Tie.after-line-breaking =
   #my-callback
-  c1 ~ \break
+  c''1 ~ \break
   c2 ~ 2
 }
 @end lilypond
@@ -1537,4 +1523,3 @@ This chapter covers the various tools provided by LilyPond to help
 Scheme programmers get information into and out of the music streams.
 
 TODO -- figure out what goes in here and how to organize it
-
index eaffe70a4824d83ea6fff1954f351f5b0c441ca7..8588ff268515d80c7a6d930887cbf00db898c34f 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Scheme tutorial
 @chapter Scheme tutorial
@@ -1331,7 +1331,7 @@ property, it is useful to know that an unset property is read out as
 put another element at the front of the @code{articulations} property.
 
 @example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
+doubleSlur = #(define-music-function (note) (ly:music?)
          "Return: @{ note ( note ) @}.
          `note' is supposed to be a single note."
          (let ((note2 (ly:music-deep-copy note)))
@@ -1507,7 +1507,7 @@ function (a matter of some syntactic sugar and a declaration of the type
 of its sole @q{real} argument).
 
 @example
-addAccent = #(define-music-function (parser location note-event)
+addAccent = #(define-music-function (note-event)
                                      (ly:music?)
   "Add an accent ArticulationEvent to the articulations of `note-event',
   which is supposed to be a NoteEvent expression."
@@ -1552,7 +1552,7 @@ TODO Find a simple example
 
 @ignore
 @lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
 #{
   \once \override TextScript.padding = #padding
 #})
@@ -1575,16 +1575,16 @@ We can use it to create new commands:
 
 
 @lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
   (number? markup?)
 #{
   \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
@@ -1594,7 +1594,7 @@ tempoPadded = #(define-music-function (parser location padding tempotext)
 Even music expressions can be passed in:
 
 @lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
 #{
   #x e8 a b #y b a e
 #})
index 171cc0cadfead54f086abe1d61ceaf33f53335f6..abd3ee2a735dc7db76625d693d1883149cb47e34 100644 (file)
@@ -497,22 +497,22 @@ global = {
     \new Staff \with {
       \magnifyStaff #2/3
     }
-    \relative c' {
+    \relative {
       \global
       \set Staff.instrumentName = #"Violin"
-      c8.(\f^> b16 c d) ees8.(^> d16 c b)
+      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
       g8.(^> b16 c ees) g8-.^> r r
       R2.
     }
     \new PianoStaff <<
       \set PianoStaff.instrumentName = #"Piano"
-      \new Staff \relative c' {
+      \new Staff \relative {
         \global
         s2.
-        s4. s8 r8 r16 <c f aes c>
+        s4. s8 r8 r16 <c' f aes c>
         <c f aes c>4.^> <c ees g>8 r r
       }
-      \new Staff \relative {
+      \new Staff \relative {
         \global
         \clef "bass"
         <<
@@ -606,7 +606,7 @@ l'image suivante, laquelle de ces trois configurations devrions-nous
 choisir pour formater la liaison ?
 
 @lilypond
-\relative {
+\relative {
     \clef bass
     \once \override Slur.positions = #'(1.5 . 1)
     e8[( f] g[ a b d,)] r4
@@ -651,7 +651,7 @@ de laideur ».  Le premier essai se voit attribuer 15,39 points
 notamment pour l'effleurement de la tête de note.
 
 @lilypond
-\relative {
+\relative {
     \clef bass
     \once \override Slur.positions = #'(1.5 . 1)
     e8[(_"15.39" f] g[ a b d,)] r4
@@ -667,7 +667,7 @@ redescend, ce qui entraîne une pénalité de 2 points.  Ceci nous
 fait un total de 13,08 points de laideur.
 
 @lilypond
-\relative {
+\relative {
     \clef bass
     \once \override Slur.positions = #'(2 . 3)
     e8[(_"13.08" f] g[ a b d,)] r4
@@ -842,24 +842,24 @@ première image -- se situent dans les mesures 28 et 29 :
 @lilypond[staffsize=19.5,line-width=14\cm]
 global = { \key g \minor }
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
 }
 
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
 }
 
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
@@ -1161,16 +1161,16 @@ musique se complique :
 
 \new PianoStaff <<
   \new Staff = "RH" <<
-    \new Voice = "I" \relative c''' {
+    \new Voice = "I" \relative {
       \time 3/4
       \voiceOne
-      \tuplet 7/6 {g8 g g g g g g}
+      \tuplet 7/6 {g''8 g g g g g g}
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
-    \new Voice = "II" \relative c' {
+    \new Voice = "II" \relative {
       \voiceTwo
-      c4
+      c'4
       \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
@@ -1465,8 +1465,8 @@ vers le haut (ou la droite) pour le second.
 
 @lilypond[quote,ragged-right]
 \score {
-  \relative c' {
-    \stemDown <e g b>4_>-\arpeggio
+  \relative {
+    \stemDown <e' g b>4_>-\arpeggio
     \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
@@ -1535,11 +1535,11 @@ musical :
                   ((-2) (make-smaller-markup (make-bold-markup "2")))
                   (else "bla")))))))))
 
-\new Voice \relative c' {
+\new Voice \relative {
   \stemUp
   \set autoBeaming = ##f
   \time 2/4
-  <d f g>4
+  <d' f g>4
   \once \override NoteHead.stencil = #note-head::brew-ez-stencil
   \once \override NoteHead.font-size = #-7
   \once \override NoteHead.font-family = #'sans
@@ -1764,9 +1764,9 @@ LilyPond, version @version{} :
 @lilypond[staffsize=14.3,line-width=15.9\cm]
 global = {\key g \minor}
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
   r2 r8 d16 ees f8 ees16 d
   ees4 ~ 16 d c bes a4 r8 ees'16 d
@@ -1775,9 +1775,9 @@ partI = \relative c' {
   a2 g\fermata \bar "|."
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
   r8 fis16 g a8 g16 fis g2 ~
   2 r8 d' ees g,
@@ -1785,16 +1785,16 @@ partII = \relative c' {
   bes4. <g b>8 <a c> r <d, g> r
   <ees g>4 <d fis> d2
 }
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
   bes2 ~ 8 b16 a g8 a16 b
   c4 r r2
   R1
   r8 d ees g, fis4 g
   r8 a16 bes c8 bes16 a b2
 }
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
index aa6552d23782e6b6c79e173ee3e0cd863c7596ac..541b744b495f11aee56f7f18f2f4a0ff436d3bca 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Gilles Thibault
@@ -60,7 +60,7 @@ Les blocs de code LilyPond ressemblent à
 En voici un exemple basique :
 
 @lilypond[verbatim,quote]
-ritpp = #(define-event-function (parser location) ()
+ritpp = #(define-event-function () ()
   #{ ^"rit." \pp #}
 )
 
@@ -132,7 +132,7 @@ 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{arg1} @var{arg2}@dots{})
      (@var{type1?} @var{type2?}@dots{})
    @var{corps})
 @end example
@@ -304,7 +304,7 @@ valeur spéciale -- la seule valeur qui satisfasse au prédicat
 @example
 noPointAndClick =
 #(define-void-function
-     (parser location)
+     ()
      ()
    (ly:set-option 'point-and-click #f))
 @dots{}
@@ -359,7 +359,7 @@ Une fonction musicale se définit ainsi :
 @example
 fonction =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2}@dots{})
+     (@var{arg1} @var{arg2}@dots{})
      (@var{type1?} @var{type2?}@dots{})
    @var{corps})
 @end example
@@ -449,7 +449,7 @@ l'aide d'une variable @code{pair?} :
 @example
 manualBeam =
 #(define-music-function
-     (parser location beg-end)
+     (beg-end)
      (pair?)
    #@{
      \once \override Beam.positions = #beg-end
@@ -467,7 +467,7 @@ pourra alors être inclus dans l'expression musicale :
 @lilypond[quote,verbatim,ragged-right]
 manualBeam =
 #(define-music-function
-     (parser location beg end)
+     (beg end)
      (number? number?)
    #{
      \once \override Beam.positions = #(cons beg end)
@@ -519,7 +519,7 @@ auraient retrouvé leurs valeurs par défaut à la sortie de la fonction.
 
 @example
 crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
   (_i "Create cross-staff stems")
   #@{
   \temporary \override Stem.cross-staff = #cross-staff-connect
@@ -541,7 +541,7 @@ une part de programmation en Scheme.
 @lilypond[quote,verbatim,ragged-right]
 AltOn =
 #(define-music-function
-     (parser location mag)
+     (mag)
      (number?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -567,7 +567,7 @@ s'applique à une expression musicale :
 @lilypond[quote,verbatim,ragged-right]
 withAlt =
 #(define-music-function
-     (parser location mag music)
+     (mag music)
      (number? ly:music?)
    #{
      \override Stem.length = #(* 7.0 mag)
@@ -602,7 +602,7 @@ fonction sans argument comme ici,
 @example
 displayBarNum =
 #(define-music-function
-     (parser location)
+     ()
      ()
    (if (eq? #t (ly:get-option 'display-bar-numbers))
        #@{ \once \override Score.BarNumber.break-visibility = ##f #@}
@@ -649,7 +649,7 @@ dans @code{c'\pp}.  Voici de quoi vous permettre de mentionner n'importe
 quelle nuance :
 
 @lilypond[quote,verbatim,ragged-right]
-dyn=#(define-event-function (parser location arg) (markup?)
+dyn=#(define-event-function (arg) (markup?)
          (make-dynamic-script arg))
 \relative { c'\dyn pfsss }
 @end lilypond
@@ -1362,7 +1362,7 @@ comment @code{ly:context-pushpop-property} est utilisé à la fois pour un
 @lilypond[quote,verbatim]
 desaturate =
 #(define-music-function
-   (parser location music) (ly:music?)
+   (music) (ly:music?)
    #{
      \applyContext
      #(lambda (context)
@@ -1380,11 +1380,11 @@ desaturate =
         (for-each revert-color '(NoteHead Stem Beam)))
    #})
 
-\relative g' {
+\relative {
   \override NoteHead.color = #darkblue
   \override Stem.color = #darkblue
   \override Beam.color = #darkblue
-  g8 a b c
+  g'8 a b c
   \desaturate { d c b a }
   g b d b g2
 }
@@ -1498,11 +1498,11 @@ et dans le fichier @file{define-grobs.scm} --, pourra accéder à la
 valeur usuelle de la propriété :
 
 @example
-\relative c'' @{
+\relative @{
   \override Flag.X-offset = #(lambda (flag)
     (let ((default (ly:flag::calc-x-offset flag)))
       (* default 4.0)))
-  c4. d8 a4. g8
+  c''4. d8 a4. g8
 @}
 @end example
 
@@ -1634,10 +1634,10 @@ rehaussé.
               (eq? (car (last-pair siblings)) grob))
          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
 
-\relative c'' {
+\relative {
   \override Tie.after-line-breaking =
   #my-callback
-  c1 ~ \break
+  c''1 ~ \break
   c2 ~ 2
 }
 @end lilypond
index 24ff0388919202e4dae8c4db30b240d07a78e9ff..bfb39c7f45228cbe80cb8598f5db7528efeee280 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Jean-Charles Malahieude
 
@@ -1472,7 +1472,7 @@ 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?)
+doubleSlur = #(define-music-function (note) (ly:music?)
          "Renvoie : @{ note ( note ) @}.
          `note' est censé être une note unique."
          (let ((note2 (ly:music-deep-copy note)))
@@ -1656,7 +1656,7 @@ fonction musicale, à l'aide d'un peu d'enrobage syntaxique et mention du
 type de son unique argument « réel ».
 
 @example
-ajouteAccent = #(define-music-function (parser location note-event)
+ajouteAccent = #(define-music-function (note-event)
                                         (ly:music?)
   "Ajoute un accent (ArticulationEvent) aux articulations de `note-event',
   qui est censé être une expression NoteEvent."
@@ -1699,7 +1699,7 @@ TODO Find a simple example
 
 @ignore
 @lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
+padText = #(define-music-function (padding) (number?)
 #{
   \once \override TextScript.padding = #padding
 #})
@@ -1722,16 +1722,16 @@ We can use it to create new commands:
 
 
 @lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
+tempoPadded = #(define-music-function (padding tempotext)
   (number? markup?)
 #{
   \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
@@ -1741,7 +1741,7 @@ tempoPadded = #(define-music-function (parser location padding tempotext)
 Even music expressions can be passed in:
 
 @lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+pattern = #(define-music-function (x y) (ly:music? ly:music?)
 #{
   #x e8 a b $y b a e
 #})
index 6f2c9a4f5cca3fe6240185b62371c6ebdc470dda..e0535279b1ffb0704401106095839dee13b0b454 100644 (file)
@@ -1278,11 +1278,11 @@ sur l'alignement de paroles à une mélodie.
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1334,20 +1334,20 @@ L'exemple suivant est extrait de @emph{Judas Macchabée} de Händel.
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let flee -- cy flocks the hills a -- dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let flee -- cy flocks the hills a -- dorn,
index 7431c26ac5effa4711c6c81faebde47043f0a294..9cc87c7e92992257d448b6adebd90e4feb21ec05 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: John Mandereau
@@ -865,12 +865,12 @@ que vous ne comprendriez pas.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1037,18 +1037,18 @@ annotations, liaisons de prolongation ou de phrasé, et sur les nuances.
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1068,10 +1068,10 @@ maintenant dans un seul contexte de voix, ce qui permet d'ajouter une
 liaison de phrasé à l'ensemble.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % The following notes are homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1131,11 +1131,11 @@ silences invisibles pour sauter les moments où il n'y a rien dans cette
 voix.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e2) |
+    c'16^( d e f g4 f e | d2 e2) |
   }
   % Initiate second voice
   \new Voice {
@@ -1237,10 +1237,10 @@ la voix en question.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1782,13 +1782,13 @@ contexte n'a pas été spécifié.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c4 c
+    c''4 c
  }
-  \new Staff \relative c' {
+  \new Staff \relative {
   \set instrumentName = #"Alto"  % Wrong!
-  d4 d
+  d'4 d
  }
 >>
 @end lilypond
@@ -1832,9 +1832,9 @@ Voici comment supprimer les bécarres supplémentaires pour une portée :
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1847,9 +1847,9 @@ et pour toutes les portées :
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2092,15 +2092,15 @@ tessiture de cette voix sera calculée :
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2117,15 +2117,15 @@ les notes de toutes les voix de la portée :
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2451,18 +2451,18 @@ bassMusic = \relative {
 }
 bassWords = \sopranoWords
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2687,17 +2687,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3101,9 +3101,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \centerText
     c4.^"hi there!" d8 e f g d |
     c4.\fthenp b8 c4 c-. |
@@ -3124,9 +3124,9 @@ précédent sans aucun identificateur.  C'est beaucoup plus laborieux à
 lire, et particulièrement la dernière ligne.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.self-alignment-X = #CENTER
     c4.^"hi there!" d8 e f g d |
     c4._\markup @{
@@ -3147,7 +3147,7 @@ pouvez les voir comme des fonctions.
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
index 64c60dce10ddbbd3f01af61112162dd267ba9ea5..7b0689a51f8fd58af7d9ffbfe97b1a93f15b6f88 100644 (file)
@@ -464,10 +464,10 @@ La commande @code{\tempo} permet de stipuler aussi bien le @emph{tempo}
 que le métronome :
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
index 627a2537198cd4cdc4c3ce8f46ba8ffaa3e71e0d..cf8aa9ef60e70c4cfeadae28cf19f8d8b2022c2e 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
 @c Translation checkers: Jean-Charles Malahieude, John Mandereau
@@ -4148,10 +4148,10 @@ Nous montrons ci-dessous le résultat des deux méthodes :
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4170,10 +4170,10 @@ Nous montrons ci-dessous le résultat des deux méthodes :
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4318,13 +4318,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4349,7 +4349,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4368,9 +4368,9 @@ sous @file{musique.ly}).
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4386,13 +4386,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4420,7 +4420,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4450,7 +4450,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4471,9 +4471,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4498,7 +4498,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4529,7 +4529,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4546,9 +4546,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4775,7 +4775,7 @@ fonction de leur position sur la portée.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index 55b134d753c5a4e636d6c31c4f0d9dab86edc0be..ff00eb1b9973948f9ab0295868490a6c1338c878 100644 (file)
@@ -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]
-\relative c'' {
-  \[ g c, a' f d' \]
+\relative {
+  \[ g' c, a' f d' \]
   a g f
   \[ e f a g \]
 }
@@ -389,9 +389,9 @@ lancer dans la saisie de votre chant comme ci-après :
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new MensuralVoice = "discantus" \relative c'' {
+    \new MensuralVoice = "discantus" \relative {
       \hide Score.BarNumber {
-        c1\melisma bes a g\melismaEnd
+        c''1\melisma bes a g\melismaEnd
         f\breve
         \[ f1\melisma a c\breve d\melismaEnd \]
         c\longa
@@ -931,10 +931,10 @@ peut tout à fait faire l'objet d'un raccourci :
 
 @lilypond[quote,verbatim]
 ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
   \new MensuralVoice  {
     \once \set suggestAccidentals = ##t
-    bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+    bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
   }
 }
 @end lilypond
@@ -1001,13 +1001,13 @@ Par exemple,
 @c @end example
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \relative c' {
+  \relative {
     \set Score.timing = ##f
     \set Score.defaultBarType = "-"
     \override NoteHead.style = #'petrucci
     \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
-    \[ c'\maxima g \]
+    \[ c''\maxima g \]
     \[ d\longa
        \override NoteHead.ligature-flexa = ##t
        \once \override NoteHead.flexa-width = #3.2
@@ -1029,13 +1029,13 @@ Si on ne remplace pas le @code{Ligature_bracket_engraver}
 par le @code{Mensural_ligature_engraver}, on obtient
 
 @lilypond[quote,ragged-right]
-\relative c' {
+\relative {
   \set Score.timing = ##f
   \set Score.defaultBarType = "-"
   \override NoteHead.style = #'petrucci
   \override Staff.TimeSignature.style = #'mensural
   \clef "petrucci-g"
-  \[ c'\maxima g \]
+  \[ c''\maxima g \]
   \[ d\longa
      \override NoteHead.ligature-flexa = ##t
      \once \override NoteHead.flexa-width = #3.2
@@ -1677,9 +1677,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ b \]
+    \[ b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1691,9 +1691,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ \cavum b \]
+    \[ \cavum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1705,9 +1705,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ \linea b \]
+    \[ \linea b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1720,9 +1720,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Auctum Ascendens
-    \[ \auctum \ascendens b \]
+    \[ \auctum \ascendens b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1735,9 +1735,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Auctum Descendens
-    \[ \auctum \descendens b \]
+    \[ \auctum \descendens b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1750,9 +1750,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum
-    \[ \inclinatum b \]
+    \[ \inclinatum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1765,9 +1765,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum Auctum
-    \[ \inclinatum \auctum b \]
+    \[ \inclinatum \auctum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1780,9 +1780,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum Parvum
-    \[ \inclinatum \deminutum b \]
+    \[ \inclinatum \deminutum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1795,9 +1795,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Virga
-    \[ \virga b \]
+    \[ \virga b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1816,9 +1816,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis vel Flexa
-    \[ b \flexa g \]
+    \[ b' \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1831,9 +1831,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis Aucta Descendens
-    \[ b \flexa \auctum \descendens g \]
+    \[ b' \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1845,9 +1845,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis Aucta Ascendens
-    \[ b \flexa \auctum \ascendens g \]
+    \[ b' \flexa \auctum \ascendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1860,9 +1860,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Cephalicus
-    \[ b \flexa \deminutum g \]
+    \[ b' \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1875,9 +1875,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Podatus vel Pes
-    \[ g \pes b \]
+    \[ g' \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1890,9 +1890,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Descendens
-    \[ g \pes \auctum \descendens b \]
+    \[ g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1905,9 +1905,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Ascendens
-    \[ g \pes \auctum \ascendens b \]
+    \[ g' \pes \auctum \ascendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1920,9 +1920,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Epiphonus
-    \[ g \pes \deminutum b \]
+    \[ g' \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1935,9 +1935,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Initio Debilis
-    \[ \deminutum g \pes b \]
+    \[ \deminutum g' \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1950,9 +1950,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Descendens Initio Debilis
-    \[ \deminutum g \pes \auctum \descendens b \]
+    \[ \deminutum g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1972,9 +1972,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus
-    \[ a \pes b \flexa g \]
+    \[ a' \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1987,9 +1987,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Auctus Descendens
-    \[ a \pes b \flexa \auctum \descendens g \]
+    \[ a' \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2002,9 +2002,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Deminutus
-    \[ a \pes b \flexa \deminutum g \]
+    \[ a' \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2017,9 +2017,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Initio Debilis
-    \[ \deminutum a \pes b \flexa g \]
+    \[ \deminutum a' \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2032,9 +2032,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Auctus Descendens Initio Debilis
-    \[ \deminutum a \pes b \flexa \auctum \descendens g \]
+    \[ \deminutum a' \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2047,9 +2047,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Deminutus Initio Debilis
-    \[ \deminutum a \pes b \flexa \deminutum g \]
+    \[ \deminutum a' \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2062,9 +2062,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus
-    \[ a \flexa g \pes b \]
+    \[ a' \flexa g \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2077,9 +2077,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus Auctus Descendens
-    \[ a \flexa g \pes \auctum \descendens b \]
+    \[ a' \flexa g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2092,9 +2092,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus Deminutus
-    \[ a \flexa g \pes \deminutum b \]
+    \[ a' \flexa g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2107,9 +2107,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus
-    \[ \virga b \inclinatum a \inclinatum g \]
+    \[ \virga b' \inclinatum a \inclinatum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2122,9 +2122,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus Auctus
-    \[ \virga b \inclinatum a \inclinatum \auctum g \]
+    \[ \virga b' \inclinatum a \inclinatum \auctum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2137,9 +2137,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus Deminutus
-    \[ \virga b \inclinatum a \inclinatum \deminutum g \]
+    \[ \virga b' \inclinatum a \inclinatum \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2152,9 +2152,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus
-    \[ g \pes a \virga b \]
+    \[ g' \pes a \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2167,9 +2167,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus Auctus Descendens
-    \[ g \pes a \pes \auctum \descendens b \]
+    \[ g' \pes a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2182,9 +2182,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus Deminutus
-    \[ g \pes a \pes \deminutum b \]
+    \[ g' \pes a \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2204,9 +2204,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Quilisma
-    \[ g \pes \quilisma a \pes b \]
+    \[ g' \pes \quilisma a \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2219,9 +2219,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Quilisma Pes Auctus Descendens
-    \[ g \quilisma a \pes \auctum \descendens b \]
+    \[ g' \quilisma a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2234,9 +2234,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Oriscus
-    \[ \oriscus b \]
+    \[ \oriscus b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2249,9 +2249,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Quassus
-    \[ \oriscus g \pes \virga b \]
+    \[ \oriscus g' \pes \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2264,9 +2264,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Quassus Auctus Descendens
-    \[ \oriscus g \pes \auctum \descendens b \]
+    \[ \oriscus g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2279,9 +2279,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Salicus
-    \[ g \oriscus a \pes \virga b \]
+    \[ g' \oriscus a \pes \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2294,9 +2294,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Salicus Auctus Descendens
-    \[ g \oriscus a \pes \auctum \descendens b \]
+    \[ g' \oriscus a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2309,9 +2309,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Stropha
-    \[ \stropha b \]
+    \[ \stropha b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2324,9 +2324,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Stropha Aucta
-    \[ \stropha \auctum b \]
+    \[ \stropha \auctum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2339,9 +2339,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Bistropha
-    \[ \stropha b \stropha b \]
+    \[ \stropha b' \stropha b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2354,9 +2354,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Tristropha
-    \[ \stropha b \stropha b \stropha b \]
+    \[ \stropha b' \stropha b \stropha b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2369,9 +2369,9 @@ LilyPond}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Trigonus
-    \[ \stropha b \stropha b \stropha a \]
+    \[ \stropha b' \stropha b \stropha a \]
   }
   \layout { \neumeDemoLayout }
 }
@@ -2873,11 +2873,11 @@ ou @code{\override Stem.length = #0} puis, en cas de besoin, recourir
 
 @lilypond[verbatim,ragged-right]
 \include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
   \clef "G_8"
   \set Score.timing = ##f
   \hide Stem
-  c\breve \hide NoteHead  c c c c c
+  c'\breve \hide NoteHead  c c c c c
   \undo \hide NoteHead
   \undo \hide Stem \stemUp c4 b4 a
   \hide Stem c2 c4  \divisioMaior
@@ -2925,10 +2925,10 @@ syllabes sous forme de @emph{markup}.  Des ajustements supplémentaires
 peuvent se réaliser avec des @qq{notes silencieuses} (@code{s}).
 
 @lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
   \time 1/4
   \override Lyrics.LyricText.X-extent  = #'(0 . 3)
-  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+  d'4 \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
   \tuplet 3/2 { g8 f d } e f g a g4
 }
index 7a9a7ea31cc4f5004109f075d9f00c32ec7dafde..981580044b6439544b6bb7c5092a079f0f9a7c3d 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Gilles Thibault
@@ -4907,7 +4907,7 @@ forme
 @example
 fonction =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2}@dots{})
+     (@var{arg1} @var{arg2}@dots{})
      (@var{type1?} @var{type2?}@dots{})
    #@{
      @var{@dots{}musique@dots{}}
@@ -4989,7 +4989,7 @@ simplifier le réglage du décalage d'une annotation (un
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -5010,7 +5010,7 @@ fonction, y compris une expression musicale :
 @lilypond[quote,verbatim,ragged-right]
 custosNote =
 #(define-music-function
-     (parser location note)
+     (note)
      (ly:music?)
    #{
      \tweak NoteHead.stencil #ly:text-interface::print
@@ -5028,16 +5028,16 @@ Une fonction de substitution peut traiter plusieurs arguments :
 @lilypond[quote,verbatim,ragged-right]
 tempoPadded =
 #(define-music-function
-     (parser location padding tempotext)
+     (padding tempotext)
      (number? markup?)
    #{
      \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
index b1c6fd3194060fbf69baaabf1252ff8a3bdc85c6..1e53df13d9c77d795092e95572c472c4f4882400 100644 (file)
@@ -838,11 +838,11 @@ spécifie quant à elle l'espace de temps entre chaque ligne.
 
 \score {
   \new ChoirStaff <<
-    \new Staff \relative c'' {
+    \new Staff \relative {
       \stemUp
-      c'4. d8 e8 f g4
+      c'''4. d8 e8 f g4
     }
-    \new Staff \relative {
+    \new Staff \relative {
     %% centre les lignes guides verticalement
       \clef bass
       \stemDown
index 8d914209d1155a7a20365f865d9f3a0cf2abfaa7..e8a87929dad056711bc08fc2da45725853aeeb89 100644 (file)
@@ -330,9 +330,9 @@ ligne, la note est répétée, entre parenthèses.  Il en va de même pour la
 seconde alternative d'une répétition.
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~
   }
   \alternative {
@@ -370,9 +370,9 @@ La commande @code{\hideSplitTiedTabNotes} permet d'éviter d'imprimer
 ces cases entre parenthèses.
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~ }
   \alternative {
     { g4 f2. }
@@ -1755,10 +1755,10 @@ Des têtes de note spéciales peuvent servir à indiquer les notes
 détaillés grâce à des indications textuelles.
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \clef "treble_8"
   \override Staff.NoteHead.style = #'harmonic-mixed
-  d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+  d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
 
index 5df2e56e4ad7d906c30e187a1e90d99f39a28bb7..73bed790755396f731b606b42ceaab6492a3e3be 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Jean-Charles Malahieude, Valentin Villenave
 
@@ -679,10 +679,10 @@ pour définir les champs @code{piece} et @code{opus}, comme ici :
 }
 
 \score {
-  \new Staff \relative g, {
+  \new Staff \relative {
     \clef bass
     \key g \major
-    \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+    \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
     \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
   }
   \header {
@@ -691,7 +691,7 @@ pour définir les champs @code{piece} et @code{opus}, comme ici :
 }
 
 \score {
-  \new Staff \relative {
+  \new Staff \relative {
     \clef bass
     \key g \major
     \partial 16 b16 |
@@ -1876,7 +1876,7 @@ le but de mentionner les actes dans la table des matières d'un opéra :
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 @end verbatim
 
@@ -1891,7 +1891,7 @@ tocAct =
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 
 \book {
index cd65516aa678c12e9edc8ad2bc0a8c0bfc109c77..2142ff86a7d13e359b3dd37f2e7b9e6a55ad3304 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Frédéric Chiasson, Jean-Charles Malahieude
 @c Translation checkers: Valentin Villenave, Jean-Charles Malahieude
@@ -2814,7 +2814,7 @@ L'astuce suivante, qui définit temporairement le recours au style
 @code{forget}, permet d'obtenir quelque chose de présentable.
 
 @lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
   \accidentalStyle forget
   #music
   \accidentalStyle modern
index ec21efd088e3c39e0730c2b3815791ddcb7af63c..6ee7c4f4e440b6abc67fb89396ab345a82ed2900 100644 (file)
@@ -1133,9 +1133,9 @@ la commande @code{\time} à l'aide d'un premier argument :
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \relative c' {
+    \relative {
       \time #'(2 2 3) 7/8
-      \repeat unfold 7 { c8 } |
+      \repeat unfold 7 { c'8 } |
       \time #'(3 2 2) 7/8
       \repeat unfold 7 { c8 } |
     }
@@ -1196,8 +1196,8 @@ métrique :
 
 @lilypond[quote,verbatim]
 \score{
-  \relative c' {
-    \repeat unfold 8 { c8 } |
+  \relative {
+    \repeat unfold 8 { c'8 } |
     \overrideTimeSignatureSettings
       4/4        % timeSignatureFraction
       1/4        % baseMomentFraction
@@ -1755,9 +1755,9 @@ laquelle le @emph{dernier} nombre indique le @qq{dénominateur} de la
 métrique, les précédents représentent le @qq{numérateur}.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((2 2 2 8))
-  \repeat unfold 6 c8 \repeat unfold 12 c16
+  \repeat unfold 6 c'8 \repeat unfold 12 c16
 }
 @end lilypond
 
@@ -1766,14 +1766,14 @@ entendu, les ligatures automatiques s'ajusteront aux différentes
 valeurs.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((1 4) (3 8))
-  \repeat unfold 5 c8 \repeat unfold 10 c16
+  \repeat unfold 5 c'8 \repeat unfold 10 c16
 }
 
-\relative c' {
+\relative {
   \compoundMeter #'((1 2 3 8) (3 4))
-  \repeat unfold 12 c8
+  \repeat unfold 12 c'8
 }
 @end lilypond
 
@@ -2203,10 +2203,10 @@ supérieur s'appliqueront.
       }
     }
     \new Voice = two {
-      \relative c' {
+      \relative {
         \voiceTwo
         \set Voice.beatStructure = #'(1 3 3)
-        f8 f f f f f f
+        f'8 f f f f f f
       }
     }
   >>
@@ -3715,9 +3715,9 @@ troisième mesure, nous avançons de 1/8, en assignant 5/8 à
 La barre de mesure suivante tombera donc à 9/8 et non à 5/8.
 
 @lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
   \set Timing.measureLength = #(ly:make-moment 5/4)
-  c1 c4 |
+  c'1 c4 |
   c1 c4 |
   c4 c
   \set Timing.measurePosition = #(ly:make-moment 5/8)
index 7d39a4ea7eeb2aa9af0bb6ff97553bc24080a02d..0e7a5ae69dbf81ad24a4f70576042c1118060490 100644 (file)
@@ -208,9 +208,9 @@ supplémentaire qui recense les @var{types d'événement} à répéter et qui
 seraient absents de l'accord construit par un @code{q}.
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \chordRepeats #'(articulation-event)
-  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
   q2 c, |
 }
 @end lilypond
index 60b80a2cc2fa6275df8b1585519e3cc4dee5e49f..da114094753c5baa986846b21804d073ecbdde24 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Frédéric Chiasson, Jean-Charles Malahieude
 
@@ -2090,7 +2090,7 @@ lowerCaseChords = \with {
 }
 labelContext =
 #(define-music-function
-     (parser location context)
+     (context)
      (string?)
      #{ s1*0^\markup { \upright {\typewriter #context } } #})
 
index c4b01a5995dbbacf265e6f1df1a14e1ce03eedf0..c97da09417afb3f75964ba2640258424e596b70a 100644 (file)
@@ -958,14 +958,14 @@ d'augmenter les retraits -- @emph{indent} -- au sein du bloc
 reportez-vous au chapitre @ref{Variables d'indentation et de décalage}.
 
 @lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
   <<
     \new Staff \with {
       instrumentName = #"Alto Flute in G"
       shortInstrumentName = #"Flt."
     }
     {
-      f2 g4 f \break
+      f''2 g4 f \break
       g4 f g2
     }
     \new Staff \with {
index de83049cffea8136ac60c0fe0f5902548c696f0b..440239a1f90f1b91a35f10981263bb58d6cca9e5 100644 (file)
@@ -260,13 +260,13 @@ circonstances, une mélodie associée, grâce aux commandes
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e4 d c2
+       s2 s4. f'8 e4 d c2
     }
   >>
 
@@ -486,13 +486,13 @@ Voici un exemple de cette manière de procéder :
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e8 d4. c2
+       s2 s4. f'8 e8 d4. c2
     }
   >>
 % takes durations and alignment from notes in "one" initially
@@ -1440,8 +1440,8 @@ note quelle qu'en soit la durée.}
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b }
+        \relative {
+          \repeat volta 2 { b'4 b }
           \alternative { { b b } { b c } }
           c4 c
         }
@@ -1486,9 +1486,9 @@ temporairement la détection automatique de mélismes et insérer des
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
+        \relative {
           \set melismaBusyProperties = #'()
-          \repeat volta 2 { b4 b ~}
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           \unset melismaBusyProperties
           c4 c
@@ -1523,8 +1523,8 @@ insérer des blancs :
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1556,8 +1556,8 @@ doivent être insérées manuellement :
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1630,11 +1630,11 @@ d'une fois sur l'autre :
 \score {
   <<
     \new Voice = "melody" {
-      \relative c' {
+      \relative {
         <<
           {
             \voiceOne
-            e4 e8 e
+            e'4 e8 e
           }
           \new Voice = "splitpart" {
             \voiceTwo
@@ -1912,9 +1912,9 @@ laquelle elle s'appliquera :
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
@@ -2009,9 +2009,9 @@ modifie la propriété @code{associatedVoice}.  Dans cet exemple,
 
 @lilypond[verbatim,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
         \voiceOne
@@ -2907,8 +2907,8 @@ Voici une illustration de tout ce que nous venons de voir :
 @c manually adjusted to suit the imposed line length.  -td
 
 @lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
-  \repeat unfold 3 { a4 a a a }
+music = \relative {
+  \repeat unfold 3 { a'4 a a a }
 }
 
 dialogue = \lyricmode {
index 348b97e6468ec0c49a9de205059f6861dfdfb85d..a7ce1e5f3f4abd17c744fc810d925189c03ea5e2 100644 (file)
@@ -216,9 +216,9 @@ l'aspect du demi-bémol dans l'armure.
 
 @lilypond[quote,verbatim]
 \include "arabic.ly"
-\relative do' {
+\relative {
   \set Staff.extraNatural = ##f
-  dod dob dosd \dwn dob dobsb dodsd do do
+  dod' dob dosd \dwn dob dobsb dodsd do do
 }
 @end lilypond
 
@@ -422,13 +422,13 @@ intermédiaires et des modes inhabituels traités dans ce chapitre.
 @lilypond[quote,verbatim]
 \include "arabic.ly"
 \score {
-  \relative re' {
+  \relative {
     \set Staff.extraNatural = ##f
     \set Staff.autoBeaming = ##f
     \key re \bayati
     \time 10/8
 
-    re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+    re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
     re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
     fa4 fa16 [misb] misb8. [re16] re8 [misb] re  [do] sisb
     do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
index 618ec88a10af2a3b141028d3525f7b57342f0b9a..223f9606e1935e02e4312e0057fafddf60acb168 100644 (file)
@@ -371,22 +371,22 @@ global = {
     \new Staff \with {
       \magnifyStaff #2/3
     }
-    \relative c' {
+    \relative {
       \global
       \set Staff.instrumentName = #"Violin"
-      c8.(\f^> b16 c d) ees8.(^> d16 c b)
+      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
       g8.(^> b16 c ees) g8-.^> r r
       R2.
     }
     \new PianoStaff <<
       \set PianoStaff.instrumentName = #"Piano"
-      \new Staff \relative c' {
+      \new Staff \relative {
         \global
         s2.
-        s4. s8 r8 r16 <c f aes c>
+        s4. s8 r8 r16 <c' f aes c>
         <c f aes c>4.^> <c ees g>8 r r
       }
-      \new Staff \relative {
+      \new Staff \relative {
         \global
         \clef "bass"
         <<
@@ -464,7 +464,7 @@ How do we actually make formatting decisions?  In other words, which
 of the three configurations should we choose for the following slur?
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[( f] g[ a b d,)] r4
@@ -504,7 +504,7 @@ has given each one a score in @q{ugly points}.  The first example gets
 15.39 points for grazing one of the noteheads:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(1.5 . 1)
   e8[(_"15.39" f] g[ a b d,)] r4
@@ -518,7 +518,7 @@ side, plus another 2 points because the slur ascends while the melody
 descends for a total of 13.08 ugly points:
 
 @lilypond
-\relative {
+\relative {
   \clef bass
   \once \override Slur.positions = #'(2 . 3)
   e8[(_"13.08" f] g[ a b d,)] r4
@@ -682,24 +682,24 @@ measures 28--29, as shown here with Finale first and LilyPond second:
 @lilypond[staffsize=19.5,line-width=14\cm]
 global = { \key g \minor }
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
 }
 
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
 }
 
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
@@ -987,16 +987,16 @@ consider a more complicated musical example:
 
 \new PianoStaff <<
   \new Staff = "RH" <<
-    \new Voice = "I" \relative c''' {
+    \new Voice = "I" \relative {
       \time 3/4
       \voiceOne
-      \tuplet 7/6 { g8 g g g g g g }
+      \tuplet 7/6 { g''8 g g g g g g }
       \oneVoice
       r4 <b,, fis' g bes> r4\fermata
     }
-    \new Voice = "II" \relative c' {
+    \new Voice = "II" \relative {
       \voiceTwo
-      c4
+      c'4
       \tuplet 5/4 {
         <c ees>8 f g
         \change Staff = "LH" \oneVoice
@@ -1273,8 +1273,8 @@ chord has all directions up (right).
 
 @lilypond[quote,ragged-right]
 \score {
-  \relative c' {
-    \stemDown <e g b>4_>-\arpeggio
+  \relative {
+    \stemDown <e' g b>4_>-\arpeggio
     \override Arpeggio.direction = #RIGHT
     \stemUp <e g b>4^>-\arpeggio
   }
@@ -1343,11 +1343,11 @@ note head symbol is changed during the music fragment.
                   ((-2) (make-smaller-markup (make-bold-markup "2")))
                   (else "bla")))))))))
 
-\new Voice \relative c' {
+\new Voice \relative {
   \stemUp
   \set autoBeaming = ##f
   \time 2/4
-  <d f g>4
+  <d' f g>4
   \once \override NoteHead.stencil = #note-head::brew-ez-stencil
   \once \override NoteHead.font-size = #-7
   \once \override NoteHead.font-family = #'sans
@@ -1562,9 +1562,9 @@ LilyPond, version @version{}:
 @lilypond[staffsize=14.3,line-width=15.9\cm]
 global = {\key g \minor}
 
-partI = \relative c' {
+partI = \relative {
   \voiceOne
-  fis8 d' ees g, fis4 g
+  fis'8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
   r2 r8 d16 ees f8 ees16 d
   ees4 ~ 16 d c bes a4 r8 ees'16 d
@@ -1573,9 +1573,9 @@ partI = \relative c' {
   a2 g\fermata \bar "|."
 }
 
-partII = \relative c' {
+partII = \relative {
   \voiceTwo
-  d4 r4 r8 d'16 c bes8 c16 d
+  d'4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
   r8 fis16 g a8 g16 fis g2 ~
   2 r8 d' ees g,
@@ -1583,16 +1583,16 @@ partII = \relative c' {
   bes4. <g b>8 <a c> r <d, g> r
   <ees g>4 <d fis> d2
 }
-partIII = \relative c' {
+partIII = \relative {
   \voiceOne
-  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
   bes2 ~ 8 b16 a g8 a16 b
   c4 r r2
   R1
   r8 d ees g, fis4 g
   r8 a16 bes c8 bes16 a b2
 }
-partIV = \relative {
+partIV = \relative {
   \voiceTwo
   d4 r r2
   r8 d ees g, fis4 a
index 860b5bebbe8d7e4e2b71d9097726a836a9d8aa84..b87158f52904661c7b2785eab498173c853959b3 100644 (file)
@@ -987,11 +987,11 @@ megtanultunk a dallam és szöveg összekapcsolásáról:
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 g4 g a8( b) g4 g4
+    d'4 g4 g a8( b) g4 g4
     b8( c) d4 d e4 c2
   }
   \addlyrics {
@@ -1042,20 +1042,20 @@ mely Händel @notation{Júdás Makkabeus} c. oratóriumából való:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 c([ bes]) a a([ g]) f f'4. b, c4.~ 4
+    c''8 c([ bes]) a a([ g]) f f'4. b, c4.~ 4
   }
   \addlyrics {
     Let flee -- cy flocks the hills a -- dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 r4. r4 c8 a'([ g]) f f([ e]) d e([ d]) c bes'4
+    r8 r4. r4 c'8 a'([ g]) f f([ e]) d e([ d]) c bes'4
   }
   \addlyrics {
     Let flee -- cy flocks the hills a -- dorn,
index fe5a218ca35720125070937bd70bdfac4124adbd..ab557f518fac2d49764162c07dbb14e74db22daf 100644 (file)
@@ -11,7 +11,7 @@
 @c Translators: Griechisch Erika, Harmath Dénes
 
 @c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.19.21"
+@c \version "2.19.22"
 @node Alapfogalmak
 @chapter Alapfogalmak
 @translationof Fundamental concepts
@@ -774,12 +774,12 @@ Leginkább viszont akkor van szükségünk többszörös szólamokra, amikor a h
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % 1. szólam
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % 2. szólam
     { \voiceTwoStyle
@@ -952,10 +952,10 @@ The red diamond-shaped notes demonstrate that the main melody is now in a single
 permitting a phrasing slur to be drawn over them.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % A következő hangok monofónok
-  c16^( d e f
+  c'16^( d e f
   % Szimultán rész három szólammal
   <<
     % Continue the main voice in parallel
@@ -1009,11 +1009,11 @@ Létrehozhatunk többszörösen beágyazott polifón szerkezetet is, és ha a sz
 A szólamokat akkor érdemes így írni, ha a zene csak egy kis része polifón. Viszont amikor az egész ötvonalas kotta nagyrésze polifón, egyszerűbb, ha többszörös szólamokat  használunk mindenütt, --  ritkított hangokkal, hogy átlépjük azokat a részeket, ahol a szólamok  üresek. Az alábbi példa ezt mutatja:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e2) |
+    c'16^( d e f g4 f e | d2 e2) |
   }
   % Initiate second voice
   \new Voice {
@@ -1094,10 +1094,10 @@ hozzárendelhetjük a szöveget a megfelelő szólamhoz.
 
 @lilypond[quote,verbatim,fragment]
 <<
-  \new Voice = "one" \relative c'' {
+  \new Voice = "one" \relative {
     \autoBeamOff
     \time 2/4
-    c4 b8. a16 g4. f8 e4 d c2
+    c''4 b8. a16 g4. f8 e4 d c2
   }
   \new Lyrics \lyricsto "one" {
     No more let sins and sor -- rows grow.
@@ -1805,13 +1805,13 @@ because we omitted the context name.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c4 c
+    c''4 c
  }
-  \new Staff \relative c' {
+  \new Staff \relative {
   \set instrumentName = #"Alto"  % Wrong!
-  d4 d
+  d'4 d
  }
 >>
 @end lilypond
@@ -1853,9 +1853,9 @@ So this turns off extra naturals in one staff:
   \new Staff \relative {
     ais'4 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    ais4 aes
+    ais'4 aes
   }
 >>
 @end lilypond
@@ -1868,9 +1868,9 @@ and this turns them off in all staves:
   \new Staff \relative {
     ais'4 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    ais4 aes
+    ais'4 aes
   }
 >>
 @end lilypond
@@ -2097,14 +2097,14 @@ range from that voice only:
   \new Voice \with {
     \consists "Ambitus_engraver"
   }
-  \relative c'' {
+  \relative {
     \voiceOne
-    c a b g
+    c'' a b g
   }
   \new Voice
-  \relative c' {
+  \relative {
     \voiceTwo
-    c e d f
+    c' e d f
   }
 >>
 @end lilypond
@@ -2120,14 +2120,14 @@ the notes in all the voices on that staff:
   }
   <<
   \new Voice
-  \relative c'' {
+  \relative {
     \voiceOne
-    c a b g
+    c'' a b g
   }
   \new Voice
-  \relative c' {
+  \relative {
     \voiceTwo
-    c e d f
+    c' e d f
   }
 >>
 @end lilypond
@@ -2435,17 +2435,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4
+  r4 <a' d fis>2 <a e' a>4
   <d fis d'>4. <d fis d'>8 <a d a'>2
   <g cis g'>4 <a d fis> <a cis e>2
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4
+  <d, d'>4 <d d'>2 <cis cis'>4
   <b b'>4. <b' b'>8 <fis fis'>2
   <e e'>4 <d d'> <a' a'>2
 }
@@ -2664,17 +2664,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4
+  r4 <a' d fis>2 <a e' a>4
   <d fis d'>4. <d fis d'>8 <a d a'>2
   <g cis g'>4 <a d fis> <a cis e>2
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4
+  <d, d'>4 <d d'>2 <cis cis'>4
   <b b'>4. <b' b'>8 <fis fis'>2
   <e e'>4 <d d'> <a' a'>2
 }
@@ -3007,9 +3007,9 @@ macros, or user-defined commands) for tweaks:
 dolce = \markup { \italic \bold dolce }
 padText = { \once \override TextScript.padding = #5.0 }
 fthenp=_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b
+    c''4._\dolce b8 a8 g a b
     \padText
     c4.^"hi there!" d8 e' f g d
     c,4.\fthenp b8 c4 c-.
@@ -3031,9 +3031,9 @@ variables.  It's a lot harder to read, especially
 the last line.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d
     c,4.\markup @{ \dynamic f \italic \small @{ 2nd @}
@@ -3056,7 +3056,7 @@ can think of these as functions).
 
 @lilypond[quote,verbatim,ragged-right]
 padText =
-#(define-music-function (parser location padding) (number?)
+#(define-music-function (padding) (number?)
   #{
     \once \override TextScript.padding = #padding
   #})
@@ -3161,7 +3161,7 @@ This command sets the property @code{skipBars} in the
 this option to the music above, leads to the following result
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3
index 4b353eafbcf936ead2b5f5a8b145f20c11467fc2..497ce43d0d9f484cfccf4d9a1373660861a47e9e 100644 (file)
@@ -558,8 +558,8 @@ A megoldás a @code{\repeat} és a @code{\relative} parancsok felcserélése, a
 következő módon:
 
 @lilypond[quote,verbatim]
-\relative c' {
-  \repeat unfold 2 { c d e f }
+\relative {
+  \repeat unfold 2 { c' d e f }
 }
 @end lilypond
 
index 31e68c46a110350123e8c004d142806ab4ef28d2..bdee2dba58ab96aa6ccbf35cf677aa0c5280fbc6 100644 (file)
@@ -985,7 +985,7 @@ Now run the @code{./configure} script.  To avoid complications with
 automatic font detection, add
 
 @example
---with-ncsb-dir=/opt/local/share/ghostscript/fonts
+--with-fonts-dir=/opt/local/share/ghostscript/fonts
 @end example
 
 
index 455d95375702f7956faa1a3b51d22f5758246376..fd3df5378a9e25967e815dfe848e6b56808e26f0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.22"
 
 #(define (filter-instrument instrument-name tuning-alist)
    (filter (lambda (entry)
@@ -21,7 +21,7 @@
                            pitches)))))
 
 displayInstrumentDefaultTunings =
-#(define-music-function (parser location instrument) (string?)
+#(define-music-function (instrument) (string?)
    (let* ((filtered-instruments (filter-instrument instrument defaultStringTunings))
           (display-elements (map chord-display filtered-instruments)))
      (make-music 'SequentialMusic 'elements display-elements)))
index cca61f09b9f145dc202d2b087cf50e266417e6fd..be87460f2f8d719d84881c52031f3fc8b841a394 100644 (file)
@@ -52,10 +52,10 @@ sampleMusic = \relative {
   }
 }
 
-\relative c''
+\relative
 {
   \set Staff.instrumentName = #"Gonv override"
-  c2^\trill c
+  c''2^\trill c
   \override NoteHead.font-family = #'gonville
   \override Script.font-family = #'gonville
   c^\trill c 
index 7ed10a91c5271595c7ebf9053ad803eff7bc6616..853b07179f3a6b958d851b41fcc9040bfb5e85e9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.30"
+\version "2.19.22"
 
 \header {
   texidoc ="@cindex Feta scripts
@@ -185,9 +185,9 @@ This chart shows all articulations, or scripts, that the feta font contains.
 
 
 scriptStaff =
-#(define-music-function (parser location scripts) (list?)
+#(define-music-function (scripts) (list?)
    (make-scripts-staff scripts))
 
 scriptStaffAncient =
-#(define-music-function (parser location scripts) (list?)
+#(define-music-function (scripts) (list?)
    (make-scripts-staff-ancient scripts))
index 612e60e6617e19dc6eb9e7eb61fdaadeffd50acc..15b6b39c6939d0e820ccd7c84f9bde677cca0238 100644 (file)
@@ -1206,11 +1206,11 @@ finora sull'allineamento del testo con le note.
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1263,20 +1263,20 @@ più semplice, ovvero @code{\addlyrics}.  Ecco un esempio tratto dal
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index 632f9c183e8fc8c7e000e1e070cac50c95934291..339b57a64431f50bbaf7bb197d6381ffe4e359aa 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Concetti fondamentali
 @chapter Concetti fondamentali
@@ -837,12 +837,12 @@ ignora quel che non capisci.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Prima voce
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Seconda voce
     { \voiceTwoStyle
@@ -1003,18 +1003,18 @@ markup, legature di valore, legature di portamento, e dinamica:
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1033,10 +1033,10 @@ principale si trova ora nel contesto di una voce singola, e questo fa
 sì che sia possibile disegnare una legatura di frase sopra di esse.
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % This section is homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1096,11 +1096,11 @@ usando le note spaziatrici per saltare le parti in cui una delle voci è muta,
 come nel seguente esempio:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1195,10 +1195,10 @@ il nome assegnato alla voce.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1730,13 +1730,13 @@ perché abbiamo omesso il nome del contesto.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
  }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
  }
 >>
 @end lilypond
@@ -1776,9 +1776,9 @@ Quindi in questo modo si disattiva il bequadro su un rigo:
   \new Staff \relative {
     aeses'2 aes
  }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
  }
 >>
 @end lilypond
@@ -1791,9 +1791,9 @@ e in questo modo si disattiva in tutti i righi:
   \new Staff \relative {
     aeses'2 aes
  }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
  }
 >>
 @end lilypond
@@ -2026,15 +2026,15 @@ di quella voce soltanto:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2050,15 +2050,15 @@ l'intervallo di tutte le note in tutte le voci di quel pentagramma:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2381,18 +2381,18 @@ bassMusic = \relative {
 }
 bassWords = \sopranoWords
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2616,17 +2616,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3027,9 +3027,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \padText
     c4.^"hi there!" d8 e' f g d |
     c,4.\fthenp b8 c4 c-. |
@@ -3051,9 +3051,9 @@ precedente senza alcuna variabile.  È molto difficile da leggere,
 soprattutto l'ultima linea.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
@@ -3075,7 +3075,7 @@ immaginare come una funzione).
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -3183,7 +3183,7 @@ Questo comando imposta la proprietà @code{skipBars} nel contesto
 opzione alla musica precedente, si arriva al seguente risultato
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index ef99b85a440abb6043dcda425e8a06fd0db4b324..76ce41f29777c790d1df2d9011dc0144fafefa26 100644 (file)
@@ -415,10 +415,10 @@ L' @notation{indicazione di tempo} e l' @notation{indicazione metronomica} si
 impostano col comando @code{\tempo}:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -467,11 +467,11 @@ La @notation{chiave} si imposta con il comando @code{\clef}:
 Ecco un piccolo esempio che mostra tutti questi elementi insieme:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r
index 6794a54e96fe3bf9de2c272cfb367aecc1929764..bcf6188fa914a6e9f0e49e30940d053b5c1be3fc 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Modifica dell'output
 @chapter Modifica dell'output
@@ -4044,10 +4044,10 @@ il modo migliore è impostare la proprietà @code{stencil} su
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Indicazione di tempo visibile
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Indicazione di tempo invisibile per allungare la fermata nel MIDI
     \tempo 4=80
@@ -4067,10 +4067,10 @@ il modo migliore è impostare la proprietà @code{stencil} su
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Indicazione di tempo visibile
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \omit Score.MetronomeMark
     % Indicazione di tempo invisibile per allungare la fermata nel MIDI
     \tempo 4=80
@@ -4217,13 +4217,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4248,7 +4248,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4264,9 +4264,9 @@ Ora modifichiamo la musica (e salviamo questo file come @file{music.ly}).
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4282,13 +4282,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4314,7 +4314,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4344,7 +4344,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4365,9 +4365,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4391,7 +4391,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4422,7 +4422,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4439,9 +4439,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4658,7 +4658,7 @@ note in base alla loro posizione sul rigo.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Fa sì che il colore sia preso dalla procedura color-notehead
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index 3fdc1c3be8883b8c8a072ed960b0ad69c843738f..0a84b9eedf8fea1cbd6993eb18a6095b4c0e4bda 100644 (file)
@@ -794,11 +794,11 @@ Le linee  si estendono a partire dalle linee centrali di ciascun rigo.
 
 \score {
   \new ChoirStaff <<
-    \new Staff \relative c'' {
+    \new Staff \relative {
       \stemUp
-      c4. d8 e8 f g4
+      c''4. d8 e8 f g4
     }
-    \new Staff \relative {
+    \new Staff \relative {
       \clef bass
       \stemDown
       c4 g' f e
index f64bed56759c1d7cb99914d0e384be58d921c85f..125f27454cc3c6c7ea78305ccb2d8bcd02e2fa15 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Federico Bruni
 @c Translation checkers: Luca Rossetto Casel
@@ -2840,7 +2840,7 @@ Si può usare il seguente espediente: si definisce una funzione che
 imposti localmente lo stile delle alterazioni su @code{forget}:
 
 @lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
   \accidentalStyle forget
   #music
   \accidentalStyle modern
index 8af419ab2b13d34017714168f6676612f9819559..ff76867748683eb690ebb4f96b002f7980a16906 100644 (file)
@@ -1107,9 +1107,9 @@ Si può sovrascrivere il valore predefinito di @code{beatStructure} nel comando
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \relative c' {
+    \relative {
       \time #'(2 2 3) 7/8
-      \repeat unfold 7 { c8 } |
+      \repeat unfold 7 { c'8 } |
       \time #'(3 2 2) 7/8
       \repeat unfold 7 { c8 } |
     }
@@ -1172,8 +1172,8 @@ essere ripristinati ai valori originali:
 
 @lilypond[quote,verbatim]
 \score{
-  \relative c' {
-    \repeat unfold 8 { c8 } |
+  \relative {
+    \repeat unfold 8 { c'8 } |
     \overrideTimeSignatureSettings
       4/4        % timeSignatureFraction
       1/4        % baseMomentFraction
@@ -1720,9 +1720,9 @@ 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' {
+\relative {
   \compoundMeter #'((2 2 2 8))
-  \repeat unfold 6 c8 \repeat unfold 12 c16
+  \repeat unfold 6 c'8 \repeat unfold 12 c16
 }
 @end lilypond
 
@@ -1731,14 +1731,14 @@ di disposizione automatica delle travature varieranno a seconda di questi
 valori.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((1 4) (3 8))
-  \repeat unfold 5 c8 \repeat unfold 10 c16
+  \repeat unfold 5 c'8 \repeat unfold 10 c16
 }
 
-\relative c' {
+\relative {
   \compoundMeter #'((1 2 3 8) (3 4))
-  \repeat unfold 12 c8
+  \repeat unfold 12 c'8
 }
 @end lilypond
 
@@ -2160,10 +2160,10 @@ contiene.
       }
     }
     \new Voice = two {
-      \relative c' {
+      \relative {
         \voiceTwo
         \set Voice.beatStructure = #'(1 3 3)
-        f8 f f f f f f
+        f'8 f f f f f f
       }
     }
   >>
@@ -3679,9 +3679,9 @@ 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' {
+\new Voice \relative {
   \set Timing.measureLength = #(ly:make-moment 5/4)
-  c1 c4 |
+  c'1 c4 |
   c1 c4 |
   c4 c
   \set Timing.measurePosition = #(ly:make-moment 5/8)
index cd1fd6d4655b560df05fe4e93f4ee7cc5888d760..bc7761b76fbb58cc0109039969ae318948873d68 100644 (file)
@@ -201,9 +201,9 @@ 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'' {
+\relative {
   \chordRepeats #'(articulation-event)
-  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
   q2 c, |
 }
 @end lilypond
index 5cd0ad36a2eb8eb7c414ceedf29ecfcbe8f117aa..87462d74c183a4d15cdee12b2cac3c75703516da 100644 (file)
@@ -942,14 +942,14 @@ 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'' {
+\relative {
   <<
     \new Staff \with {
       instrumentName = #"Alto Flute in G"
       shortInstrumentName = #"Flt."
     }
     {
-      f2 g4 f \break
+      f''2 g4 f \break
       g4 f g2
     }
     \new Staff \with {
index 711292570c1446acf1d1966208c66ff481def64c..87f219a11721a1ad3b188dd2ae699486284a9430 100644 (file)
@@ -265,13 +265,13 @@ circostanze speciali) da una melodia associata, usando
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e4 d c2
+       s2 s4. f'8 e4 d c2
     }
   >>
 
@@ -493,13 +493,13 @@ Ecco un esempio che ne dimostra l'utilizzo:
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e8 d4. c2
+       s2 s4. f'8 e8 d4. c2
     }
   >>
 % inizialmente prende le note e le durate da "one"
@@ -1436,8 +1436,8 @@ numero che segue.}
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-  \relative c'' {
-    \repeat volta 2 { b4 b }
+  \relative {
+    \repeat volta 2 { b'4 b }
     \alternative { { b b } { b c } }
     c4 c
   }
@@ -1483,9 +1483,9 @@ e inserire dei salti manuali.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-  \relative c'' {
+  \relative {
     \set melismaBusyProperties = #'()
-    \repeat volta 2 { b4 b ~}
+    \repeat volta 2 { b'4 b ~}
     \alternative { { b b } { b \repeatTie c } }
     \unset melismaBusyProperties
     c4 c
@@ -1520,8 +1520,8 @@ comandi @code{\skip}, come si è visto prima.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-  \relative c'' {
-    \repeat volta 2 { b4 b ~}
+  \relative {
+    \repeat volta 2 { b'4 b ~}
     \alternative { { b b } { b \repeatTie c } }
     c4 c
   }
@@ -1553,8 +1553,8 @@ un finale alternativo, questi vanno inseriti a mano.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-  \relative c'' {
-    \repeat volta 2 { b4 b ~}
+  \relative {
+    \repeat volta 2 { b'4 b ~}
     \alternative { { b b } { b \repeatTie c } }
     c4 c
   }
@@ -1625,11 +1625,11 @@ contesti specifici:
 \score {
   <<
     \new Voice = "melody" {
-      \relative c' {
+      \relative {
   <<
     {
       \voiceOne
-      e4 e8 e
+      e'4 e8 e
     }
     \new Voice = "splitpart" {
       \voiceTwo
@@ -1897,9 +1897,9 @@ nel far sì che la voce più veloce ignori il melisma, impostando
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
@@ -1985,9 +1985,9 @@ del contesto del testo impostando la proprietà @code{associatedVoice}:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
   \voiceOne
@@ -2855,8 +2855,8 @@ Ecco un esempio che illustra come fare.
 @c manually adjusted to suit the imposed line length.  -td
 
 @lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
-  \repeat unfold 3 { a4 a a a }
+music = \relative {
+  \repeat unfold 3 { a'4 a a a }
 }
 
 dialogue = \lyricmode {
index fc4a3673e6cb449e34a093296cd8b00a66be253e..fa136f3e0b83b30edcc5bd059f8c3a98a741dd69 100644 (file)
@@ -1185,11 +1185,11 @@ song.ly:12:46: warning: barcheck failed at: 3/8
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1242,20 +1242,20 @@ song.ly:12:46: warning: barcheck failed at: 3/8
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index 9f643df1b064286e83e5e3c33e8b5e14739a0922..20a448e32be85b69000da8c20adf1a2ff59f6319 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -899,12 +899,12 @@ A フラットは付点 4 分音符であり、F は 4 分音符、D フラッ
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     { % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1066,18 +1066,18 @@ LilyPond は音符の水平方向の位置を調節するための手段をい
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1096,10 +1096,10 @@ LilyPond は音符の水平方向の位置を調節するための手段をい
 示しています。
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' {
+\new Staff \relative {
   \voiceOneStyle
   % This section is homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1155,11 +1155,11 @@ LilyPond は音符の水平方向の位置を調節するための手段をい
 ボイスが無音の場所を飛ばすには以下のように空白音符を使用します:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1254,10 +1254,10 @@ LilyPond は音符の水平方向の位置を調節するための手段をい
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1799,13 +1799,13 @@ LilyPond によって作成された楽譜上にあるすべての記号は
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
   }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
   }
 >>
 @end lilypond
@@ -1850,9 +1850,9 @@ LilyPond 入力ファイルに対する特別なサポートを持つ@c
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1865,9 +1865,9 @@ LilyPond 入力ファイルに対する特別なサポートを持つ@c
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2114,15 +2114,15 @@ like this:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2138,15 +2138,15 @@ like this:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2479,18 +2479,18 @@ bassMusic = \relative {
 }
 bassWords = \sopranoWords
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2704,17 +2704,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3121,9 +3121,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \padText
     c4.^"hi there!" d8 e' f g d |
     c,4.\fthenp b8 c4 c-. |
@@ -3145,9 +3145,9 @@ violin = \relative c'' {
 とても読み難く、特に最後の行が読み難いです。
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
@@ -3170,7 +3170,7 @@ LilyPond は非静的な置き換えも処理できます (それらを関数と
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -3281,7 +3281,7 @@ R2*3
 以下のような結果になります:
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index 412245209d26440c1a726a9fc718ba3c47cc5f4d..8e82778674663835b2511b0e525af61f2d2b2386 100644 (file)
@@ -431,10 +431,10 @@ A, G, F である場合は B の下に置かれます。
 @code{\tempo} コマンドでセットすることができます:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -482,11 +482,11 @@ A, G, F である場合は B の下に置かれます。
 以上の要素をすべて集めたちょっとした例をお見せします:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r
index cf353f0231ff2b4f66d5299f22b324d8cda374b1..90fb878dd96d8c1d2f43be06f01a36080991e537 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -3892,10 +3892,10 @@ lhMusic = \relative {
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -3914,10 +3914,10 @@ lhMusic = \relative {
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4070,13 +4070,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4104,7 +4104,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4122,9 +4122,9 @@ inst =
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4143,13 +4143,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4180,7 +4180,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4213,7 +4213,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4234,9 +4234,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4265,7 +4265,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4299,7 +4299,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4316,9 +4316,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4539,7 +4539,7 @@ Scheme プロシージャをセットすることができます。@c
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index 29e027aac868c28cf6a253ea3cd0f23d0486380b..d43301eef93e522b1544d6239a20038ee505ae10 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -4562,7 +4562,7 @@ smartSquareLineCircleSpace = {
 @example
 function =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{type1?} @var{type2?} @dots{})
    #@{
      @var{@dots{}music@dots{}}
@@ -4638,7 +4638,7 @@ symbol?
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = $padding
@@ -4658,7 +4658,7 @@ padText =
 @lilypond[quote,verbatim,ragged-right]
 custosNote =
 #(define-music-function
-     (parser location note)
+     (note)
      (ly:music?)
    #{
      \tweak NoteHead.stencil #ly:text-interface::print
@@ -4676,16 +4676,16 @@ custosNote =
 @lilypond[quote,verbatim,ragged-right]
 tempoPadded =
 #(define-music-function
-     (parser location padding tempotext)
+     (padding tempotext)
      (number? markup?)
    #{
      \once \override Score.MetronomeMark.padding = $padding
      \tempo \markup { \bold #tempotext }
    #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
index 4e0d3e85cf27a4601d8635dea84c7208916d7e77..10e0a139ca896ec5a47998c175875c3f7143eec6 100644 (file)
@@ -640,11 +640,11 @@ altered:
 
 \score {
   \new ChoirStaff <<
-    \new Staff \relative c'' {
+    \new Staff \relative {
       \stemUp
-      c4. d8 e8 f g4
+      c''4. d8 e8 f g4
     }
-    \new Staff \relative {
+    \new Staff \relative {
       \clef bass
       \stemDown
       c4 g' f e
index d1ff2dd3e87c6779fb00779cfe7ebfcf7ca049f2..b52b2a018a100a7bb540a25d73261615c1ac28e2 100644 (file)
@@ -297,9 +297,9 @@ guitar = \relative {
 繰り返しの差し替え部分でも同様です。
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~
   }
   \alternative {
@@ -337,9 +337,9 @@ ties = \relative c' {
 括弧付きフレット番号の譜刻をキャンセルします:
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~ }
   \alternative {
     { g4 f2. }
@@ -1731,10 +1731,10 @@ e16 b g d
 通常、ハーモニクスにはテキスト マークアップによる説明も付け加えます。
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \clef "treble_8"
   \override Staff.NoteHead.style = #'harmonic-mixed
-  d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+  d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
 
index 887f5d5ea31a7fb2b2159a4527f73f0ffdd7ba5e..431b62b6e5811eb5a27eb28ef160ec0a88652035 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 
 @c Translators: Yoshiki Sawada
@@ -596,10 +596,10 @@ book が単一の score しか持たない場合、@c
 }
 
 \score {
-  \new Staff \relative g, {
+  \new Staff \relative {
     \clef bass
     \key g \major
-    \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+    \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
     \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
   }
   \header {
@@ -608,7 +608,7 @@ book が単一の score しか持たない場合、@c
 }
 
 \score {
-  \new Staff \relative {
+  \new Staff \relative {
     \clef bass
     \key g \major
     \partial 16 b16 |
@@ -1656,7 +1656,7 @@ book のページ数が 10 から 99 までの範囲であるのなら、ゲー
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 @end verbatim
 
@@ -1671,7 +1671,7 @@ tocAct =
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 
 \book {
index 8b7097676c0ed01a1ffd1e7fe7a6971cce7ee00c..dbf6789c952d549e9be8e6cecad283de55a8245f 100644 (file)
@@ -6,7 +6,7 @@
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -2676,7 +2676,7 @@ musicB = {
 局部的に臨時記号スタイルを @code{forget} に変更する関数を定義します:
 
 @lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
   \accidentalStyle forget
   #music
   \accidentalStyle modern
index 9241b923aa5bd089c0827ea94a16a87c5dbebf97..3aa374d61e69c4386fb900d0b865ce4c0913321d 100644 (file)
@@ -1164,8 +1164,8 @@ c c c c
 
 @lilypond[quote,verbatim]
 \score{
-  \relative c' {
-    \repeat unfold 8 { c8 } |
+  \relative {
+    \repeat unfold 8 { c'8 } |
     \overrideTimeSignatureSettings
       4/4        % timeSignatureFraction
       1/4        % baseMomentFraction
@@ -1716,9 +1716,9 @@ c8 c c
 リストの @emph{最後の} 数字が拍子記号の分母になります。
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((2 2 2 8))
-  \repeat unfold 6 c8 \repeat unfold 12 c16
+  \repeat unfold 6 c'8 \repeat unfold 12 c16
 }
 @end lilypond
 
@@ -1726,14 +1726,14 @@ c8 c c
 また、この関数で指定された値に基づいて自動連桁の設定は調節されます。
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((1 4) (3 8))
-  \repeat unfold 5 c8 \repeat unfold 10 c16
+  \repeat unfold 5 c'8 \repeat unfold 10 c16
 }
 
-\relative c' {
+\relative {
   \compoundMeter #'((1 2 3 8) (3 4))
-  \repeat unfold 12 c8
+  \repeat unfold 12 c'8
 }
 @end lilypond
 
@@ -2080,10 +2080,10 @@ c16^"(3+2)" c c c c |
       }
     }
     \new Voice = two {
-      \relative c' {
+      \relative {
         \voiceTwo
         \set Voice.beatStructure = #'(1 3 3)
-        f8 f f f f f f
+        f'8 f f f f f f
       }
     }
   >>
@@ -3527,9 +3527,9 @@ MyCadenza = \relative {
 次の小節線は 5/4 ではなく 9/8 の位置で引かれます。
 
 @lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
   \set Timing.measureLength = #(ly:make-moment 5/4)
-  c1 c4 |
+  c'1 c4 |
   c1 c4 |
   c4 c
   \set Timing.measurePosition = #(ly:make-moment 5/8)
index 866a26acdbb7bee366e400b4a4ddc63f63f56ef4..c7219f0a366895d9ce19b7ea62bd5cac3836087f 100644 (file)
@@ -196,9 +196,9 @@ q2 c, |
 これにより持ち越されるイベントはすでに和音 @code{q} に存在しているものだけです。
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \chordRepeats #'(articulation-event)
-  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
   q2 c, |
 }
 @end lilypond
index 2bd86c66ae9362ecbeb356409f13f0e4a82baf7a..215d588114aed3ee304828302ffb8a6009f8389a 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 
 @c Translators: Yoshiki Sawada
@@ -2020,7 +2020,7 @@ staffAffinityDown = \with {
 }
 labelContext =
 #(define-music-function
-     (parser location context)
+     (context)
      (string?)
    #{ s1*0^\markup { \typewriter #context } #})
 
index ab8e317c4325251b3ab779a6d6174c435eeab68c..f047434726b0a1bb56f2ac2580645ea80921c60e 100644 (file)
@@ -951,14 +951,14 @@ d4 e f g
 を参照してください。
 
 @lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
   <<
     \new Staff \with {
       instrumentName = #"Alto Flute in G"
       shortInstrumentName = #"Flt."
     }
     {
-      f2 g4 f \break
+      f''2 g4 f \break
       g4 f g2
     }
     \new Staff \with {
index 7ec5c737c9d60efe0985df00ad247389cdef74dd..3ef53042d6789ac2f3938e210061be22fd7788ec 100644 (file)
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e4 d c2
+       s2 s4. f'8 e4 d c2
     }
   >>
 
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e8 d4. c2
+       s2 s4. f'8 e8 d4. c2
     }
   >>
 % 最初は "one" の音符に揃えます
 
 @lilypond[quote,ragged-right,verbatim]
 {
-  \relative c'' { \autoBeamOff
-    r8 b c fis, fis c' b e, }
+  \relative { \autoBeamOff
+    r8 b' c fis, fis c' b e, }
   \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 }
   \addlyrics { Che~in ques -- ta~e~in quel -- l'al -- tr'on -- da }
@@ -1430,8 +1430,8 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b }
+        \relative {
+          \repeat volta 2 { b'4 b }
           \alternative { { b b } { b c } }
           c4 c
         }
@@ -1477,9 +1477,9 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
+        \relative {
           \set melismaBusyProperties = #'()
-          \repeat volta 2 { b4 b ~}
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           \unset melismaBusyProperties
           c4 c
@@ -1515,8 +1515,8 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1549,8 +1549,8 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1622,11 +1622,11 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 \score {
   <<
     \new Voice = "melody" {
-      \relative c' {
+      \relative {
         <<
           {
             \voiceOne
-            e4 e8 e
+            e'4 e8 e
           }
           \new Voice = "splitpart" {
             \voiceTwo
@@ -1789,9 +1789,9 @@ text = {
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
@@ -1879,9 +1879,9 @@ text = {
 @c KEEP LY
 @lilypond[verbatim,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
         \voiceOne
@@ -2756,8 +2756,8 @@ Lyrics コンテキストを用いると良い結果を得られます。@c
 @c manually adjusted to suit the imposed line length.  -td
 
 @lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
-  \repeat unfold 3 { a4 a a a }
+music = \relative {
+  \repeat unfold 3 { a'4 a a a }
 }
 
 dialogue = \lyricmode {
index c95d37d7904b3b8ba619c76d7348fc5764c3d4ab..265905f77cd8e7763c1c19dda5faa5d2721887e2 100644 (file)
 
 @lilypond[quote,verbatim]
 \include "arabic.ly"
-\relative do' {
+\relative {
   \set Staff.extraNatural = ##f
-  dod dob dosd \dwn dob dobsb dodsd do do
+  dod' dob dosd \dwn dob dobsb dodsd do do
 }
 @end lilypond
 
@@ -411,13 +411,13 @@ nawa は以下のように示すことができます:
 @lilypond[quote,verbatim]
 \include "arabic.ly"
 \score {
-  \relative re' {
+  \relative {
     \set Staff.extraNatural = ##f
     \set Staff.autoBeaming = ##f
     \key re \bayati
     \time 10/8
 
-    re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+    re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
     re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
     fa4 fa16 [misb] misb8. [re16] re8 [misb] re  [do] sisb
     do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
index 51a2056aa30fc80adc9478e7ab69e46f9d9dc75b..9dcca07a431eefe47b38b8ecb300ebb4e5340535 100644 (file)
@@ -1178,11 +1178,11 @@ far about aligning lyrics to notes.
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1234,20 +1234,20 @@ example from Handel's @notation{Judas Maccabæus}:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let flee -- cy flocks the hills a -- dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let flee -- cy flocks the hills a -- dorn,
@@ -1345,12 +1345,10 @@ of another variable, giving a way of shortening the input if a
 section of music is repeated many times.
 
 @lilypond[verbatim,quote]
-tripletA = \tuplet 3/2 { c,8 e g }
+tripletA = \relative { \tuplet 3/2 { c'8 e g } }
 barA = { \tripletA \tripletA \tripletA \tripletA }
 
-\relative c'' {
-  \barA \barA
-}
+{ \barA \barA }
 @end lilypond
 
 Variables may be used for many other types of objects in
@@ -1467,9 +1465,21 @@ of quote @code{'} marks.  Consider this fragment from Mozart:
 }
 @end lilypond
 
-All these quotes makes the input less readable and they are a source
-of errors.  With @code{\relative}, the previous example is much
-easier to read and type:
+@funindex \fixed
+Common octave marks can be indicated just once, using the command
+@code{\fixed} followed by a reference pitch:
+
+@lilypond[verbatim,quote]
+\fixed c'' {
+  \key a \major
+  \time 6/8
+  cis8. d16 cis8 e4 e8 |
+  b,8. cis16 b,8 d4 d8 |
+}
+@end lilypond
+
+With @code{\relative}, the previous example needs no octave marks
+because this melody moves in steps no larger than three staff positions:
 
 @lilypond[verbatim,quote]
 \relative {
@@ -1499,13 +1509,15 @@ inner relative sections are independent:
 \relative { c'4 \relative { 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:
+To use absolute mode inside of @code{\relative}, put the absolute
+music inside @code{\fixed c @{ @dots{} @}} and the absolute pitches
+will not affect the octaves of the relative music:
 
 @lilypond[verbatim,quote]
-\relative { c'4 \absolute { f'' g'' } c }
+\relative {
+  c'4 \fixed c { f'' g'' } c |
+  c4 \fixed c'' { f g } c
+}
 @end lilypond
 
 @node After the tutorial
index fb58d1f871cacdc0a6d8b19770a9a42819be645f..8f3076bc4a3580a0d2144554bc856b62feedb15d 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Fundamental concepts
 @chapter Fundamental concepts
@@ -759,7 +759,7 @@ the note immediately preceding it, or to the first note of the
 preceding chord.  So in
 
 @example
-\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @}
+\relative @{ noteA << < noteB noteC > \\ noteD >> noteE @}
 @end example
 
 @noindent
@@ -774,13 +774,13 @@ voices are widely separated, is to place a @code{\relative}
 command at the start of each voice:
 
 @example
-\relative c' @{ noteA @dots{} @}
+\relative @{ noteA @dots{} @}
 <<
-  \relative c'' @{ < noteB noteC > @dots{} @}
+  \relative @{ < noteB noteC > @dots{} @}
 \\
-  \relative g' @{ noteD @dots{} @}
+  \relative @{ noteD @dots{} @}
 >>
-\relative c' @{ noteE @dots{} @}
+\relative @{ noteE @dots{} @}
 @end example
 
 Let us finally analyze the voices in a more complex piece of music.
@@ -841,12 +841,12 @@ not understand.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1009,18 +1009,18 @@ markup, ties, slurs, and dynamics:
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1038,10 +1038,10 @@ 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' {
+\new Staff \relative {
   \voiceOneStyle
   % This section is homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1102,11 +1102,11 @@ spacing notes to step over sections where the voice is silent,
 as here:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1203,10 +1203,10 @@ name assigned to the Voice.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1310,8 +1310,8 @@ keyTime = { \key c \major \time 4/4 \partial 4 }
 
 SopMusic   = \relative { c'4 | e4. e8 g4  g    | a4   a   g  }
 AltoMusic  = \relative { c'4 | c4. c8 e4  e    | f4   f   e  }
-TenorMusic = \relative  { e4 | g4. g8 c4.   b8 | a8 b c d e4 }
-BassMusic  = \relative  { c4 | c4. c8 c4  c    | f8 g a b c4 }
+TenorMusic = \relative  e4 | g4. g8 c4.   b8 | a8 b c d e4 }
+BassMusic  = \relative  c4 | c4. c8 c4  c    | f8 g a b c4 }
 
 VerseOne =
   \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, }
@@ -1725,13 +1725,13 @@ because we omitted the context name.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
   }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
   }
 >>
 @end lilypond
@@ -1773,9 +1773,9 @@ So this turns off extra naturals in one staff:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1788,9 +1788,9 @@ and this turns them off in all staves:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2022,15 +2022,15 @@ range from that voice only:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2047,15 +2047,15 @@ the notes in all the voices on that staff:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2213,7 +2213,7 @@ section for the soprano @code{sopranoMusic} and the section for
 the cello @code{celloMusic}.  While we're doing this, let's rename
 @code{text} to be @code{sopranoLyrics}.  Remember to rename both
 instances of all these names -- both the initial definition (the
-@code{melody = \relative c' @{ } part) and the name's use (in the
+@code{melody = \relative @{ } part) and the name's use (in the
 @code{\score} section).
 
 While we're doing this, let's change the cello part's staff --
@@ -2374,18 +2374,18 @@ bassMusic = \relative {
 }
 bassWords = \sopranoWords
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2609,17 +2609,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3023,9 +3023,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \centreText
     c4.^"hi there!" d8 e f g d |
     c4.\fthenp b8 c4 c-. |
@@ -3047,9 +3047,9 @@ variables.  It's a lot harder to read, especially
 the last line.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.self-alignment-X = #CENTER
     c4.^"hi there!" d8 e f g d |
     c4._\markup @{
@@ -3071,7 +3071,7 @@ can think of these as functions).
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
index 9b82f46862c9d9d619730d6ac05fd4f7a515a8ab..a0bd4dd5cc9524511b35caafc3726fd37ffce9d6 100644 (file)
@@ -175,8 +175,10 @@ changed:
 @end lilypond
 
 A descant may be added by defining values for the variable
-@code{DescantMusic} and descant lyrics may be provided by
-defining values for @code{DescantLyrics}.
+@code{DescantMusic} and descant lyrics may be provided by defining
+values for @code{DescantLyrics}.  In a similar way a solo part may be
+added above the grouped choir staves by defining values for
+@code{SoloMusic} and @code{SoloLyrics}.
 
 @code{\header} and @code{\paper} blocks may be added as normal.
 A @code{\layout} block may be provided as the value of the
index 603b114dbe61d9f240a06add32b4dbee1e212612..c63c9baa63e19a11ca95285245d6c180d61d1279 100644 (file)
@@ -223,14 +223,14 @@ elementary piece of music, a @notation{scale}, in which every note
 is within just one staff space of the previous note.
 
 @lilypond[verbatim,quote]
-% set the starting point to middle C
 \relative {
   c' d e f
   g a b c
 }
 @end lilypond
 
-The initial note is @notation{middle C}.  Each successive note is
+The initial note is @notation{middle C}, denoted by @code{c'}.
+Each successive note is
 placed closest to the previous note -- in other words, the first
 @code{c} is the closest C to middle C.  This is followed by the
 closest D to the previous note.  We can create melodies which have
@@ -244,17 +244,14 @@ larger intervals, still using only @code{\relative} mode:
 @end lilypond
 
 @noindent
-It is not necessary for the first note of the melody to start on
-the note which specifies the starting pitch.  In the previous
-example, the first note -- the @code{d} -- is the closest D to
-middle C.
+In the previous example, the first note -- the @code{d'} with one
+@code{'}-mark -- is the D in the octave starting from middle C
+and going up to B.
 
 By adding (or removing) quotes @code{'} or commas @code{,} from
-the @q{@w{@code{@bs{}relative c'}}} command, we can change the
-starting octave:
+the first note, we can change the starting octave:
 
 @lilypond[verbatim,quote]
-% one octave above middle C
 \relative {
   e'' c a c
 }
@@ -270,7 +267,7 @@ above the B, and an A, G or F will be assumed to be below.
 
 @lilypond[verbatim,quote]
 \relative {
-  b' c  % c is 1 staff space up, so is the c above
+  b' c % c is 1 staff space up, so is the c above
   b d  % d is 2 up or 5 down, so is the d above
   b e  % e is 3 up or 4 down, so is the e above
   b a  % a is 6 up or 1 down, so is the a below
@@ -405,10 +402,10 @@ The @notation{tempo indication} and @notation{metronome mark} can be
 set with the @code{\tempo} command:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -455,11 +452,11 @@ The @notation{clef} can be set using the @code{\clef} command:
 Here is a small example showing all these elements together:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r
@@ -573,7 +570,7 @@ The braces should be surrounded by a space unless they are at the
 beginning or end of a line to avoid ambiguities.
 
 A LilyPond command followed by a simple expression in braces (such
-as @q{@w{@code{@bs{}relative c' @{ @dots{} @}}}}) also counts as a
+as @q{@w{@code{@bs{}relative @{ @dots{} @}}}}) also counts as a
 single music expression.
 
 @cindex comments
@@ -683,11 +680,13 @@ online version.
 @cindex files, tips for constructing
 
 LilyPond input must be surrounded by @code{@{ @}} marks or a
-@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}}, as we saw in
+@q{@w{@code{@bs{}relative @{ @dots{} @}}}}, as we saw in
 @ref{Working on input files}.  For the rest of this manual, most
 examples will omit this.  To replicate the examples, you may copy
-and paste the displayed input, but you @strong{must} add the
-@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} like this:
+and paste the displayed input, but to put the pitches in the same
+octaves as seen in the manual you @strong{must} add a particular
+form of @code{@bs{}relative} with an explicit starting pitch
+@code{c''} like this:
 
 @example
 \relative c'' @{
index 4300425df8647ddfeb836def59aaca385ccbb34b..e182f2c71058024cf6e7bc97d435185060b098f0 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Tweaking output
 @chapter Tweaking output
@@ -3949,10 +3949,10 @@ We show here the effect of the two methods:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -3971,10 +3971,10 @@ We show here the effect of the two methods:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -4116,13 +4116,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4146,7 +4146,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -4163,9 +4163,9 @@ Now let's modify our music (let's save this file as @file{music.ly}).
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4181,13 +4181,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4213,7 +4213,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4243,7 +4243,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4264,9 +4264,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4291,7 +4291,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4322,7 +4322,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4339,9 +4339,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4556,7 +4556,7 @@ the staff.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index 4f18456a31be0f12c445ed4ee441732a43601168..e8e6d538fbf62424cfdcf0c89a88c1c7c7809bfd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 \include "example-header.ily"
 
 \paper {
@@ -130,7 +130,7 @@ global = {
 }
 
 %%%%%%%%% MACRO FOR MAKING SLASHES THROUGH STEMS %%%%%%%%%%
-MakeSlash = #(define-music-function (parser location angle len-left len-right
+MakeSlash = #(define-music-function (angle len-left len-right
 thick y-factor offset)
                                     (number? number? number? number? number?
 pair?)
@@ -178,13 +178,13 @@ triplumWords = \lyricmode {
        si que m'ès -- tuet fai -- re _ chan -- _ _ çon
 }
 
-triplumNotes = \relative c' {
+triplumNotes = \relative {
   \clef "treble_8"
        %\set Staff.midiInstrument = "flute"
 %      \global
        \override StemTremolo.beam-thickness = #.125
        \override StemTremolo.slope = #1.0
-  f8 f4 e8 d c f f f | % 1
+  f'8 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 {     \tuplet 5/4{e16[ d e d e]} } e8 f4 | % 2
index c50f6ab342a72840a9c65f1dad4e01942eee613c..80bdcc890ac23b131c7c408a76310baec7972054 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 %\include "example-header.ily"
 
 
@@ -119,10 +119,10 @@ alt = {
 }
 
 tenor = {
-   \new Voice \relative c' {
+   \new Voice \relative {
       \global
       \repeat volta 2 {
-         c16 h c8~ 16 h c g a8 g~ 16 g as es
+         c'16 h c8~ 16 h c g a8 g~ 16 g as es
          f16 es f d g as g f es d \tieDown es8~ 16 \tieNeutral f es d
          c16 h c g' c h c c, f8. g16 as!4~
          16 g as b c h c8 d8. c16 h c d h
@@ -159,7 +159,7 @@ left = {
 pedal = {
    \global
    \clef "bass"
-   \relative {
+   \relative {
       \repeat volta 2 {
          r8 c16 d es d es8~ 16 a, h g c h c8
          r16 g as f g f g8 c,2
index 82d2f6d858e35943db3160a44fbe788224698b20..06f64306d8f7a25ce17f11633677bf837625e162 100644 (file)
@@ -15,7 +15,7 @@
 
 I = \once \override NoteColumn.ignore-collision = ##t
 
-\version "2.17.30"
+\version "2.19.21"
 
 staffPiano = \new PianoStaff {
   \set Score.timing = ##f
@@ -24,14 +24,14 @@ staffPiano = \new PianoStaff {
     \new Staff = "RH" { % Right hand
       \clef treble
       \key g \major
-      \relative c'' {
+      \relative {
        \override Staff.NoteCollision.merge-differently-headed = ##t
        <<
          {
            \override Beam.positions = #'(8 . 8)
            \hide NoteHead
            \override NoteHead.duration-log = #1
-           s1 b8[^\markup {
+           s1 b'8[^\markup {
              \override #'(baseline-skip . 0.5)
               % Add color to markup in top staff
               \column { \with-color #red \small { ^ 3 } }
index 66c6a7fbd326ad0de0536cfe777bccbeb204246d..dd3858b43c12699825a688dc1d9332ff79ffa87e 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.19.12"
+\version "2.19.22"
 
 \layout {
   indent = #0
@@ -61,7 +61,7 @@ sfpp = #(make-dynamic-script "sfpp")
 sffp = #(make-dynamic-script "sffp")
 sffpp = #(make-dynamic-script "sffpp")
 
-beam = #(define-music-function (parser location left right) (number? number?)
+beam = #(define-music-function (left right) (number? number?)
        (cond ((and (= left 0) (> right 0))
                        #{
                                \set stemRightBeamCount = #right
@@ -80,32 +80,32 @@ beam = #(define-music-function (parser location left right) (number? number?)
        )
 )
 
-fraction = #(define-music-function (parser location music) (ly:music?)
+fraction = #(define-music-function (music) (ly:music?)
        #{ \tweak text #tuplet-number::calc-fraction-text #music #})
 
-triangle = #(define-music-function (parser location music) (ly:music?)
+triangle = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(do do do do do do do) #music #})
 
-semicircle = #(define-music-function (parser location music) (ly:music?)
+semicircle = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(re re re re re re re) #music #})
 
-blackdiamond = #(define-music-function (parser location music) (ly:music?)
+blackdiamond = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(mi mi mi mi mi mi mi) #music #})
 
-tiltedtriangle = #(define-music-function (parser location music) (ly:music?)
+tiltedtriangle = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(fa fa fa fa fa fa fa) #music #})
 
-square = #(define-music-function (parser location music) (ly:music?)
+square = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(la la la la la la la) #music #})
 
-wedge = #(define-music-function (parser location music) (ly:music?)
+wedge = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(ti ti ti ti ti ti ti) #music #})
 
-harmonic = #(define-music-function (parser location music) (ly:music?)
+harmonic = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) #music #})
 
-cross = #(define-music-function (parser location music) (ly:music?)
+cross = #(define-music-function (music) (ly:music?)
        #{ \once \set shapeNoteStyles = ##(cross cross cross cross cross cross cross) #music #})
 
-white = #(define-music-function (parser location music) (ly:music?)
+white = #(define-music-function (music) (ly:music?)
        #{ \once \override NoteHead.duration-log = #1 #music #})
index bcf8fd7d2d4c7b996c5ee1c335cdd20e2f67ff95..f815744705c3847c6ea93e1fbabd8f72c65f8bfd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \include "example-header.ily"
 
 \include "predefined-guitar-fretboards.ly"
@@ -12,9 +12,9 @@ global = {
   \numericTimeSignature
 }
 
-melody = \relative c' {
+melody = \relative {
   \global
-  d4
+  d'4
   g4 b8( a) g4 fis
   e e e e
   a c8( b) a4 g
index 1579ac27bfecfe4eedc23dcdde77f7284bc91b48..371c63a0227272a0860585032cdec22e43f07af7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.30"
+\version "2.19.21"
 \include "example-header.ily"
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -30,10 +30,10 @@ global = {
   \override NoteColumn.ignore-collision = ##t
 }
 
-upperVoiceOne = \relative c'' {
+upperVoiceOne = \relative {
   \voiceOne
   \hide TupletBracket
-  <aes f'>8\([ \tuplet 5/4{g'32( aes g f g]) }
+  <aes' f'>8\([ \tuplet 5/4{g'32( aes g f g]) }
     <es aes>8[ \tuplet 5/4{<d bes'>32( c' bes aes bes]) }
     <es, aes es'>8 <d fis b d>\) | % end m. 1
   %--------------------------------------------------%
@@ -51,9 +51,9 @@ upperVoiceOne = \relative c'' {
   \ottava #1 <es es'>16 <f f'> <d d'> \appoggiatura f8 <es es'>16\)
 }
 
-upperVoiceTwo = \relative c'' {
+upperVoiceTwo = \relative {
   \voiceTwo
-  s8 c8\< <bes, f'>[ <bes aes'> c' <bes, d fis>\!]
+  s8 c''8\< <bes, f'>[ <bes aes'> c' <bes, d fis>\!]
   s32 s32_\appassmolto s8. \voiceOne r8 <bes'' es bes'>-> s4
   \override Stem.cross-staff = ##t
   \override Stem.length = #28
@@ -61,11 +61,11 @@ upperVoiceTwo = \relative c'' {
   s8 \voiceTwo g,8 aes4 s4
 }
 
-middleVoiceOne = \relative c' {
+middleVoiceOne = \relative {
   \override Stem.cross-staff = ##t
   \override Stem.length = #32
   \override Flag.style = #'no-flag
-  d!8\noBeam s8 s8 s8_\crmolto s4  % 1
+  d'!8\noBeam s8 s8 s8_\crmolto s4  % 1
   s4 <g bes\arpeggio>8[ <es' g>] \voiceOne e,8( dis16 e) | % 2
   \revert Stem.length
   \revert Stem.cross-staff
@@ -74,19 +74,19 @@ middleVoiceOne = \relative c' {
   %s2.  % beginning m. 3
 }
 
-middleVoiceTwo = \relative c' {
+middleVoiceTwo = \relative {
   s2. | % 1
   \override Stem.cross-staff = ##t
   \override Stem.length = #24
   \override Flag.style = #'no-flag
-  s2 \voiceTwo e!4 | % 2
+  s2 \voiceTwo e'!4 | % 2
   s4 \voiceTwo <bes c es f>8 <f' aes es'>16 d' <bes, f' aes c>8 <bes' fis'> | % 3
 }
 
-lowerVoiceOne = \relative c, {
+lowerVoiceOne = \relative {
   \override Staff.NoteCollision.merge-differently-headed = ##t
   \override Staff.NoteCollision.merge-differently-dotted = ##t
-  bes8 \csm \stemDown <bes'' c es>8 s2
+  bes,,8 \csm \stemDown <bes'' c es>8 s2
   \csl \stemUp
   \set subdivideBeams = ##t
   \set baseMoment = #(ly:make-moment 1/16)
@@ -97,9 +97,9 @@ lowerVoiceOne = \relative c, {
   bes,,8 \csm \stemDown <bes'' c es>8 s2
 }
 
-lowerVoiceTwo = \relative c, {
+lowerVoiceTwo = \relative {
   \voiceTwo
-  bes2.
+  bes,,2.
   \csh
   \once \override Beam.damping = #+inf.0
   <bes'' es g>8 \csl \slurUp
index 8abc60d4efbe2f2c406e9eb42110f3e86c2809a1..1d954efbc6875c025912fec0b80a9a1d324a7778 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.16"
+\version "2.19.21"
 
 #(define (glissando::calc-extra-dy grob)
    (let* ((original (ly:grob-original grob))
@@ -25,7 +25,7 @@ upper= \relative c' {
   < gis\4 d'\3 fis\2 >2 < b'\2\harmonic e\harmonic >2\fermata
 }
 
-lower= \relative {
+lower= \relative {
   \set fingeringOrientations = #'(left)
 
   \partial 4. s4.
index 5dbe0da654ff9ab1036f92438a61e17f5499cefd..bbf76e3f0a913af2a278deda4a7d534c26eb9b9e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \include "example-header.ily"
 
 #(ly:set-option 'point-and-click #f)
@@ -10,7 +10,7 @@ global = {
     \key c \major
 }
 
-cf = \relative {
+cf = \relative {
   \clef bass
   \global
   c4 c' b a |
index b86c367d34a31a0bd38faa8d1d4e636a7771cf77..ece5877047fa43789b3cf2c99c9198b42342fc11 100644 (file)
@@ -5479,7 +5479,7 @@ The female voice between soprano and contralto.
 ES: do central,
 I: do centrale,
 F: do central, do 3
-D: zweigestrichenes@w{ }c,
+D: eingestrichenes@w{ }c,
 NL: centrale@w{ }c,
 DK: enstreget@w{ }c,
 S: ettstruket@w{ }c,
index 0920e36af530e36e9edf80f19516ce7e341ce538..23be70165df1ebb65f4e995ad6d7112825147e41 100644 (file)
@@ -1185,11 +1185,11 @@ noten.  notes.
 @c but the example is long enough to avoid looking strange.
 @lilypond[verbatim,quote,noragged-right]
 <<
-  \relative c' {
+  \relative {
     \key g \major
     \time 3/4
     \partial 4
-    d4 | g4 g a8( b) | g4 g b8( c) |
+    d'4 | g4 g a8( b) | g4 g b8( c) |
     d4 d e | c2
   }
   \addlyrics {
@@ -1245,20 +1245,20 @@ notenbalk.  Hier is een voorbeeld uit Handels
 
 @lilypond[verbatim,quote]
 <<
-  \relative c'' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    c8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
+    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- | dorn, __
   }
-  \relative c' {
+  \relative {
     \key f \major
     \time 6/8
     \partial 8
-    r8 | r4. r4 c8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
+    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
   }
   \addlyrics {
     Let | flee -- cy flocks the | hills a -- dorn,
index d6bc8d04cd1e1e4c375fe294fcbc8a032656a516..5a7b90b000277214f42b3407647cc08190cefba2 100644 (file)
@@ -12,7 +12,7 @@
 @c Translation checker:
 @c Translation checker committish:
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Fundamentele concepten
 @translationof Fundamental concepts
@@ -867,12 +867,12 @@ not understand.
 @c The following should appear as music without code
 @c The three voice styles should be defined in -init
 @lilypond[quote,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
   \key aes \major
   <<
     {  % Voice one
       \voiceOneStyle
-      c2 aes4. bes8
+      c''2 aes4. bes8
     }
   \\  % Voice two
     { \voiceTwoStyle
@@ -1035,18 +1035,18 @@ markup, ties, slurs, and dynamics:
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceOne
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
 @end lilypond
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \voiceTwo
-  c4 d8~ 8 e4( f | g4 a) b-> c |
+  c'4 d8~ 8 e4( f | g4 a) b-> c |
   \oneVoice
   c,4 d8~ 8 e4( f | g4 a) b-> c |
 }
@@ -1064,10 +1064,10 @@ 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' {
+\new Staff \relative {
   \voiceOneStyle
   % This section is homophonic
-  c16^( d e f
+  c'16^( d e f
   % Start simultaneous section of three voices
   <<
     % Continue the main voice in parallel
@@ -1128,11 +1128,11 @@ spacing notes to step over sections where the voice is silent,
 as here:
 
 @lilypond[quote,ragged-right,verbatim]
-\new Staff \relative c' <<
+\new Staff \relative <<
   % Initiate first voice
   \new Voice {
     \voiceOne
-    c16^( d e f g4 f e | d2 e) |
+    c'16^( d e f g4 f e | d2 e) |
   }
   % Initiate second voice
   \new Voice {
@@ -1224,10 +1224,10 @@ name assigned to the Voice.
 @lilypond[quote,verbatim]
 <<
   \new Voice = "one" {
-    \relative c'' {
+    \relative {
       \autoBeamOff
       \time 2/4
-      c4 b8. a16 | g4. f8 | e4 d | c2 |
+      c''4 b8. a16 | g4. f8 | e4 d | c2 |
     }
   }
   \new Lyrics \lyricsto "one" {
@@ -1746,13 +1746,13 @@ because we omitted the context name.
 
 @lilypond[quote,verbatim,ragged-right]
 <<
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.instrumentName = #"Soprano"
-    c2 c
+    c''2 c
   }
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set instrumentName = #"Alto"  % Wrong!
-    d2 d
+    d'2 d
   }
 >>
 @end lilypond
@@ -1794,9 +1794,9 @@ So this turns off extra naturals in one staff:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Staff.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -1809,9 +1809,9 @@ and this turns them off in all staves:
   \new Staff \relative {
     aeses'2 aes
   }
-  \new Staff \relative c'' {
+  \new Staff \relative {
     \set Score.extraNatural = ##f
-    aeses2 aes
+    aeses'2 aes
   }
 >>
 @end lilypond
@@ -2043,15 +2043,15 @@ range from that voice only:
   \new Voice \with {
     \consists "Ambitus_engraver"
   } {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2068,15 +2068,15 @@ the notes in all the voices on that staff:
 }
 <<
   \new Voice {
-    \relative c'' {
+    \relative {
       \voiceOne
-      c4 a b g
+      c''4 a b g
     }
   }
   \new Voice {
-    \relative c' {
+    \relative {
       \voiceTwo
-      c4 e d f
+      c'4 e d f
     }
   }
 >>
@@ -2395,18 +2395,18 @@ bassMusic = \relative {
 }
 bassWords = \sopranoWords
 
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
 
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -2622,17 +2622,17 @@ bassMusic = \relative {
   r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
 }
 bassWords = \sopranoWords
-upper = \relative a' {
+upper = \relative {
   \clef "treble"
   \global
-  r4 <a d fis>2 <a e' a>4 |
+  r4 <a' d fis>2 <a e' a>4 |
   <d fis d'>4. <d fis d'>8 <a d a'>2 |
   <g cis g'>4 <a d fis> <a cis e>2 |
 }
-lower = \relative c, {
+lower = \relative {
   \clef "bass"
   \global
-  <d d'>4 <d d'>2 <cis cis'>4 |
+  <d, d'>4 <d d'>2 <cis cis'>4 |
   <b b'>4. <b' b'>8 <fis fis'>2 |
   <e e'>4 <d d'> <a' a'>2 |
 }
@@ -3036,9 +3036,9 @@ fthenp =_\markup {
   \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
 }
 
-violin = \relative c'' {
+violin = \relative {
   \repeat volta 2 {
-    c4._\dolce b8 a8 g a b |
+    c''4._\dolce b8 a8 g a b |
     \padText
     c4.^"hi there!" d8 e' f g d |
     c,4.\fthenp b8 c4 c-. |
@@ -3061,9 +3061,9 @@ variables.  It's a lot harder to read, especially
 the last line.
 
 @example
-violin = \relative c'' @{
+violin = \relative @{
   \repeat volta 2 @{
-    c4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
+    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
     \once \override TextScript.padding = #5.0
     c4.^"hi there!" d8 e' f g d |
     c,4.\markup @{
@@ -3088,7 +3088,7 @@ can think of these as functions).
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -3194,7 +3194,7 @@ This command sets the property @code{skipBars} in the
 this option to the music above, leads to the following result
 
 @lilypond[quote,ragged-right]
-\transpose f c' \relative {
+\transpose f c' \relative {
   \time 2/4
   \set Score.skipBars = ##t
   R2*3 |
index 7d32cfdd03fceb7eb8f60ff232c0a0ebc06ca8ff..0e3991a182dd6c9d3f797fd8090311cd4489b24e 100644 (file)
@@ -416,10 +416,10 @@ De @notation{tempo indication} en @notation{metronome mark} worden
 gezet met het @code{\tempo}-commando:
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \time 3/4
   \tempo "Andante"
-  a4 a a
+  a'4 a a
   \time 6/8
   \tempo 4. = 96
   a4. a
@@ -467,12 +467,12 @@ Hier is een klein voorbeeld dat al deze onderdelen samen
 toont:
 
 @lilypond[verbatim,quote]
-\relative c, {
+\relative {
   \clef "bass"
   \time 3/4
   \tempo "Andante" 4 = 120
   \clef "bass"
-  c2 e8 c'
+  c,2 e8 c'
   g'2.
   f4 e d
   c4 c, r
index 014c1c8921377b28cc3b3adae9eb04d5664b1988..530f64ed287f39362917dc84961a4973a7bded62 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Tweaking output
 @chapter Tweaking output
@@ -3680,10 +3680,10 @@ We show here the effect of the two methods:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \hide Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -3702,10 +3702,10 @@ We show here the effect of the two methods:
 
 @lilypond[quote,verbatim,ragged-right]
 \score {
-  \relative c'' {
+  \relative {
     % Visible tempo marking
     \tempo 4=120
-    a4 a a
+    a'4 a a
     \once \omit Score.MetronomeMark
     % Invisible tempo marking to lengthen fermata in MIDI
     \tempo 4=80
@@ -3849,13 +3849,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -3882,7 +3882,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 @end example
@@ -3899,9 +3899,9 @@ Now let's modify our music (let's save this file as @file{music.ly}).
 @example
 \include "definitions.ily"
 
-\relative c'' @{
+\relative @{
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -3920,13 +3920,13 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -3955,7 +3955,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -3988,7 +3988,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4009,9 +4009,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4039,7 +4039,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #@{ <>^\markup \bold \box #string #@})
 
@@ -4073,7 +4073,7 @@ mpdolce =
 
 inst =
 #(define-music-function
-     (parser location string)
+     (string)
      (string?)
    #{ <>^\markup \bold \box #string #})
 
@@ -4090,9 +4090,9 @@ inst =
   }
 }
 
-\relative c'' {
+\relative {
   \tempo 4=50
-  a4.\mpdolce d8 cis4--\glissando a |
+  a'4.\mpdolce d8 cis4--\glissando a |
   b4 bes a2 |
   \inst "Clarinet"
   cis4.\< d8 e4 fis |
@@ -4307,7 +4307,7 @@ the staff.
        ((0) (x11-color 'violet ))  ; for B
        )))
 
-\relative c' {
+\relative {
   % Arrange to obtain color from color-notehead procedure
   \override NoteHead.color = #color-notehead
   a2 b | c2 d | e2 f | g2 a |
index e8352162ee7aa3b7304993d714b1f95e9297e939..1e7f61d6b275e5e1c0743633e77076f86e7a41d5 100644 (file)
@@ -220,8 +220,8 @@ specific for this particular type of ligature.  By default, the
 above the ligature.
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c'' {
-  \[ g c, a' f d' \]
+\relative {
+  \[ g' c, a' f d' \]
   a g f
   \[ e f a g \]
 }
@@ -375,9 +375,9 @@ entering the chant, as the following excerpt demonstrates:
 @lilypond[quote,ragged-right,verbatim]
 \score {
   <<
-    \new MensuralVoice = "discantus" \relative c'' {
+    \new MensuralVoice = "discantus" \relative {
       \hide Score.BarNumber {
-        c1\melisma bes a g\melismaEnd
+        c''1\melisma bes a g\melismaEnd
         f\breve
         \[ f1\melisma a c\breve d\melismaEnd \]
         c\longa
@@ -682,7 +682,7 @@ mensural notation or coloratio sections in white mensural notation.
 Because note head style does not influence flag count, in
 this style a semiminima should be notated as @code{a8*2}, not
 @code{a4}, otherwise it will look like a minima.
-The multiplyer can be different if coloratio is used e.g. to notate
+The multiplier can be different if coloratio is used e.g. to notate
 triplets.
 
 Use @code{semipetrucci} style to draw half-colored
@@ -763,29 +763,21 @@ scope for mensural notation).
 @cindex rests, ancient
 
 Use the @code{style} property of grob @code{Rest} to select
-ancient rests.  Supported styles are @code{classical},
-@code{neomensural}, and @code{mensural}.  @code{classical} differs
-from the @code{default} style only in that the quarter rest looks
-like a horizontally mirrored 8th rest.  The @code{mensural} and
-the @code{neomensural} styles mimic the appearance of rests in
-manuscripts and prints up to the 16th century.
+ancient rests.  Supported ancient styles are
+@code{neomensural}, and @code{mensural}.
 
-The following example demonstrates the @code{mensural} and
-@code{neomensural} styles:
+The following example demonstrates these styles:
 
 @lilypond[quote,fragment,ragged-right,verbatim]
 \set Score.skipBars = ##t
-\override Rest.style = #'classical
-r\longa^"classical" r\breve r1 r2 r4 r8 r16 s \break
 \override Rest.style = #'mensural
 r\longa^"mensural" r\breve r1 r2 r4 r8 r16 s \break
 \override Rest.style = #'neomensural
 r\longa^"neomensural" r\breve r1 r2 r4 r8 r16
 @end lilypond
 
-There are no 32th and 64th rests specifically for the mensural or
-neo-mensural style.  Instead, the rests from the default style will be
-taken.
+There are no 32nd and 64th rests specifically for the mensural or
+neo-mensural styles.  Rests from the default style are used.
 
 @seealso
 Music Glossary:
@@ -811,8 +803,11 @@ using pitched rests.
 @cindex key signature
 
 The @code{mensural} style provides a sharp and a flat sign
-different from the default style.  If called for, the natural sign
-will be taken from the @code{vaticana} style.
+different from the default style.  Mensural notation rarely used a natural
+sign: instead the appropriate sharp or flat is used.  For example, a B
+natural in the key of F major would be indicated with a sharp.  However,
+if specifically called for, the natural sign is taken from the @code{vaticana}
+style.
 
 @lilypond[quote,ragged-right,staffsize=26]
 \markup {
@@ -881,10 +876,10 @@ defined as a convenient shorthand:
 
 @lilypond[quote,verbatim]
 ficta = { \once \set suggestAccidentals = ##t }
-\score { \relative c''
+\score { \relative
   \new MensuralVoice  {
     \once \set suggestAccidentals = ##t
-    bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+    bes'4 a2 g2 \ficta fis8 \ficta e! fis2 g1
   }
 }
 @end lilypond
@@ -935,31 +930,20 @@ head.  The length of a flexa can be set by the note head property
 
 For example,
 
-@c @example
-@c \set Score.timing = ##f
-@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 \]
-@c \[ c'\maxima d'\longa \]
-@c \[ e'1 a g\breve \]
-@c @end example
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \relative c' {
+  \relative {
     \set Score.timing = ##f
     \set Score.defaultBarType = "-"
     \override NoteHead.style = #'petrucci
     \override Staff.TimeSignature.style = #'mensural
     \clef "petrucci-g"
-    \[ c'\maxima g \]
-    \[ d\longa
+    \[ c''\maxima g \]
+    \[ d'\longa
        \override NoteHead.ligature-flexa = ##t
        \once \override NoteHead.flexa-width = #3.2
        c\breve f e d \]
-    \[ c'\maxima d\longa \]
+    \[ c\maxima d\longa \]
     \[ e1 a, g\breve \]
   }
   \layout {
@@ -973,22 +957,21 @@ For example,
 @end lilypond
 
 Without replacing @code{Ligature_bracket_engraver} with
-@code{Mensural_ligature_engraver}, the same music transcribes
-to the following
+@code{Mensural_ligature_engraver}, the same music looks as follows:
 
 @lilypond[quote,ragged-right]
-\relative c' {
+\relative {
   \set Score.timing = ##f
   \set Score.defaultBarType = "-"
   \override NoteHead.style = #'petrucci
   \override Staff.TimeSignature.style = #'mensural
   \clef "petrucci-g"
-  \[ c'\maxima g \]
-  \[ d\longa
+  \[ c''\maxima g \]
+  \[ d'\longa
      \override NoteHead.ligature-flexa = ##t
      \once \override NoteHead.flexa-width = #3.2
      c\breve f e d \]
-  \[ c'\maxima d\longa \]
+  \[ c\maxima d\longa \]
   \[ e1 a, g\breve \]
 }
 @end lilypond
@@ -1002,7 +985,7 @@ Notation Reference:
 @ref{Ligatures}.
 
 @knownissues
-Horizontal spacing of ligatures is poor.
+Horizontal spacing of ligatures may be poor.
 Accidentals may collide with previous notes.
 
 
@@ -1629,9 +1612,9 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ b \]
+    \[ b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1643,9 +1626,9 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ \cavum b \]
+    \[ \cavum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1657,9 +1640,9 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum
-    \[ \linea b \]
+    \[ \linea b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1672,9 +1655,9 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Auctum Ascendens
-    \[ \auctum \ascendens b \]
+    \[ \auctum \ascendens b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1687,9 +1670,9 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Auctum Descendens
-    \[ \auctum \descendens b \]
+    \[ \auctum \descendens b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1702,9 +1685,9 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum
-    \[ \inclinatum b \]
+    \[ \inclinatum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1717,9 +1700,9 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum Auctum
-    \[ \inclinatum \auctum b \]
+    \[ \inclinatum \auctum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1732,9 +1715,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Punctum Inclinatum Parvum
-    \[ \inclinatum \deminutum b \]
+    \[ \inclinatum \deminutum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1747,9 +1730,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Virga
-    \[ \virga b \]
+    \[ \virga b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1768,9 +1751,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis vel Flexa
-    \[ b \flexa g \]
+    \[ b' \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1784,9 +1767,9 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis Aucta Descendens
-    \[ b \flexa \auctum \descendens g \]
+    \[ b' \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1799,9 +1782,9 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Clivis Aucta Ascendens
-    \[ b \flexa \auctum \ascendens g \]
+    \[ b' \flexa \auctum \ascendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1814,9 +1797,9 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Cephalicus
-    \[ b \flexa \deminutum g \]
+    \[ b' \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1829,9 +1812,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Podatus vel Pes
-    \[ g \pes b \]
+    \[ g' \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1844,9 +1827,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Descendens
-    \[ g \pes \auctum \descendens b \]
+    \[ g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1859,9 +1842,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Ascendens
-    \[ g \pes \auctum \ascendens b \]
+    \[ g' \pes \auctum \ascendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1874,9 +1857,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Epiphonus
-    \[ g \pes \deminutum b \]
+    \[ g' \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1889,9 +1872,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Initio Debilis
-    \[ \deminutum g \pes b \]
+    \[ \deminutum g' \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1904,9 +1887,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Auctus Descendens Initio Debilis
-    \[ \deminutum g \pes \auctum \descendens b \]
+    \[ \deminutum g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1926,9 +1909,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus
-    \[ a \pes b \flexa g \]
+    \[ a' \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1941,9 +1924,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Auctus Descendens
-    \[ a \pes b \flexa \auctum \descendens g \]
+    \[ a' \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1956,9 +1939,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Deminutus
-    \[ a \pes b \flexa \deminutum g \]
+    \[ a' \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1971,9 +1954,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Initio Debilis
-    \[ \deminutum a \pes b \flexa g \]
+    \[ \deminutum a' \pes b \flexa g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -1986,9 +1969,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Auctus Descendens Initio Debilis
-    \[ \deminutum a \pes b \flexa \auctum \descendens g \]
+    \[ \deminutum a' \pes b \flexa \auctum \descendens g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2001,9 +1984,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Torculus Deminutus Initio Debilis
-    \[ \deminutum a \pes b \flexa \deminutum g \]
+    \[ \deminutum a' \pes b \flexa \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2016,9 +1999,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus
-    \[ a \flexa g \pes b \]
+    \[ a' \flexa g \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2031,9 +2014,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus Auctus Descendens
-    \[ a \flexa g \pes \auctum \descendens b \]
+    \[ a' \flexa g \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2046,9 +2029,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Porrectus Deminutus
-    \[ a \flexa g \pes \deminutum b \]
+    \[ a' \flexa g \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2061,9 +2044,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus
-    \[ \virga b \inclinatum a \inclinatum g \]
+    \[ \virga b' \inclinatum a \inclinatum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2076,9 +2059,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus Auctus
-    \[ \virga b \inclinatum a \inclinatum \auctum g \]
+    \[ \virga b' \inclinatum a \inclinatum \auctum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2091,9 +2074,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Climacus Deminutus
-    \[ \virga b \inclinatum a \inclinatum \deminutum g \]
+    \[ \virga b' \inclinatum a \inclinatum \deminutum g \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2106,9 +2089,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus
-    \[ g \pes a \virga b \]
+    \[ g' \pes a \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2121,9 +2104,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus Auctus Descendens
-    \[ g \pes a \pes \auctum \descendens b \]
+    \[ g' \pes a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2136,9 +2119,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Scandicus Deminutus
-    \[ g \pes a \pes \deminutum b \]
+    \[ g' \pes a \pes \deminutum b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2158,9 +2141,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Quilisma
-    \[ g \pes \quilisma a \pes b \]
+    \[ g' \pes \quilisma a \pes b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2173,9 +2156,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Quilisma Pes Auctus Descendens
-    \[ g \quilisma a \pes \auctum \descendens b \]
+    \[ g' \quilisma a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2188,9 +2171,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Oriscus
-    \[ \oriscus b \]
+    \[ \oriscus b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2203,9 +2186,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Quassus
-    \[ \oriscus g \pes \virga b \]
+    \[ \oriscus g' \pes \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2218,9 +2201,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Pes Quassus Auctus Descendens
-    \[ \oriscus g \pes \auctum \descendens b \]
+    \[ \oriscus g' \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2233,9 +2216,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Salicus
-    \[ g \oriscus a \pes \virga b \]
+    \[ g' \oriscus a \pes \virga b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2248,9 +2231,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Salicus Auctus Descendens
-    \[ g \oriscus a \pes \auctum \descendens b \]
+    \[ g' \oriscus a \pes \auctum \descendens b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2263,9 +2246,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Stropha
-    \[ \stropha b \]
+    \[ \stropha b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2278,9 +2261,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Stropha Aucta
-    \[ \stropha \auctum b \]
+    \[ \stropha \auctum b' \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2293,9 +2276,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Bistropha
-    \[ \stropha b \stropha b \]
+    \[ \stropha b' \stropha b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2308,9 +2291,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Tristropha
-    \[ \stropha b \stropha b \stropha b \]
+    \[ \stropha b' \stropha b \stropha b \]
   }
 \layout { \neumeDemoLayout }}
 @end lilypond
@@ -2323,9 +2306,9 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \relative c'' {
+  \relative {
     % Trigonus
-    \[ \stropha b \stropha b \stropha a \]
+    \[ \stropha b' \stropha b \stropha a \]
   }
   \layout { \neumeDemoLayout }
 }
@@ -2800,11 +2783,11 @@ when needed with the corresponding @code{\undo \hide Stem}.
 
 @lilypond[verbatim,ragged-right]
 \include "gregorian.ly"
-chant = \relative c' {
+chant = \relative {
   \clef "G_8"
   \set Score.timing = ##f
   \hide Stem
-  c\breve \hide NoteHead  c c c c c
+  c'\breve \hide NoteHead  c c c c c
   \undo \hide NoteHead
   \undo \hide Stem \stemUp c4 b4 a
   \hide Stem c2 c4  \divisioMaior
@@ -2853,10 +2836,10 @@ adjustments are necessary, this can be easily done with
 @code{s} @q{notes}.
 
 @lilypond[verbatim,quote]
-spiritus = \relative c' {
+spiritus = \relative {
   \time 1/4
   \override Lyrics.LyricText.X-extent  = #'(0 . 3)
-  d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
+  d'4 \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
   \tuplet 3/2 { g8 f d } e f g a g4
 }
@@ -2894,9 +2877,8 @@ spirLyr = \lyricmode {
 @node Ancient and modern from one source
 @unnumberedsubsubsec Ancient and modern from one source
 
-@c TODO Add text
-@c Here among others the snippets about reducing note length
-TBC
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly}
 
 @c @seealso
 @c ... and reference to other sections ...
index 7b974fbbb67eed6907a9e7bb46e9756aadb34d85..6b9c7410f5d3d23fc51cde33c77ceb56cb076844 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node Changing defaults
 @chapter Changing defaults
@@ -4573,9 +4573,12 @@ the accidentals.  In the second measure, with unpure-pure containers,
 the spacing engine knows the width of the note heads and avoids the
 collision by lengthening the line accordingly.
 
-Usually for simple calculations nearly-identical functions for both the
-@q{unpure} and @q{pure} parts can be used, by only changing the number
-of arguments passed to, and the scope of, the function.
+Usually for simple calculations nearly-identical functions for
+both the @q{unpure} and @q{pure} parts can be used, by only
+changing the number of arguments passed to, and the scope of, the
+function.  This use case is frequent enough that
+@code{ly:make-unpure-pure-container} constructs such a second
+function by default when called with only one function argument.
 
 @warning{If a function is labeled as @q{pure} and it turns out not to
 be, the results can be unexpected.}
@@ -4607,7 +4610,7 @@ code is easy.  The general form of these functions is
 @example
 function =
 #(define-music-function
-     (parser location @var{arg1} @var{arg2} @dots{})
+     (@var{arg1} @var{arg2} @dots{})
      (@var{type1?} @var{type2?} @dots{})
    #@{
      @var{@dots{}music@dots{}}
@@ -4633,13 +4636,8 @@ reference arguments
 (eg. @samp{#arg1}).
 @end multitable
 
-The @code{parser} and @code{location} arguments are mandatory, and
-are used in some advanced situations as described in the
-@q{Extending} manual (see @rextend{Music functions}).  For
-substitution functions, just be sure to include them.
-
-The list of type predicates is also required.  Some of the most
-common type predicates used in music functions are:
+The list of type predicates is required.  Some of the most common
+type predicates used in music functions are:
 
 @example
 boolean?
@@ -4685,7 +4683,7 @@ setting the padding of a TextScript:
 @lilypond[quote,verbatim,ragged-right]
 padText =
 #(define-music-function
-     (parser location padding)
+     (padding)
      (number?)
    #{
      \once \override TextScript.padding = #padding
@@ -4706,7 +4704,7 @@ as notes for arguments to music functions:
 @lilypond[quote,verbatim,ragged-right]
 custosNote =
 #(define-music-function
-     (parser location note)
+     (note)
      (ly:music?)
    #{
      \tweak NoteHead.stencil #ly:text-interface::print
@@ -4724,16 +4722,16 @@ Substitution functions with multiple arguments can be defined:
 @lilypond[quote,verbatim,ragged-right]
 tempoPadded =
 #(define-music-function
-     (parser location padding tempotext)
+     (padding tempotext)
      (number? markup?)
    #{
      \once \override Score.MetronomeMark.padding = #padding
      \tempo \markup { \bold #tempotext }
    #})
 
-\relative c'' {
+\relative {
   \tempo \markup { "Low tempo" }
-  c4 d e f g1
+  c''4 d e f g1
   \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
index 4b2602b02d5c7d53e70f42a09b53e16e2f4c096b..01425135c136323cb04bccd035e21fd6a0c74b4b 100644 (file)
@@ -786,11 +786,11 @@ lines.
 
 \score {
   \new ChoirStaff <<
-    \new Staff \relative c'' {
+    \new Staff \relative {
       \stemUp
-      c4. d8 e8 f g4
+      c''4. d8 e8 f g4
     }
-    \new Staff \relative {
+    \new Staff \relative {
       \clef bass
       \stemDown
       c4 g' f e
index e3882f912d81ea5d8cfd192e6d08e16c21f4b9ed..e1ccd070a670f50d60352bf036a2fd07d1bf75f7 100644 (file)
@@ -313,9 +313,9 @@ Ties over a line break are parenthesized by default.  The same holds for
 the second alternative of a repeat.
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~
   }
   \alternative {
@@ -353,9 +353,9 @@ The command @code{\hideSplitTiedTabNotes} cancels the behavior of
 engraving fret numbers in parentheses:
 
 @lilypond[quote,ragged-right,verbatim]
-ties = \relative c' {
+ties = \relative {
   \repeat volta 2 {
-    e2. f4~
+    e'2. f4~
     2 g2~ }
   \alternative {
     { g4 f2. }
@@ -1740,10 +1740,10 @@ harmonics.  Harmonics are normally further explained with a
 text markup.
 
 @lilypond[quote,ragged-right,verbatim]
-\relative c' {
+\relative {
   \clef "treble_8"
   \override Staff.NoteHead.style = #'harmonic-mixed
-  d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
+  d'^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
 }
 @end lilypond
 
index 8e7b393177d485782ce4295eb3523687ad70396d..887f79429878e856faffccf3bcb6bf0bf8355ee2 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @node General input and output
 @chapter General input and output
@@ -643,10 +643,10 @@ suitable, as here:
 }
 
 \score {
-  \new Staff \relative g, {
+  \new Staff \relative {
     \clef bass
     \key g \major
-    \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+    \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
     \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
   }
   \header {
@@ -655,7 +655,7 @@ suitable, as here:
 }
 
 \score {
-  \new Staff \relative {
+  \new Staff \relative {
     \clef bass
     \key g \major
     \partial 16 b16 |
@@ -1763,7 +1763,7 @@ in the table of contents of an opera:
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 @end verbatim
 
@@ -1778,7 +1778,7 @@ tocAct =
 }
 
 tocAct =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    (add-toc-item! 'tocActMarkup text))
 
 \book {
index 6ea4585f74e700fab0599310830875d1c182a4e4..ffa4e33b0b30276c932f0a1c000678ea9975b45d 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 
 @node Pitches
@@ -79,25 +79,38 @@ octave.
 @lilypond[verbatim,quote]
 {
   \clef treble
-  c'4 c'' e' g
-  d''4 d' d c
+  c'4 e' g' c''
+  c'4 g b c'
   \clef bass
-  c,4 c,, e, g
-  d,,4 d, d c
+  c,4 e, g, c
+  c,4 g,, b,, c,
 }
 @end lilypond
 
-@funindex absolute
-@funindex \absolute
-Music can be marked explicitly as being in absolute octave
-notation by preceding it with @code{\absolute}:
+@funindex fixed
+@funindex \fixed
+Common octave marks can be entered just once on a reference pitch
+after @code{\fixed} placed before the music.  Pitches inside
+@code{\fixed} only need @code{'} or@tie{}@code{,} marks
+when they are above or below the octave of the reference pitch.
 
-@example
-\absolute @var{musicexpr}
-@end example
+@lilypond[verbatim,quote]
+{
+  \fixed c' {
+    \clef treble
+    c4 e g c'
+    c4 g, b, c
+  }
+  \clef bass
+  \fixed c, {
+    c4 e g c'
+    c4 g, b, c
+  }
+}
+@end lilypond
 
-will be interpreted in absolute octave entry mode regardless of
-the context it appears in.
+Pitches in the music expression following @code{\fixed} are
+unaffected by any enclosing @code{\relative}, discussed next.
 
 @seealso
 Music Glossary:
@@ -162,20 +175,20 @@ absolute octave mode.  Which choices are meaningful?
 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 @{ gis''' @dots{} @}}
+like @code{\relative c''' @{ gis' @dots{} @}}
 
 @item an octave of the first note inside
-Writing @code{\relative @{ gis''' @dots{} @}} makes it easy to
+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.
+The form @code{\relative @{ gis''' @dots{} @}}) serves
+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.
+The documentation will usually employ the last option.
 @end itemize
 
 Here is the relative mode shown in action:
@@ -210,7 +223,8 @@ large intervals:
 @end lilypond
 
 When @code{\relative} blocks are nested, the innermost
-@code{\relative} block applies.
+@code{\relative} block starts with its own reference pitch
+independently of the outer @code{\relative}.
 
 @lilypond[verbatim,quote]
 \relative {
@@ -285,9 +299,6 @@ that each interval contains.
 }
 @end lilypond
 
-One consequence of these rules is that the first note inside
-@code{@w{\relative f}} music is interpreted just the same as
-if it was written in absolute pitch mode.
 
 @seealso
 Music Glossary:
@@ -508,33 +519,33 @@ In addition to note names, accidental suffixes may
 also vary depending on the language:
 
 @quotation
-@multitable {@code{nederlands}} {-s/--sharp} {-ess/-es} {-ss/-x/--sharpsharp} {-essess/-eses}
+@multitable {@code{nederlands}} {-@code{s}/-@code{-sharp}} {-@code{ess}/-@code{es}} {-@code{ss}/-@code{x}/-@code{-sharpsharp}} {-@code{essess}/-@code{eses}}
 @headitem Language
   @tab sharp @tab flat @tab double sharp @tab double flat
 @item @code{nederlands}
-  @tab -is @tab -es @tab -isis @tab -eses
+  @tab -@code{is} @tab -@code{es} @tab -@code{isis} @tab -@code{eses}
 @item @code{catalan}
-  @tab -d/-s @tab -b @tab -dd/-ss @tab -bb
+  @tab -@code{d}/-@code{s} @tab -@code{b} @tab -@code{dd}/-@code{ss} @tab -@code{bb}
 @item @code{deutsch}
-  @tab -is @tab -es @tab -isis @tab -eses
+  @tab -@code{is} @tab -@code{es} @tab -@code{isis} @tab -@code{eses}
 @item @code{english}
-  @tab -s/--sharp @tab -f/--flat @tab -ss/-x/--sharpsharp
-    @tab -ff/--flatflat
+  @tab -@code{s}/-@code{-sharp} @tab -@code{f}/-@code{-flat} @tab -@code{ss}/-@code{x}/-@code{-sharpsharp}
+    @tab -@code{ff}/-@code{-flatflat}
 @item @code{espanol} or @code{español}
-  @tab -s @tab -b @tab -ss/-x @tab -bb
+  @tab -@code{s} @tab -@code{b} @tab -@code{ss}/-@code{x} @tab -@code{bb}
 @item @code{italiano} or @code{français}
-  @tab -d @tab -b @tab -dd @tab -bb
+  @tab -@code{d} @tab -@code{b} @tab -@code{dd} @tab -@code{bb}
 @item @code{norsk}
-  @tab -iss/-is @tab -ess/-es @tab -ississ/-isis
-    @tab -essess/-eses
+  @tab -@code{iss}/-@code{is} @tab -@code{ess}/-@code{es} @tab -@code{ississ}/-@code{isis}
+    @tab -@code{essess}/-@code{eses}
 @item @code{portugues}
-  @tab -s @tab -b @tab -ss @tab -bb
+  @tab -@code{s} @tab -@code{b} @tab -@code{ss} @tab -@code{bb}
 @item @code{suomi}
-  @tab -is @tab -es @tab -isis @tab -eses
+  @tab -@code{is} @tab -@code{es} @tab -@code{isis} @tab -@code{eses}
 @item @code{svenska}
-  @tab -iss @tab -ess @tab -ississ @tab -essess
+  @tab -@code{iss} @tab -@code{ess} @tab -@code{ississ} @tab -@code{essess}
 @item @code{vlaams}
-  @tab -k @tab -b @tab -kk @tab -bb
+  @tab -@code{k} @tab -@code{b} @tab -@code{kk} @tab -@code{bb}
 @end multitable
 @end quotation
 
@@ -2834,7 +2845,7 @@ The following work-around can be used: define a function that locally changes
 the accidental style to @code{forget}:
 
 @lilypond[verbatim,quote]
-forget = #(define-music-function (parser location music) (ly:music?) #{
+forget = #(define-music-function (music) (ly:music?) #{
   \accidentalStyle forget
   #music
   \accidentalStyle modern
index 973bbb9456417d309e18d5a239ea6608a8d6b25b..9418c122aa3d64b8aa334b0c509703956210ee89 100644 (file)
@@ -1091,9 +1091,9 @@ argument:
 @lilypond[quote,verbatim]
 \score {
   \new Staff {
-    \relative c' {
+    \relative {
       \time #'(2 2 3) 7/8
-      \repeat unfold 7 { c8 } |
+      \repeat unfold 7 { c'8 } |
       \time #'(3 2 2) 7/8
       \repeat unfold 7 { c8 } |
     }
@@ -1156,8 +1156,8 @@ to the original values:
 
 @lilypond[quote,verbatim]
 \score{
-  \relative c' {
-    \repeat unfold 8 { c8 } |
+  \relative {
+    \repeat unfold 8 { c'8 } |
     \overrideTimeSignatureSettings
       4/4        % timeSignatureFraction
       1/4        % baseMomentFraction
@@ -1703,9 +1703,9 @@ indicates the bottom number of the time signature and those that come
 before it, the top numbers.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((2 2 2 8))
-  \repeat unfold 6 c8 \repeat unfold 12 c16
+  \repeat unfold 6 c'8 \repeat unfold 12 c16
 }
 @end lilypond
 
@@ -1713,14 +1713,14 @@ More complex meters can be constructed using additional lists.  Also,
 automatic beaming settings will be adjusted depending on the values.
 
 @lilypond[quote,verbatim]
-\relative c' {
+\relative {
   \compoundMeter #'((1 4) (3 8))
-  \repeat unfold 5 c8 \repeat unfold 10 c16
+  \repeat unfold 5 c'8 \repeat unfold 10 c16
 }
 
-\relative c' {
+\relative {
   \compoundMeter #'((1 2 3 8) (3 4))
-  \repeat unfold 12 c8
+  \repeat unfold 12 c'8
 }
 @end lilypond
 
@@ -2141,10 +2141,10 @@ enclosing context will apply.
       }
     }
     \new Voice = two {
-      \relative c' {
+      \relative {
         \voiceTwo
         \set Voice.beatStructure = #'(1 3 3)
-        f8 f f f f f f
+        f'8 f f f f f f
       }
     }
   >>
@@ -3645,9 +3645,9 @@ advanced by 1/8 to 5/8, shortening that bar by 1/8.
 The next bar line then falls at 9/8 rather than 5/4.
 
 @lilypond[quote,verbatim]
-\new Voice \relative c' {
+\new Voice \relative {
   \set Timing.measureLength = #(ly:make-moment 5/4)
-  c1 c4 |
+  c'1 c4 |
   c1 c4 |
   c4 c
   \set Timing.measurePosition = #(ly:make-moment 5/8)
index 893f8222f449d0189ae354b6aae541710cf0b44b..033cd1692f959e951876c342a4ce7bff53e2d0ac 100644 (file)
@@ -184,9 +184,11 @@ However, the chord repetition symbol does not retain any dynamics,
 articulation or ornamentation within, or attached to, the previous
 chord.
 
-@lilypond[verbatim,quote,relative=2]
-<a-. c\prall e>1\sfz c'4 q2 r8 q8 |
-q2 c, |
+@lilypond[verbatim,quote]
+\relative {
+  <a'-. c\prall e>1\sfz c'4 q2 r8 q8 |
+  q2 c, |
+}
 @end lilypond
 
 To have some of them retained, the @code{\chordRepeats} function can be
@@ -195,9 +197,9 @@ be called explicitly with an extra argument specifying a list of
 present on the @code{q} chord itself.
 
 @lilypond[verbatim,quote]
-\relative c'' {
+\relative {
   \chordRepeats #'(articulation-event)
-  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
   q2 c, |
 }
 @end lilypond
@@ -214,14 +216,12 @@ In that case, the whole content of the inner @code{\relative} does not
 affect the outer one; hence the different octave entry of the final note
 in this example.
 
-@c Without \new Voice, implicit voice creation does the dumbest thing.
 @lilypond[verbatim,quote]
-\new Voice
-\relative c'' {
+\relative {
   \chordRepeats #'(articulation-event)
   \relative
   { <a'-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
-  q2 c |
+  q2 c'' |
 }
 @end lilypond
 
index f8859d04c89361b0aced38c49241f06c5ec47831..db9f9ff3c1e1e6b21364dc607e91703f55b48da6 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.22"
 
 @ignore
 GDP TODO list
@@ -1949,7 +1949,7 @@ lowerCaseChords = \with {
 }
 labelContext =
 #(define-music-function
-     (parser location context)
+     (context)
      (string?)
      #{ s1*0^\markup { \upright {\typewriter #context } } #})
 
index dbb035a58ef3a96f3da53b699309a3ce160583f9..2ad184bc1f0ac14bae2accdf878f836024113798 100644 (file)
@@ -927,14 +927,14 @@ staff group may not be centered unless the @code{indent} and
 settings, see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
 
 @lilypond[verbatim,quote,ragged-right]
-\relative c'' {
+\relative {
   <<
     \new Staff \with {
       instrumentName = #"Alto Flute in G"
       shortInstrumentName = #"Flt."
     }
     {
-      f2 g4 f \break
+      f''2 g4 f \break
       g4 f g2
     }
     \new Staff \with {
index fe6f26e880686c263088371a1af44babd1184fcb..b0f14e5c1de458e2b375b0cff5c7568e8199e67c 100644 (file)
@@ -249,13 +249,13 @@ For more details, see @ref{Automatic syllable durations}.
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e4 d c2
+       s2 s4. f'8 e4 d c2
     }
   >>
 
@@ -477,13 +477,13 @@ Here is an example demonstrating its use:
 <<
   \new Staff <<
     \time 2/4
-    \new Voice = "one" \relative c'' {
+    \new Voice = "one" \relative {
       \voiceOne
-      c4 b8. a16 g4. r8 a4 ( b ) c2
+      c''4 b8. a16 g4. r8 a4 ( b ) c2
     }
-    \new Voice = "two" \relative c' {
+    \new Voice = "two" \relative {
       \voiceTwo
-       s2 s4. f8 e8 d4. c2
+       s2 s4. f'8 e8 d4. c2
     }
   >>
 % takes durations and alignment from notes in "one" initially
@@ -1417,8 +1417,8 @@ value, irrespective of the value of the following number.}
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b }
+        \relative {
+          \repeat volta 2 { b'4 b }
           \alternative { { b b } { b c } }
           c4 c
         }
@@ -1464,9 +1464,9 @@ melismata over the volta section and insert manual skips.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
+        \relative {
           \set melismaBusyProperties = #'()
-          \repeat volta 2 { b4 b ~}
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           \unset melismaBusyProperties
           c4 c
@@ -1501,8 +1501,8 @@ be inserted manually, as before.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1534,8 +1534,8 @@ alternative sections these must be inserted manually.
     \new Staff {
       \time 2/4
       \new Voice = "melody" {
-        \relative c'' {
-          \repeat volta 2 { b4 b ~}
+        \relative {
+          \repeat volta 2 { b'4 b ~}
           \alternative { { b b } { b \repeatTie c } }
           c4 c
         }
@@ -1606,11 +1606,11 @@ attaching lyrics to those specific contexts:
 \score {
   <<
     \new Voice = "melody" {
-      \relative c' {
+      \relative {
         <<
           {
             \voiceOne
-            e4 e8 e
+            e'4 e8 e
           }
           \new Voice = "splitpart" {
             \voiceTwo
@@ -1866,9 +1866,9 @@ voice ignore the melisma.  This is done by setting
 
 @lilypond[verbatim,ragged-right,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
@@ -1955,9 +1955,9 @@ within the lyrics by setting the @code{associatedVoice} property:
 
 @lilypond[verbatim,quote]
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
         \voiceOne
@@ -2798,8 +2798,8 @@ Here is an example illustrating how this might be done.
 @c manually adjusted to suit the imposed line length.  -td
 
 @lilypond[quote,verbatim,ragged-right]
-music = \relative c'' {
-  \repeat unfold 3 { a4 a a a }
+music = \relative {
+  \repeat unfold 3 { a'4 a a a }
 }
 
 dialogue = \lyricmode {
index f7efd116e3c3b4c0cb1aed377c64e215e0bbd844..379b83246c4e46e352cbe8bc11e795c20519d191 100644 (file)
@@ -209,9 +209,9 @@ signature cannot be altered by using this method.
 
 @lilypond[quote,verbatim]
 \include "arabic.ly"
-\relative do' {
+\relative {
   \set Staff.extraNatural = ##f
-  dod dob dosd \dwn dob dobsb dodsd do do
+  dod' dob dosd \dwn dob dobsb dodsd do do
 }
 @end lilypond
 
@@ -407,13 +407,13 @@ intervals and unusual modes that are discussed in this section.
 @lilypond[quote,verbatim]
 \include "arabic.ly"
 \score {
-  \relative re' {
+  \relative {
     \set Staff.extraNatural = ##f
     \set Staff.autoBeaming = ##f
     \key re \bayati
     \time 10/8
 
-    re4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
+    re'4 re'8 re16 [misb re do] sisb [la sisb do] re4 r8
     re16 [misb do re] sisb [do] la [sisb sol8] la [sisb] do [re] misb
     fa4 fa16 [misb] misb8. [re16] re8 [misb] re  [do] sisb
     do4 sisb8 misb16 [re do sisb] la [do sisb la] la4 r8
index 7c7a7b9dbcd2f3666f839fec46b383fe895268d4..c93557a36ba615020521e3b5fb51a509dea698cb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "scheme-language"
@@ -22,7 +22,7 @@ of the music for you.
 } % begin verbatim
 
 addScript =
-#(define-music-function (parser location script music)
+#(define-music-function (script music)
    (ly:event? ly:music?)
    (map-some-music
     (lambda (mus)
index f4d790c11352c8476a6b5b9cb868f45c0b0dea81..a03e901d16899ffa01e5add125a12c3ac4b0c584 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "staff-notation, vocal-music"
@@ -27,7 +27,7 @@ can be cued, but they cannot overlap each other in time.
 
 cueWhile =
 #(define-music-function
-   (parser location instrument name dir music)
+   (instrument name dir music)
    (string? string? ly:dir? ly:music?)
    #{
      \cueDuring $instrument #dir {
index f75ad047d8d9ce2b462975198360fca4b2b86daf..93be5c69dbb429387a4db03df4fce6af42e5db83 100644 (file)
@@ -7,4 +7,5 @@ custodes.ly
 incipit.ly
 mensurstriche-layout-bar-lines-between-the-staves.ly
 rest-styles.ly
+using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly
 vertical-line-as-a-baroque-articulation-mark.ly
index 9aea589ed2c1f4334c4a7a2e14d6627135ecf6a7..2d08a1607e8ba327d9039c4e5142506f377cd7ec 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "expressive-marks, really-cool, scheme-language, text"
@@ -23,7 +23,7 @@ normally printed, using some Scheme code.
 } % begin verbatim
 
 hairpinWithCenteredText =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
   #{
     \once \override Voice.Hairpin.after-line-breaking =
       #(lambda (grob)
index 37000fda73df48d31ea97a90db632d723e00397a..9d02ca574437c4467ceaf76cb60729b2c58b163a 100644 (file)
@@ -5,7 +5,7 @@
 %
 % This file is in the public domain.
 %% Note: this file works from version 2.19.0
-\version "2.19.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "pitches, real-music, really-cool, scheme-language"
@@ -23,7 +23,7 @@ Planets.
 
 
 rhythm =
-#(define-music-function (parser location p) (ly:pitch?)
+#(define-music-function (p) (ly:pitch?)
    "Make the rhythm in Mars (the Planets) at the given pitch"
   #{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
 
index 71080b7df5ff772343410d9ed69e316c9614e02c..e013e7af981db6078b4a9e0e511df244e6603e31 100644 (file)
@@ -1,27 +1,26 @@
-% 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.19.21
-\version "2.19.21"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
+  lsrtags = "midi, scheme-language"
 
-  lsrtags = "scheme-language, midi"
+  texidoc = "
+The following example shows how to create a dynamic marking, not
+included in the default list, and assign it a specific value so that it
+can be used to affect MIDI output.
 
-  texidoc = "The following example shows how to create a dynamic
-  marking, not included in the default list, and assign it a specific
-  value so that it can be used to affect MIDI output.
 
-  The dynamic mark @code{\\rfz} (@notation{rinforzando}) is assigned a
-  value of @code{0.9}."
+The dynamic mark @code{\\rfz} is assigned a value of @code{0.9}.
 
+"
   doctitle = "Creating custom dynamics in MIDI output"
 } % begin verbatim
 
-
 #(define (myDynamics dynamic)
     (if (equal? dynamic "rfz")
       0.9
index 78de0a0705a0b81755ae62580f9eb5ccbacede2b..0488ff23a0e11f85a8dd174bf84c921656dca6ec 100644 (file)
@@ -1,23 +1,22 @@
-% 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.18.0
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
-  lsrtags = "tweaks-and-overrides, pitches, staff-notation, contexts-and-engravers"
+  lsrtags = "contexts-and-engravers, pitches, staff-notation, tweaks-and-overrides"
 
   texidoc = "
 LilyPond supports custom key signatures.  In this example, print for D
 minor with an extended range of printed flats.
+
 "
   doctitle = "Creating custom key signatures"
 } % begin verbatim
 
-
 \new Staff \with {
   \override StaffSymbol.line-count = #8
   \override KeySignature.flat-positions = #'((-7 . 6))
index 8d6eec5122e20b1e637276462f42d52b9b6dba82..5fbbe1f34f958566b46d3c9b1fa8f03097fd4318 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "expressive-marks, text, workaround"
@@ -27,7 +27,7 @@ commands such as @code{\\dynamicUp} or @code{\\dynamicDown}.
 } % begin verbatim
 
 paren =
-#(define-event-function (parser location dyn) (ly:event?)
+#(define-event-function (dyn) (ly:event?)
    (make-dynamic-script
     #{ \markup \concat {
          \normal-text \italic \fontsize #2 (
index f284dd6d0593c2a1640080accb9b593156d689cc..9f92c6f2abfefcaa19e2548d85f898bfbabe51f3 100644 (file)
@@ -1,28 +1,25 @@
-% 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.19.7
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.19.7"
 
 \header {
-
   lsrtags = "contexts-and-engravers"
 
+  texidoc = "
+This example demonstrates how the ambitus engraver may be defined on
+the user side, with a Scheme engraver.
 
-  texidoc = "This example demonstrates how the ambitus engraver may be
-  defined on the user side, with a Scheme engraver.
+This is basically a rewrite in Scheme of the code from
+@code{lily/ambitus-engraver.cc}.
 
-  This is basically a rewrite in Scheme of the code from
-  @file{lily/ambitus-engraver.cc}.
 "
-
   doctitle = "Defining an engraver in Scheme: ambitus engraver"
 } % begin verbatim
 
-
 #(use-modules (oop goops))
 
 %%%
index ba68c27a01d8c9ca01b5cbfd6b01bf9bd85da6af..7a75bb1a33fa98170414298349e200e51c5c806d 100644 (file)
@@ -1,11 +1,10 @@
-% 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.19.12
-\version "2.19.12"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
   lsrtags = "devel, scheme-language, tweaks-and-overrides"
@@ -40,7 +39,7 @@ When called this way
 
 
 @{
- \\once \\override NoteHead.before-line-breaking = #display-ancestry
+ \\once \\override NoteHead #'before-line-breaking = #display-ancestry
  c @}
 
 
index f7264aa0f898671d55f7899758cc41c3d1298d22..d88f5fbb50c20ead7406276004c1c54e99ec2601 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
@@ -22,13 +22,13 @@ next note.
 % Two functions for (de)crescendo spanners where you can explicitly give the
 % spanner text.
 mycresc =
-#(define-music-function (parser location mymarkup) (markup?)
+#(define-music-function (mymarkup) (markup?)
    (make-music 'CrescendoEvent
                'span-direction START
                'span-type 'text
                'span-text mymarkup))
 mydecresc =
-#(define-music-function (parser location mymarkup) (markup?)
+#(define-music-function (mymarkup) (markup?)
    (make-music 'DecrescendoEvent
                'span-direction START
                'span-type 'text
index bd18a741f45f89dc3fdb9490b653bf56deb6f82f..698fc4a72390558d6f91bd26b0ac34c50172a121 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides"
@@ -24,7 +24,7 @@ corresponding grace notes in all other voices.
   doctitle = "Extending glissandi across repeats"
 } % begin verbatim
 
-repeatGliss = #(define-music-function (parser location grace)
+repeatGliss = #(define-music-function (grace)
   (ly:pitch?)
   #{
     % the next two lines ensure the glissando is long enough
index c9ee89ee72b241e0b1f0c2a7521563c163ef3d67..cdbe9fa6c2cb626089d4cb58826901936ab17f6e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "contemporary-notation, winds"
@@ -19,7 +19,7 @@ glyph.
 } % begin verbatim
 
 slap =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
 #{
   \override NoteHead.stencil =
   #(lambda (grob)
index 8b2295686418d98e60bb6c3fbb31141f12e7c403..22de249b5e5355bc940b4a8b2372674364700a61 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "headword"
@@ -30,7 +30,7 @@ ssnod = \set stringNumberOrientations = #'(down)
 ssnor = \set stringNumberOrientations = #'(right)
 
 % define fingering offset
-FO = #(define-music-function (parser location offsetX offsetY) (number? number?)
+FO = #(define-music-function (offsetX offsetY) (number? number?)
 #{
   \once \override Voice.Fingering.extra-offset = #(cons offsetX offsetY)
 #})
index d08471155e5e34e161d216175f8d0fef92634d0a..6992cce1602c4f6d214fa59ab8101e9bcd9ec16e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "automatic-notation, really-cool, scheme-language"
@@ -99,8 +99,8 @@ modified to inser all collected scores so far to the book.
             (set! pitch (modulo (1+ pitch) 7)))))
 
 oneNoteScore =
-#(define-music-function (parser location) ()
-   (add-one-note-score parser)
+#(define-music-function () ()
+   (add-one-note-score (*parser*))
    (make-music 'Music 'void #t))
 
 %%%
index c8fb9bc22f9efe600f6898f714561373f1bf1550..45fe68edd73bd7e463003163219533e8b443724c 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "repeats"
@@ -17,7 +17,7 @@ Isolated percents can also be printed.
 } % begin verbatim
 
 makePercent =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
    "Make a percent repeat the same length as NOTE."
    (make-music 'PercentEvent
                'length (ly:music-length note)))
index 8ff1608b09eff34b55c3d9e6ebd180b6cd52db91..b39f9375c24b1f2c054106f2d11a5ab3e1bc433a 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.19.2
-\version "2.19.2"
+%% Note: this file works from version 2.19.21
+\version "2.19.21"
 
 \header {
   lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
@@ -27,13 +27,13 @@ in that voice, the tie appears to cross voices.
 } % begin verbatim
 
 
-\relative c'' {
+\relative {
   \time 2/4
   <<
     {
       \once \hide Stem
       \once \override Stem.length = #8
-      b8 ~ 8\noBeam
+      b'8 ~ 8\noBeam
       \once \hide Stem
       \once \override Stem.length = #8
       g8 ~ 8\noBeam
index 40c2af9b289c60a5d9d20ef4ad62c66a77fd9bb5..f24f238ecb054eed98cc3ea10bb27ae5f930aefa 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "pitches, real-music, really-cool, scheme-language"
@@ -15,7 +15,7 @@ Planets.
 }
 
 rhythm =
-#(define-music-function (parser location p) (ly:pitch?)
+#(define-music-function (p) (ly:pitch?)
    "Make the rhythm in Mars (the Planets) at the given pitch"
   #{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
 
diff --git a/Documentation/snippets/new/creating-custom-dynamics-in-midi-output.ly b/Documentation/snippets/new/creating-custom-dynamics-in-midi-output.ly
deleted file mode 100644 (file)
index df2befd..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-\version "2.19.21"
-
-\header {
-
-  lsrtags = "scheme-language, midi"
-
-  texidoc = "The following example shows how to create a dynamic
-  marking, not included in the default list, and assign it a specific
-  value so that it can be used to affect MIDI output.
-
-  The dynamic mark @code{\rfz} (@notation{rinforzando}) is assigned a
-  value of @code{0.9}."
-
-  doctitle = "Creating custom dynamics in MIDI output"
-}
-
-#(define (myDynamics dynamic)
-    (if (equal? dynamic "rfz")
-      0.9
-      (default-dynamic-absolute-volume dynamic)))
-
-\score {
-  \new Staff {
-    \set Staff.midiInstrument = #"cello"
-    \set Score.dynamicAbsoluteVolumeFunction = #myDynamics
-    \new Voice {
-      \relative {
-        a'4\pp b c-\rfz
-      }
-    }
-  }
-  \layout {}
-  \midi {}
-}
diff --git a/Documentation/snippets/new/creating-custom-key-signatures.ly b/Documentation/snippets/new/creating-custom-key-signatures.ly
deleted file mode 100644 (file)
index eae99a9..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-\version "2.18.0"
-
-\header {
-  lsrtags = "tweaks-and-overrides, pitches, staff-notation, contexts-and-engravers"
-
-  texidoc = "
-LilyPond supports custom key signatures.  In this example, print for D
-minor with an extended range of printed flats.
-"
-  doctitle = "Creating custom key signatures"
-}
-
-\new Staff \with {
-  \override StaffSymbol.line-count = #8
-  \override KeySignature.flat-positions = #'((-7 . 6))
-  \override KeyCancellation.flat-positions = #'((-7 . 6))
-  % presumably sharps are also printed in both octaves
-  \override KeySignature.sharp-positions = #'((-6 . 7))
-  \override KeyCancellation.sharp-positions = #'((-6 . 7))
-
-  \override Clef.stencil = #
-  (lambda (grob)(grob-interpret-markup grob
-  #{ \markup\combine
-    \musicglyph #"clefs.C"
-    \translate #'(-3 . -2)
-    \musicglyph #"clefs.F"
-   #}))
-    clefPosition = #3
-    middleCPosition = #3
-    middleCClefPosition = #3
-}
-
-{
-  \key d\minor
-  f bes, f bes,
-}
diff --git a/Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly b/Documentation/snippets/new/defining-an-engraver-in-scheme--ambitus-engraver.ly
deleted file mode 100644 (file)
index 1675838..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-\version "2.19.7"
-
-\header {
-
-  lsrtags = "contexts-and-engravers"
-
-
-  texidoc = "This example demonstrates how the ambitus engraver may be
-  defined on the user side, with a Scheme engraver.
-
-  This is basically a rewrite in Scheme of the code from
-  @file{lily/ambitus-engraver.cc}.
-"
-
-  doctitle = "Defining an engraver in Scheme: ambitus engraver"
-}
-
-#(use-modules (oop goops))
-
-%%%
-%%% Grob utilities
-%%%
-%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
-
-#(define (ly:separation-item::add-conditional-item grob grob-item)
-   "Add @var{grob-item} to the array of conditional elements of @var{grob}.
-Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
-   (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
-
-#(define (ly:accidental-placement::accidental-pitch accidental-grob)
-   "Get the pitch from the grob cause of @var{accidental-grob}.
-Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
-   (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
-                      'pitch))
-
-#(define (ly:accidental-placement::add-accidental grob accidental-grob)
-   "Add @var{accidental-grob}, an @code{Accidental} grob, to the
-list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
-grob.
-Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
-   (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
-     (set! (ly:grob-parent accidental-grob X) grob)
-     (set! (ly:grob-property accidental-grob 'X-offset)
-           ly:grob::x-parent-positioning)
-     (let* ((accidentals (ly:grob-object grob 'accidental-grobs))
-            (handle (assq (ly:pitch-notename pitch) accidentals))
-            (entry (if handle (cdr handle) '())))
-       (set! (ly:grob-object grob 'accidental-grobs)
-             (assq-set! accidentals
-                        (ly:pitch-notename pitch)
-                        (cons accidental-grob entry))))))
-
-%%%
-%%% Ambitus data structure
-%%%
-
-%%% The <ambitus> class holds the various grobs that are created
-%%% to print an ambitus:
-%%% - ambitus-group: the grob that groups all the components of an ambitus
-%%% (Ambitus grob);
-%%% - ambitus-line: the vertical line between the upper and lower ambitus
-%%% notes (AmbitusLine grob);
-%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
-%%% for the lower and upper note of the ambitus (see <ambitus-note> class
-%%% below).
-%%% The other slots define the key and clef context of the engraver:
-%%% - start-c0: position of middle c at the beginning of the piece.  It
-%%% is used to place the ambitus notes according to their pitch;
-%%% - start-key-sig: the key signature at the beginning of the piece.  It
-%%% is used to determine if accidentals shall be printed next to ambitus
-%%% notes.
-
-#(define-class <ambitus> ()
-   (ambitus-group #:accessor ambitus-group)
-   (ambitus-line #:accessor ambitus-line)
-   (ambitus-up-note #:getter ambitus-up-note
-                    #:init-form (make <ambitus-note>))
-   (ambitus-down-note #:getter ambitus-down-note
-                      #:init-form (make <ambitus-note>))
-   (start-c0 #:accessor ambitus-start-c0
-             #:init-value #f)
-   (start-key-sig #:accessor ambitus-start-key-sig
-                  #:init-value '()))
-
-%%% Accessor for the lower and upper note data of an ambitus
-#(define-method (ambitus-note (ambitus <ambitus>) direction)
-   "If @var{direction} is @code{UP}, then return the upper ambitus note
-of @var{ambitus}, otherwise return the lower ambitus note."
-   (if (= direction UP)
-       (ambitus-up-note ambitus)
-       (ambitus-down-note ambitus)))
-
-%%% The <ambitus-note> class holds the grobs that are specific to ambitus
-%%% (lower and upper) notes:
-%%% - head: an AmbitusNoteHead grob;
-%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
-%%% to the ambitus note head.
-%%% Moreover:
-%%% - pitch is the absolute pitch of the note
-%%% - cause is the note event that causes this ambitus note, i.e. the lower
-%%% or upper note of the considered music sequence.
-
-#(define-class <ambitus-note> ()
-   (head #:accessor ambitus-note-head
-         #:init-value #f)
-   (accidental #:accessor ambitus-note-accidental
-               #:init-value #f)
-   (cause #:accessor ambitus-note-cause
-          #:init-value #f)
-   (pitch #:accessor ambitus-note-pitch
-          #:init-value #f))
-
-%%%
-%%% Ambitus engraving logics
-%%%
-%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
-
-#(define (make-ambitus translator)
-   "Build an ambitus object: initialize all the grobs and their relations.
-
-The Ambitus grob contain all other grobs:
- Ambitus
-  |- AmbitusLine
-  |- AmbitusNoteHead   for upper note
-  |- AmbitusAccidental for upper note
-  |- AmbitusNoteHead   for lower note
-  |- AmbitusAccidental for lower note
-
-The parent of an accidental is the corresponding note head,
-and the accidental is set as the 'accidental-grob of the note head
-so that is printed by the function that prints notes."
-   ;; make the ambitus object
-   (let ((ambitus (make <ambitus>)))
-     ;; build the Ambitus grob, which will contain all other grobs
-     (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
-     ;; build the AmbitusLine grob (line between lower and upper note)
-     (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
-     ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
-     (for-each (lambda (direction)
-                 (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
-                       (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
-                       (group (ambitus-group ambitus)))
-                   ;; The parent of the AmbitusAccidental grob is the
-                   ;; AmbitusNoteHead grob
-                   (set! (ly:grob-parent accidental Y) head)
-                   ;; The AmbitusAccidental grob is set as the accidental-grob
-                   ;; object of the AmbitusNoteHead.  This is later used by the
-                   ;; function that prints notes.
-                   (set! (ly:grob-object head 'accidental-grob) accidental)
-                   ;; both the note head and the accidental grobs are added
-                   ;; to the main ambitus grob.
-                   (ly:axis-group-interface::add-element group head)
-                   (ly:axis-group-interface::add-element group accidental)
-                   ;; the note head and the accidental grobs are added to the
-                   ;; ambitus object
-                   (set! (ambitus-note-head (ambitus-note ambitus direction))
-                         head)
-                   (set! (ambitus-note-accidental (ambitus-note ambitus direction))
-                         accidental)))
-               (list DOWN UP))
-     ;; The parent of the ambitus line is the lower ambitus note head
-     (set! (ly:grob-parent (ambitus-line ambitus) X)
-           (ambitus-note-head (ambitus-note ambitus DOWN)))
-     ;; the ambitus line is added to the ambitus main grob
-     (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
-     ambitus))
-
-#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
-   "Initialize the state of @var{ambitus}, by getting the starting
-position of middle C and key signature from @var{translator}'s context."
-   (if (not (ambitus-start-c0 ambitus))
-       (begin
-         (set! (ambitus-start-c0 ambitus)
-               (ly:context-property (ly:translator-context translator)
-                                    'middleCPosition
-                                    0))
-         (set! (ambitus-start-key-sig ambitus)
-               (ly:context-property (ly:translator-context translator)
-                                    'keyAlterations)))))
-
-#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
-   "Update the upper and lower ambitus pithes of @var{ambitus}, using
-@var{note-grob}."
-   ;; Get the event that caused the note-grob creation
-   ;; and check that it is a note-event.
-   (let ((note-event (ly:grob-property note-grob 'cause)))
-     (if (ly:in-event-class? note-event 'note-event)
-         ;; get the pitch from the note event
-         (let ((pitch (ly:event-property note-event 'pitch)))
-           ;; if this pitch is lower than the current ambitus lower
-           ;; note pitch (or it has not been initialized yet),
-           ;; then this pitch is the new ambitus lower pitch,
-           ;; and conversely for upper pitch.
-           (for-each (lambda (direction pitch-compare)
-                       (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
-                               (pitch-compare pitch
-                                              (ambitus-note-pitch (ambitus-note ambitus direction))))
-                           (begin
-                             (set! (ambitus-note-pitch (ambitus-note ambitus direction))
-                                   pitch)
-                             (set! (ambitus-note-cause (ambitus-note ambitus direction))
-                                   note-event))))
-                     (list DOWN UP)
-                     (list ly:pitch<? (lambda (p1 p2)
-                                        (ly:pitch<? p2 p1))))))))
-
-#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
-   "Typeset the ambitus:
-- place the lower and upper ambitus notes according to their pitch and
-  the position of the middle C;
-- typeset or delete the note accidentals, according to the key signature.
-  An accidental, if it is to be printed, is added to an AccidentalPlacement
-  grob (a grob dedicated to the placement of accidentals near a chord);
-- both note heads are added to the ambitus line grob, so that a line should
-  be printed between them."
-   ;; check if there are lower and upper pitches
-   (if (and (ambitus-note-pitch (ambitus-note ambitus UP))
-            (ambitus-note-pitch (ambitus-note ambitus DOWN)))
-       ;; make an AccidentalPlacement grob, for placement of note accidentals
-       (let ((accidental-placement (ly:engraver-make-grob
-                                    translator
-                                    'AccidentalPlacement
-                                    (ambitus-note-accidental (ambitus-note ambitus DOWN)))))
-         ;; For lower and upper ambitus notes:
-         (for-each (lambda (direction)
-                     (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
-                       ;; set the cause and the staff position of the ambitus note
-                       ;; according to the associated pitch
-                       (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
-                                               'cause)
-                             (ambitus-note-cause (ambitus-note ambitus direction)))
-                       (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
-                                               'staff-position)
-                             (+ (ambitus-start-c0 ambitus)
-                                (ly:pitch-steps pitch)))
-                       ;; determine if an accidental shall be printed for this note,
-                       ;; according to the key signature
-                       (let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
-                                                       (ly:pitch-notename pitch))
-                                                 (ambitus-start-key-sig ambitus))
-                                          (assoc (ly:pitch-notename pitch)
-                                                 (ambitus-start-key-sig ambitus))))
-                              (sig-alter (if handle (cdr handle) 0)))
-                         (cond ((= (ly:pitch-alteration pitch) sig-alter)
-                                ;; the note alteration is in the key signature
-                                ;; => it does not have to be printed
-                                (ly:grob-suicide!
-                                 (ambitus-note-accidental (ambitus-note ambitus direction)))
-                                (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
-                                                      'accidental-grob)
-                                      '()))
-                               (else
-                                ;; otherwise, the accidental shall be printed
-                                (set! (ly:grob-property (ambitus-note-accidental
-                                                         (ambitus-note ambitus direction))
-                                                        'alteration)
-                                      (ly:pitch-alteration pitch)))))
-                       ;; add the AccidentalPlacement grob to the
-                       ;; conditional items of the AmbitusNoteHead
-                       (ly:separation-item::add-conditional-item
-                        (ambitus-note-head (ambitus-note ambitus direction))
-                        accidental-placement)
-                       ;; add the AmbitusAccidental to the list of the
-                       ;; AccidentalPlacement grob accidentals
-                       (ly:accidental-placement::add-accidental
-                        accidental-placement
-                        (ambitus-note-accidental (ambitus-note ambitus direction)))
-                       ;; add the AmbitusNoteHead grob to the AmbitusLine grob
-                       (ly:pointer-group-interface::add-grob
-                        (ambitus-line ambitus)
-                        'note-heads
-                        (ambitus-note-head (ambitus-note ambitus direction)))))
-                   (list DOWN UP))
-         ;; add the AccidentalPlacement grob to the main Ambitus grob
-         (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
-       ;; no notes ==> suicide the grobs
-       (begin
-         (for-each (lambda (direction)
-                     (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
-                     (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
-                   (list DOWN UP))
-         (ly:grob-suicide! ambitus-line))))
-
-%%%
-%%% Ambitus engraver definition
-%%%
-#(define ambitus-engraver
-   (lambda (context)
-     (let ((ambitus #f))
-       ;; when music is processed: make the ambitus object, if not already built
-       (make-engraver
-       ((process-music translator)
-        (if (not ambitus)
-            (set! ambitus (make-ambitus translator))))
-       ;; set the ambitus clef and key signature state
-       ((stop-translation-timestep translator)
-        (if ambitus
-            (initialize-ambitus-state ambitus translator)))
-       ;; when a note-head grob is built, update the ambitus notes
-       (acknowledgers
-          ((note-head-interface engraver grob source-engraver)
-          (if ambitus
-              (update-ambitus-notes ambitus grob))))
-       ;; finally, typeset the ambitus according to its upper and lower notes
-       ;; (if any).
-       ((finalize translator)
-        (if ambitus
-            (typeset-ambitus ambitus translator)))))))
-
-%%%
-%%% Example
-%%%
-
-\score {
-  \new StaffGroup <<
-    \new Staff { c'4 des' e' fis' gis' }
-    \new Staff { \clef "bass" c4 des ~ des ees b, }
-  >>
-  \layout { \context { \Staff \consists #ambitus-engraver } }
-}
diff --git a/Documentation/snippets/new/displaying-grob-ancestry.ly b/Documentation/snippets/new/displaying-grob-ancestry.ly
deleted file mode 100644 (file)
index 2f8919c..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-\version "2.19.12"
-
-\header {
-  lsrtags = "devel, scheme-language, tweaks-and-overrides"
-
-  texidoc = "
-When working with grob callbacks, it can be helpful to understand a
-grob's @qq{ancestry}. Most grobs have @qq{parents} which influence the
-positioning of the grob. X- and Y-parents influence the horizontal and
-vertical positions for the grob, respectively. Additionally, each
-parent may have parents of its own.
-
-
-Unfortunately, there are several aspects of a grob's ancestry that can
-lead to confusion:
-
-* The types of parents a grob has may depend on context. * For some
-grobs, the X- and Y-parents are the same. * A particular @qq{ancestor}
-may be related to a grob in multiple ways. * The concept of
-@qq{generations} is misleading.
-
-
-For example, the @code{System} grob can be both parent (on the Y-side)
-and grandparent (twice on the X-side) to a @code{VerticalAlignment}
-grob.
-
-
-This macro prints (to the console) a textual representation of a grob's
-ancestry.
-
-
-When called this way
-
-
-@{
- \\once \\override NoteHead.before-line-breaking = #display-ancestry
- c @}
-
-
-The following output is generated:
-
-
-------------------------------------
-
-NoteHead X,Y: NoteColumn
-    X: PaperColumn
-       X,Y: System
-    Y: VerticalAxisGroup
-       X: NonMusicalPaperColumn
-          X,Y: System
-       Y: VerticalAlignment
-          X: NonMusicalPaperColumn
-             X,Y: System
-          Y: System
-
-
-
-"
-  doctitle = "Displaying grob ancestry"
-}
-%% http://lsr.di.unimi.it/LSR/Item?id=622
-%% see also http://www.lilypond.org/doc/v2.18/Documentation/snippets/tweaks-and-overrides#tweaks-and-overrides-displaying-grob-ancestry
-
-#(define (grob-name grob)
-   (if (ly:grob? grob)
-       (assoc-ref (ly:grob-property grob 'meta) 'name)
-       #f))
-
-#(define (get-ancestry grob)
-   (if (not (null? (ly:grob-parent grob X)))
-       (list (grob-name grob)
-             (get-ancestry (ly:grob-parent grob X))
-             (get-ancestry (ly:grob-parent grob Y)))
-       (grob-name grob)))
-
-#(define (format-ancestry lst padding)
-   (string-append
-    (symbol->string (car lst))
-    "\n"
-    (let ((X-ancestry
-           (if (list? (cadr lst))
-               (format-ancestry (cadr lst) (+ padding 3))
-               (symbol->string (cadr lst))))
-          (Y-ancestry
-           (if (list? (caddr lst))
-               (format-ancestry (caddr lst) (+ padding 3))
-               (symbol->string (caddr lst)))))
-      (if (equal? X-ancestry Y-ancestry)
-          (string-append
-           (format #f "~&")
-           (make-string padding #\space)
-           "X,Y: "
-           (if (list? (cadr lst))
-               (format-ancestry (cadr lst) (+ padding 5))
-               (symbol->string (cadr lst))))
-          (string-append
-           (format #f "~&")
-           (make-string padding #\space)
-           "X: " X-ancestry
-           "\n"
-           (make-string padding #\space)
-           "Y: " Y-ancestry
-           (format #f "~&"))))
-    (format #f "~&")))
-
-#(define (display-ancestry grob)
-   (format (current-error-port)
-      "~3&~a~2%~a~&"
-      (make-string 36 #\-)
-      (format-ancestry (get-ancestry grob) 0)))
-
-\relative c' {
-  \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
-  <f as c>4\arpeggio
-}
index 2596aebc36c98d0d8768035295fd4e5a0fa42d7b..f230a6de806d25ff3d62ff78f2e913923a787f55 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 
 \header {
   lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
@@ -19,13 +19,13 @@ in that voice, the tie appears to cross voices.
   doctitle = "Making an object invisible with the 'transparent property"
 }
 
-\relative c'' {
+\relative {
   \time 2/4
   <<
     {
       \once \hide Stem
       \once \override Stem.length = #8
-      b8 ~ 8\noBeam
+      b'8 ~ 8\noBeam
       \once \hide Stem
       \once \override Stem.length = #8
       g8 ~ 8\noBeam
index 5559898bec44e98b01c798deb76b3137084ea56f..f89568fa74df1077f21be1003a17d9ec6c4bc55f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.7"
+\version "2.19.21"
 
 \header {
   lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific"
@@ -35,10 +35,10 @@ whole-tone scale:
 }
 
 
-\relative c' {
+\relative {
   \set Staff.keyAlterations = #`((6 . ,FLAT)
                                  (5 . ,FLAT)
                                  (3 . ,SHARP))
-  c4 d e fis
+  c'4 d e fis
   aes4 bes c2
 }
diff --git a/Documentation/snippets/new/suppressing-warnings-for-clashing-note-columns.ly b/Documentation/snippets/new/suppressing-warnings-for-clashing-note-columns.ly
deleted file mode 100644 (file)
index cf6fe93..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-\version "2.19.14"
-
-\header {
-  lsrtags = "simultaneous-notes, tweaks-and-overrides"
-
-  texidoc = "
-If notes from two voices with stems in the same direction are placed at
-the same position, but the voices have no voice-specific shifts
-specified, the error message @samp{warning: ignoring too many clashing
-note columns} will appear when compiling the LilyPond file.  This
-message can be suppressed by setting the @code{'ignore-collision}
-property of the @code{NoteColumn} object to @code{#t}. Please note that
-this does not just suppress warnings  but stops LilyPond trying to
-resolve collisions at all and so may have  unintended results unless
-used with care.
-"
-  doctitle = "Suppressing warnings for clashing note columns"
-}
-
-ignore = \override NoteColumn.ignore-collision = ##t
-
-\relative c' {
-  \new Staff <<
-    \new Voice{ \ignore \stemDown f2 g }
-    \new Voice{ c2 \stemDown c, }
-  >>
-}
diff --git a/Documentation/snippets/new/tweaking-clef-properties.ly b/Documentation/snippets/new/tweaking-clef-properties.ly
deleted file mode 100644 (file)
index b9cdb2a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-\version "2.17.18"
-
-\header {
-  lsrtags = "pitches, staff-notation, tweaks-and-overrides"
-
-  texidoc = "
-Changing the Clef glyph, its position, or the ottavation does not
-change the position of subsequent notes on the staff.  To get key
-signatures on their correct staff lines @code{middleCClefPosition}
-must also be specified, with positive or negative values moving
-@emph{middle C} up or down respectively, relative to the staff's
-center line.
-
-For example, @code{\\clef \"treble_8\"} is equivalent to setting
-the @code{clefGlyph}, @code{clefPosition} (the vertical position
-of the clef itself on the staff), @code{middleCPosition} and
-@code{clefTransposition}. Note that when any of these properties
-(except @code{middleCPosition}) are changed a new clef symbol is
-printed.
-
-The following examples show the possibilities when setting these
-properties manually. On the first line, the manual changes preserve the
-standard relative positioning of clefs and notes, whereas on the second
-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.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.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, key signatures
-  % and clefs:
-
-  \set Staff.clefGlyph = #"clefs.F"
-  \set Staff.clefPosition = #2
-  c'1
-  \set Staff.clefGlyph = #"clefs.G"
-  c'1
-  \set Staff.clefGlyph = #"clefs.C"
-  c'1
-  \set Staff.clefTransposition = #7
-  c'1
-  \set Staff.clefTransposition = #0
-  \set Staff.clefPosition = #0
-  c'1
-
-  % Return to the normal clef:
-
-  \set Staff.middleCPosition = #0
-  c'1
-}
diff --git a/Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly b/Documentation/snippets/new/vocal-ensemble-template-with-automatic-piano-reduction.ly
deleted file mode 100644 (file)
index f144448..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-\version "2.19.21"
-
-\header {
-  lsrtags = "automatic-notation, keyboards, template, vocal-music"
-
-  texidoc = "
-This template adds an automatic piano reduction to the standard SATB
-vocal score demonstrated in @qq{Vocal ensemble template}. This
-demonstrates one of the strengths of LilyPond – you can use a music
-definition more than once. If any changes are made to the vocal notes
-(say, @code{tenorMusic}), then the changes will also apply to the piano
-reduction.
-
-"
-  doctitle = "Vocal ensemble template with automatic piano reduction"
-}
-\paper {
-  top-system-spacing.basic-distance = #10
-  score-system-spacing.basic-distance = #20
-  system-system-spacing.basic-distance = #20
-  last-bottom-spacing.basic-distance = #10
-}
-
-global = {
-  \key c \major
-  \time 4/4
-}
-
-sopMusic = \relative {
-  c''4 c c8[( b)] c4
-}
-sopWords = \lyricmode {
-  hi hi hi hi
-}
-
-altoMusic = \relative {
-  e'4 f d e
-}
-altoWords =\lyricmode {
-  ha ha ha ha
-}
-
-tenorMusic = \relative {
-  g4 a f g
-}
-tenorWords = \lyricmode {
-  hu hu hu hu
-}
-
-bassMusic = \relative {
-  c4 c g c
-}
-bassWords = \lyricmode {
-  ho ho ho ho
-}
-
-\score {
-  <<
-    \new ChoirStaff <<
-      \new Lyrics = "sopranos" \with {
-        % This is needed for lyrics above a staff
-        \override VerticalAxisGroup.staff-affinity = #DOWN
-      }
-      \new Staff = "women" <<
-        \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
-        \new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
-      >>
-      \new Lyrics = "altos"
-      \new Lyrics = "tenors" \with {
-        % This is needed for lyrics above a staff
-        \override VerticalAxisGroup.staff-affinity = #DOWN
-      }
-
-      \new Staff = "men" <<
-        \clef bass
-        \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
-        \new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
-      >>
-      \new Lyrics = "basses"
-      \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
-      \context Lyrics = "altos" \lyricsto "altos" \altoWords
-      \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
-      \context Lyrics = "basses" \lyricsto "basses" \bassWords
-    >>
-    \new PianoStaff <<
-      \new Staff <<
-        \set Staff.printPartCombineTexts = ##f
-        \partcombine
-        << \global \sopMusic >>
-        << \global \altoMusic >>
-      >>
-      \new Staff <<
-        \clef bass
-        \set Staff.printPartCombineTexts = ##f
-        \partcombine
-        << \global \tenorMusic >>
-        << \global \bassMusic >>
-      >>
-    >>
-  >>
-}
diff --git a/Documentation/snippets/new/vocal-ensemble-template.ly b/Documentation/snippets/new/vocal-ensemble-template.ly
deleted file mode 100644 (file)
index 934d654..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-\version "2.19.21"
-
-\header {
-  lsrtags = "really-simple, template, vocal-music"
-
-  texidoc = "
-Here is a standard four-part SATB vocal score. With larger ensembles,
-it is often useful to include a section which is included in all parts.
-For example, the time signature and key signature are almost always the
-same for all parts. Like in the @qq{Hymn} template, the four voices are
-regrouped on only two staves.
-
-"
-  doctitle = "Vocal ensemble template"
-}
-\paper {
-  top-system-spacing.basic-distance = #10
-  score-system-spacing.basic-distance = #20
-  system-system-spacing.basic-distance = #20
-  last-bottom-spacing.basic-distance = #10
-}
-
-global = {
-  \key c \major
-  \time 4/4
-}
-
-sopMusic = \relative {
-  c''4 c c8[( b)] c4
-}
-sopWords = \lyricmode {
-  hi hi hi hi
-}
-
-altoMusic = \relative {
-  e'4 f d e
-}
-altoWords = \lyricmode {
-  ha ha ha ha
-}
-
-tenorMusic = \relative {
-  g4 a f g
-}
-tenorWords = \lyricmode {
-  hu hu hu hu
-}
-
-bassMusic = \relative {
-  c4 c g c
-}
-bassWords = \lyricmode {
-  ho ho ho ho
-}
-
-\score {
-  \new ChoirStaff <<
-    \new Lyrics = "sopranos" \with {
-      % this is needed for lyrics above a staff
-      \override VerticalAxisGroup.staff-affinity = #DOWN
-    }
-    \new Staff = "women" <<
-      \new Voice = "sopranos" {
-        \voiceOne
-        << \global \sopMusic >>
-      }
-      \new Voice = "altos" {
-        \voiceTwo
-        << \global \altoMusic >>
-      }
-    >>
-    \new Lyrics = "altos"
-    \new Lyrics = "tenors" \with {
-      % this is needed for lyrics above a staff
-      \override VerticalAxisGroup.staff-affinity = #DOWN
-    }
-    \new Staff = "men" <<
-      \clef bass
-      \new Voice = "tenors" {
-        \voiceOne
-        << \global \tenorMusic >>
-      }
-      \new Voice = "basses" {
-        \voiceTwo << \global \bassMusic >>
-      }
-    >>
-    \new Lyrics = "basses"
-    \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
-    \context Lyrics = "altos" \lyricsto "altos" \altoWords
-    \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
-    \context Lyrics = "basses" \lyricsto "basses" \bassWords
-  >>
-}
diff --git a/Documentation/snippets/new/vocal-headword.ly b/Documentation/snippets/new/vocal-headword.ly
deleted file mode 100644 (file)
index 70de0f9..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-
-\version "2.19.20"
-
-\header {
-  lsrtags = "headword"
-
-  texidoc = "
-Vocal headword
-
-"
-  doctitle = "Vocal headword"
-}
-
-%% http://lsr.di.unimi.it/LSR/Item?id=832
-%% see also http://lilypond.org/doc/v2.18/Documentation/notation/vocal-music
-
-% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale
-% mm. 216 -- 236
-% Text: F. von Schiller
-
-\score {
-  \new Staff \relative c' {
-    \set Score.currentBarNumber = 216
-    \bar ""  % make first bar number be shown
-    \clef bass \key d \minor \time 3/4
-    % \tempo "Presto"
-    % \compressMMRests  R2.*8
-    \tempo "Recitativo"
-    \autoBeamOff
-    r4^\markup { \small Baritono } r a
-    \appoggiatura a8 e'2. ~
-    e4 d8[ cis d e]
-    e4 g, r8 g
-    bes2 a8 e
-    g4 f r
-    R2.*2
-    gis2 gis4
-    r4 d'4. b8
-    b4 gis8([ a b cis]
-    e8[ d cis d)] b([ gis)]
-    e8 d d4 fis8([ e)]
-    d4 cis r
-    \key d \major
-    r4 r a'
-    d4.( e8[ fis e)]
-    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
-    g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d
-    d8 a a4 r \bar "||"
-
-    % \time 4/4 \tempo "Allegro assai"
-    % R1
-    % e''4^\f d r2
-    % R1
-    % e4( ^\f d2) a8([ g)]
-  }
-  \addlyrics {
-    O Freun -- _ _ de, nicht die -- _ se Tö -- ne!
-    Son -- dern laßt uns an -- _ ge -- neh -- me -- re an -- stim -- men,
-    und freu -- _ _ _ _ _ _ _ den -- vol -- le -- re!
-    % Freu -- de, Freu -- de,__
-  }
-}
index de513d1681cfb3972fb32442bc6cbfbd52b43930..dd06383aefef42a30cbae9f9f4e6d3b9de7f4a76 100644 (file)
@@ -4,8 +4,8 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.19.7
-\version "2.19.7"
+%% Note: this file works from version 2.19.21
+\version "2.19.21"
 
 \header {
   lsrtags = "contemporary-notation, pitches, really-cool, staff-notation, version-specific"
@@ -43,10 +43,10 @@ whole-tone scale:
 
 
 
-\relative c' {
+\relative {
   \set Staff.keyAlterations = #`((6 . ,FLAT)
                                  (5 . ,FLAT)
                                  (3 . ,SHARP))
-  c4 d e fis
+  c'4 d e fis
   aes4 bes c2
 }
index 2d8707ca9190d841dd45da31a47892ceb489d24d..98bcefa5ddca281a8adb745190c51cf380743d27 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "scheme-language, tweaks-and-overrides"
@@ -37,7 +37,7 @@ With 2.16.2 it is possible to put the proposed function,
             tweaks)))))
 
 customScripts =
-#(define-music-function (parser location settings)(list?)
+#(define-music-function (settings)(list?)
 #{
   \override Script.before-line-breaking =
     #(custom-script-tweaks settings)
index 4e140b330d1dba7ab741a041ffbd4739270111b3..70ec77a604125e1041f8438c7a2f6f6f6931bddd 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
@@ -35,7 +35,7 @@ rs = {
 }
 
 % Function to print a specified number of slashes
-comp = #(define-music-function (parser location count) (integer?)
+comp = #(define-music-function (count) (integer?)
   #{
     \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
     \override Rest.thickness = #0.48
index f07285c8b70550892786712d5e9937e93be50c04..badba96463746206a0922519a51ade6b42e94f2c 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "real-music, specific-notation, template"
@@ -186,7 +186,7 @@ staffAccordionMel =
 }
 
 AltOn =
-#(define-music-function (parser location mag) (number?)
+#(define-music-function (mag) (number?)
   #{ \override Stem.length = #(* 7.0 mag)
       \override NoteHead.font-size =
 #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
index 5409fbaf4fe3007308fc4d0b2d048bcfea2ecfa1..78f91075dd0c9ddc7e72c858e1bc0a0b0ee214b0 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "editorial-annotations, fretted-strings, scheme-language, text, tweaks-and-overrides"
@@ -18,7 +18,7 @@ series of notes is supposed to be played all on the same string.
 } % begin verbatim
 
 stringNumberSpanner =
-  #(define-music-function (parser location StringNumber) (string?)
+  #(define-music-function (StringNumber) (string?)
     #{
       \override TextSpanner.style = #'solid
       \override TextSpanner.font-size = #-5
index 9b94dd36191db6432b93f73865cc612c079286cd..d1def0181532d0b1728343c516ae6ba6d6b8caba 100644 (file)
@@ -16,13 +16,13 @@ entire groups of notes.  This behavior can be modified to subdivide the
 beams into sub-groups by setting the property @code{subdivideBeams}.
 When set, multiple beams will be subdivided at intervals defined by the
 current value of @code{baseMoment} by reducing the multiple beams to
-just one beam between the sub-groups. Note that @code{baseMoment}
-defaults to one over the denominator of the current time signature if
-not set explicitly. It must be set to a fraction giving the duration of
-the beam sub-group using the @code{ly:make-moment} function, as shown
-in this snippet. Also, when @code{baseMoment} is changed,
-@code{beatStructure} should also be changed to match the new
-@code{baseMoment}:
+the number of beams that indicates the length of the sub-group. Note
+that @code{baseMoment} defaults to one over the denominator of the
+current time signature if not set explicitly. It must be set to a
+fraction giving the duration of the beam sub-group using the
+@code{ly:make-moment} function, as shown in this snippet. Also, when
+@code{baseMoment} is changed, @code{beatStructure} should also be
+changed to match the new @code{baseMoment}:
 
 "
   doctitle = "Subdividing beams"
index ec7f763945d507c507ebbad29f264f1310180267..40b6b8678f560bc3a3322a19f61459d63e017bbd 100644 (file)
@@ -1,18 +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.19.14
-\version "2.19.14"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
   lsrtags = "simultaneous-notes, tweaks-and-overrides"
 
   texidoc = "
 If notes from two voices with stems in the same direction are placed at
-the same position, but the voices have no voice-specific shifts
+the same position, and both voices have no shift or the same shift
 specified, the error message @samp{warning: ignoring too many clashing
 note columns} will appear when compiling the LilyPond file.  This
 message can be suppressed by setting the @code{'ignore-collision}
@@ -20,11 +19,11 @@ property of the @code{NoteColumn} object to @code{#t}. Please note that
 this does not just suppress warnings  but stops LilyPond trying to
 resolve collisions at all and so may have  unintended results unless
 used with care.
+
 "
   doctitle = "Suppressing warnings for clashing note columns"
 } % begin verbatim
 
-
 ignore = \override NoteColumn.ignore-collision = ##t
 
 \relative c' {
index ca5b7f24f6ec6f23e7ad9ab3c2083d52e744b4b9..51ebe920786cf5486cf2f9cfc63548067bbd223a 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   lsrtags = "pitches, scheme-language, workaround"
@@ -74,7 +74,7 @@ In this manner, the most natural enharmonic notes are chosen.
      music))
 
 naturalizeMusic =
-#(define-music-function (parser location m)
+#(define-music-function (m)
    (ly:music?)
    (naturalize m))
 
index 2a30cfa8e823f85950629a8038afa79a30c6d189..5d1e69c13a328ed61686be8ba5945e60815aad58 100644 (file)
@@ -1,11 +1,10 @@
-% 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"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
   lsrtags = "pitches, staff-notation, tweaks-and-overrides"
   texidoc = "
 Changing the Clef glyph, its position, or the ottavation does not
 change the position of subsequent notes on the staff.  To get key
-signatures on their correct staff lines @code{middleCClefPosition}
-must also be specified, with positive or negative values moving
-@emph{middle C} up or down respectively, relative to the staff's
-center line.
+signatures on their correct staff lines @code{middleCClefPosition} must
+also be specified, with positive or negative values moving @code{middle
+C} up or down respectively, relative to the staff's center line.
 
-For example, @code{\\clef \"treble_8\"} is equivalent to setting
-the @code{clefGlyph}, @code{clefPosition} (the vertical position
-of the clef itself on the staff), @code{middleCPosition} and
+
+For example, @code{\\clef \"treble_8\"} is equivalent to setting the
+@code{clefGlyph}, @code{clefPosition} (the vertical position of the
+clef itself on the staff), @code{middleCPosition} and
 @code{clefTransposition}. Note that when any of these properties
 (except @code{middleCPosition}) are changed a new clef symbol is
 printed.
 
+
 The following examples show the possibilities when setting these
 properties manually. On the first line, the manual changes preserve the
 standard relative positioning of clefs and notes, whereas on the second
@@ -34,8 +34,6 @@ line, they do not.
   doctitle = "Tweaking clef properties"
 } % begin verbatim
 
-\layout { ragged-right = ##t } % begin verbatim
-
 {
   % The default treble clef
   \key f \major
diff --git a/Documentation/snippets/using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly b/Documentation/snippets/using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly
new file mode 100644 (file)
index 0000000..607d3fa
--- /dev/null
@@ -0,0 +1,90 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.19.22"
+
+\header {
+  lsrtags = "ancient-notation, vocal-music"
+
+  texidoc = "
+By using tags, it's possible to use the same music to produce both
+mensural and modern music.  In this snippet, a function @code{menrest}
+is introduced, allowing mensural rests to be pitched as in the
+original, but with modern rests in the standard staff position.  Tags
+are used to produce different types of bar line at the end of the
+music, but tags can also be used where other differences are needed:
+for example using @qq{whole measure rests} (R1, R\\breve etc.) in
+modern music, but normal rests (r1, r\\breve, etc.) in the mensural
+version.  Note that converting mensural music to its modern equivalent
+is usually referred to as @code{transcription}.
+
+"
+  doctitle = "Using tags to produce mensural and modern music from the same source"
+} % begin verbatim
+
+menrest = #(define-music-function (note)
+  (ly:music?)
+#{
+    \tag #'mens $(make-music 'RestEvent note)
+    \tag #'mod $(make-music 'RestEvent note 'pitch '())
+#})
+
+MensStyle = {
+  \autoBeamOff
+  \override NoteHead #'style = #'petrucci
+  \override Score.BarNumber #'transparent = ##t
+  \override Stem.neutral-direction = #up
+}
+
+finalis = {
+  \once \override BreathingSign.stencil = #ly:breathing-sign::finalis
+  \once \override BreathingSign.Y-offset = #0
+  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
+  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
+
+  \breathe
+}
+
+Music = \relative c'' {
+  \set Score.tempoHideNote = ##t
+  \key f \major
+  \time 4/4
+  g1 d'2 \menrest bes4 bes2 a2 r4 g4 fis2. \tag #'mens { \finalis } \tag #'mod { \bar "||" }
+}
+
+MenLyr = \lyricmode { So farre, deere life, deare life }
+ModLyr = \lyricmode { So far, dear life, dear life }
+
+\score {
+  \keepWithTag #'mens {
+    <<
+      \new MensuralStaff
+      {
+        \new MensuralVoice = Cantus \clef "mensural-c1" \MensStyle \Music
+      }
+      \new Lyrics \lyricsto Cantus \MenLyr
+    >>
+  }
+}
+
+\score {
+  \keepWithTag #'mod {
+    \new ChoirStaff <<
+      \new Staff
+      {
+        \new Voice = Sop \with {
+          \remove "Note_heads_engraver"
+          \consists "Completion_heads_engraver"
+          \remove "Rest_engraver"
+          \consists "Completion_rest_engraver" }
+        {
+          \shiftDurations #1 #0 { \autoBeamOff \Music }
+        }
+      }
+      \new Lyrics \lyricsto Sop \ModLyr
+    >>
+  }
+}
index 1f246437688befe9c700f43c7cea4d9334d1a147..e404d43ee11f2c9994d5e73c9e5f1d760a05c49a 100644 (file)
@@ -1,11 +1,10 @@
-% 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.19.21
-\version "2.19.21"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
   lsrtags = "automatic-notation, keyboards, template, vocal-music"
index ad4c0f5789e738fdb0167aaef2fc1b6cb8d49632..4498fd3b40db6dc76c8a100c34ed3c1b1af28c76 100644 (file)
@@ -1,11 +1,10 @@
-% 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.19.21
-\version "2.19.21"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
   lsrtags = "really-simple, template, vocal-music"
index d1a6487d4cd7315ef70deb56ba8a6be413da18d0..61137d2eee1935285712bc8cab6964fd87222307 100644 (file)
@@ -1,12 +1,10 @@
-% 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.19.20
-
-\version "2.19.20"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
 
 \header {
   lsrtags = "headword"
@@ -18,7 +16,6 @@ Vocal headword
   doctitle = "Vocal headword"
 } % begin verbatim
 
-
 %% http://lsr.di.unimi.it/LSR/Item?id=832
 %% see also http://lilypond.org/doc/v2.18/Documentation/notation/vocal-music
 
@@ -31,8 +28,6 @@ Vocal headword
     \set Score.currentBarNumber = 216
     \bar ""  % make first bar number be shown
     \clef bass \key d \minor \time 3/4
-    % \tempo "Presto"
-    % \compressMMRests  R2.*8
     \tempo "Recitativo"
     \autoBeamOff
     r4^\markup { \small Baritono } r a
index b62574ffc083b1fca7c51e2dcd5195b3e6a51aa9..2a8cf237555955ce19079f38cee753b191faa0b6 100644 (file)
@@ -26,6 +26,7 @@ single-staff-template-with-notes-and-lyrics.ly
 skips-in-lyric-mode-2.ly
 skips-in-lyric-mode.ly
 using-arpeggiobracket-to-make-divisi-more-visible.ly
+using-tags-to-produce-mensural-and-modern-music-from-the-same-source.ly
 vertically-aligning-ossias-and-lyrics.ly
 vertically-centered-common-lyrics.ly
 vocal-ensemble-template-with-automatic-piano-reduction.ly
index 3dce9421f24d676e11d3c61d06f469754d697e35..7db23cfada87999cba6336e14bfb3bd8579e6fee 100644 (file)
@@ -9,10 +9,10 @@
 @c used for news about the upcoming release; see CG 10.2
 
 @newsItem
-@subheading LilyPond 2.19.20 released  @emph{May 10, 2015}
+@subheading LilyPond 2.19.21 released  @emph{May 24, 2015}
 
 We are happy to announce the release of LilyPond
-2.19.20.  This release includes a number of enhancements, and contains some
+2.19.21.  This release includes a number of 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.18
index d47971d3d369da09fb92f8ac916bbddeecdc8857..85a69cf69c9734a34095849aa5e2c915197532f3 100644 (file)
@@ -26,6 +26,18 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subheading LilyPond 2.19.20 released  @emph{May 10, 2015}
+
+We are happy to announce the release of LilyPond
+2.19.20.  This release includes a number of 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.18
+version.
+
+@newsEnd
+
 @newsItem
 @subheading LilyPond 2.19.19 released  @emph{April 26, 2015}
 
diff --git a/VERSION b/VERSION
index 582476ddea025bc3b287b11e291ed769fd64af55..0135ee8f132f634b7e202fec129ce72ad158654b 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=19
-PATCH_LEVEL=21
+PATCH_LEVEL=22
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.20
+VERSION_DEVEL=2.19.21
index 7ed315124636ee063be84135d3c159e822781b61..48d0b77b748d6dd9b3462eb79bfbc20293c53792 100644 (file)
@@ -173,6 +173,7 @@ AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [
     CXXFLAGS=${CXXFLAGS-$CFLAGS}
     LDFLAGS=${LDFLAGS-""}
     optimise_b=yes
+    checks_b=no
     profile_b=no
     debug_b=yes
     pipe_b=yes
@@ -182,6 +183,11 @@ AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [
                     [compile with debugging info.  Default: on])],
     [debug_b=$enableval])
 
+    AC_ARG_ENABLE(checking,
+    [AS_HELP_STRING([--enable-checking],
+                    [compile with expensive run-time checks.  Default: off])],
+    [checks_b=$enableval])
+
     AC_ARG_ENABLE(optimising,
     [AS_HELP_STRING([--enable-optimising],
                     [compile with optimising.  Default: on])],
@@ -198,9 +204,17 @@ AC_DEFUN(STEPMAKE_COMPILE_BEFORE, [
     [pipe_b=$enableval])
 
     if test "$optimise_b" = yes; then
-       AC_DEFINE(NDEBUG)
-       DEFINES="$DEFINES -DNDEBUG"
        OPTIMIZE=" -O2 -finline-functions"
+       # following two lines are compatibility while Patchy has not
+       # yet learnt about --enable-checking.  But once it has, we
+       # don't want -DDEBUG twice, so we omit it here if it is going
+       # to get added anyway later.
+    elif test "$checks_b" != yes; then
+       DEFINES="$DEFINES -DDEBUG"
+    fi
+
+    if test "$checks_b" = yes; then
+       DEFINES="$DEFINES -DDEBUG"
     fi
 
     if test $profile_b = yes; then
index 39e0cbe743a43508f4d0f60c8c9ff79701b35869..6f1ebc53b60669ec061a3335e47637447a1d49cd 100644 (file)
@@ -69,7 +69,7 @@ public:
   }
   void OK () const
   {
-#ifndef NDEBUG
+#ifdef DEBUG
     for (vsize i = 2; i <= size (); i++)
       assert (compare (elt (i / 2), elt (i)) <= 0);
 #endif
index ea65fe042e52b5402c125313deaf5357a3243c84..651f3403a11f590cb1035a4fdec62e7e1b4a9ce6 100644 (file)
@@ -27,7 +27,7 @@
 /*
   leads to dubious crashes - libstdc++  bug?
  */
-#ifndef NDEBUG
+#ifdef DEBUG
 #define _GLIBCXX_DEBUG 1
 #endif
 #endif
index bb2103235edf518361e1be3fed8a96b6bf7c0f6b..fae955854ba63dea1e362881d4e647fde3d61a29 100644 (file)
@@ -25,7 +25,7 @@
 /*
   leads to dubious crashes - libstdc++  bug?
 */
-#ifndef NDEBUG
+#ifdef DEBUG
 #define _GLIBCXX_DEBUG 1
 #endif
 #endif
index b24254705833f70a95753bd4affae15f2399ead8..2b24452541656ad18f6f03caa1d7e704954ff9fc 100644 (file)
@@ -6,13 +6,13 @@ are collected here.
 "
 }
 
-\version "2.17.6"
+\version "2.19.21"
 
-\relative c'' {
+\relative {
       \time 3/4
       % FIXME: standard vs default, alteration-FOO vs FOO-alteration
       \override Staff.Accidental.glyph-name-alist = #standard-alteration-glyph-name-alist
-      cis^\markup { \typewriter default } c ces  
+      cis''^\markup { \typewriter default } c ces  
 
       \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
       cis^\markup { \typewriter hufnagel } c ces  
index eb05abcddbdf1c7d653465b0b4d11bde98e6f403..536cce96f5d961c64c1f92faac07740b80dac329 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 \header {
 
 texidoc = "Several automatic accidental rules
@@ -29,9 +29,9 @@ Both scores should show the same accidentals.
 \layout { ragged-right = ##t }
 
 \score {
-  \relative c'' {
+  \relative {
     \accidentalStyle dodecaphonic
-    gis4 a g gisis
+    gis'4 a g gisis
     \accidentalStyle neo-modern
     gis8 a gis gis g' gis gis,, a'
     \accidentalStyle neo-modern-cautionary
@@ -43,10 +43,10 @@ Both scores should show the same accidentals.
 }
 
 \score {
-  \relative c'' {
+  \relative {
     \set Staff.autoAccidentals = #'()
     \set Staff.autoCautionaries = #'()
-    gis!4 a! g! gisis!
+    gis'!4 a! g! gisis!
     gis!8 a gis! gis g'! gis! gis,,! a'
     eis! fis! eis? eis g?2
     \key e \major
index ac7a07e9c0d523b9ba5ad6a29d69c3cc1c666c12..9e2f98dedde8a92d0d14dcee480989b76e3bbf71 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Horizontal @code{Fingering} grobs should not collide with
@@ -6,7 +6,7 @@ accidentals.
 "
 }
 
-\relative c' {
+\relative {
   \time 2/4
   \set fingeringOrientations = #'(left)
   <a-3 cis-4> <a-3 cis!-4> |
index c1c64c80cb1dddcf777f75314c9bbb1b82ddeca8..6a76811017256371b4900d23fa582143b3d34ab4 100644 (file)
@@ -6,14 +6,14 @@ accidental."
 
 }
 
-\version "2.17.15"
+\version "2.19.21"
 
 \layout
 {
     ragged-right = ##t
 }
     
-\new PianoStaff \relative c' <<
+\new PianoStaff \relative <<
     \accidentalStyle piano
     \new Staff { ges'4 ges4 }
     \new Staff { r8 gis r8 gis }
index 5cf5c665f8f765f991ad0de62e9ab35f96cc52e2..3fdd648dcaccd4ab7558ed794aa56ebaaf7b1642 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Accidental padding works for all accidentals, including
 those modifying the same pitch."
 }
 
-\relative c' {
+\relative {
   \override Staff.AccidentalPlacement.padding = #2
-  <ces cis>1
+  <ces' cis>1
   <ces des>1
 }
index 6e0a867ffae647f95574f4224b9dfccd9a62fdbe..f3b5d46ec13b65103e0e24aa15e19dd79b48b70e 100644 (file)
@@ -7,15 +7,15 @@ denoting Musica Ficta."
  
 }
 
-\version "2.17.25"
+\version "2.19.21"
 \paper {
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \time 2/4 
   \set suggestAccidentals = ##t 
-  cis^> gis'-!
+  cis''^> gis'-!
   \override AccidentalSuggestion.parenthesized = ##t
   cis,_"paren" gis'
 
index 6e50ca5c448b067850495fbee03e76c04f8835b2..496be95ea06bf1e0f1166de115095e2ec960c316 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "The @code{\\applyOutput} expression is the most flexible way to
@@ -28,10 +28,10 @@ position.
                 ))))
         ))))
 
-\new Voice \relative c' {
+\new Voice \relative {
   \set autoBeaming = ##f
 
-  <d f g b>8
+  <d' f g b>8
 
   \applyOutput #'Voice #mc-squared
   <d f g b>8
index 96ebc548540d1a577611473d773ad817efe893bb..e803a1b5d6aec5f7890a5ec3ade339c3e8ea4b30 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Arpeggios do not overshoot the highest note head.
@@ -6,10 +6,10 @@ The first chord in this example simulates overshoot using
 @code{'positions} for comparison with the correct behaviour."
 }
 
-\relative c' {
+\relative {
   % simulate overshoot for comparison
   \once \override Arpeggio.positions = #'(-3 . 1)
-  <c e g b>1\arpeggio
+  <c' e g b>1\arpeggio
   <c e g b>1\arpeggio
   <f a c>2\arpeggio <g b d f>\arpeggio
 }
index d5ba546c56a61a3a0e2f5c544a133913ec3dbeff..dd4376c4d515ac00efefc9e9cfed9c20b2186a1f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.26"
+\version "2.19.21"
 
 \header {
   texidoc = "Span arpeggios that are not cross-staff do not have
@@ -12,11 +12,11 @@ horizontal spacing problems.
 {
   \consists "Span_arpeggio_engraver"
 }
-\relative c''
+\relative
 {
   \set Staff.connectArpeggios = ##t
   <<
-    {r2. <ges aes c ges'>4\arpeggio |}
+    {r2. <ges' aes c ges'>4\arpeggio |}
     \\
     {\repeat unfold 12 aes,16 <ees aes c>4\arpeggio |}
   >>
index 5eee83a9f18fe8ca52ac7935ac812fd19d652f85..c64a53f1c985befac876b8c58a9b797dc1741d78 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Automatic beams are ended early if a breathing sign is
 encountered."
 }
 
-\relative c' {
+\relative {
   \time 1/1
-  \repeat unfold 8 c8
+  \repeat unfold 8 c'8
   c8 c
   \breathe
   c8 c c c c
index 1151dea94c1ba8e753e760b05761747ac0a83b41..85e89ada5d9cb63cecc4899ffda8726eb5ede574 100644 (file)
@@ -2,12 +2,12 @@
   texidoc="Autobeaming works properly in partial measures."
 }
 
-\version "2.16.0"
+\version "2.19.21"
 
 
 
-\relative c'' {
+\relative {
   \time 6/8
   \partial 2
-  a8 a a a |
+  a'8 a a a |
 }
index 08dd89564ecda328250134a54c41cede806de2b9..148870eebb0924b621096160269e93365b18e7d3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \header {
 
   texidoc = "In 4/4 time, the first and second and third and fourth
@@ -8,8 +8,8 @@ If any shorter notes are included, each beat should be beamed separately."
 }
 \layout { ragged-right = ##t }
 
-\relative c'' {
-  \repeat unfold 8 { a8} |
+\relative {
+  \repeat unfold 8 { a'8} |
   a8 a a a16 a a8 a  a16 a a8 |
   r16 a8. a8 a16 a r8. a16 a8 a16 a |
 }
index 22c838efaad88a7c49222d68589404fe0b98dc2a..786c718942e32882bd7ad9b916809522eb639d3f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 \header {
   texidoc = "The bottom-level contexts in polyphony shorthand are
@@ -10,7 +10,7 @@ This snippet will fail to compile if either voice has an invalid
 }
 
 assertContextId =
-#(define-music-function (parser location id) (string?)
+#(define-music-function (id) (string?)
    (let ((music (make-music 'ApplyContext
                             'procedure
                             (lambda (ctx)
index f7814f4f3b4e1392d0c5c63337c87193cee6d956..891a3a595c857676d699d3690dd182e9d34fd001 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.12"
+\version "2.19.21"
 
 forcedLastBreak =  {} %%  { \break } if needed to match original breaks
 
@@ -50,7 +50,7 @@ half way in measure 13 has been forgotten.
 }
 
 
-sarabandeA =  \context Voice  \relative {
+sarabandeA =  \context Voice  \relative {
   \override Staff.NoteCollision.merge-differently-dotted = ##t
 
 
index afe6f1e273f2f579252ca2ea55d7790223c6fd17..868d893d35f419de8657d0eddf52b4462b9f27a9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "The @code{barNumberVisibility} property controls at what
@@ -6,8 +6,8 @@ intervals bar numbers are printed.
 "
 }
 
-music = \relative c' {
-  \repeat unfold 3 { c2 \bar "" \break \repeat unfold 5 c2 }
+music = \relative {
+  \repeat unfold 3 { c'2 \bar "" \break \repeat unfold 5 c2 }
 }
 
 {
index 6a3e4bf0758c3c6562f4a675fe2e5798063bd86c..44b356da30112ea5724d30ab248442e12f9ece55 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.22"
 
 \header {
   texidoc = "Bar numbers can automatically reset at volta repeats.
@@ -6,13 +6,13 @@
 }
 
 musicWithBarNumberCheck =
-#(define-music-function (parser location n)
+#(define-music-function (n)
   (integer?)
 #{
-  \relative c' {
+  \relative {
     \override Score.BarNumber.break-visibility = ##(#t #t #t)
     \repeat volta 28 {
-     c1 |
+     c'1 |
      c |
      c |
     }
index ca1d1ff2c9188e7d7f0d263c09432c323a8bdf10..da1155b0a13e5eca61b24652c95d218c809e05c7 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 
@@ -16,9 +16,9 @@ be increased.
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \override Score.BarNumber.break-visibility = #all-visible
-  \partial 4 c4 
+  \partial 4 c''
   c1 c c
   \set Score.currentBarNumber = #99999
   \override Score.BarNumber.padding = #3
index 6f13e58a9e5be2d69367308597f84946a434ab9f..e4792a69aa9ec3198080b7611a027b8fe372ebbe 100644 (file)
@@ -3,14 +3,14 @@
   beamlets on the same height."
 
 }
-\version "2.17.6"
+\version "2.19.21"
 
 \paper {
   raggedright = ##t
 }
 
-\relative c' {
+\relative {
   \time 1/4
   \override Beam.breakable = ##t
-  r16 r16. c32[ c16 \break c8. ] r16
+  r16 r16. c'32[ c16 \break c8. ] r16
 }
index 0b70b39495c014e1e9b1218311d2d6ab420c8bc2..8af2e93ec7bb871e7162e106cbd8d4cc902f671d 100644 (file)
@@ -7,13 +7,13 @@ signature. "
 \layout {
   ragged-right = ##t
   }
-\version "2.16.0"
+\version "2.19.21"
 
 
-\relative c'' {
+\relative {
   \time 5/16
   \set beatStructure = #'(2 3)
-  c8[^"(2+3)" c16 c8]
+  c''8[^"(2+3)" c16 c8]
   \set beatStructure = #'(3 2)
   c8[^"(3+2)" c16 c8]
 }
index 0edbf53cd74b6d5dfbe54efe33a9535dd8de3332..8a07c0c510ad9e696e8b2a3f19e1b1f4a30558eb 100644 (file)
@@ -4,10 +4,10 @@
 "
 
 }
-\version "2.17.6"
+\version "2.19.21"
 \layout { ragged-right= ##t }
 
-\relative c''  {
+\relative  {
   \override Score.Beam.breakable = ##t
-  \time 3/16 c16-[ d e \break f-] 
+  \time 3/16 c''16-[ d e \break f-] 
 }
index 22262a85610413e603bc67108f4f81f7cf4e3e43..38b30d4a86b0906776494815eefc50231f50b1d4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc="Some classic examples of broken beams, all taken from
@@ -10,9 +10,9 @@ Scriabin Op. 11, No. 1.
   ragged-right = ##t
 }
 
-music = \relative c'' {
+music = \relative {
   \override Beam.breakable = ##t
-  r2. f8[ c \break
+  r2. f''8[ c \break
   e c f,] r8 r4 a'8[ e \break
   g d g,] r8 r4 f'8[ a, \break
   e' g, bes] r8 r4 <a' a,>8 [ d, \break
index 507b5a5560fe95b880ce6c334f1dc297146d5781..f065ab6ae4a365609c4a7fee2efe94aa71cc1624 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 \header {
   texidoc = "Manual beams do not collide with notes."
 }
@@ -8,17 +8,17 @@
   indent = #0.0
 }
 
-\relative c' \new Staff {
+\relative \new Staff {
 
   <<
     \new Voice {
     \voiceOne
-    \repeat unfold 8 { c8[ c] }
+    \repeat unfold 8 { c'8[ c] }
   }
-    \new Voice \relative c'' {
+    \new Voice \relative {
       \voiceThree
       \autoBeamOff
-      f r e r
+      f'' r e r
       d r c r
       b r a r
       g r f r
     \voiceOne
     \repeat unfold 8 { c8[ c] }
   }
-    \new Voice \relative c'' {
+    \new Voice \relative {
       \voiceThree
       \autoBeamOff
-      f f e e
+      f'' f e e
       d d c c
       b b a a
       g g f f
   
   <<
      \new Voice {
-       \repeat unfold 8 \relative c' {
+       \repeat unfold 8 \relative {
         \voiceOne
-        c8[
+        c'8[
         \voiceTwo
         c'']
        }
      }
-     \new Voice \relative c' {
+     \new Voice \relative {
        \voiceFour
-       s8 f 
+       s8 f' 
        s8 g
        s8 a
        s8 b
@@ -67,7 +67,7 @@
   \break
    <<
      \new Voice {
-       \repeat unfold 8 \relative c' {
+       \repeat unfold 8 \relative {
         \voiceOne
 
         %% We must use a wider interval, otherwise the beam will be
         c'']
        }
      }
-     \new Voice \relative c' {
+     \new Voice \relative {
        \voiceFour
        \autoBeamOff
-       \stemUp f' \stemDown f,
+       \stemUp f'' \stemDown f,
        \stemUp e' \stemDown g,
        \stemUp d' \stemDown a
        \stemUp c \stemDown b
index 8f499e3683c60033311d08750fe3333fbfdfebed..3a663558da25038ebd91a82a6eb96fe140f00660 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 \header {
   texidoc = "Manual beams do not collide with notes."
 }
@@ -8,17 +8,17 @@
   indent = #0.0
 }
 
-\relative c' \new Staff {
+\relative \new Staff {
 
   <<
     \new Voice {
       \voiceOne
-      \repeat unfold 4 { c8[ c] }
+      \repeat unfold 4 { c'8[ c] }
     }
-    \new Voice \relative c'' {
+    \new Voice \relative {
       \voiceThree
       \autoBeamOff
-      b r a r
+      b' r a r
       g r f r
     } 
   >>
       \voiceOne
       \repeat unfold 4 { c16[ c] }
     }
-    \new Voice \relative c'' {
+    \new Voice \relative {
       \voiceThree
       \autoBeamOff
-      b r a r
+      b' r a r
       g r f r
     } 
   >>
index 483f74732b06343cf51ab7bffb3d7632bb4d9d49..620b658ebb245619e4fb1af0cd2f4445e223d77a 100644 (file)
@@ -12,9 +12,9 @@
 \new Staff
 {
   % Stockhausen (without hemiolas)
-  \relative c''' {
+  \relative {
     \stemUp
-    a8[ \clef bass es,,,,
+    a''8[ \clef bass es,,,,
        r8 <b' g'>
        \clef G
        gis''']
index cd52152d10a9bf825bcbcd468f077985a987e84f..6613cf1eadaa72b9f54264761fc46a361303663e 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Beams do not collide with flags.
 "
 }
 
-\relative c' <<
-  { \voiceOne c'8 r } \\
+\relative <<
+  { \voiceOne c''8 r } \\
   { \voiceThree c,8.[ c'16] }
 >>
index 14ab9ae958139209c75cf52f243d6d9e9eb26d68..ebb32806ba9a1bbaa4d6395edbb46960e086da0f 100644 (file)
@@ -10,5 +10,5 @@
 <<
   \relative { e''16[ f] }
   \\
-  \relative c''' { \autoBeamOff g b }
+  \relative { \autoBeamOff g'' b }
 >>
index 6b173a7b1b1705a8ad034843d140ce43bd4087bb..2c35727a7de48e907e0fdcc2c52293046e286621 100644 (file)
@@ -13,11 +13,11 @@ morgenliedBeam = \relative \new Voice {
   c16 b c e g <e b'> |
 }
 
-rachmaninovBeams = \relative c' \new Voice {
+rachmaninovBeams = \relative \new Voice {
   \voiceOne
   \time 4/4
   \key c \minor
-  <c' e c'>8[ <g c g'> <c f> <ees, ees'>] ~
+  <c'' e c'>8[ <g c g'> <c f> <ees, ees'>] ~
   <ees ees'>8[ <c c'> <des des'> <d d'>]
 }
 
index 0a17141e185550bed700d27dda1d1936a9cde6b5..24844a682e24a175d43c1289871490dd189f582d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \header {
     texidoc = "Cross staff  (kneed) beams do not cause extreme slopes."
 }
@@ -7,10 +7,10 @@
 
 \context PianoStaff <<
   \new Staff = "up"
-  \relative c'' <<
+  \relative <<
     {
       \stemDown
-      f16( d b \change Staff = down \stemUp
+      f''16( d b \change Staff = down \stemUp
       \clef treble g ~ < g e>8)
       
       e[ \change Staff = up
index 3008617671f681aa82a68c9dc05c6bbe3eef3b69..6abba5f2ead054776728fe9a6907de14700addbb 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Beamed stems have standard lengths if possible.  Quantization
 is switched off in this example."
 }
 
-\relative c' {
+\relative {
   \override Beam.skip-quanting = ##t
-  f4  f8[ f]  f16[ f]  f32[ f]  f64[ f]  f128[ f]
+  f'4  f8[ f]  f16[ f]  f32[ f]  f64[ f]  f128[ f]
 }
index 21c755c2550a78ced9b33000a693cca2928018c3..bb7a8f81b501a3c3be0b81b8bf8ebdc2e74193e6 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 \header{
 texidoc="
 Beams should behave reasonably well, even under extreme circumstances.
@@ -14,9 +14,9 @@ under normal circumstances, these beams would get knees.  Here
   ragged-right = ##t
 }
 
-extreme = \relative c'' {
+extreme = \relative {
   \stemNeutral
-   g8[ c c,]
+   g'8[ c c,]
    c16[ c'' a f]
   \stemUp 
    c,,32[ c'' a f]
index 3b350cab91e965e315449e3421c6b485a1ae888b..e0b1c4caf05dc48cdfb247e941307674373b6079 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.30"
+\version "2.19.21"
 \header {
 
   texidoc="In feathered beams, stems in knees reach up to the feathered part correctly.
@@ -8,11 +8,11 @@
 
 \layout { ragged-right = ##t}
 
-\relative c' {
+\relative {
   \override Beam.grow-direction = #-1
 %  \hide Beam
   \override Stem.direction = #UP
-  c32[
+  c'32[
   \override Stem.direction = #DOWN
 
   c''32 c32
index 0006976c6e6b9d6b032d7ba98a619456ab163f8c..8dade639bb270e6f064714c297d05f4697d110bd 100644 (file)
@@ -6,7 +6,7 @@
   
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
@@ -18,9 +18,9 @@
 % a linear decrease instead?
 %
 
-\featherDurations #(ly:make-moment 3/4) \relative c'' {
+\featherDurations #(ly:make-moment 3/4) \relative {
   \override Beam.grow-direction = #LEFT
-  c16[
+  c''16[
     c c c
     c c c c ] 
 }
index d0f44becdcc1aaed29e214a5fc3c33b532d7a18c..618732c5ee4537f830b1319d94660ba6cc4f55c6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
     texidoc = "In French style beaming, the stems do not go between beams."
@@ -6,10 +6,10 @@
 
 \layout { ragged-right= ##t }
 
-\relative c'
+\relative
 {
     \override Stem.french-beaming = ##t
-    c16[ c c c]
+    c'16[ c c c]
     c8[ c16 e16 f16 g16 g8]
 }
 
index 31bfcb9e543a5087df02ed589fd2e3697ccea616..f399193e62abb1d72405d17897dd1494ef475ee7 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 \header {
 
   texidoc=" Funky kneed beams with beamlets also work. The beamlets
@@ -10,9 +10,9 @@ should be pointing to the note head.
 
 \layout { ragged-right = ##t}
 
-\relative c' {
+\relative {
   \once \override Stem.direction = #UP
-  c16
+  c'16
   \once \override Stem.direction = #DOWN
 
   c''8 c,,16
index 1139907857b4eb42173deb9e095633278cacc66e..6c3e9c46a8fdda479a71bca26e446697d7753a71 100644 (file)
@@ -11,12 +11,12 @@ beam. This is in disagreement with the current algorithm."
 
 \layout { ragged-right = ##t} 
 
-\relative c'
+\relative
 {
   \override Beam.auto-knee-gap = #7
   \set subdivideBeams = ##t         
   \time 8/8
-  c,16[  g'''16  
+  c16[  g'''16  
         c,,,16  g'''16 
         c,,,16  g'''16                      
         c,,,16  g'''16 ]
index 4d8398ac6da165656e84187eceea9cd15854e16e..5b942bce23151530c2a9d763ecb59184451a952c 100644 (file)
@@ -6,9 +6,9 @@
 \layout {
   ragged-right = ##t
   }
-\version "2.17.6"
+\version "2.19.21"
 
-\relative c'' {
+\relative {
   \override Stem.max-beam-connect = #1
-  c16[ c16]
+  c''16[ c16]
 }
index 5ec8e4b5a6aeecf8c36c1a6c104e4ad475540c41..a7c3208be23a7d491b3b4dfc462eb5e299a0c729 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "
@@ -7,9 +7,9 @@ broken beat units.  This should work in tuplets as well as in ordinary time.
 "
 }
 
-\relative c'' {
+\relative {
     \tuplet 3/2 {
-      c8. c16 c8
+      c''8. c16 c8
     }
    \tuplet 3/2 {
       c8 c16 c8.
index a5c7a8175881af330a77912b935628344d5a7f85..29f62bfe95577a4a7eaebeb3e86ee2ac80786f00 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 
@@ -12,9 +12,9 @@
   ragged-right = ##T
 }
 
-\relative c'' {
+\relative {
   \override Score.SpacingSpanner.shortest-duration-space = #3.0
-  c4-\bendAfter #+5
+  c''4-\bendAfter #+5
   c4-\bendAfter #+4
   c4-\bendAfter #+3
   c4-\bendAfter #+2
index ecf0f65244f20f216e86ccc600b142ff4408a9de..5b0fb52f84287214c35088c2a1718f6a6929e86a 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Breathing signs are positioned correctly on custom staves
 which use @code{line-positions}."
 }
 
-\relative c' {
+\relative {
   \override Staff.StaffSymbol.line-positions = #'(-7 -5 -3 -1)
   b2 \breathe b
   \override BreathingSign.direction = #DOWN
index 39f464eee964746b9a7b53de15b1bc132ffb02d8..678559ef3bd6d37fbac6193685d04af1cd6be4a8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.18.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Chord change detection in repeat alternatives
@@ -14,8 +14,8 @@ first alternative.
       \chordmode { \repeat volta 3 { g1 | }
                   \alternative { {c |}  {c4 g c c |} {g2 c |} } } }
     \new Voice {
-      \relative c'' {
-       \repeat volta 3 { g4 f e d | } 
+      \relative {
+       \repeat volta 3 { g'4 f e d | } 
        \alternative { {c r r r |} {c g c r |} {b g c2 |} } }
       \bar "|." }
   >>
index f1f2521a545f0a8e6729396a11d465238f5fa436..61f41b4953da362c0500f7ce7d68318daac0c899 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "
@@ -11,9 +11,9 @@ right = \relative c'' {
   s2
 }
 
-left = \relative c' {
+left = \relative {
   % This tremolo contains just two notes (but three lilypond events/commands!)
-  \repeat tremolo 4 { f,16 \change Staff = "right" f'} 
+  \repeat tremolo 4 { f16 \change Staff = "right" f'} 
 }
 
 \score {
index 666a2c24e1ed0cd46cc03ff427baee772fc10e12..fd43b8ea8be689573b03efedbd36e90c490ce09c 100644 (file)
@@ -5,12 +5,12 @@
 
 }
 
-\version "2.16.0"
+\version "2.19.21"
 \paper{
   ragged-right = ##t
 }
 
-\relative {
+\relative {
   \stemDown
   \repeat tremolo 16 { d32 a'32 }
 }
index 4598cf4f340da6f2eaffc9ad083b5d3fe9e1e92a..256264ae819fb54a25343b898c89ddfa1f407682 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
 
@@ -15,7 +15,7 @@ number should be centered."
 #(set-global-staff-size 35)
 
 clefVariations =
-#(define-music-function (parser location type)(string?)
+#(define-music-function (type)(string?)
    #{
      \once \omit Staff.Clef s4
      \override Staff.Clef.full-size-change = ##t
index ab82c493b1f193361490150af5b6424ca4a7d226..e83fb4b8a78b464978b9deda668722d0d9501973 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.18"
+\version "2.19.21"
 
 \header {
 
@@ -12,11 +12,11 @@ These settings also need to apply to clefs on new lines."
 \layout { ragged-right = ##t  }
 
 
-\relative c' {
+\relative {
   \override Staff.ClefModifier.break-visibility = #all-invisible
 
   \clef "treble_8"
-  c2 c |
+  c'2 c |
   c c | \break
   c \clef "tenor" c |
   \revert Staff.ClefModifier.break-visibility
index 5757b9c8a7e4f678abe4323692979dbb518ab72d..330a4e36f7c9cd495d7f9e1a4eb688d8214ded91 100644 (file)
@@ -19,15 +19,15 @@ The result will be files named
 
 }
 
-\version "2.16.0"
+\version "2.19.21"
 
 #(ly:set-option 'clip-systems)
 #(define output-suffix "1")
 
 origScore = \score{
-    \relative c' {
+    \relative {
       \set Staff.instrumentName = #"bla"
-      c1
+      c'1
       d
       \grace c16
       e1
index 38f8d4144c1446c5cfd3464bf73b81fa175489ce..c0d28c0bafc3977f227afb2a79a74d4896383707 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 \header {
 
     texidoc = "If dotted note heads must remain on the left side,
@@ -8,10 +8,10 @@ collision resolution moves the dots to the right."
 
 \layout { ragged-right = ##t }
 
-\relative {
+\relative {
   \clef bass
   \override Staff.NoteCollision.prefer-dotted-right = ##t
-  << <b g' >4 ^"prefer-dotted-right = #t" \\ { c8. d16 } >>
+  << <b, g' >4 ^"prefer-dotted-right = #t" \\ { c8. d16 } >>
   << <b g' >4 \\ { d8. d16 } >>
   << <b g' >4 \\ { f'8. d16 } >>
   << <c a' >4 \\ { g'8. d16 } >>
index 7876e6a7fde80cd5d278c7167921ff575908613a..e22888ebbc453947d66ddeb28a4035cefcc31925 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 \header {
   texidoc =
 
@@ -12,10 +12,10 @@ if the black note heads are from 8th or shorter notes.
 \layout { ragged-right= ##t }
 
 
-\context Staff  \relative c'' <<
+\context Staff  \relative <<
   {
     \override Staff.NoteCollision.merge-differently-headed = ##t
-    c2 c8 c4.
+    c''2 c8 c4.
     c2
   }\\
   {
index 3813a092654577607d61ac60e312a9c7fda90a42..e1601f9645894ebf98b4afed7fad4ebee88b2fec 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
  texidoc = "Mixed collisions with whole and longer notes
@@ -6,10 +6,10 @@
 }
 
 \layout{ragged-right=##t}
-\relative c'' {
+\relative {
   \override Score.NoteHead.style = #'altdefault
   <<
-    { c1 c2*2 c1 c4*4 c1 c\breve*1/2 c\breve*1/2 b\breve*1/2 }
+    { c''1 c2*2 c1 c4*4 c1 c\breve*1/2 c\breve*1/2 b\breve*1/2 }
     \\
     { c2*2 c1 c4*4 c1 c\breve*1/2 c1 b\breve*1/2 c\breve*1/2 }
  >>
index 8f2c608e147361fbb83356e029a8b17927cc698b..6dd0a415545fbeba72c63b831120537d34c54a7d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header{
   texidoc = "Each grob can have a color assigned to it.
@@ -8,11 +8,11 @@ Use the @code{\\override} and @code{\\revert} expressions to set the
 
 \paper { ragged-right = ##t }
 
-\relative c' {
+\relative {
   \override Accidental.color = #darkgreen
   \override Beam.color = #cyan
   \override NoteHead.color = #darkyellow
-  c4
+  c'4
   \override NoteHead.color = #red
   f
   \override NoteHead.color = #darkmagenta
index 7f28cf4d315d4b66a192509e967c88576a9b972c..f5f507cb800e9bf64fc7512b90c2ea92dab2cbcb 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
 texidoc = "
@@ -17,7 +17,7 @@ Note head completion may be broken into sub-bar units by setting the
   }
 }
 
-\context Staff \relative {
+\context Staff \relative {
   \time 9/8
   \set completionUnit = #(ly:make-moment 3/8)
   g'1.. r2
index 531536147d42d7e883663cfdc351e71836dd1320..55de7c0cb6e19dd042117b1f85a6b52b880fb42f 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.19.16"
+\version "2.19.21"
 
 \header {
     texidoc = "Simple-fraction components of a compound time signature are numeric regardless of the time signature style.
 "
 }
 
-\relative b' {
-  \compoundMeter #'(2 2) b1
+\relative {
+  \compoundMeter #'(2 2) b'1
   \compoundMeter #'(4 4) b1
   \compoundMeter #'((1 1) (2 2)) b\breve
   \compoundMeter #'((2 2) (4 4)) b\breve
index 2f10281825beba9df08dcd9847ce2c73db886cba..2437efad474cb1105e64a97ef0da8d9048818278 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
     texidoc = "Create compound time signatures. The argument is a Scheme list
@@ -15,10 +15,10 @@ as @code{\\compoundMeter #'((3 2 8))} or shorter
 
 
 
-\relative c' {
+\relative {
   \override Staff.TimeSignature.break-visibility = ##(#f #t #t)
   \compoundMeter #'(1 2 3 4 8)
-  \repeat unfold 10 c8 \repeat unfold 20 c16 \break
+  \repeat unfold 10 c'8 \repeat unfold 20 c16 \break
 
   \time 3/4
   \repeat unfold 6 c8 \repeat unfold 12 c16 \break
index 8f222b19559199268a3c57c5d8e0cd200bc514c6..64d606fb8bd9b503b643540d0b19a2997ac6c110 100644 (file)
@@ -1,7 +1,7 @@
 \version "2.19.21"
 
-instrument = \relative c' {
-  \repeat unfold 40 { c8 }
+instrument = \relative {
+  \repeat unfold 40 { c'8 }
 }
 \addQuote "instrQuote" \instrument
 
index 0f9c8de1d62f9b0ba1ae64514b09272331b2d19d..b532663e28b15820afc622fe2d35c06ff1e50303 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Clefs for cue notes at the start of a score should print the
 standard clef plus a small cue clef after the time/@/key signature."
 }
 
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
 \addQuote vIQuote { \vI }
 
 Solo = \relative c'' {
index 8e70bf18a8d0c34a95d0c4943ccac012bd9f49c8..a94fdecbee30362e8efd83fcbb63f5e22726548d 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Clefs for cue notes should not influence the printed key signature."
 }
 
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
 \addQuote vIQuote { \vI }
 \score {
   \new Staff {
index cf1c1605a3b8c1f890d8adcc138e239b6c25cdc5..7b6e6f196959c695ba351c2d431b5674c4f4a0b9 100644 (file)
@@ -10,7 +10,7 @@ Cue notes going over a line break should print the standard clef on the new
 line plus an additional cue clef after the time/@/key signature."
 }
 
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
 \addQuote vIQuote { \vI }
 
 Solo = \relative {
index bf13c22974a2553e2f4a6fe5e84474c6e54a3ac2..a0a78660eec490535f44210043249a719ea51e20 100644 (file)
@@ -5,7 +5,7 @@
 by using parentheses or brackets around the transposition number."
 }
 
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
 \addQuote vIQuote { \vI }
 
 Solo = \relative {
index 8882ef11b6fc04f06bc63423381eb08b34a03edd..e4ebcb0654aefdce8855cac7201a1a6383a0bcec 100644 (file)
@@ -4,7 +4,7 @@
   texidoc = "Transposition for clefs for cue notes."
 }
 
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+vI = \relative { \clef "treble" \repeat unfold 40 g'4 }
 \addQuote vIQuote { \vI }
 
 Solo = \relative {
index f87668ecc4b6fe34850c68e58241211f4b01a750..2d60544bcaf0653fe125e83aba95b96331561a68 100644 (file)
@@ -5,7 +5,7 @@
 notes and a canceling clef after the cue notes."
 }
 
-vI = \relative c'' { \clef "treble" \repeat unfold 16 g4 }
+vI = \relative { \clef "treble" \repeat unfold 16 g'4 }
 \addQuote vIQuote { \vI }
 
 Solo = \relative {
index 4aa75b6b17fa072c43576e6b06fdfbe21d7df3d8..fcd8394e3867a5f8e9dcd04157032e9729d46446 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 
 \header{
 
@@ -11,7 +11,7 @@ opposed to music functions, a direction indicator is not required."
 \layout { ragged-right = ##t }
 
 dynScript =
-#(define-event-function (parser location text) (markup?)
+#(define-event-function (text) (markup?)
    (make-dynamic-script text))
 
 \relative {
index 7368dfae34f53c847644ba8183e8aec7c6045ddd..8a6a1a5c943749a7e454da080cdbbf18e71b121b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 #(use-modules (srfi srfi-13)
               (ice-9 format))
 
@@ -27,7 +27,7 @@
    (make-column-markup (string-split str #\NewLine)))
 
 test =
-#(define-void-function (parser location harmless strings)
+#(define-void-function (harmless strings)
   ((string?) pair?)
   (let ((input (car strings))
        (output (cdr strings))
@@ -36,7 +36,7 @@ test =
     (if harmless
      (ly:progress "Test unequal: ~a.\nin  = ~a\nout = ~a\n"
       harmless input output)
-     (ly:input-warning location "Test unequal: BUG.\nin  = ~a\nout = ~a\n"
+     (ly:input-warning (*location*) "Test unequal: BUG.\nin  = ~a\nout = ~a\n"
       input output)))))
 
 %%%
index 1c649d6d20afb46c24fa1dfb9f54dcbec282d680..23fa9adb6b6312e77cca9722236248e63cb729f4 100644 (file)
@@ -1,16 +1,16 @@
 
-\version "2.16.0"
+\version "2.19.21"
 \header {
   texidoc = "Dots move to the right when a collision with the (up)flag happens."
 }
 \layout { ragged-right = ##t}
 
 
-\relative c''
+\relative
 {
   \time 8/4
   \set Staff.autoBeaming = ##f
-  a,16.
+  a16.
   g''16.
   a,4. a8 a8. a16. c,16. g16.
 }
index f560324a6c572b8e56a9ad45fa7d12f4c0eab3d5..2b4e3fddad351c089e74cab2517601e0bb8cad15 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "For volte, the style of double repeats can be set
   using @code{doubleRepeatType}."
 }
 
-\relative c' {
+\relative {
   \repeat volta 1 {
-    c1
+    c'1
   }
   \mark "default"
   \repeat volta 1 {
index 7718979138f61a582131e7a4ec5aa57c3b7e5db0..1dd8da5a050184b93bd35b4c2c8c686ea4b87c4a 100644 (file)
@@ -16,7 +16,7 @@
     \bar ":|.:"
     c1
   }
-  \new Staff \relative c' {
-    \repeat unfold 4 { c1 }
+  \new Staff \relative {
+    \repeat unfold 4 { c'1 }
   }
 >>
index 69128631f656a33ad542fd95606c1f97813efc01..8b407c5339c06d68f96b40b6c7db291fba176f0f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Setting the style of a @code{DynamicTextSpanner} to @code{'none}
@@ -6,9 +6,9 @@ to hide the line altogether should also work over line breaks.
 "
 }
 
-\relative c'' {
+\relative {
   \override DynamicTextSpanner.style = #'none
-  c2\cresc g,2
+  c''2\cresc g,2
   \break
   g2 c'2\f
 }
index ee4132b80c0681662078a9d59c03effc6e8c7503..15c3d2510a47465dcf09775c3c2079e2cc94ec29 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 
 \header {
 texidoc = "Postfix functions for custom crescendo text spanners.  The spanners
@@ -8,10 +8,10 @@ otherwise the spanner start will rather be assigned to the next note."
 
 % Two functions for (de)crescendo spanners where you can explicitly give the
 % spanner text.
-mycresc = #(define-music-function (parser location mymarkup) (string?)
+mycresc = #(define-music-function (mymarkup) (string?)
   (make-music 'CrescendoEvent 'span-direction START
               'span-type 'text 'span-text mymarkup))
-mydecresc = #(define-music-function (parser location mymarkup) (string?)
+mydecresc = #(define-music-function (mymarkup) (string?)
   (make-music 'DecrescendoEvent 'span-direction START
               'span-type 'text 'span-text mymarkup))
 
index aa3d171c6baddb0519ff8e25872adece032b6543..58eb5440d20a482ad9fc76f240eb7fdf8640a79b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.22"
 
 \header {
   texidoc = "Music events can be extracted from a score with event
@@ -15,7 +15,7 @@ listeners."
 
 st =
 #(define-music-function
-  (parser location text)
+  (text)
   (string?)
 #{
   \override TextSpanner.bound-details.left.text = $text
@@ -31,7 +31,7 @@ vlnone = \new Staff {
     #CENTER
   \override TextSpanner.bound-details.right.text =
     \markup { \draw-line #'(0 . -1) }
-\relative c' {
+\relative {
   \key d \major
   \tempo 4 = 96
 
index a49892c140b5b0e4b1b33ba004325d3f653b31b1..263d44fb101c4e3e488640e7f5cc08401960bb04 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.19.12"
+\version "2.19.21"
 
 \header {
   texidoc = "LilyPond creates hairpins found in Ferneyhough scores.
 "
 }
 
-\relative c'' {
+\relative {
   \override Hairpin.stencil = #flared-hairpin
-  a4\< a a a\f
+  a'4\< a a a\f
   a4\p\< a a a\ff
   a4\sfz\< a a a\!
   \override Hairpin.stencil = #constante-hairpin
index 73dce5c74467f91c11f9dfaf4fda8a950aff1dc6..a810f594f6a17cd88068c0bfeaabd3bb4af28a6f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 \header {
 texidoc = "Figured bass supports numbers with slashes through
@@ -25,7 +25,7 @@ bassfigures = \figuremode {
 #(define (adjust-slash-stencil-default num forward stencil mag)
     stencil)
 
-unsetExceptions = #(define-void-function (parser location) ()
+unsetExceptions = #(define-void-function () ()
 ;  (set! horizontal-slash-interval horizontal-slash-interval-default)
 ;  (set! adjust-slash-stencil adjust-slash-stencil-default)
 )
index 8b62bc0a3f3ea1c002e55b44567d52fd7e51f6d4..06cbfa0e75f8780269d9469e0218f887ed43a7a2 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Scripts right of a chord avoid dots."
 }
 
-\relative c' {
+\relative {
   \set fingeringOrientations = #'(right)
-  <c-\rightHandFinger #1 >4.. <d-3 f>4. r8.
+  <c'-\rightHandFinger #1 >4.. <d-3 f>4. r8.
 }
index 50faefcdabda53332fa48b666860ec824c83ef57..cd78ef7d8c2782a0f4ffaa4d207e515c6be58436 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.16"
+\version "2.19.21"
 
 \header {
   texidoc = "Horizontally-offset @code{Fingerings} align along the Y axis when
@@ -6,8 +6,8 @@ they are within @code{FingeringColumn.snap-radius} of each other.
 "
 }
 
-\relative f'' {
+\relative {
   \set fingeringOrientations = #'(left)
-  <cis-1 a-1 e-1>4
+  <cis''-1 a-1 e-1>4
   <ceses-1 a-1 e-1>4
 }
index d4d2551b2e4a74c97ff79c55a7dc2123ef1578fb..673bace6192a1687ceeffb4e002cac9f1a39fea3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.10"
+\version "2.19.21"
 
 \header {
   texidoc = "Horizontal @code{Fingering} grobs that collide do not intersect.
@@ -7,11 +7,11 @@ by the @code{FingeringColumn} grob.
 "
 }
 
-\relative c'' {
+\relative {
    \set fingeringOrientations = #'(left)
    \override Fingering.staff-padding = #'()
    \override Fingering.add-stem-support = ##f
-   <d-0 c-3 f,-0>4 <d-0 f,-3 e-0>
+   <d''-0 c-3 f,-0>4 <d-0 f,-3 e-0>
    <d^0 c^3 f,-0> <d^0 f,-0> <c^3 f,-0>
    <d-0 c-0 b-0 a-0 g-0 f-0>
 }
index ba8d1525e5b9a917aa1aff9a0ed182847374d32f..ab6e02a81ebca59e09afafac408cfe5cc8161600 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Fingering directions in directed and undirected contexts."
@@ -7,11 +7,11 @@
 \layout { ragged-right= ##t }
 
 {
-  \relative c''
+  \relative
   \new Voice {
     \tempo "\\voiceTwo"
     \voiceTwo
-    c2^5 <c^5>
+    c''2^5 <c^5>
     c_5 <c_5>
     c-5 <c-5>
     \tempo "\\oneVoice"
index 17ab7e2b0d9bb294fbeebd0cd83e5b85bf11bd3f..6440bb081ea8ca6534d38273a50d807e9e8ef69f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.22"
 
 \header {
 texidoc = "Flags can be drawn straight in the style used by
@@ -7,7 +7,7 @@ Stockhausen and Boulez.
 }
 
 
-stemLength = #(define-music-function (parser location length) (number?)
+stemLength = #(define-music-function (length) (number?)
   "Set the length of the next stem explicitly."
   #{
     \once \override Stem.length-fraction = #length
index ce150f885dbd1e6b79c27239ad9822020da10331..bc1a7162831afbb766d2200d31bb21cf81d3b14f 100644 (file)
@@ -2,15 +2,15 @@
   texidoc = "When broken, glissandi can span multiple lines."
 
 }
-\version "2.17.6"
+\version "2.19.21"
 \paper {
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \override Glissando.breakable = ##t
   \override Glissando.after-line-breaking = ##t
-  d1\glissando
+  d''1\glissando
   \break s1
   \break s1
   \break s1
index 29659bac612682dda5a1b94e68ac88d87c546fdd..41fd3f1f0351d4b8f496010c3028c5db79c2f942 100644 (file)
@@ -1,14 +1,14 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Broken glissandi anticipate the pitch on the next line."
 }
 
 \score {
- \relative c' {
+ \relative {
    \override Glissando.after-line-breaking = ##t
    \override Glissando.breakable = ##t
-   c1\glissando
+   c'1\glissando
    \break
    c'1
    \break
 }
 
 \score {
- \relative c' {
+ \relative {
    \override Glissando.after-line-breaking = ##t
    \override Glissando.breakable = ##t
-   c1\glissando
+   c'1\glissando
    \break
    c'1
    \break
index baf5993d99021856113d5b2de773e17eebdd141c..80297f8a41230406fd49421ce8a98c5e7ab2b95d 100644 (file)
@@ -2,13 +2,13 @@
   texidoc = "If broken, Glissandi anticipate on the pitch of the next line."
   
 }
-\version "2.17.6"
+\version "2.19.21"
 \paper {
   ragged-right = ##T }
 
-\relative c'' {
+\relative {
   \override Glissando.breakable = ##t 
-  d1 \glissando |
+  d''1 \glissando |
   \break
   c,1
 }
index 5611773909407757ae173a4a733ad9b5abc0566e..4040202c27b31e5b73300498f08ec4e03039cd00 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Individual glissandi within a chord can be tweaked."
 }
 
-\relative c' {
+\relative {
   \once \override Voice.Glissando.style =
     #(lambda (grob)
        (if (= 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
-  <d f a>1 \glissando s1 <f a c>
+  <d' f a>1 \glissando s1 <f a c>
 }
index 49788a606204f6c0cec709c282b7b03378a63504..3725d2a2f639294838f484d7ced584ecf97c9723 100644 (file)
@@ -4,10 +4,10 @@
 finishing the grace section."
 
 }
-\version "2.16.0"
+\version "2.19.21"
 
-\relative c''' {
+\relative {
   \voiceOne
-  c4
+  c'''4
   \grace d8 c4
 }
index 1a150fcc8aba9ebb6264c12f086fd5cf7efe7b70..b139991588b0fc794ddb1eb302079efa7c0f68f1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.5"
+\version "2.19.21"
 
 \header {
 
@@ -9,9 +9,9 @@
 
 \layout { ragged-right= ##t }
 
-\relative c' {
+\relative {
   \repeat volta 2 {
-    c1
+    c'1
   }
   \repeat volta 2 {
     \grace {c8 } c4
index 2da785101c44fce72e7f85aa01966f8ed6cd75e7..bee36fb2d790324c7c46bc085264ba6f6aeafa25 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 
@@ -9,9 +9,9 @@ followed by a crescendo al niente should only print one circle."
 
 \layout { ragged-right = ##t } 
 
-\relative c'' {
+\relative {
   \override Hairpin.circled-tip = ##t
-  c1\< d\! d\> c\!
+  c''1\< d\! d\> c\!
   \override Hairpin.to-barline = ##f
   e\> c\< d\! \break
   c\< \break
index 8e860fa22ac4c1d075dbf7fd435ed5fb94ce428b..4754d34c6b58f84027ca974b7f07bb7d74347e78 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc ="Hairpin crescendi may be dashed. "
@@ -6,7 +6,7 @@
 }
 
 
-\relative c' {
+\relative {
   \override Hairpin.style = #'dashed-line
-  f2\< g c1 d4\> b a gis\! }     
+  f'2\< g c1 d4\> b a gis\! }     
 
index 3c70b0733069208837226bb34bc89edd48a776e5..c428efb628d47b99d50d7b8a43a1d430fae0c105 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 
@@ -11,9 +11,9 @@ into them."
 
 \layout { ragged-right = ##t } 
 
-\relative c'' {
+\relative {
   \override Score.PaperColumn.keep-inside-line = ##f
-  c4 \> c4 c4\! c4_\ff \> c4 c4\!\p
+  c''4 \> c4 c4\! c4_\ff \> c4 c4\!\p
   
   <<
     { c\< c\! }
index 9527267ff71df345e88ee5a89d7b0d318af3c6e1..05557af9e0741b1f6b5e3f8d0e7651da731300f8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Bound padding for hairpins also applies before following
@@ -7,9 +7,9 @@ is not scaled down.
 "
 }
 
-\relative c' {
+\relative {
   \override Hairpin.to-barline = ##f
-  c2\>
+  c'2\>
   \dimTextDim
   c2\>
   \dimHairpin
index 43129b436856aa303546a00d58fc1b628494206e..2a9501629841ddae78e5e4ff4d0bc3a164f46740 100644 (file)
@@ -15,7 +15,7 @@
     >>
     \new GrandStaff <<
       \new Staff \relative { a'^\< a a a a a a a a a a a\! }
-      \new Staff \relative c'' { \repeat unfold 12 a4 }
+      \new Staff \relative { \repeat unfold 12 a'4 }
     >>
     \new GrandStaff <<
       \new Staff \relative { a'4 a a a s1 a4 a a a }
index be083aaacf57b7ac6165730c966378c2a694d295..b9c69948fd765058eb06d13a211a7d6204d40056 100644 (file)
@@ -5,9 +5,9 @@ should end at that bar line. "
 
 }
 
-\version "2.17.6"
+\version "2.19.21"
 
-\relative c'' {
+\relative {
   \override Hairpin.bound-padding = #1.0
-  c4\< c2. c4\!
+  c''4\< c2. c4\!
 }
index e239adc6bbad15b1607e50d8b27c149aee983bbd..f3e8dd5e9f0c54f6e12bfcac1bb759bbfc5e0484 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 #(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))
@@ -13,10 +13,10 @@ the diagrams here violate the standard (7 pedals with divider after third), so
 a warning is printed out, but they should still look okay."
 }
 
-\relative c'' {
+\relative {
   \override Score.PaperColumn.keep-inside-line = ##f
   % Sanity checks: #pedals != 7:
-  c1^\markup \harp-pedal #"^-v|--"
+  c''1^\markup \harp-pedal #"^-v|--"
   % Sanity checks: no divider, multiple dividers, divider on wrong position:
   c1^\markup \harp-pedal #"^-v--v^"
   c1^\markup \harp-pedal #"^|-v|--|v^"
index d0718337681beaec115daa7d93b906b23d90d38d..b835d21a284bbc9a6981fa92c1e4d1d87da1a9b1 100644 (file)
@@ -1,16 +1,16 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Harp pedals can be tweaked through the size, thickness and 
 harp-pedal-details properties of TextScript."
 }
 
-\relative c'' {
+\relative {
   \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^"
+  c''1^\markup \harp-pedal #"o^ovo-|vovo-o^"
   c1^\markup \override #'(harp-pedal-details . (
                   (box-width . 0.6)
                   (box-height . 0.3)
index 1815c55b76f93ed21b594ca7eeb0f1b4a226ddf5..b99142a0c08f0d986a5c2fef8957bad9694fc235 100644 (file)
@@ -7,10 +7,10 @@ modifier."
 
 }
 
-\version "2.19.21"
+\version "2.19.22"
 
 myDisplayMusic =
-#(define-void-function (parser location music)
+#(define-void-function (music)
  (ly:music?)
  (display-scheme-music music (current-error-port)))
 
index 15f3f43e60d824d662d3baab8f095e92ae7098fa..a5ee9cdf2429b75ace5970abf32187ca2d6adca3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "
@@ -11,9 +11,9 @@
   indent = 0\cm
 }
 
-\relative c' {
+\relative {
   \set Staff.shortInstrumentName = "foo"
-  f1 | f1 | f1 |
+  f'1 | f1 | f1 |
   f1\< | f1 | f1\! |
 }
 
index 0ce9495f9e67b5a5898676955bc00bde828b5363..fb956065683a55b9e2c0b4e034755da9fdbd6e3b 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.19.21"
 \header {
   texidoc = "Instrument names are also printed on  partial starting measures."
 }
@@ -8,7 +8,7 @@
 
 
 
-\relative c'' { \set Staff.instrumentName = "foo" \partial 4 c4 c1 }
+\relative { \set Staff.instrumentName = "foo" \partial 4 c''4 c1 }
 
 
 
index 9110d07fa4bf608878274dd32d6ebd266a493d0a..c84ef3eda1dac0a9d9f24708c13bb81c5181b699 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Moving the @code{Volta_engraver} to the @code{Staff}
 context does not affect @code{InstrumentName} alignment."
 }
 
-testMusik =  \relative c'' {
+testMusik =  \relative {
   \repeat volta 2 {
-    c1 \break
+    c''1 \break
   } \alternative {
     { c1 \break }
     { c1 \break }
@@ -15,10 +15,10 @@ testMusik =  \relative c'' {
 }
 
 \score {
-  \new Staff \relative c' {
+  \new Staff \relative {
     \set Staff.shortInstrumentName = #"Instr."
     \repeat volta 2 {
-      c1 \break
+      c'1 \break
     }
     \alternative {
       { c1 \break }
index 1bae1b68fa35afe5a65044a1589e843ce60ad09e..0a721ba68ce19b2359cfd088fc7af9f3732ea5a6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.7"
+\version "2.19.21"
 
 \header {
   texidoc = "When a custom key signature has entries which are
@@ -10,10 +10,10 @@ octave defined in @code{keyAlterations}.
 "
 }
 
-\relative c' {
+\relative {
   \set Staff.keyAlterations = #`(((0 . 3) . ,SHARP)
                                ((0 . 5) . ,FLAT)
                                ((0 . 6) . ,FLAT))
-  fis fis as bes
+  fis' fis as bes
   fis' as, as bes
 }
index 547fe7688ed9447ca574a6f2dc704bb115efaf46..5954f2c0138970deebb741732ee8dc51917839fe 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.19.7"
+\version "2.19.21"
 
 \header { texidoc = "By setting @code{Staff.keyAlterations} directly,
 key signatures can be set invidually per pitch.
@@ -9,10 +9,10 @@ key signatures can be set invidually per pitch.
 \layout {
     ragged-right = ##T
 }
-\relative c'
+\relative
 \new Staff {
     \set Staff.keyAlterations = #`(((0 . 3) . ,FLAT) ((1 .  2) . ,SHARP))
-    f8 a c e
+    f'8 a c e
     \set Staff.keyAlterations = #`(((0 . 4) . ,DOUBLE-SHARP) ((1 .  2) . ,FLAT))
     e a, g a
 }
index 3ede492846d38b597bf2b82b67afcbbb1f8a33f3..209a3469f1f075e24cff45e16b2c590ea5e0d507 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.19.7"
+\version "2.19.21"
 \header{
 texidoc="
 Key signatures may appear on key changes, even without a barline.  
@@ -15,10 +15,10 @@ are created also on a clef change.
     ragged-right = ##T
 }
 
-\relative c'
+\relative
 {
     \set Staff.createKeyOnClefChange = ##t  
-    \key bes \major c2
+    \key bes \major c'2
                                %    \key c \major %  \minor
     \key es \major %  \minor
     c2
index cc59cbd152beacd23438231400e1eb9831656637..fdf6da5ee2e455313d4c4d9fac6dd63713cb5b7c 100644 (file)
@@ -12,20 +12,20 @@ the @code{TextScript} grob.
           
       }
 
-\version "2.17.6"
+\version "2.19.22"
 \layout { ragged-right = ##t }
 
-withPaddingA = #(define-music-function (parser location padding music) (number? ly:music?)
+withPaddingA = #(define-music-function (padding music) (number? ly:music?)
                 #{ \override TextScript.padding = #padding
                 $music 
                 \revert TextScript.padding #})
 
-withPaddingB = #(define-music-function (parser location padding music) (number? ly:music?)
+withPaddingB = #(define-music-function (padding music) (number? ly:music?)
                 #{ \override TextScript.padding = #(* padding 2)
                 $music 
                 \revert TextScript.padding #})
 
-withPaddingC = #(define-music-function (parser location padding music) (number? ly:music?)
+withPaddingC = #(define-music-function (padding music) (number? ly:music?)
                 #{ \override TextScript.padding = #(+ 1 (* padding 2))
                    $music 
                    \revert TextScript.padding #})
index 1b3bccc8a3dd41ec84f69b70d7aab8e0a38b9a8a..9cfa44915475a51894b15f250bee4424898e335e 100644 (file)
@@ -2,13 +2,13 @@
   texidoc = "Arrows can be applied to text-spanners and line-spanners (such as the Glissando)"
 }
 
-\version "2.17.6"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \override TextSpanner.bound-padding = #1.0
   \override TextSpanner.style = #'line
   \override TextSpanner.bound-details.right.arrow = ##t
@@ -23,6 +23,6 @@
   \override Glissando.arrow-length = #0.5
   \override Glissando.arrow-width = #0.25
   
-  a8\startTextSpan gis8 a4 b4\glissando
+  a'8\startTextSpan gis8 a4 b4\glissando
   b,4 | g' c\stopTextSpan c
 }
index 2d77edd91d3ff5fe9cbe393b6b73ad7e61320510..c3452d743963e6e04f012e3bc911d5f07f01e6eb 100644 (file)
@@ -1,14 +1,14 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Cover all line styles available."  
 }
 
-\relative c'' {
+\relative {
   \override Glissando.breakable = ##t
 
   s2
-  d2 \glissando d'2
+  d''2 \glissando d'2
   \override Glissando.style = #'dashed-line
   d,2 \glissando d'2
   \override Glissando.style = #'dotted-line
index 23ff272078645e77309f6694a0ef82a6cfe3896c..91b239a3e0c6309963d9b3ff99f7152689ccc2d9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "Test warning\n"))
@@ -15,8 +15,8 @@ are commented out. Comment them in to check the output manually.
 %%%% message functions of the Input class:
 #(display "\nMessage functions of the Input class:\n" (current-error-port))
 
-messageTest = #(define-music-function (parser location) ()
-   (ly:input-message location "Test ly:input-message" )
+messageTest = #(define-music-function () ()
+   (ly:input-message (*location*) "Test ly:input-message" )
    (make-music 'Music))
 
 {
index b01227ac9a9ff1c0909ed640d70f64c76ab2731d..76d2bd77dca207559e86d727f462f52616365646 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 \header {
   texidoc = "With the @code{\\lyricsto} mechanism, individual lyric
     lines can be associated with one melody line. Each lyric line
@@ -7,9 +7,9 @@ can be tuned to either follow or ignore melismata."
 
 
 <<
-  \new Voice = "bla" \relative c'' {
+  \new Voice = "bla" \relative {
     \autoBeamOff
-    c2( d4) e8[ c b c] f4
+    c''2( d4) e8[ c b c] f4
   }
   \new Lyrics  \lyricsto "bla"  { bla ab blob blob }
   \new Lyrics  \lyricsto "bla"  {
index ccf444b6821cb519507e369938ce8133ff2d7af9..4e6fd50bc54bbdd873f400f863f90a5e8e9848df 100644 (file)
@@ -5,12 +5,12 @@ if the switch occurs together with context instantiation."
 
 }
 
-\version "2.17.15"
+\version "2.19.21"
 
 <<
-  \relative c' \new Voice = "lahlah" {
+  \relative \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \new Voice = "alternative" {
         \voiceOne
index fff2e9cbcdee6e4e6770f771f37fe96dffa6be2c..1f635e638ce388b1b159a0e3540f3b2db0ce3abd 100644 (file)
@@ -17,9 +17,9 @@ lyrics ignore any other rhythms in the piece."
 
 
 
-m = \relative c'' {
+m = \relative {
     \autoBeamOff
-    g8( a)  r8 \tuplet 3/2 { g'8( f e) } r8 \grace {  d16[ c b] } e4
+    g'8( a)  r8 \tuplet 3/2 { g'8( f e) } r8 \grace {  d16[ c b] } e4
     \textLengthOff
     d8.^"melisma"      \melisma c16
     \melismaEnd
index 66e744594a47a59125b97107a16ee8199c344709..7b920a1c087bf8fb97602beadad724f627d0e16b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 
 \header {
 
@@ -8,7 +8,7 @@
 
 <<
 
-\new Staff \relative c' {
+\new Staff \relative {
   \new Voice = "upper" {
     \voiceTwo
     g'1( |
index d366988cc21885eda7758b7a77bd1e035f95df4b..f237e9cc8e9dd372a72f520309967ba195754e50 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Melismata may be entered manually by substituting
 @code{_} for lyrics on notes that are part of the melisma."
 }
 
-\relative c' {
+\relative {
   \set melismaBusyProperties = #'()
-  c4 d( e) f
+  c'4 d( e) f
   f4( e) e e
 }
 \addlyrics {
index 3d16224aeb74a24ddace818d87579c1b9000c0db..4865b114a21dc6ef2b7b3923abdee7a129b40fe5 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 \header {
 
   texidoc = "
@@ -14,9 +14,9 @@
 
 
 <<
-  \relative c' \new Voice = "bla" {
+  \relative \new Voice = "bla" {
     \autoBeamOff
-    c4( c16 d c b)  c4
+    c'4( c16 d c b)  c4
     d16[ e f g]
     
   }
index addf34a0921be6c1ff969ee4573340573e720841..39ba74c47f7c1d4d327382e34748affad1773caa 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   title = "Aligned-above lyrics should stay close to their staff"
@@ -10,7 +10,7 @@ Bass staff.
 
 \paper { ragged-last-bottom = ##f }
 
-tune = \relative { \repeat unfold 2 { c4( e) g2 | \break c1 }
+tune = \relative { \repeat unfold 2 { c4( e) g2 | \break c1 }
 \bar "|."  }
 
 \score {
index b3f99228b6c8b916086a797cf67e26f1b29a594a..78a3aac6dea55c769bf95da6786e1c27cf986101 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 \header
 {
   texidoc = "Melismata are triggered by manual beams.  Notes in a
@@ -12,9 +12,9 @@
 
 <<
   \new Staff
-  \relative c'' {
+  \relative {
     \set Staff.autoBeaming = ##f
-    g4 d8[ b8 d8 g8]  g4
+    g'4 d8[ b8 d8 g8]  g4
   }
   \new Lyrics \lyricsto "" { bla blaa -- bla }
 >>
index 4bc357e817b7719bdf60d3cfaf5b8ca03ba62633..c457b78a026a34119bd5b72fd497041a0f7f9731 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.11"
+\version "2.19.22"
 
 \header {
   texidoc = "Bar line thickness and spacing should be scaled along
@@ -10,7 +10,7 @@ with notation size when using the @code{\magnifyStaff} command."
 }
 
 example =
-#(define-music-function (parser location mag) (positive?)
+#(define-music-function (mag) (positive?)
    #{
      \new Staff \with {
        \magnifyStaff #mag
index 561ac9e72a83832e998b14cf30429ca321b9416f..731bea8e4e4724d214fdaa73cf8c9b496bc4f824 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.11"
+\version "2.19.22"
 
 \header {
   texidoc = "@code{space-alist} values should be scaled along
@@ -13,7 +13,7 @@ with notation size when using the @code{\magnifyStaff} command."
 }
 
 example =
-#(define-music-function (parser location mag) (positive?)
+#(define-music-function (mag) (positive?)
    #{
      \new Staff \with {
        \magnifyStaff #mag
index 926de581b916c9b11c4d5d522b7d1e78720a6e69..7f28075f9a358abfb53e9092519605fd99e71793 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.18.0"
+\version "2.19.22"
 
 \header {
   texidoc = "@code{make-relative} has to copy its argument expressions
@@ -14,7 +14,7 @@ identical."
 }
 
 reltranspose =
-#(define-music-function (parser location from to music)
+#(define-music-function (from to music)
   (ly:pitch? ly:pitch? ly:music?)
   (make-relative (music) music
    #{ \transpose #from #to $music #}))
index 58266b2b3557b1d8af7486d32d25bd4e21149ec4..ef8baf4ae105ead018eecc984ef360ff89e0660f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.0"
+\version "2.19.22"
 
 \header {
   texidoc = "@code{make-relative} can make relativization on music
@@ -10,7 +10,7 @@ expressions.  This regtest defines an example function
 }
 
 withOctave =
-#(define-music-function (parser location music)
+#(define-music-function (music)
   (ly:music?)
   (make-relative
    (music) music
index 0cf3ef1184eb5a7162c4a776d8f2295338511da0..ee458b57a7131f9ac1ed7039e77a2d8390527c05 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.20"
+\version "2.19.22"
 \header {
 
   texidoc = "@code{make-relative} is a Scheme utility macro mainly
@@ -14,7 +14,7 @@ The fragment should appear identical in both cases."
 \layout { ragged-right= ##t }
 
 ph =
-#(define-music-function (parser location p1 p2 p3 p4 p5)
+#(define-music-function (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))
    #{
index 5cbf5edae4d9e48a2f06932d7b1599362c0771ce..ac15fa78adc6b58094220be2ef205b5eaef7176a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.10"
+\version "2.19.22"
 
 \header {
   texidoc = "The markup-commands @code{\\draw-dashed-line} and
@@ -7,7 +7,7 @@
 }
 
 test =
-#(define-scheme-function (parser location x-nmbr y-nmbr)(number? number?)
+#(define-scheme-function (x-nmbr y-nmbr)(number? number?)
  (let* ((lst (map
                (lambda (x)
                  (let* ((x-lngth (if (positive? x-nmbr)
index 5ed826230ae457f6b7a9697711d34add4d1768de..58bb24d3a022f59e0d9455a5538cbfddfb751955 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.9"
+\version "2.19.22"
 
 \header {
   texidoc = "@code{\\rest-by-number} and @code{\\rest} support
@@ -6,7 +6,7 @@ all rest styles."
 }
 
 showRestStyles =
-#(define-scheme-function (parser location)()
+#(define-scheme-function ()()
    (make-override-markup
      (cons 'baseline-skip 7)
      (make-column-markup
index 3c4895df9df883065bee7578c21eedbbd35f275e..4c05e960f7c73e1427476545fb663917eaaba3ec 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.19"
+\version "2.19.22"
 
 \header {
   texidoc = "The rest markup function works for a variety of style, dot and
@@ -6,7 +6,7 @@ duration settings."
 }
 
 showSimpleRest =
-#(define-scheme-function (parser location dots) (string?)
+#(define-scheme-function (dots) (string?)
    (make-override-markup
      (cons 'baseline-skip 7)
      (make-column-markup
@@ -45,7 +45,7 @@ showSimpleRest =
            kievan)))))
 
 showMultiMeasureRests =
-#(define-scheme-function (parser location)()
+#(define-scheme-function ()()
    (make-override-markup
      (cons 'baseline-skip 7)
      (make-column-markup
index ffac9f2e68998f67ec017088cc231a560b4cb3bc..4b00e72aa2af67fe7e0b78019e367afedb97239f 100644 (file)
@@ -2,7 +2,7 @@
     texidoc = "Use \\score block as markup command."
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 tuning = \markup {
     \score {
@@ -22,9 +22,9 @@ tuning = \markup {
     subsubtitle = \markup { "Originalstimmung:" \tuning }
 }
 
-\relative c'' {
+\relative {
     \time 4/8
-    \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
+    \tuplet 3/2 { c''8 d e } \tuplet 3/2 {c d e}
     \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
     g8 a8 g8 a
     g8 a8 g8 a
index 21410c6e6c9e4e9583fbd64f17ed0d3af4928e44..e2ed15d2993d5af7aae6e83d0b87239b0698db7a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Metronome marks respect symbol order in
@@ -16,12 +16,12 @@ measure.
   ragged-right = ##t
 }
 
-\relative c' {
+\relative {
   \override Staff.KeySignature.break-align-anchor-alignment = #LEFT
   \override Score.MetronomeMark.break-align-symbols = #'(time-signature key-signature)
   \key c \minor
   \tempo "Time"
-  c1 
+  c'
   \key as \major
   \tempo "Key"
   c1
index 90e99212b8c0c4f187b00505d701993f62114b4d..e8275d2176e96c9a81f1d15902a78704013bf47d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "@code{\\tempo} marks are aligned with the time signature
@@ -16,9 +16,9 @@ with the preceding bar line.
   line-width = 50\mm
 }
 
-\relative c' {
+\relative {
   \tempo "T-first"
-  c1
+  c'1
   \mark \default
   \tempo "T-note"
   c1 \break
index f4c3f8cd269b4df2772112057651f9393bf87e19..d2740a52170fcd87b7f06286bb56ba7df6745123 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header{
   texidoc="
@@ -6,9 +6,9 @@ Using an empty text in the metronome marks, one can generate parenthesized tempo
 "
 }
 
-\relative c'' {
+\relative {
   \tempo 4=60
-  c1
+  c''1
   \tempo "" 4=80
   c1
 }
index 2dacf798c0fbaaf387cfcf1f3828208dfff861bc..2f02d1c141a5a62651dedbeefe42a1dd76afe444 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header{
   texidoc="
@@ -7,8 +7,8 @@ The tempo command supports text markup and/@/or `duration=count'.  Using
 "
 }
 
-\relative c'' {
-  \tempo "Allegro" c1
+\relative {
+  \tempo "Allegro" c''1
   \tempo "Allegro" c1
   $(make-event-chord (list (make-music 'TempoChangeEvent
                                         'text "blah")))
index 05f0b9b282fe60e1d78bc019212f81bed6d5975f..05280c9e44a44ee0910f2e72ccea18254075d29c 100644 (file)
@@ -5,14 +5,14 @@
 
 }
 
-\version "2.16.0"
+\version "2.19.21"
 
 \score {
-  \relative c' {
+  \relative {
 
     \set midiMinimumVolume = #0.0
     \set midiMaximumVolume = #1.0
-    c\ff c\pppp
+    c'\ff c\pppp
     c\ff\> c c c c\!\pppp
 
     c\< c c c c\! \ff
index fe2404bddaf3cc87637be242734426935e33a620..d411c13c0ab8bf1ae03f5ba678a044de9bec0686 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \header {
   texidoc = "@cindex Midi Volume Equaliser
 The full orchestra plays a note, where groups stop one after
@@ -20,75 +20,75 @@ Override, see scm/midi.scm:
 
 %}
 
-flauti =  \relative c' {
+flauti =  \relative {
   \set Staff.midiInstrument = #"flute"
 
-  c1\f R1*10
+  c'1\f R1*10
 }
 
-oboi =  \relative c' {
+oboi =  \relative {
   \set Staff.midiInstrument = #"oboe"
 
-  R1*1 c1\f R1*9
+  R1*1 c'1\f R1*9
 }
 
-clarinetti =  \relative c' {
+clarinetti =  \relative {
   \set Staff.midiInstrument = #"clarinet"
 
-  R1*2 c1\f R1*8
+  R1*2 c'1\f R1*8
 }
 
-fagotti =  \relative c' {
+fagotti =  \relative {
   \set Staff.midiInstrument = #"bassoon"
 
   \clef bass
-  R1*3 c1\f R1*7
+  R1*3 c'1\f R1*7
 }
 
-corni =  \relative c' {
+corni =  \relative {
   \set Staff.midiInstrument = #"french horn"
 
-  R1*4 c1\f R1*6
+  R1*4 c'1\f R1*6
 }
 
-trombe =  \relative c' {
+trombe =  \relative {
   \set Staff.midiInstrument = #"trumpet"
 
   \clef bass
-  R1*5 c1\f R1*5
+  R1*5 c'1\f R1*5
 }
 
-timpani =  \relative c' {
+timpani =  \relative {
   \set Staff.midiInstrument = #"timpani"
 
-  R1*6 c1\f R1*4
+  R1*6 c'1\f R1*4
 }
 
-violinoI =  \relative c' {
+violinoI =  \relative {
   \set Staff.midiInstrument = #"violin"
 
-  R1*7 c1\f R1*3
+  R1*7 c'1\f R1*3
 }
 
-violinoII =  \relative c' {
+violinoII =  \relative {
   \set Staff.midiInstrument = #"violin"
   
-  R1*8 c1\f R1*2
+  R1*8 c'1\f R1*2
 }
 
-viola =  \relative c' {
+viola =  \relative {
   \set Staff.midiInstrument = #"viola"
 
   \clef alto
-  R1*9 c1\f R1*1
+  R1*9 c'1\f R1*1
 }
 
-violoncello =  \relative c' {
+violoncello =  \relative {
   \set Staff.midiInstrument = #"cello"
                                %\set Staff.midiInstrument = #"contrabass"
   
   \clef bass
-  R1*10 c1\f
+  R1*10 c'1\f
 }
 
 
index 9dfe77b7213e8661e946b2a70db9029197f7c5f0..c2a14ae1daf8604f7b86c6eda98c4384eb7a77b6 100644 (file)
@@ -1,5 +1,5 @@
 % Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi
-\version "2.16.0"
+\version "2.19.21"
 
 \layout {
   \context {
@@ -46,7 +46,7 @@ trackA = <<
 >>
 
 
-trackBchannelA = \relative {
+trackBchannelA = \relative {
   
   \set Staff.instrumentName = "trackB:voiceA"
   d'4 e f g 
index 1978cc50c233dee39e68d630868880cf054507d5..80286099004a104d0d95204b2bc6e711de4b1220 100644 (file)
@@ -1,5 +1,5 @@
 % Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/option-key.midi
-\version "2.16.0"
+\version "2.19.21"
 
 \layout {
   \context {
@@ -44,7 +44,7 @@ trackA = <<
 >>
 
 
-trackBchannelA = \relative {
+trackBchannelA = \relative {
   
   \set Staff.instrumentName = "trackB:voiceA"
   f'4 g a bes 
index 4aa3de56dd0f7c04b797a51ceb7d253cab46cb22..3b770e9a917fefecb5c2583cc87413369ad01882 100644 (file)
@@ -1,5 +1,5 @@
 % Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/rest.midi
-\version "2.16.0"
+\version "2.19.21"
 
 \layout {
   \context {
@@ -43,10 +43,10 @@ trackA = <<
 >>
 
 
-trackBchannelA = \relative {
+trackBchannelA = \relative {
   r4 
   \set Staff.instrumentName = "trackB:voiceA"
-  a r4 a 
+  a, r4 a 
   | % 2
   
 }
index ce24b42cf1af76a53e14e61c7af5f2cbf7859a79..1fae74c799782e4e50a2e56d763c982199653d16 100644 (file)
@@ -10,21 +10,21 @@ options=""
   <<
     \context Staff = "treble" <<
       \set Score.midiChannelMapping = #'instrument
-      \context Voice="one" \relative c'' {
+      \context Voice="one" \relative {
        \time 4/4
        \key c \minor
        \voiceOne
 %comes
 %7
-       f8 es16 d c16 bes ! as g f8 as' g f 
+       f''8 es16 d c16 bes ! as g f8 as' g f 
 %8     es8 d es f b, c d b |
        f,16 g as4 g16 f e2 |
       }
-      \context Voice="two" \relative c'' {
+      \context Voice="two" \relative {
        \voiceTwo
 %dux
 %7
-       c4 r4 r8 f es d |
+       c''4 r4 r8 f es d |
 %8     r8 as g f g f16 es f8 d | 
        <b, d>8 r <b d> r <g c>2 |
       }
index 90d9c3ac68a1af89604ba347f8860cfcda10b557..114f37d3a9b78b4fbfa82ac145c45adc9f35f8cf 100644 (file)
@@ -10,21 +10,21 @@ options=""
   <<
     \context Staff = "treble" <<
       \set Score.midiChannelMapping = #'voice
-      \context Voice="one" \relative c'' {
+      \context Voice="one" \relative {
        \time 4/4
        \key c \minor
        \voiceOne
 %comes
 %7
-       f8 es16 d c16 bes ! as g f8 as' g f 
+       f''8 es16 d c16 bes ! as g f8 as' g f 
 %8     es8 d es f b, c d b |
        f,16 g as4 g16 f e2 |
       }
-      \context Voice="two" \relative c'' {
+      \context Voice="two" \relative {
        \voiceTwo
 %dux
 %7
-       c4 r4 r8 f es d |
+       c''4 r4 r8 f es d |
 %8     r8 as g f g f16 es f8 d | 
        <b, d>8 r <b d> r <g c>2 |
       }
index be0c4f5bee6641db682e0f7bd4a5b65dc113fd5d..3bcd1f83afbe74eb61ce4b34b7942af576a460fd 100644 (file)
@@ -1,5 +1,5 @@
 % Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi
-\version "2.16.0"
+\version "2.19.21"
 
 \layout {
   \context {
@@ -43,7 +43,7 @@ trackA = <<
 >>
 
 
-trackBchannelA = \relative {
+trackBchannelA = \relative {
   \voiceOne
   
   \set Staff.instrumentName = ":1"
@@ -52,7 +52,7 @@ trackBchannelA = \relative c {
   
 }
 
-trackBchannelB = \relative {
+trackBchannelB = \relative {
   \voiceTwo
   f' f f f 
   | % 2
index 7ca89e93855605414e52e6fe35d55842f4b7e9eb..dfd2a603ab735096b737ab7349a467576b603290 100644 (file)
@@ -1,5 +1,5 @@
 % Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi
-\version "2.16.0"
+\version "2.19.21"
 
 \layout {
   \context {
@@ -43,7 +43,7 @@ trackA = <<
 >>
 
 
-trackBchannelA = \relative {
+trackBchannelA = \relative {
   \voiceOne
   
   \set Staff.instrumentName = ":1"
@@ -52,21 +52,21 @@ trackBchannelA = \relative c {
   
 }
 
-trackBchannelB = \relative {
+trackBchannelB = \relative {
   \voiceThree
   c''4. d8 e4 f 
   | % 2
   
 }
 
-trackBchannelC = \relative {
+trackBchannelC = \relative {
   \voiceFour
   d'1 
   | % 2
   
 }
 
-trackBchannelD = \relative {
+trackBchannelD = \relative {
   \voiceTwo
   c'4 c2 c4 
   | % 2
index f35f3c403f10e4a971f31a418ad2afcedafb58bf..64fa7b66099247fd488dfa0160fc6eecfbbf9e01 100644 (file)
@@ -43,7 +43,7 @@ trackA = <<
 >>
 
 
-trackBchannelA = \relative {
+trackBchannelA = \relative {
   \voiceOne
   
   \set Staff.instrumentName = ":1"
@@ -52,21 +52,21 @@ trackBchannelA = \relative c {
   
 }
 
-trackBchannelB = \relative {
+trackBchannelB = \relative {
   \voiceThree
   c''4. d8 e4 f 
   | % 2
   
 }
 
-trackBchannelC = \relative {
+trackBchannelC = \relative {
   \voiceFour
   d'1 
   | % 2
   
 }
 
-trackBchannelD = \relative {
+trackBchannelD = \relative {
   \voiceTwo
   c'4 c2 c4 
   | % 2
index d62ab572df027af90269f91057f8d21ae27b0558..df699aacf79c80cc718ce0e5ca4efb9da4f719d6 100644 (file)
@@ -20,7 +20,7 @@ lipbreaker = \relative {
   c[ c c] c[ c c]
 }
 
-rondo = \relative c' {
+rondo = \relative {
   \partial 8
   \time 6/8
   \key c \major
index c6421c38c20f593e7f64aa350082ce9ede1baedf..dd3548a77943cca57105731df2ecd8a148e61ba0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 
 \header
 {
@@ -12,7 +12,7 @@ of the resulting object is set accordingly."
 }
 
 dynScript =
-#(define-music-function (parser location text) (string?)
+#(define-music-function (text) (string?)
    (make-dynamic-script text))
 
 \relative {
index 7c584e0f239b0f8044ba3523b5a2a8590e2fe2cb..3734dae696a0ee31047775c45d03c2bf2f93c3de 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 \header {
   texidoc = "Music functions accept strings as markup arguments
@@ -7,7 +7,7 @@ when using the type predicate @code{markup?}
 }
 
 testFunc =
-#(define-music-function (parser location text music) (markup? ly:music?)
+#(define-music-function (text music) (markup? ly:music?)
    ;; dummy function, does nothing
    music)
 
index 8f4da124fa0d81f6864b40a96f1b5adb7d9e897d..c571b2f3ab3d7b298a22e53929764597aa46f366 100644 (file)
@@ -7,9 +7,9 @@ demonstrate a @code{\\myBar} function, which works similar to
 @code{\\bar}, but is implemented completely in Scheme."
 
 }
-\version "2.17.5"
+\version "2.19.22"
 
-myBar = #(define-music-function (parser location bar-type) (string?)
+myBar = #(define-music-function (bar-type) (string?)
           (context-spec-music
            (context-spec-music (make-property-set 'whichBar bar-type) 'Timing)
            'Score))
index 7d18f1af1998e82fb062e55f35c621a3b2ba605c..7d3ad7ef912fa3f1aa1270291c40fd6cebb8176b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 % possible rename to staff-something.  -gp
 
 \header{ texidoc = "@cindex Staff Remove
@@ -11,12 +11,12 @@ corresponding engraver.
     ragged-right = ##t
 }
 
-\relative c' \new Staff \with {
+\relative \new Staff \with {
        \remove "Staff_symbol_engraver"
        \consists "Pitch_squash_engraver"
        \remove "Clef_engraver"
     } {
-       c4 d4 e8 d8
+       c'4 d4 e8 d8
     }
 
 
index 987b312febc4e69a14f6e4e3c1f3cdd1522b91be..c0833981e46053e04357afe8e42e34421a7a14ff 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.22"
 \header{
   texidoc="
 Note head shapes may be set from several choices.
@@ -17,7 +17,7 @@ dimensions.
 }
 
 pattern =
-#(define-music-function (parser location name style) (markup? ly:context-mod?)
+#(define-music-function (name style) (markup? ly:context-mod?)
 #{ <<
   s1^#name
   \new Voice \with #style {
@@ -31,7 +31,7 @@ pattern =
 >> #})
 
 patternStyle =
-#(define-music-function (parser location style) (symbol?)
+#(define-music-function (style) (symbol?)
   #{
      \pattern #(symbol->string style) \with {
        \override NoteHead.style = #style
index e48cc28d243795cc81ea9b41ab31330b2f0dd867..63650fdec23926b751699d4ad07209d091ef3d47 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 \header{
   texidoc= "Test backup of predicate-based optional music function arguments.
@@ -16,12 +16,12 @@ separate arguments."
 
 \layout { ragged-right = ##t }
 
-test=#(define-void-function (parser location expect . rest)
+test=#(define-void-function (expect . rest)
        (list? (string? "def1") (integer? "def2") (fraction? "def3") integer?)
        (if (not (equal? expect rest))
-       (ly:parser-error parser
+       (ly:parser-error (*parser*)
         (format #f "Expected ~s, got ~s.\n" expect rest)
-        location)))
+        (*location*))))
 
 twice=2
 
index d50230f594a195bbd092424db1a2f942e4da28ab..c8b4668ca18b2218f6fb71ed016d616ced881d03 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 \header{
   texidoc= "Test predicate-based optional music function argument skipping."
@@ -6,13 +6,13 @@
 
 \layout { ragged-right = ##t }
 
-test=#(define-scheme-function (parser location str int frac exp)
+test=#(define-scheme-function (str int frac exp)
        ((string? "def1") (integer? "def2") (number-pair? "def3") list?)
        (if (not (equal? (list str int frac) exp))
-       (ly:parser-error parser
+       (ly:parser-error (*parser*)
         (format #f "Expected ~a, got ~a.\n" exp
          (list str int frac))
-        location)))
+        (*location*))))
 
 \test "a" #3 #'(3 . 4) #'("a" 3 (3 . 4))
 \test "a" #3 #'("a" 3 "def3")
index 5086bf0dbad5ba6a05223b1dd4f8e20a65740e6b..8277ce28c040647e7b62662c22e3c0c335544b45 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 
 \header{
   texidoc= "Test optional music function arguments.
@@ -13,13 +13,13 @@ the rest is skipped."
 % Just like \relative, but defaulting to f as reference, making the
 % first note of the music the same as if written as absolute pitch
 ablative =
-#(define-music-function (parser location ref music)
+#(define-music-function (ref music)
   ((ly:pitch? #{ f #}) ly:music?)
   #{ \relative $ref $music #})
 
 % Let's take a duration and four pitches, defaulting to 2 c' d' e'
 zap = 
-#(define-music-function (parser location dur a b c d)
+#(define-music-function (dur a b c d)
   ((ly:duration? #{ 2 #}) (ly:pitch? #{ c' #})
    (ly:pitch? #{ d' #}) (ly:pitch? #{ e' #})
    ly:music?) #{ $a $dur $b $c ^\markup{!} $d  #})
index 03a710b6793b15954b4ef8118186daf680bae18a..f658a529c5c56bf3810e28b9068832ce2e4cfece 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "A sublist of grob property lists may be overridden within a callback.
@@ -6,11 +6,11 @@
   of the right bound of the glissando spanner."
 }
 
-\relative c' {
+\relative {
   \override Glissando.after-line-breaking =
     #(lambda (grob)
        (ly:grob-set-nested-property! grob '(bound-details right Y) 3))
-  c1 \glissando
+  c'1 \glissando
   d1
 }
 
index 117e6c244747b746e7fed314ff987c8e066bae48..ba5ed09062fbe264fd86410e4bfd9d0212204f2b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Sublist of grob property lists may be also tuned.  In the
@@ -6,9 +6,9 @@ next example, the @code{beamed-lengths} property of the @code{Stem}
 grob is tweaked."
 }
 
-\relative c' {
+\relative {
   \override Stem.details.beamed-lengths = #'(6 10 8)
-  c8[ c] c16[ c] c32[ c]
+  c'8[ c] c16[ c] c32[ c]
   \revert Stem.details.beamed-lengths
   c8[ c] c16[ c] c32[ c]
 }
index e47a85f142f2c6ef8ebe0a0844ffac4bc62a3e2c..441579a44a6a902bed7f5b05bbcc69b9315c4a20 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
 
@@ -76,7 +76,7 @@
 
 \book {    
   \score {
-    \new Staff \relative c' {
+    \new Staff \relative {
       %% 19: ideally cramped
       %% Calculating page breaks...[6][11][16]
       %%\repeat unfold 19 { a b c d \break }
index f50c73c8221451232b3387191805e45cf5a6da1f..01e154160a9910993f19e339560fe5a05b18469c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
 
@@ -38,7 +38,7 @@
 
 \book {
   \score {
-    \new Staff \relative c' {
+    \new Staff \relative {
       \repeat unfold 18 { a b c d \break }
     }
   }
index 655d34a6d949e5634086763c8e2753af2e583900..4eafd885a05a69da36a5f1146c3e3675461a27c7 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.19.21"
 
 
 
@@ -45,18 +45,18 @@ This file is best viewed outside the collated files document.
 
 \book {
     \score {
-        \relative c'' {
+        \relative {
             \repeat unfold 10 {
-                \repeat unfold 4 {c4}
+                \repeat unfold 4 {c''4}
             }
         }
         \header {piece = "Piece I"}
         \layout {line-width = 13\cm}
     }
     \score {
-        \relative c'' {
+        \relative {
             \repeat unfold 10 {
-                \repeat unfold 4 {c4}
+                \repeat unfold 4 {c''4}
             }
         }
         \header {
index 4c2c60ac0d47a5a2a78c0a8a3522bf10325b9406..935baf8ead1fb1cc69b62d5f5b669584453727f1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Page layout and stretching work with system-count enabled."
@@ -14,9 +14,9 @@
 \book {
   \score {
     <<
-      \relative c'' { \repeat unfold 10 c1 }
-      \relative c'' { \repeat unfold 10 c1 }
-      \relative c'' { \repeat unfold 10 c1 }
+      \relative { \repeat unfold 10 c''1 }
+      \relative { \repeat unfold 10 c''1 }
+      \relative { \repeat unfold 10 c''1 }
     >>
   }
 }
index fcee7676c8780537a288c21143df4dd5be6e3d53..e766c885e320a735314e02fecbf5080973806db8 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "By default, we start with page 1, which is on the right hand side
@@ -17,6 +17,6 @@ number to 2 in order to avoid a bad page turn."
 
 \book {
   \score {
-    \relative c' {\repeat unfold 60 {a b c d}}
+    \relative {\repeat unfold 60 {a b c d}}
   }
 }
index f007c9ba90f6f3b5d9ec5653f496f08497d12e8d..3c5d0a6dc4ecebb1e09d72177155121bbf94b574 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "The page-turn engraver will not count potential page
@@ -23,7 +23,7 @@ long gap at the beginning or at the end of the repeat.
   }
 
   \score {
-    \relative c' {
+    \relative {
       \set Score.skipBars = ##t
       % this should be kept on one page
       \repeat volta 2 {
index 3bb25d79079ba206f6d20a9f2a793ca1fbc7d316..91a13d5468aa19ce910b0e31e89a623a304c2490 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "margins do not fit with line-width, setting default values"))
@@ -9,7 +9,7 @@ line-width + left-margin + right-margin.  In case they do not, default margins
 are set and a warning is printed."
 }
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   left-margin = 20 \mm
index 8444b78fadaca5a44d8937495e9f15217953f560..524509eadd6c8b794a462510b0d3b19b51de4ce7 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Here only left-margin is given, right-margin will remain default."
 }
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   #(set-paper-size (ly:get-option 'paper-size))
index d32cbd5f507a203b8302bc9878260b0d22008432..2a0fffc6c5cee607ed916edcd805b9aefc6a33d7 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "If only line-width is given, systems are horizontally centered."
 }
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   line-width = 100 \mm
index 9409ce6897fd3f7fce8a2c3d1fe679f3b620cd43..ff7d3bfd6e0a40b916ef9816079154e2885de69d 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "All checks can be avoided by setting check-consistency to ##f in \paper."
 }
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   left-margin = 20 \mm
index 95f33f341f0482fba9db14789561a4adecfc1759..6c929233e674fd6eabb72430402fb9dd5afb91e7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "systems run off the page due to improper paper settings, setting default values"))
@@ -9,7 +9,7 @@
 
 #(set-default-paper-size "a4")
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   left-margin = 20 \mm
index c4a5361ca0e55c322553c89dc2378f3bd69f3a79..2e71aa7681fae37d27c750b87cf62b74bef5fc06 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Here only right-margin is given, left-margin will remain default."
 }
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   #(set-paper-size (ly:get-option 'paper-size))
index 192d2cdc73f636fe7c908dac71c4eb5cbcfb2789..c0adb02f9aad2884e3df7f0974e3e132f4ab424b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Paper margin settings do not have to be complete.
@@ -6,7 +6,7 @@ Missing values are added automatically.  If no paper settings
 are specified, default values are used."
 }
 
-someNotes = \relative c' { \repeat unfold 40 { c4 d e f } }
+someNotes = \relative { \repeat unfold 40 { c'4 d e f } }
 
 \paper {
   #(set-paper-size (ly:get-option 'paper-size))
index 3c1a6c88384cff1a8a9758059ed9d365ffb572b1..a444718e3937715104f0613ad2f1dc63973aa1e2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.12"
+\version "2.19.21"
 
 \header {
   texidoc = "Setting individual nested paper properties does not
@@ -11,7 +11,7 @@ remove existing settings or break spacing annotation."
     system-system-spacing = #'((basic-distance . 12) (minimum-distance . 8))
     system-system-spacing.padding = #1
   }
-  \relative c' {
+  \relative {
     \repeat unfold 10 { a4 d e f }
   }
 }
index ff6129616154750c9335c2ce3b0f22abb843e0b5..178f4aa66eed94f89a51ad2314651971bb48c4f9 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "In two-sided mode, a binding offset can be specified, which is added
 to the inner margin automatically."
 }
 
-someNotes = \relative c' { \repeat unfold 200 { c4 d e f } }
+someNotes = \relative { \repeat unfold 200 { c'4 d e f } }
 
 \paper {
   two-sided = ##t
index fbc11a17aae105014f9f82cc8ea0f42ca2d0047d..0a32dd35316d6a2c8abb260237b403303298064b 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Two-sided mode allows you to use different margins for
 odd and even pages."
 }
 
-someNotes = \relative c' { \repeat unfold 200 { c4 d e f } }
+someNotes = \relative { \repeat unfold 200 { c'4 d e f } }
 
 \paper {
   two-sided = ##t
index 7d59777775819bf3a148caa7b1ce68d6a2375436..a399431a006a70269b31db8a2a85d22729a35cc8 100644 (file)
@@ -1,18 +1,18 @@
 \version "2.19.16"
 
 \header {
-  texidoc = "Different kinds of silence are not merged into the shared voice even if they begin and end simultaneously."
+  texidoc = "Different kinds of silence are not merged into the shared voice even if they begin and end simultaneously; however, when rests and skips are present in the same part, the skips are ignored."
 }
 
 \score { <<
   \new Staff {
     \partcombine
-      \relative f' { R1^"R" | s1^"s" | r1^"r" }
-      \relative f' { r1_"r" | R1_"R" | s1_"s" }
+      \relative f' { R1^"R" | s1^"s" | r1^"r" | << R1 s1 s4 >> | << r1 s2 s4 >> }
+      \relative f' { r1_"r" | R1_"R" | s1_"s" | << s4 s1 R1 >> | << s4 s2 r1 >> }
   }
   \new Staff {
     \partcombine
-      \relative f' { r1^"r" | R1^"R" | s1^"s" }
-      \relative f' { R1_"R" | s1_"s" | r1_"r" }
+      \relative f' { r1^"r" | R1^"R" | s1^"s" | << s4 s1 R1 >> | << s4 s2 r1 >> }
+      \relative f' { R1_"R" | s1_"s" | r1_"r" | << R1 s1 s4 >> | << r1 s2 s4 >> }
   }
 >> }
index 7e1ec339c77a3a1816dc610159fc16b839044436..5e44e325976042bd894e7321d4fbf3b5c4a7f69f 100644 (file)
@@ -10,9 +10,9 @@ rests and then a solo."
 
 \layout { ragged-right = ##t }
 
-mI = \relative c'' {
+mI = \relative {
   \set Score.partCombineTextsOnNote = ##t
-  g4 \partcombineSoloI r4 c2 |
+  g'4 \partcombineSoloI r4 c2 |
   \partcombineSoloII R1*2 |
 }
 mII = \relative {
index ee748443da515082f413a9d926250f0b2f110281..6d31af0baa424b37e67baaa91d1b05b16c8aeb49 100644 (file)
@@ -9,9 +9,9 @@ even after a switch, a tuplet ends correctly."
 
 \new Staff <<
   \partcombine
-  \relative c'' {
+  \relative {
     r2
-    \tuplet 3/2 { g8[ g g] }
+    \tuplet 3/2 { g'8[ g g] }
     \tuplet 3/2 { g[ g g] } g1
   }
   \relative { R1 g'1 }
index 1cdd5009e73319210e603f7fde2ff12f36fa400d..4aadb72e9461d64c6ac4bff48db866c43efdc786 100644 (file)
@@ -5,17 +5,17 @@
 
 \paper { ragged-right = ##T }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \score {
   <<
     \new Staff {
       \partcombine
-      \relative c'' {
-        \tuplet 3/2 { d4 d d ~ } d2
+      \relative {
+        \tuplet 3/2 { d''4 d d ~ } d2
       }
-      \relative c'' {
-        \tuplet 3/2 { b4 a g ~ } g2
+      \relative {
+        \tuplet 3/2 { b'4 a g ~ } g2
       }
     }
   >>
index cccf47e98c9913b628899b17e4fad5438a2c5666..98f658be50d8aa1e871d96e6e55607190caea17e 100644 (file)
@@ -1,14 +1,14 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "@code{\\partial} works with polymetric staves."
 }
 
 \score {
-  \relative c' <<
+  \relative <<
     \new Staff {
       \partial 4
-      c4 |
+      c'4 |
       c4 c c c |
     }
     \new Staff {
index f7f6319c433bd1e0dfe5f1cbaf7deccf86da28c0..e4cffe9494e91917da5dc31e584db0b20e983a3b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
 
@@ -10,10 +10,10 @@ At a line-break, there are no vertical endings.  Pedal changes can
 be placed at spacer rests." }
 
 \score {
-     \relative c'' {
+     \relative {
         \set Staff.pedalSustainStyle = #'bracket
 
-        c4 d <e f b,> \sustainOn b c c, \sustainOff \sustainOn  d8[ c]  e8[
+        c''4 d <e f b,> \sustainOn b c c, \sustainOff \sustainOn  d8[ c]  e8[
             e \sustainOff \sustainOn]  f4 r \sustainOff
             g \sustainOn bes bes, \sustainOff c'
 
index 14d163b4ccd7d1c1a510684bcfaf7052c19cc4f8..08487af5d9386df8b3381b87d4ed34d10f65235f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "already have phrasing slur"))
@@ -12,7 +12,7 @@ slur will not be generated.  However, one can can create a second slur with
 a different spanner-id."
 }
 
-sp=#(define-event-function (parser location n e) (index? ly:event?)
+sp=#(define-event-function (n e) (index? ly:event?)
      (set! (ly:music-property e 'spanner-id) (format "sp~a" n))
      e)
 
index 0f5aa8302a2cd4d7d96ac0c3a36f71745bbeac22..10aa1e9a7e761e67acb4050a1784211044f5ccba 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "Phrasing slurs do not collide with tuplet numbers."
 }
 
-\relative c'' {
+\relative {
   \voiceOne
   \tuplet 3/2 {
-    c8\( b c
+    c''8\( b c
   }
   a2.\)
 }
index 0d8be92357a420c678a2912fee5e14c5f296b24f..491e4a12d9fee33d2b5e8ea978a06ef29bc91c02 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.21"
 \header {
   texidoc = "Nested properties may be overridden using Scheme list
 syntax.  This test performs two property overrides: the first
@@ -7,9 +7,9 @@ list.
 "
 }
 
-\relative c' {
+\relative {
   \once \override TextSpanner.bound-details.left.text = #"foo"
-  c4\startTextSpan
+  c'4\startTextSpan
   \once \override Tie.details.note-head-gap = #1
   c4 ~ 4 c\stopTextSpan
   
index 420f8641ba553379681f4e6db03c3c4b5bf70f7c..cfbba5516c4dc89baa1872fb4733146b9fb48ed3 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
 
@@ -8,8 +8,8 @@
 
 }
 
-foo = \relative c' {
-  \tuplet 3/2 { c4 c c } \tuplet 3/2 { c4 c c }
+foo = \relative {
+  \tuplet 3/2 { c'4 c c } \tuplet 3/2 { c4 c c }
 }
 
 \addQuote "foo" { \foo }
index d5cdfa85031475cd19c0cb178899136d6b67701b..14835c95c3a7d634266ca5131a02a4700aa2b28a 100644 (file)
@@ -4,11 +4,11 @@
   the alignment depends on which symbols are visible."
 }
 
-\version "2.17.6"
+\version "2.19.21"
   
-\relative c' {
+\relative {
   \override Score.RehearsalMark.break-align-symbols = #'(clef key-signature staff-bar)
-  c1
+  c'1
   \clef "bass"
   \mark "clef"
   \noBreak
diff --git a/input/regression/relative.ly b/input/regression/relative.ly
new file mode 100644 (file)
index 0000000..e0ddf83
--- /dev/null
@@ -0,0 +1,12 @@
+\header {
+  texidoc = "Notes are entered using absolute octaves,
+octaves relative to the previous note, or relative to a fixed octave."
+  }
+\version "2.19.21"
+
+\new Staff {
+  \relative { c''4 g \absolute { c'' } e' \fixed c'' { g1 }}
+  \fixed c'' { c4 \fixed c' { g } c e \relative { g''1 } }
+  \clef bass \relative { c4 g c e g1 }
+  \fixed c { c4 g, c e g1 }
+}
index e4d986d6a37386a5b3e74bb77c8d5577b810bdfc..9a1e69b4ec35bca12634b40b1749903f5549f67c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \header {
   texidoc = "
 Percent repeat counters can be shown at regular
@@ -6,10 +6,10 @@ intervals by setting @code{repeatCountVisibility}.
 "
 }
 
-\relative c'' {
+\relative {
   \set countPercentRepeats = ##t
   \set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
-  \repeat percent 10 { c1 } \break
+  \repeat percent 10 { c''1 } \break
   \set repeatCountVisibility = #(every-nth-repeat-count-visible 2)
   \repeat percent 6 { c1 d1 }
 }
index baa5fc134f7880e8bf1b979af0b29aa894bad8db..d1eb1e320baec767aa43a6f1ecd629eaeb2f02cb 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 
 \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 c' <<
-  \new Staff { \repeat percent 3 c1} 
+\relative <<
+  \new Staff { \repeat percent 3 c'1} 
   \new Staff { c1 c \grace b8 c1  }
 >>
index 3c0decb5e3ddd6c096cb5d5ebf914ffd0fe775d7..a29e2aafe6e539498f993a2c7e5480c8c5511f17 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "Beat repeats for patterns containing mixed durations use
 a double percent symbol."
 }
 
-\relative c' {
+\relative {
   \repeat percent 4 {
-    c8. <d f>16
+    c'8. <d f>16
   }
   \repeat percent 2 {
     \tuplet 3/2 {
index eb77b49ac6a21d66558515c69717e2f5a80a73cb..c8e5b717516e47e1aea82d34d9c1b52c188cb032 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Beat repeats for patterns containing identical durations
 shorter than an eighth note use multiple slashes."
 }
 
-\relative c' {
-  \repeat percent 2 { c16 d e f }
+\relative {
+  \repeat percent 2 { c'16 d e f }
   \repeat percent 4 { c32 e g e }
 }
index cdd03934c7b3e9c7061d3e50275d8cd5c8157d2a..29d2e0e1bee12f049397beb822b2b3a234acf78b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "A tremolo repeat containing only one note (no sequential music)
@@ -8,8 +8,8 @@
 
 \paper { ragged-right = ##t }
 \score {
-  \new Staff \relative c'' {
-    \repeat tremolo 4 { a16 }
+  \new Staff \relative {
+    \repeat tremolo 4 { a'16 }
     \repeat tremolo 4 { a16\f }
     \repeat tremolo 4 a16
     \repeat tremolo 4 a16\f |
index 44285f6c9e5664650c2cdc991832e52f04e8b7c8..7bd23c9e5f257b903769be108559c451aca4203b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "A tremolo can have more than two notes. Also check that
@@ -7,7 +7,7 @@ linebreaks between tremolos still work and that empty tremolos don't crash."
 
 \paper { ragged-right = ##t }
 \score {
-  \new Staff \relative c' {
+  \new Staff \relative {
     \time 3/4
     \repeat tremolo 16 { a64 c e } |
     \repeat tremolo 8 { a,64 c e }
index 500299182978795989613760ca66041f179c21ac..621608a0b4f5fe002cb22a629f900bc63ac3214c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "More alternatives than repeats.  Junking excess alternatives"))
@@ -14,8 +14,8 @@ get to the number of repeats.
 Unfolded behavior:"
 }
 
-\context Voice \relative c'' {
-  \repeat unfold 3 { c^"3x 0a" d }
+\context Voice \relative {
+  \repeat unfold 3 { c''^"3x 0a" d }
   %% less alts than body
   \repeat unfold 4 { c^"4x 0a" d } \alternative { e f }
   %% more alts than body
index 6f4e422002ffe0faf7e6e81038cb623c84148fee..db52a0fd1ecfdb25a82d187db678db2026d44afa 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \header {
 
     texidoc = "When too few alternatives are present, the first
@@ -9,8 +9,8 @@ alternative is repeated, by printing a range for the 1st repeat."
 \paper { ragged-right = ##t } 
 
 
-\relative c'' \context Voice {
-  \repeat volta 3 c1
+\relative \context Voice {
+  \repeat volta 3 c''1
     \alternative { d f } e4
 } 
 
index 9d6011d64b17394822881c591849d0e10ba5e471..8ec19447065d1b77b401c84e2a11642b281138f2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "More alternatives than repeats.  Junking excess alternatives"))
 
@@ -11,9 +11,9 @@ If they don't barlines should still be shown.
 
 %%  no alts.
 
-\context Voice \relative c'' {
+\context Voice \relative {
   %% repeat non aligning with barlines.
-  \repeat volta 3 { c^"3x 0alt" d e }
+  \repeat volta 3 { c''^"3x 0alt" d e }
   %% less alts than body
   \repeat volta 4 { c^"4x 2alt" d } \alternative { e f }
   %% more alts than body
index 24cc53d8c8695152a5f3b4b80f882c986df41717..693915f67c603099584ad7f4b63a8f344c14964b 100644 (file)
@@ -3,15 +3,15 @@
 account properly."
 }
 
-\version "2.17.6"
+\version "2.19.21"
 \paper {
   ragged-right = ##t
 }
 
 
-\relative c''' {
+\relative {
   \override Rest.direction = #UP
-  \stemDown b8[ r b]
+  \stemDown b''8[ r b]
   \override Rest.direction = #DOWN
   \stemDown b8[ r b]
 }
index 2dd30d5563fc63e586bba9883dd3a57cd2747c08..b14eb6df570cee61e0cdc9b1f972266ed1f5f78d 100644 (file)
@@ -4,13 +4,13 @@
 collision."
 
 }
-\version "2.16.0"
+\version "2.19.21"
 \paper {
   ragged-right = ##t
 }
   
-\relative c''' {
-  \stemDown b8[ r b]
+\relative {
+  \stemDown b''8[ r b]
   \stemUp b,,8[ r b] 
 }
 
index f06bda4a7e3831e6afa744049f5b4756b59491ae..b68095c5daabab6dbe0838684a8a0162b6d50c71 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.22"
 \header {
 texidoc = "Breve, whole and half rests moving outside the staff should get
 ledger lines."
@@ -8,7 +8,7 @@ ledger lines."
 \paper { ragged-right = ##t }
 
 rPos =
-#(define-music-function (parser location y) (number?)
+#(define-music-function (y) (number?)
   #{ \override Rest.staff-position = #y #})
 
 {
index fd1609f1b6a279a66430ac7e1599b5ab54b44139..cdc2c7fcdc9ad41e1c19e0c93a7d23393ac156b9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.22"
 
 \header {
 
@@ -31,8 +31,8 @@ informations from top- and booklevel stack correctly."
             (set! pitch (modulo (1+ pitch) 7)))))
 
 oneNoteScore =
-#(define-void-function (parser location) ()
-   (add-one-note-score parser))
+#(define-void-function () ()
+   (add-one-note-score (*parser*)))
 
 %%%
 
index 6cf552ac5f6e63c01eacbc900aa8e00a6b9d1524..54cb8e7899ad85dfe8b110185fd86f586650e8e2 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Horizontal scripts don't have @code{avoid-slur} set."
@@ -8,9 +8,9 @@
   ragged-right = ##t
 }
 
-\relative c'' 
+\relative { 
   \set fingeringOrientations = #'(right)
-  < a-1 d-2>2
+  < a'-1 d-2>2
   < a-1 d-2>2
   < a-1 d-2>2(
   < a-1 d-2>2)
index 1877fcd0a5486ba8d0d5c9dc5313dae2b0aad98c..3fef1d8e5481bc1931be820149bfa66bc3f25bdf 100644 (file)
@@ -7,11 +7,11 @@ means centered on the stem).
 "
 }
 
-\version "2.19.16"
-\relative c''
+\version "2.19.21"
+\relative
 {
   \override Script.toward-stem-shift = #1.0
-  a4^> c_>
+  a'4^> c_>
 
   \override Script.toward-stem-shift = #0.0
   a4^> c_>
index d307d9cf7bd421d8a7e8712276ac1c14f0ab349a..766b24c18ea68a9dd8bb3ce9feb5abbfe12065ae 100644 (file)
@@ -8,17 +8,17 @@ The scripts should not be folded under the time signature.
 "
   
 }
-\version "2.17.15"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
 }
 
-\relative c' 
+\relative 
 {
   \set stringNumberOrientations = #'(left) 
   \set fingeringOrientations = #'(left) 
   \set strokeFingerOrientations = #'(left) 
-  <cis-1\4
+  <cis'-1\4
    -\rightHandFinger #1 f>\arpeggio
 }
index ad65384e707b321fd8b82def4ad5cfd39db3debf..b9fc811928d688c524965c2e5100d36c112fadf0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 
 \header {
 
@@ -6,9 +6,9 @@
 and then return to the previous value."
 
 }
-\relative c' {
+\relative {
   \set fingeringOrientations = #'(left)
-  <e-1>1 |
+  <e'-1>1 |
   \once \set fingeringOrientations = #'(right)
   <e-1> |
   <e-1> -"left" |
index b2f6262915bba100d6d47f61e08d9c116466de9b..09dd0db4fc973596588f522e32bc2f2e72dca877 100644 (file)
@@ -7,14 +7,14 @@
 }
 
 
-\version "2.17.11"
+\version "2.19.21"
 \paper {
   ragged-right = ##T
 }
 
-\new Staff \relative c' {
+\new Staff \relative {
   \set Score.skipTypesetting = ##t
-  \tuplet 3/2 { c8 c c } \tuplet 3/2 { c c c }
+  \tuplet 3/2 { c'8 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
index 49c03760925acfffa19a3a3cd0e44d313b38c0a2..77eb9e75b524a78dc8a44a64efa279cae56eb470 100644 (file)
@@ -5,12 +5,12 @@ using a skyline algorithm so that they don't collide with other objects."
 
 \layout {ragged-right = ##t}
 
-\version "2.17.6"
-\relative c''' {
+\version "2.19.21"
+\relative {
   \override Score.PaperColumn.keep-inside-line = ##f
   \override TextScript.outside-staff-priority = #2
   \override DynamicLineSpanner.outside-staff-priority = #1
-  c
+  c'''
   \once \override TextScript.self-alignment-X = #CENTER
   a,^"this doesn't collide with the c"
   b^"this goes above the previous markup"
index f76ece091935a12565b52756ea1fa6a2aa057a98..79cc524f3e126d7a69454feab121f130dd1f226e 100644 (file)
@@ -3,10 +3,10 @@
     texidoc = "Some composers use slurs both above and below chords.
  This can be typeset by setting @code{doubleSlurs}"
 }
-\version "2.16.0"
+\version "2.19.21"
 
 \layout { ragged-right = ##t }
-\relative c' {
+\relative {
     \set doubleSlurs = ##t
-    <c e>4 ( <d f> <c e> <d f> )
+    <c' e>4 ( <d f> <c e> <d f> )
 }
index a1380cf53972ff4a7e2170a82d0d09e9e577d417..ddf31c4e0caa70038618b2f48ebbe2fb7edd8a05 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 
@@ -12,7 +12,7 @@ Asymmetric slurs are created by setting @code{eccentricity}."
     ragged-right = ##t
 }
 
-baseWalk =  \relative {
+baseWalk =  \relative {
     \time 6/4
     \stemDown
     \slurUp
index 200595c373b6b4418345b88ba9c8b29aa17f6899..6f208e3a7ef5398886bfb6976cb3a7821f86f5d7 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   texidoc = "Slurs take flag extents into account.
 "
 }
 
-\relative c'' {
+\relative {
   \stemUp
   \slurUp
-  b8( c)
+  b'8( c)
 }
index 4a9cf8d94fa1ab104a960882b85aa218564e5639..a3b17d7ecafa0772c0060451e0a50f85f9a0646c 100644 (file)
@@ -6,11 +6,11 @@ positioning of the slur. It selects the slur configuration closest to
 the given pair. "
   
   }
-\version "2.17.6"
+\version "2.19.21"
 
 \paper { ragged-right = ##T }
-\relative c' {
+\relative {
   \override Slur.positions = #'(-4 . -5)
-  e( f g)
+  e'( f g)
 }
 
index 9662494bb1677aa54cb30513a00ff430959dd1ba..a5e8b38c6061885d878f8fa49eb7a222b1adef94 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.22"
 
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "already have slur"))
@@ -12,7 +12,7 @@ slur will not be generated.  However, one can can create a second slur with
 a different spanner-id."
 }
 
-sp=#(define-event-function (parser location n e) (index? ly:event?)
+sp=#(define-event-function (n e) (index? ly:event?)
      (set! (ly:music-property e 'spanner-id) (format "sp~a" n))
      e)
 
index 202ea32713f52851c25279216e45042f23630aaa..2003e95247b6696f4bb5bb7f7e76ecbdbf4a6549 100644 (file)
@@ -5,20 +5,20 @@ This may not work if the slur starts after the tuplet.  "
   
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
 %  #(define debug-slur-scoring #t)
 }
 
-\relative c' {
+\relative {
   \slurUp
   \override TupletBracket.bracket-visibility = ##f
   \override Slur.details.region-size  = #6
   
   \tuplet 3/2
   {
-    c(  g'  c,)
+    c'(  g'  c,)
   }
 }
index a858017427e81cc8716e6cd038ce68700e2d56aa..4bbc38bf641a597ae125631755ed34ff839927a1 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Outside staff callbacks that no longer apply to grobs
@@ -10,10 +10,10 @@ the first and second examples.
 "
 }
 
-\relative c'' {
+\relative {
   \set strokeFingerOrientations = #'(up)
   \override StrokeFinger.avoid-slur = #'outside
   \autoBeamOff
-  <a-\rightHandFinger #2 >16 b
+  <a'-\rightHandFinger #2 >16 b
   <a-\rightHandFinger #2 >16( b)
 }
index 1c9083597b6f6e0f446566a6f3942bfc15837cec..0ab48bd91a886f9972da29bd5330d098d616777e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 \header {
   texidoc="Festival song synthesis output supports
 reordered lyrics.
@@ -8,9 +8,9 @@ reordered lyrics.
 
 \festival #"song-reordering.xml" { \tempo 4 = 100 }
 <<
-  \relative c' \context Voice = "lahlah" {
+  \relative \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       \context Voice = alternative {
         \voiceOne
index 57595c22ad452ef88666b9e22d43fab6722b9425..800df58cfa62563e0fadb9e08ae7b1b23c87d77c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 \header {
   texidoc="Festival song synthesis output supports
 reordered lyrics.
@@ -8,9 +8,9 @@ reordered lyrics.
 
 \festival #"song-reordering2.xml" { \tempo 4 = 100 }
 <<
-  \relative c' \context Voice = "lahlah" {
+  \relative \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     <<
       {
         \voiceTwo
index 25aba696f52b7dc2887cdcbe827718d5900391da..a2237cfa8825870d01436a4938dd6ad3ce7f21df 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 \header {
   texidoc="Festival song synthesis output supports
 slurs.
@@ -8,9 +8,9 @@ slurs.
 
 \festival #"song-slurs.xml" { \tempo 4 = 100 }
 <<
-  \relative c' \context Voice = "lahlah" {
+  \relative \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
-    c4
+    c'4
     \slurDotted
     f8.[( g16])
     a4
index 02312f60422dfc2d33031289c49b5f4c24a9477b..d3adf5da16dc96f1e5e79ca954853ba77b48d651 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Accidentals do not influence the amount of stretchable space.
@@ -11,9 +11,9 @@ The accidental does add a little non-stretchable space.
 \layout {
   line-width = 18.\cm
 }
-\relative c'' {
+\relative {
   \accidentalStyle piano-cautionary
   \time 2/4 
-  d16 d d d d d cis d dis dis dis dis 
+  d''16 d d d d d cis d dis dis dis dis 
   
 }
index 98c26482e72c5c94e5f6479192fd070712370174..a1fac7247857eddc44bebddbda161ddd63e7441a 100644 (file)
@@ -5,19 +5,19 @@
 }
 
 
-\version "2.17.6"
+\version "2.19.21"
 \layout{
   ragged-right = ##t 
 }
 
 
-\relative c'' {
+\relative {
   \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
   \override Score.NonMusicalPaperColumn.layer = #2
   
   \time 2/4
   \stemUp
   s2
-  c4 r4
+  c''4 r4
   cis4 r4 
 }
index 2567773e833ca8f0fce21da4c2c18619f9db55ab..3f2915992aac19637ff90651743ee949b4582819 100644 (file)
@@ -9,19 +9,19 @@ to 1.5 staff space."
 }
 
 
-\version "2.17.6"
+\version "2.19.21"
 \layout{
   ragged-right = ##t 
 }
 
 
-\relative c'' {
+\relative {
   \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
   \override Score.NonMusicalPaperColumn.layer = #2
   
   \time 2/4
   \stemDown
   s2
-  e4 s4 
+  e''4 s4 
   e,4 s4
 }
index a8503b1a32948df54347d703d296540665f555fb..c790cd86702d5a29860894a33fd775c01046e6a2 100644 (file)
@@ -3,19 +3,19 @@
   
   }
 
-\version "2.17.6"
+\version "2.19.21"
 
 \layout{
   ragged-right=##t
 }
 
-\new Staff \relative c' {
+\new Staff \relative {
   \override Score.NonMusicalPaperColumn.stencil = #ly:paper-column::print
   \override Score.NonMusicalPaperColumn.layer = #1
   
   \time 4/4
   s1
-  c2. c4
+  c'2. c4
   \time 3/4
   s2.
   c2.
index 7ed718561b2c362bf59c8fd1d96e84fe67979cf8..32eef70cfc1fc6fd1d9278c556f80fff9835937e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 \header {
     texidoc = "Clefs are also folded under cross staff constructs."
 }
@@ -7,10 +7,10 @@
 
 \context PianoStaff <<
   \new Staff = "up"
-  \relative c'' <<
+  \relative <<
     {
       \stemDown
-      f16[ \change Staff = down \stemUp
+      f''16[ \change Staff = down \stemUp
       \clef treble g,]
 
     } \\
index 27c0fa8685ecf994e944998d71b9bee0606b8ef5..d413976200f4a593d0e4827f0f89dfda446fbc76 100644 (file)
@@ -3,14 +3,14 @@
 
   texidoc = "accidentals may be folded under preceding notes."
   }
-\version "2.16.0"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
   }
 
-\relative c''' {
-  \stemUp c4...*1/2
+\relative {
+  \stemUp c'''4...*1/2
 
   ceses,,!
   eses!
index ce56c5f8be4014675d9b64d9d985df90d1efc01d..c13677b32dad66a11155b9eb9c6478714bfb7759 100644 (file)
@@ -7,7 +7,7 @@ correctly in polyphonic music.
 }
 
 \new PianoStaff <<
-  \new Staff \relative c' {
+  \new Staff \relative {
     \tuplet 3/2 { g'4 a2 }
   }
   \new Staff \relative {
index 8010f4edfb193818295f42f5d317a0e52ce7cd52..1539b901ced97aee488fe5dcb393804a658435b7 100644 (file)
@@ -4,15 +4,15 @@
 
 }
 
-\version "2.17.6"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
 }
 
-\relative c''
+\relative
 {
   \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
-  c1
+  c''1
   \mark "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
 }
index 4c84dad0d8b90947c91f6e1cc73b03704c73d545..0f11ac8677129fbf4da38a909f22d23f10d27942 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
  \header{
 
@@ -7,10 +7,10 @@
 
 \paper {ragged-right = ##f }
 
-\relative c' 
+\relative { 
   \context StaffGroup << 
     \new Staff  \context Voice { 
-      \tuplet 10/8 {  c8[ c c c c c c c c c] }
+      \tuplet 10/8 {  c'8[ c c c c c c c c c] }
     }
     \new Staff  \context Voice { 
       \tuplet 8/8 {  c8[ c c c c c c c] }
index 9771c636a8e64ead403a234adcc2284ee672db5c..81c03b14f8c22cbce6168eebae3b46b3b9cf829e 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
 
@@ -12,9 +12,9 @@
   ragged-right = ##t
 }
 
-\relative c'' \context Staff {
+\relative \context Staff {
   \set autoBeaming = ##f
-  a8[ a8 a8 a8]
+  a'8[ a8 a8 a8]
   a8 a8 a8 a8
 }
 
index d3a01b6f92b796722b597193f46227905c4ad334..e5d415761fd32feb7c1b3af4d1d35070d7f1c216 100644 (file)
@@ -10,9 +10,9 @@
 "
   }
 
-\version "2.17.6"
+\version "2.19.21"
 
-\relative c' {
+\relative {
   \override Score.SpacingSpanner.packed-spacing = ##t
-  c2 d4 f8[ g] a
+  c'2 d4 f8[ g] a
 }
index 73c13dcdf28d43487835a0114b96e9de6f950a7c..4cd8c339469676f3612aab728df710a71e5937c1 100644 (file)
@@ -6,14 +6,14 @@ to the distance for the given duration."
 
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \paper { ragged-right = ##t }
 
-\relative c''
+\relative
 <<
   \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
-  \new Staff { c8[ c c c c c]  c4 c2 r2 }
+  \new Staff { c''8[ c c c c c]  c4 c2 r2 }
   \new Staff { c2  \tuplet 3/2 { c8 c c } c4 c1 }
 >>
 
index d78514396055eeffc886fdd6c9e6ea842ec52ff7..2b2ff08d89108e7323612c7413f55e5e036fc733 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
 
@@ -12,5 +12,5 @@
   ragged-last = ##t
 }
 
-\relative c'' \new Staff { \repeat unfold 20 { c1 } }
+\relative \new Staff { \repeat unfold 20 { c''1 } }
 
index 7665030801a1a197f4ff31105bc55ffc8cb08832..8c26d9d55984451643b6baa0abf49abb3c91db84 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 \header {
 
   texidoc = "Upstem notes before a barline are printed with some extra
@@ -11,7 +11,7 @@ space. This is an optical correction similar to juxtaposed stems.
 \layout { ragged-right = ##t}
 
 
-\relative e'
+\relative
 {
   \override Score.PaperColumn.layer = #1
   \override Score.PaperColumn.stencil = #ly:paper-column::print
@@ -19,7 +19,7 @@ space. This is an optical correction similar to juxtaposed stems.
   
   \time 2/8
   \stemUp
-  e8[ e]
+  e'8[ e]
   e'[ e]
 }
 
index fbca840c55484a9aea8e5732582f4baa00ebe308..805a944507bf788318f2ae408e93cffac5c88b78 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header{
 
@@ -16,7 +16,7 @@ much to correct."
 }
 
 
-\context Voice \relative {
+\context Voice \relative {
   \override Score.PaperColumn.layer = #1
   \override Score.PaperColumn.stencil = #ly:paper-column::print
 
index 03a20bc67911b4775782ae04d11fb6298f4c547a..d905042ca18441e7dc256c7f848783bbdce51c9c 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 \header {
   texidoc = "For juxtaposed chords with the same direction, a
 slight optical correction is used. It is constant, and works only if
@@ -8,13 +8,13 @@ two chords have no common head-positions range."
 
 \layout { ragged-right = ##t}
 
-\relative c'' {
+\relative {
   \override Score.PaperColumn.layer = #1
   \override Score.PaperColumn.stencil = #ly:paper-column::print
 
   \stemDown
   \time 12/4
-  f8[
+  f''8[
     e f e]  f[ d f d]  f[ c f c]  f[ b, f' b,]  f'[ a, f' a,]
 }
 
index 6e17724c1f3844a9091f4458bb87a4f96f2d46ba..26042175f7b7ec0ba76e512c7fa7de2ba1e5256b 100644 (file)
@@ -9,7 +9,7 @@ time.  This may cause collisions.  "
 }
 
 
-\version "2.17.28"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
@@ -21,12 +21,12 @@ time.  This may cause collisions.  "
   }
 }
 
-\relative c''
+\relative
 <<
   \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
+    c''8[ c \clef alto c c \grace { d16 }  c8 c]  c4 c2
     \grace { c16 c16 }
     c2 }
   \new Staff {
index 16cd079404acf57bb0eaf41a0b0c6925f1eeb4ee..3cb7b884b8bd8760ea9bdf8738c2fd6847924731 100644 (file)
@@ -6,13 +6,13 @@
 
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
-\relative c''
+\relative
 <<
   \override  Score.SpacingSpanner.uniform-stretching = ##t 
   \new Staff {
-    c16[ c c c c c c c c c16]
+    c''16[ c c c c c c c c c16]
   }
   \new Staff {
     \tuplet 7/6 { c16 c c cis c c c }
index 100d81346af74785c025d99a85ee29230eb4bb5e..9c9c4f9d205908ea18c773179176b85ba5155fec 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 texidoc = "The visibility of left-broken line spanners and hairpins
@@ -9,7 +9,7 @@ controlled by the callback @code{ly:spanner::kill-zero-spanned-time}.
 
 \paper { ragged-right = ##t }
 
-\relative c' {
+\relative {
   \override TextSpanner.bound-details =
     #'((left
         (Y . 0)
@@ -25,7 +25,7 @@ controlled by the callback @code{ly:spanner::kill-zero-spanned-time}.
         (text . #f))
        (right-broken
         (text . #f)))
-  c1\startTextSpan\< \break
+  c'1\startTextSpan\< \break
   \override Hairpin.to-barline = ##f
   \override Hairpin.after-line-breaking = ##f
   c2\stopTextSpan\!
index 02ffba9a5c7714f5de0be4857eb71785bf347269..08f337b9ce7d30acf0992fd141eb75e8e75a721a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "The @code{break-overshoot} property sets the amount that
@@ -9,10 +9,10 @@ prefatory matter."
 
 \paper { ragged-right = ##t }
 
-\relative c'' {
+\relative {
   \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.] }
+  c''2.. \tuplet 3/2 { c8.[ \break c8.] }
 }
index 72ee58c48bce01934d6ba7322e3266e070b585c6..7c722250a7e7fe69ca7e18a52eeaeb3011001d3f 100644 (file)
@@ -15,9 +15,9 @@
 }
 
 {
-  \new Voice \relative c'' 
+  \new Voice \relative { 
     \voiceOne
-    g8-. a-. b-. c-. 
+    g'8-. a-. b-. c-. 
     a-. b-. c-. d-. 
     b8[-. a-. g b] 
     e,-. f-. g-. a-. 
@@ -29,9 +29,9 @@
       \stemDown
       e,-. d-. c-. b-. a-. g-.    
     }
-    \relative c'' {
+    \relative {
       \stemUp           
-      d-> c-> b-> a-> g-> f-> e-> d->
+      d''-> c-> b-> a-> g-> f-> e-> d->
       d'
       d-. c-. b-. a-. g-. f-. e-. d-. 
     }  
index 3237af9a7e19c63f7cd1660f71d4722cc635f68c..dfe5def8345ca78a61885800c76ca599ef54d8fb 100644 (file)
@@ -6,11 +6,11 @@ StaffSymbol, and a dotted note falls on a ledger line, the dot is shifted
 up to avoid the ledger line (just as with uncustomized ledger lines)."
 }
 
-\version "2.19.17"
+\version "2.19.21"
 
-\new Staff \relative c' {
+\new Staff \relative {
   \override Staff.StaffSymbol.line-positions = #'(-3 0 3)
   \override Staff.StaffSymbol.ledger-positions = #'(-3 0)
   \override Staff.StaffSymbol.ledger-extra = #1
-  f,4. g a b c d g' a b c d e
+  f4. g a b c d g' a b c d e
 }
index 3e8c191937a4e77b6970961c8932e8aba4715af6..986f18cc61219d7ca6508e78f5ac4473690eed0e 100644 (file)
@@ -7,9 +7,9 @@ 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.17.6"
+\version "2.19.21"
 
-\new Staff \relative c' {
+\new Staff \relative {
   \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
index e8c9d4fa8feb26bdef66cedca7302632bf1cf3a2..e7c10d3e429e3d801132108307cc7499bffb62a9 100644 (file)
@@ -6,10 +6,10 @@
 
 }
 
-\version "2.17.6"
+\version "2.19.21"
 
 
-\new Staff \relative c'  {
+\new Staff \relative  {
   \override Staff.StaffSymbol.line-positions = #'(-7 -2 0 3 9)
   g c f b e a
 }
index f4eaf78f1ea62c6e18e392de72eab319a00b505b..3d43c3c8cc76efed1a875d78d53c410e57dc08ee 100644 (file)
@@ -5,12 +5,12 @@
 
 }
 
-\version "2.17.6"
-\relative c'' \new Voice \with {
+\version "2.19.21"
+\relative \new Voice \with {
      \consists "Melody_engraver"
      \override Stem.neutral-direction = #'()
 } {
-  c4 b c b
+  c''4 b c b
   c c c c
   b a b a
 } 
index 39aa0921814f3859ad915a5dcb128c718f74fbd2..d0647d095f56c091dd3877ee0ca8927ed2041c57 100644 (file)
@@ -1,12 +1,12 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "Stem length and stem-begin-position can be set manually.
 "
 }
 
-\relative c' {
+\relative {
   \autoBeamOff
   \stemUp
   a8 aes''8
index 2063b84cdf401cd7719a80bdc582e7dcf4c9edd5..8793420631e2970edd8117c9d88b46943060a998 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
   
@@ -14,8 +14,8 @@
 }
 
 
-\relative c'' {
-  \stemDown d c b a g f e
+\relative {
+  \stemDown d'' c b a g f e
   \stemNeutral
   \stemUp a b c d e f g a
   \stemNeutral
index 4799eb5c8c37cafec0e10538c8fc53425496b625..428e5a9af79292e5d992a6c201c0b4f0f306e7fd 100644 (file)
@@ -5,11 +5,11 @@ length can be set with @code{stemlet-length}."
 
 }
 
-\version "2.17.6"
+\version "2.19.21"
 \layout { ragged-right = ##t }
 
-\relative c' {
+\relative {
     \override Stem.stemlet-length = #0.75
-    c8[ r8 c16 r16 c8]
+    c'8[ r8 c16 r16 c8]
     c4
 }
index 361f21752cf00cf0b40a046abd5909582d3ea933..4f2156b9b38ab9453a89f3bca753f4a98a2d9d22 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.19.21"
 
 \header {
 texidoc = "Tremolo works even when a stem is forced in a
@@ -8,7 +8,7 @@ particular direction.
 }
 
 \layout { ragged-right = ##t }
-\relative 
+\relative 
 {
         \clef bass
        \stemUp f4 : 32
index f62e6ddbd5ca84e3015cda6c74668ba9dd9c347e..90588633bf9cd0d74535fddaa6dec39d5bbeb253 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.17.6"
+\version "2.19.21"
 \header{
   texidoc="Stem tremolos count in a note column's horizontal skyline.
 "
 }
 
 
-\relative c'' {
+\relative {
   \autoBeamOff
   \override NoteHead.stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
-  \repeat unfold 8 { b8:32 }
+  \repeat unfold 8 { b'8:32 }
 }
index d79dcd3b0f6651fff9cb360a9a7462aa1ae5cc7d..bae87d062ebeffcbabab6f1ee11cb2360854bace 100644 (file)
@@ -1,18 +1,18 @@
 \header { texidoc = "A heavy-bar system start delimiter may be created by tuning the @code{SystemStartBar} grob."
        } 
 
-\version "2.17.15"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
 }
 <<
   \new StaffGroup
-  \relative c' <<
+  \relative <<
     \set StaffGroup.systemStartDelimiter = #'SystemStartBar
     \override StaffGroup.SystemStartBar.thickness = #8
     \override StaffGroup.SystemStartBar.padding = #0.2
-    \new Staff { c1 }
+    \new Staff { c'1 }
     \new Staff { c1 }
   >>
   \new Staff { c1 }
index 41a4a72a2a73bf9a28c8087e59714f1e8402e087..d169a8cae2dd8883a50a36b62e7bef0037b617e1 100644 (file)
@@ -2,17 +2,17 @@
   created with the @code{systemStartDelimiterHierarchy} property."
 }
 
-\version "2.17.15"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t
 }
 
 \new StaffGroup
-\relative c' <<
+\relative <<
   \set StaffGroup.systemStartDelimiterHierarchy
     = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
-  \new Staff { c1 }
+  \new Staff { c'1 }
   \new Staff { c1 }
   \new Staff { c1 }
   \new Staff { c1 }
index 381cb249ce0dd460ef69dcd14e5fe3917bc68999..0a67e2b814e3cf26936ae06cfa83eeca3d8223cb 100644 (file)
@@ -18,9 +18,9 @@ secondpart = \relative {
   c'1 ~ \break c2 ~ 2
 }
 
-thirdpart = \relative c' {
+thirdpart = \relative {
     \repeat volta 2 {
-    < c\3 e\2 g\1 >4 < c\3 e\2 g\1 > ~ < c\3 e\2 g\1 >\laissezVibrer r
+    < c'\3 e\2 g\1 >4 < c\3 e\2 g\1 > ~ < c\3 e\2 g\1 >\laissezVibrer r
     c4. d8 e2 ~
    }
    \alternative { { e2 r } { e2\repeatTie e2^\fermata } }
index f201799d8ae7a1dc79fed8fa0ae1ffa925fba5a6..a22a58e51ebe32f253e8585145c0f5a2f30135cb 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "No open string for pitch ~a") "#<Pitch f >")
 
@@ -10,7 +10,7 @@ a warning message and set the requested pitch in the tablature.
 "
 }
 
-mymusic = \relative {
+mymusic = \relative {
   \set minimumFret = #1
   <d-0 d'-2 f-3 a-1>1
   <f-0>
index 76b0a3fb647d7740afe56509b2f3da7847ac3eaf..d12e5f6575d96cdea4381a2f89e4a53cccbb2bd0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.14"
+\version "2.19.22"
 
 \header {
   texidoc = "The operation of @code{\\keepWithTag} can be made more
@@ -28,7 +28,7 @@ music =
 >>
 
 demo =
-#(define-music-function (parser location syms m)
+#(define-music-function (syms m)
   (symbol-list? ly:music?)
   #{
     \new Score <<
@@ -40,7 +40,7 @@ demo =
 #(set-global-staff-size 16)
 
 demoline =
-#(define-scheme-function (parser location m1 m2) (ly:music? ly:music?)
+#(define-scheme-function (m1 m2) (ly:music? ly:music?)
   #{
     \markup \column { \fill-line { \null \score { #m1 } \score { #m2 } \null }
                       \vspace #1 }
index 2f581e12ad7ceade7f71538689896d4416efa74e..157c0aff38e92af12c64847c6d0f1bc73034b78f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.2"
+\version "2.19.22"
 \header {
 
   texidoc = "The @code{\\removeWithTag} and @code{\\keepWithTag}
@@ -16,7 +16,7 @@ music =
 >>
 
 demo =
-#(define-music-function (parser location fun syms m)
+#(define-music-function (fun syms m)
   (ly:music-function? symbol-list? ly:music?)
   #{
     \new Staff
index ae56d940df5b1e02070bbedcda0d984ca1cf97fc..5c2d481703502bae1fe876cecf86508eb9ac9541 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.19.21"
 \header {
     texidoc= "Text spanners should not repeat start text when broken."
 }
@@ -7,10 +7,10 @@
     ragged-right = ##t 
 }
 
-\relative c'' {
+\relative {
     \set crescendoText = #"cresc."
     \set crescendoSpanner = #'text
-    c1\< c \break
+    c''1\< c \break
     c1 c\! \break
 }
 
index aea5616fce4d6ff84a938c0b1b825fbd92410917..d7060cb69c5592af9f83c04314ff186af4806723 100644 (file)
@@ -4,16 +4,16 @@
 " }
 
 
-\version "2.17.6"
+\version "2.19.21"
 
 \paper {
   debug-tie-scoring = ##t
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \override Tie.layer = #2
-  a ~ <fis a>
+  a' ~ <fis a>
 }
 
 % EOF
index fab5dc33e876018e265bf98ba9102e1e460a59a1..13dc222e107bf7d0f9687cac1c66f7e4c4478477 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
 
@@ -13,8 +13,8 @@ has a @code{minimum-length} of 5."
   line-width = 40.0\mm
 }
 
-\relative c' {
+\relative {
   \override Tie.minimum-length = #5
-  f2. f16  f  f  f ~ | \break
+  f'2. f16  f  f  f ~ | \break
   f1
 }
index 1b9819e7ae3adb760dd0a36533b03bd25ddfb512..f867e54613beb3128b401c12b8611e5ac9778d18 100644 (file)
@@ -11,7 +11,7 @@ each system."
 
 }
 
-\version "2.19.21"
+\version "2.19.22"
 
 \paper {
   indent = #0.0
@@ -21,7 +21,7 @@ each system."
 
 
 generateTiePattern
-= #(define-music-function (parser location is-long chords) (boolean? ly:music?)
+= #(define-music-function (is-long chords) (boolean? ly:music?)
 
     "
 
index b882d21e0fde3bcf015f547819d2e8b57bad4ae8..8c4862aedc82ba2c9472151a013fa9d29642a3e6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "If using integers, the tie will vertically tuned for
@@ -6,9 +6,9 @@ staff line avoidance. If using a floating point number, this is taken
 as the exact location."
 }
 
-\relative c'' {
+\relative {
   \override Tie.staff-position = #3
-  d4 ~
+  d''4 ~
   \override Tie.staff-position = #3.0
   d ~
   d
index 32081c902fba5900f79c8bafd0c6f7b3f4190a84..d6d18c3780e23f0ce6597a06ef5acf9d32309d50 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.16"
+\version "2.19.21"
 
 \header {
   texidoc = "This test covers the mensural and neomensural time signature styles."
@@ -12,8 +12,8 @@
 
 \layout { indent = 0 }
 
-testMusic = \relative f' {
-    \time 4/4 \partial 4 f4
+testMusic = \relative {
+    \time 4/4 \partial 4 f'4
     \time 2/2 \partial 4 f4
     \time 6/4 \partial 4 f4
     \time 6/8 \partial 4 f4
index e28772d2d40196a2a470565ebdaa601a8183fc87..8c60215db5ef9866dcad3e7d93c5e728006af4ee 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.19.16"
+\version "2.19.21"
 
 \header {
   texidoc = "The numbered time signature style prints a fraction."
 }
 
 \new Staff {
-  \relative d' {
+  \relative {
     \override Staff.TimeSignature.style = #'numbered
-    \time 4/4 d1
+    \time 4/4 d'1
     \time 3/4 d2.
     \time 2/2 d1
     \time 16/128 d8
index fcf473c57b82917f5c28752c6c0449908aa9044d..e5b816a457bba0f81f4721351eca30351086c17f 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.19.16"
+\version "2.19.21"
 
 \header {
   texidoc = "The single-digit time signature style prints the numerator only."
 }
 
 \new Staff {
-  \relative d' {
+  \relative {
     \override Staff.TimeSignature.style = #'single-digit
-    \time 1/2 d2
+    \time 1/2 d'2
     \time 2/4 d4 d
     \time 3/4 d2.
     \time 16/4 d\longa
index 6b84baa674f17516bb9f675a5198fccc5c9a249e..e3a585fe47585b03d5544f504e0e3a6e3fb80b3d 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 \header {
 
   texidoc = "In combination with a beam, the bracket of the tuplet
@@ -9,8 +9,8 @@ the bracket."
 }
 \layout { ragged-right= ##t }
 
-\context Voice\relative c'' {
-  \tuplet 3/2 { r  c8[ c8] }
+\context Voice\relative {
+  \tuplet 3/2 { r  c''8[ c8] }
   \tuplet 3/2 {  c8[ c c] }
   \tuplet 3/2 {  c16[ c16]  c8[ c8] }
 }
index 719851b26d6c6a89df045918f2d8eb87389ddb00..72df3d62a083c1d739dde37c0c40cea7a4a6a950 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "@code{TupletBracket} grobs avoid @code{Fingering} grobs.
 "
 }
 
-\relative d'' {
+\relative {
  \override TupletBracket.direction = #UP
- \tuplet 3/2 { d4 a8-4 }
+ \tuplet 3/2 { d''4 a8-4 }
 }
index 1cccccde46ee50817b30775d860d2238b2657782..9edbde3f1da1249c5ddb9ed637a28032fbec1c67 100644 (file)
@@ -1,10 +1,10 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet brackets avoid scripts by default.
 "
 }
 
-\relative c'' {
-  \tuplet 3/2 { a8^\espressivo r a^\espressivo }
+\relative {
+  \tuplet 3/2 { a'8^\espressivo r a^\espressivo }
 }
index 62ce79a461ce42e8cef0e8fb80c7186a531e8eb8..11c2ddff6e0ee4b66f2f6ebe7b0bf0f89ba90fc3 100644 (file)
@@ -1,11 +1,11 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "@code{TupletBracket} grobs avoid @code{StringNumber} grobs.
 "
 }
 
-\relative d'' {
+\relative {
  \override TupletBracket.direction = #UP
- \tuplet 3/2 { d4 <a\4>8 }
+ \tuplet 3/2 { d''4 <a\4>8 }
 }
index ecfa6814f77edef22dd44aa53d4594b0589cbc25..15d5220612822504a131c62f671faa5ba324cc48 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 \header {
 
   texidoc = "Tuplet brackets' outside staff priority can be
@@ -6,10 +6,10 @@ set.  Brackets, by default, carry their numbers with them."
 
 }
 
-\relative c'' {
+\relative {
   \override TupletBracket.avoid-scripts = ##f
   % Plain old tuplet
-  \tuplet 3/2 { a8 r a }
+  \tuplet 3/2 { a'8 r a }
   % With nothing set, collisions abound both horizontally and
   % vertically
   \tuplet 3/2 { a8^\espressivo r a^\espressivo }
index 752f595128f86978dd1dc51cc41778f492d40a28..db82cafb57692bd2670751cdb9f39ce6e83468b9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet brackets do not push objects with outside-staff-priority
@@ -6,7 +6,7 @@ too high.
 "
 }
 
-\relative c' {
+\relative {
   \override TupletBracket.direction = #UP
   \tuplet 1/1 { a^"foo" a' a' a' }
 }
index 1d4a986ac5444009816bebb068303e8122c8f203..e3ad513b173af5718eaaa20113b96f60325bd971 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
   texidoc = "The default behavior of tuplet-bracket visibility is to print a bracket
@@ -20,8 +20,8 @@ unless there is a beam of the same length as the tuplet.  Overriding
 "
 }
 
-music = \relative c'' {
-  \tuplet 3/2 { c16[ d e } f8]
+music = \relative {
+  \tuplet 3/2 { c''16[ d e } f8]
   \tuplet 3/2 { c8 d e }
   \tuplet 3/2 { c4 d e }
 }
index 9021ead4b1a0c34a994f3af11897069dd5c14d0a..6bb811ab5ae3a3b4e222084e608085ca2f3be777 100644 (file)
@@ -8,7 +8,7 @@
 
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \paper {
   ragged-right = ##t  
@@ -16,7 +16,7 @@
 }
 
 
-\relative c'' {
+\relative {
   \override TupletNumber.text = #tuplet-number::calc-fraction-text
 
   \override TupletBracket.edge-text = #(cons
@@ -24,7 +24,7 @@
                                             #:arrow-head X LEFT #f)
                                          (markup #:arrow-head X RIGHT #f))
   \tuplet 19/11 {
-    c4 c4 c4 c4
+    c''4 c4 c4 c4
     \bar "-" \break
     c4 c4 c4 c4
     c4 c4 c4 c4
index 484d24762b5938bc2b2d7440a032ccc8c361b883..6eac8bfd3c5559ff7161074338bd8e70c1e7046a 100644 (file)
@@ -5,19 +5,19 @@
 start of the next non-tuplet note.  "
 
 }
-\version "2.17.11"
+\version "2.19.21"
 
 \paper { ragged-right = ##t
   indent = 0.0
 }
 
-\relative c'' \new Voice \with {
+\relative \new Voice \with {
   \remove  Forbid_line_break_engraver
   \override Beam.breakable = ##t
 }
 {
   \set tupletFullLength = ##t
-  c4
+  c''4
   \tuplet 3/2 { c8[ c c] }
   \tuplet 3/2 { c8[ c \bar "-" \break c] }
   << \tuplet 3/2 { c8[ c c]  }
index 4bf91a6e4d63a86f39ac627f902da74c7495e303..f7428cc6d59c32bc17a74c43f6c3136dfe3899eb 100644 (file)
@@ -5,7 +5,7 @@
 
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \layout {
   indent = 0.0\mm
@@ -13,8 +13,8 @@
 }
 
 
-\relative c'' {
+\relative {
   \override TupletNumber.text = #tuplet-number::calc-fraction-text
-  \tuplet  12/17  { c8 c4 c8 c8}
+  \tuplet  12/17  { c''8 c4 c8 c8}
 }
 
index 33876e0034c0e23c51a448a06a13da6018a5062c..edfffb87de4e955c08e600b503b520ba11584d20 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
     texidoc = "Broken nested tuplets avoid each other correctly.
 \score {
   \new Staff
   <<
-    \relative c'' {
+    \relative {
       \override Score.Beam.breakable = ##t
 
       r2
 
       \tuplet 3/4 {
-        \tuplet 3/2 { c8[ c c] }
+        \tuplet 3/2 { c''8[ c c] }
         \tuplet 3/2 { c8[ c c] }
         \tuplet 3/2 { c8[ c c] }
       }
index 093c57f28961a7c519b8ce6041180b1210bb872f..8c10cdcd1b695976121f7d35bb1d7a49ab55b8e9 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
     texidoc=" Tuplets may be nested."
@@ -10,9 +10,9 @@
   indent = 0.0
 }
 
-\relative c'' {
+\relative {
   \tuplet 3/4 {
-    \tuplet 3/2 { c8[ c c] }
+    \tuplet 3/2 { c''8[ c c] }
     \tuplet 3/2 { c8[ c c] }
     \tuplet 3/2 { c8[ c c] }
   }
index a69ba526d07c611a0c76a5733d117ba31cd89ed2..2cd490016cd39e41a91face9fd62098e3698f15d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet numbers are positioned correctly on kneed French-style beams."
@@ -13,7 +13,7 @@ top = \change Staff = "1"
 bottom = \change Staff = "2"
 
 music =
-\relative c' {
+\relative {
   \time 3/4
   \override Beam.auto-knee-gap = 1
   \override Stem.french-beaming = ##t
index e66bc6931c6d308ea79327081580d2912ade2b64..e52b76061962daee78690f117236a055406e5ae9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "In tuplets with an even number of stems, the number
@@ -13,11 +13,11 @@ case the number is placed opposite the partial beam."
   ragged-right = ##t
 }
 
-\relative c' {
+\relative {
   \time 2/4
   \override Beam.auto-knee-gap = 1
   \tuplet 6/4 4 {
-    c16 c'' c,, c'' c,, c''
+    c'16 c'' c,, c'' c,, c''
     \once \override TupletNumber.direction = #UP
     c,,16 c'' c,, c'' c,, c''
   }
index 21f17d18279ce674d9427cad9e599ed732ad1a8d..5f23f5eba727f5859619fa0e077c2c51ce6d491d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet numbers are placed next to the beam unless there is
@@ -18,13 +18,13 @@ below the noteheads."
 }
 
 \score {
-  \relative c' {
+  \relative {
     \time 2/4
     \override Beam.auto-knee-gap = 1
     \tuplet 6/4 4 {
       \once \override TupletNumber.text =
         #tuplet-number::calc-fraction-text
-      c16 c'' c,, c'' c,, c''
+      c'16 c'' c,, c'' c,, c''
       \once \override TupletNumber.text =
         #(tuplet-number::fraction-with-notes "16" "16")
       c,,16 c'' c,, c'' c,, c''
index 1ce4201611ab51cf06b91a989b28f1f1b7d30263..58db776e8d322e9c7394cd2c5fb2172ebf7f06be 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "A tuplet number associated with a kneed beam is not placed between
@@ -10,10 +10,10 @@ beam and staff where it may collide with ledger lines."
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \override Beam.auto-knee-gap = 1
   \tuplet 3/2 4 {
-    c8 c''' cis,,,
+    c''8 c''' cis,,,
     c8 c'''' c,,,
     c''8 c c,,
     c,8 c,,, c'''
index 3618ed21e94e570c7028a969f513f11dd0c38f42..d98353494a9e9cdb1017b2129981ee5ff5dd31d0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.4"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet numbers are placed next to kneed beams when
@@ -13,7 +13,7 @@
 top = \change Staff = "1"
 bottom = \change Staff = "2"
 
-music = \relative {
+music = \relative {
   \override Beam.auto-knee-gap = 1
   \tuplet 3/2 4 {
     c8 \top e'' \bottom g,,
index 8cdb353a6d6bc3a3bb0c8645054a0cc647d7fc8b..93e28aac0553514b46067f34b9d32612bc77a80d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
 
@@ -10,8 +10,8 @@ positioned above them.
 
 }
 
-\relative c'' {
+\relative {
    \override TupletBracket.outside-staff-priority = #1
    \override TupletNumber.font-size = #5
-   \tuplet 3/2 { a4\trill a\trill^"foo" a\trill }
+   \tuplet 3/2 { a'4\trill a\trill^"foo" a\trill }
 }
\ No newline at end of file
index 1a21d0cf770fb54ca73f12038a3cf2f822b642cf..dfbf8cd9c938c773ea30421f7f9e564ee7b29009 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 \header {
 
   texidoc = "Tuplet numbers' outside staff priority can be
@@ -6,9 +6,9 @@ set."
 
 }
 
-\relative c'' {
+\relative {
   \override TupletBracket.avoid-scripts = ##f
-  \tuplet 3/2 { a8\trill a\trill a\trill }
+  \tuplet 3/2 { a'8\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
index b951fa132f07798c4697fe343a743652c71ad3fb..272095b34e0b5b88d588d13dbad0f34ef90a4b38 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet numbers will maintain a constant distance from
@@ -10,9 +10,9 @@ kneed beams when offset horizontally."
   ragged-right = ##f
 }
 
-\relative c' {
+\relative {
   \tuplet 3/2 4 {
-    c8 g''' a
+    c'8 g''' a
     \once \offset X-offset 2 TupletNumber
     c,,, g''' a
     \once \offset X-offset #-2 TupletNumber
index c00f4e102d29679fa7a65b6805fe544d2483478c..33a99bd1ffe721a02e08e58e1f2e67bbf02e6c38 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet numbers associated with kneed beams will
@@ -13,7 +13,7 @@ avoid accidentals."
 top = \change Staff = "1"
 bottom = \change Staff = "2"
 
-music = \relative {
+music = \relative {
   \override Beam.auto-knee-gap = 1
   \tuplet 5/4 4 {
     c16[ \top g'' e' \bottom fis,, \top c']
index 1286b209caca187d77bcb933b614629c9116ea1a..e23728827b755fba1b9fc796e78564d6b37db9a9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.3"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet numbers are positioned next to kneed beams."
@@ -12,7 +12,7 @@
 top = \change Staff = "1"
 bottom = \change Staff = "2"
 
-music = \relative {
+music = \relative {
   \time 3/4
   \override Beam.auto-knee-gap = 1
   \tuplet 3/2 4 {
index 4af8ddd23ce5cf769813464453e1ae705a4d7a70..4e5e839c8ab9360ad9f8eb32ed0ab95855f3ce4a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.30"
+\version "2.19.21"
 
 \header {
   texidoc = "Tuplet bracket formatting supports numerous options,
@@ -6,9 +6,9 @@ for instance, bracketed (B) and non-bracketed (NB).
 "
 }
 
-\context Voice \relative c'' {
+\context Voice \relative {
 
-  \tuplet 3/2 { c'8 c,, c }
+  \tuplet 3/2 { c'''8 c,, c }
   \tuplet 3/2 { c'8 c'' c,, }
 
   \tuplet 3/2 { c8[^"NB" c c] }
index beda1ec33e9e9c02bedfabb504637196c3289284..854ddc54e2e8e7ee8adb07a875872004a00b5b51 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 \header {
 
   texidoc = "Tuplets may contain rests. "
@@ -7,9 +7,9 @@
 }
 
 
-\context Voice  \relative c'' {
+\context Voice  \relative {
   \time 2/4
-  \tuplet 3/2 { r c,,, c''' }
+  \tuplet 3/2 { r c, c''' }
   \tuplet 3/2 { r c c  }
   \tuplet 3/2 { r c r }
   \tuplet 3/2 { r r r }
index 322a4d635b76d0bac131aa8811cad9a66ad66d6e..27152684531fc0283c49ffbc8464ea54fe2f78f3 100644 (file)
@@ -4,14 +4,14 @@
   texidoc = "Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don't show a bracket. Make sure that tuplets without any notes don't show any number, either."
 
 }
-\version "2.17.11"
+\version "2.19.21"
 
 \paper { ragged-right = ##t
 indent = 0.0 }
 
 \new Staff <<
-  \new Voice \relative c'' {
-    \tuplet 6/4 { c2.:8 } \tuplet 3/2 { g4.:8 } \tuplet 3/2 { a,4.:8 } \tuplet 6/4 {} \bar"|."
+  \new Voice \relative {
+    \tuplet 6/4 { c''2.:8 } \tuplet 3/2 { g4.:8 } \tuplet 3/2 { a,4.:8 } \tuplet 6/4 {} \bar"|."
   }
 >>
   
index c112f0c9af3c1e36eed00f2cb756a068e7dc110b..6be44d91bc177a326981e3254bb16c53e5f9725e 100644 (file)
@@ -15,15 +15,15 @@ The bracket direction is determined by the dominating stem direction.
   ragged-right = ##t 
 }
 
-\version "2.17.11"
+\version "2.19.21"
 
 \new Voice {
-  \relative c'' {
-    \tuplet 3/2 { c4 d e}
+  \relative {
+    \tuplet 3/2 { c''4 d e}
     \tuplet 3/2 { c4 d e}
   }
   
-  \relative c' {
+  \relative {
     \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 }
index 8729d9747a7ba6ebb1f74045c4ca24da3cdd0cca..6f0d244078280615c5830c1b512b97461714ae49 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 \header {
 
   texidoc = "Horizontal tuplet brackets are shifted vertically
@@ -9,8 +9,8 @@ to avoid staff line collisions."
 
 \layout { ragged-right= ##t }
 
-\context Voice\relative c'' {
-  \tuplet 3/2 { b'4 b b }
+\context Voice\relative {
+  \tuplet 3/2 { b''4 b b }
   \tuplet 3/2 { f4 f f }
   \tuplet 3/2 { g4 g g }
   \tuplet 3/2 { a4 a a }
index 82fd4b97802b1f5a0f17fd430faa29cfbb3b37ed..60df2449e273810f7bc5b8a05b582bf2b174ae49 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.19.21"
 
 \header {
 
@@ -7,11 +7,11 @@ Subdivision works properly for tuplets
   "
 }
 
-\relative c'' {
+\relative {
   \set subdivideBeams = ##t
   \set baseMoment = #(ly:make-moment 1/8)
   \set beatStructure = #'(2 2 2 2)
   \repeat unfold 8 {
-    \tuplet 3/2 { c16 e d }
+    \tuplet 3/2 { c''16 e d }
   }
 }
index 7e01d344db4ff1a82d8739d9843a0c472e61a805..50099cb8d32cb0dd19a5c920800b23859804d0c8 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.17.11"
+\version "2.19.21"
 \header{
   texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned."
 }
 \layout { ragged-right= ##t }
 
 
-\context Voice \relative c'' {
+\context Voice \relative {
   \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-denominator-text 7)
-  \tuplet 3/2  { c4. c4. c4. c4. }
+  \tuplet 3/2  { c''4. 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")
index 9a63ebdf4574f42c28496d06aff9996ceb0d001f..ae3b30b836281fa71565b2e03c21d7398510521d 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.17.11"
+\version "2.19.21"
 \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'' {
+\context Voice \relative {
   \once \override TupletNumber.text = #(tuplet-number::fraction-with-notes "4." "8")
-  \tuplet 3/2  { c4. c4. c4. c4. }
+  \tuplet 3/2  { c''4. c4. c4. c4. }
   \once \override TupletNumber.text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
   \tuplet 3/2  { c4. c4. c4. c4. }
 }
index c29e1f19973e6d8ff0f31933a51fcd148d984f10..539d29fea0af9eed0ba7a28235f61f2d06f5a4a8 100644 (file)
@@ -1,13 +1,13 @@
-\version "2.17.11"
+\version "2.19.21"
 \header{
   texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text."
 }
 \layout { ragged-right= ##t }
 
 
-\context Voice \relative c'' {
+\context Voice \relative {
   \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
-  \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
+  \tuplet 3/2  { c''8 c8 c8 c8 c8 c8 }
   \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
   \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
 }
index c250c5bea431a78fec627a7017a57ae213bb26dd..3900594eb9df1e953dad06b6fa9dc3e82860a98b 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.11"
+\version "2.19.21"
 \header{
   
   texidoc="
@@ -19,8 +19,8 @@ direction as the bracket. The endings can be adjusted with
 \layout { ragged-right= ##t }
 
 
-\context Voice \relative c'' {
-  \tuplet 3/2 { a8 b c }
+\context Voice \relative {
+  \tuplet 3/2 { a'8 b c }
   \tuplet 3/2 { r8  b[ f] }
   \override TupletBracket.bracket-flare = #'(0.5 . 0.5)
   \tuplet 3/2 { r8 b r8 }
index 09971b0e27381517af4e15604b7fa727c2a40c85..1ceb243a476249adeccf81b2d092a5fc3fd3f353 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.17.6"
+\version "2.19.21"
 
 \header {
   texidoc = "unpure-pure containers take two arguments: an unpure property and
@@ -14,9 +14,9 @@ of 8.
 "
 }
 
-\relative c'' {
+\relative {
   \stemUp \autoBeamOff
-  d,8 eis'
+  d'8 eis'
   \once \override Flag.Y-offset =
     #(ly:make-unpure-pure-container ly:flag::calc-y-offset 8)
   d,8 eis'!
index 32fad554a0b8f988ba0e8062c448ccf44a42b638..e9554e01f29958279370bce47528159f257b54dd 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.15"
+\version "2.19.21"
 
 \header {
 
@@ -6,9 +6,9 @@
 value for just one timestep and then return to the previous value."
 
 }
-\relative c' {
+\relative {
   \set fingeringOrientations = #'(left)
-  <e-1>1 |
+  <e'-1>1 |
   \once \unset fingeringOrientations
   <e-1>-"default" |
   <e-1>-"left" |
index a992a5cfbd80df12718b2340cfa60f6aad092194..100327638cb6b81f68e823b454cfb8512f3f6fe0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.21"
 
 
 \header { texidoc= "
@@ -13,11 +13,11 @@ can be printed automatically. This is enabled if the property
   ragged-right = ##t 
 }
 
-\relative c'
+\relative
 \context PianoStaff <<
   \set PianoStaff.followVoice = ##t
   \new Staff = "one" \context Voice {
-    c1
+    c'1
     \change Staff=two
     b2 a
   }
index 3b1c30971fc40762dbc3650f6661b973430373c5..a7284b9918a311d442e4d678e620a016fc36f789 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.6"
+\version "2.19.21"
 
 \header { texidoc = "If the 'whiteout property of a
 grob is set to #t, that part of all objects in lower
@@ -8,7 +8,7 @@ Tie but not the StaffSymbol.
 "
 }
 
-\relative c' {
+\relative {
   \time 3/4
   \override Staff.StaffSymbol.layer = #4
   \once \override Tie.layer = #2
index c2802628ea9ff2e3895c4099669b451a4e47a65f..def544c1b641f3a8d876ceb47aaa7903776d27bb 100644 (file)
@@ -4,15 +4,15 @@
 markup.  "
 
 }
-\version "2.17.6"
+\version "2.19.21"
 
 \paper
 {
   ragged-right = ##t
 }
 
-\relative c'' {
+\relative {
   \override TextScript.layer = #'2
   \override TextScript.extra-offset = #'(2 . 4)
-  c4-\markup  { \whiteout \pad-markup #0.5 foo } c
+  c''4-\markup  { \whiteout \pad-markup #0.5 foo } c
 }
index 4bdf59735749ade5b5ae4740c44a09ad0c535560..016433d2ba491aae4524d4791c990855ea25039e 100644 (file)
@@ -233,7 +233,7 @@ Accidental_engraver::process_acknowledged ()
           Stream_event *note = accidentals_[i].melodic_;
           Context *origin = accidentals_[i].origin_;
 
-          Pitch *pitch = Pitch::unsmob (note->get_property ("pitch"));
+          Pitch *pitch = unsmob<Pitch> (note->get_property ("pitch"));
           if (!pitch)
             continue;
 
@@ -348,7 +348,7 @@ Accidental_engraver::make_suggested_accidental (Stream_event * /* note */,
   Grob *a = trans->make_item ("AccidentalSuggestion", note_head->self_scm ());
 
   Side_position_interface::add_support (a, note_head);
-  if (Grob *stem = Grob::unsmob (a->get_object ("stem")))
+  if (Grob *stem = unsmob<Grob> (a->get_object ("stem")))
     Side_position_interface::add_support (a, stem);
 
   a->set_parent (note_head, X_AXIS);
@@ -372,8 +372,8 @@ Accidental_engraver::stop_translation_timestep ()
         {
           // Don't mark accidentals as "tied" when the pitch is not
           // actually the same.  This is relevant for enharmonic ties.
-          Stream_event *le = Stream_event::unsmob (l->get_property ("cause"));
-          Stream_event *re = Stream_event::unsmob (r->get_property ("cause"));
+          Stream_event *le = unsmob<Stream_event> (l->get_property ("cause"));
+          Stream_event *re = unsmob<Stream_event> (r->get_property ("cause"));
           if (le && re
               && !ly_is_equal (le->get_property ("pitch"), re->get_property ("pitch")))
             continue;
@@ -399,7 +399,7 @@ Accidental_engraver::stop_translation_timestep ()
 
       int barnum = measure_number (origin);
 
-      Pitch *pitch = Pitch::unsmob (note->get_property ("pitch"));
+      Pitch *pitch = unsmob<Pitch> (note->get_property ("pitch"));
       if (!pitch)
         continue;
 
@@ -409,7 +409,7 @@ Accidental_engraver::stop_translation_timestep ()
       SCM key = scm_cons (scm_from_int (o), scm_from_int (n));
 
       Moment end_mp = measure_position (context (),
-                                        Duration::unsmob (note->get_property ("duration")));
+                                        unsmob<Duration> (note->get_property ("duration")));
       SCM position = scm_cons (scm_from_int (barnum), end_mp.smobbed_copy ());
 
       SCM localsig = SCM_EOL;
index 04883f03a956ecfe6ce5ae623c0f02bc190de3bd..3555435bea769a125e38f79d8c420458f40a58bb 100644 (file)
@@ -36,14 +36,14 @@ accidental_pitch (Grob *acc)
 {
   SCM cause = acc->get_parent (Y_AXIS)->get_property ("cause");
 
-  Stream_event *mcause = Stream_event::unsmob (cause);
+  Stream_event *mcause = unsmob<Stream_event> (cause);
   if (!mcause)
     {
       programming_error ("note head has no event cause");
       return 0;
     }
 
-  return Pitch::unsmob (mcause->get_property ("pitch"));
+  return unsmob<Pitch> (mcause->get_property ("pitch"));
 }
 
 void
@@ -85,9 +85,9 @@ Accidental_placement::split_accidentals (Grob *accs,
        acs = scm_cdr (acs))
     for (SCM s = scm_cdar (acs); scm_is_pair (s); s = scm_cdr (s))
       {
-        Grob *a = Grob::unsmob (scm_car (s));
+        Grob *a = unsmob<Grob> (scm_car (s));
 
-        if (Grob::is_smob (a->get_object ("tie"))
+        if (unsmob<Grob> (a->get_object ("tie"))
             && !to_boolean (a->get_property ("forced")))
           break_reminder->push_back (a);
         else
@@ -237,7 +237,7 @@ build_apes (SCM accs)
       Accidental_placement_entry *ape = new Accidental_placement_entry;
 
       for (SCM t = scm_cdar (s); scm_is_pair (t); t = scm_cdr (t))
-        ape->grobs_.push_back (Grob::unsmob (scm_car (t)));
+        ape->grobs_.push_back (unsmob<Grob> (scm_car (t)));
 
       apes.push_back (ape);
     }
@@ -285,7 +285,7 @@ set_ape_skylines (Accidental_placement_entry *ape,
           offset -= a->extent (a, X_AXIS).length () + padding;
         }
 
-      if (Skyline_pair *sky = Skyline_pair::unsmob (a->get_property ("horizontal-skylines")))
+      if (Skyline_pair *sky = unsmob<Skyline_pair> (a->get_property ("horizontal-skylines")))
         {
           Skyline_pair copy (*sky);
           copy.raise (a->relative_coordinate (common[X_AXIS], X_AXIS));
@@ -470,7 +470,7 @@ MAKE_SCHEME_CALLBACK (Accidental_placement, calc_positioning_done, 1);
 SCM
 Accidental_placement::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (!me->is_live ())
     return SCM_BOOL_T;
 
index 06873f070547d7e03020c30ba2bf3b64a437dbc5..4343c2dc5a9bf75e473b4d31c7b8a454b3910f2e 100644 (file)
@@ -48,16 +48,16 @@ MAKE_SCHEME_CALLBACK (Accidental_interface, horizontal_skylines, 1);
 SCM
 Accidental_interface::horizontal_skylines (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (!me->is_live ())
     return Skyline_pair ().smobbed_copy ();
 
-  Stencil *my_stencil = Stencil::unsmob (me->get_property ("stencil"));
+  Stencil *my_stencil = unsmob<Stencil> (me->get_property ("stencil"));
   if (!my_stencil)
     return Skyline_pair ().smobbed_copy ();
 
   Skyline_pair *sky =
-    Skyline_pair::unsmob
+    unsmob<Skyline_pair>
       (Stencil::skylines_from_stencil
         (my_stencil->smobbed_copy (), 0.0, Y_AXIS));
 
@@ -90,8 +90,8 @@ MAKE_SCHEME_CALLBACK (Accidental_interface, height, 1);
 SCM
 Accidental_interface::height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *tie = Grob::unsmob (me->get_object ("tie"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *tie = unsmob<Grob> (me->get_object ("tie"));
 
   if (tie
       && !to_boolean (me->get_property ("forced"))
@@ -105,8 +105,8 @@ MAKE_SCHEME_CALLBACK (Accidental_interface, remove_tied, 1);
 SCM
 Accidental_interface::remove_tied (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *tie = Grob::unsmob (me->get_object ("tie"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *tie = unsmob<Grob> (me->get_object ("tie"));
 
   if (tie
       && !to_boolean (me->get_property ("forced"))
@@ -121,7 +121,7 @@ MAKE_SCHEME_CALLBACK (Accidental_interface, print, 1);
 SCM
 Accidental_interface::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   return get_stencil (me);
 }
index fffc64b1bb1a1796e95a7de8d6a113713ebec65f..32eb1edace843ffd3373afce761c67492d931244 100644 (file)
@@ -36,7 +36,7 @@ MAKE_SCHEME_CALLBACK (Align_interface, align_to_minimum_distances, 1);
 SCM
 Align_interface::align_to_minimum_distances (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   me->set_property ("positioning-done", SCM_BOOL_T);
 
@@ -52,7 +52,7 @@ MAKE_SCHEME_CALLBACK (Align_interface, align_to_ideal_distances, 1);
 SCM
 Align_interface::align_to_ideal_distances (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   me->set_property ("positioning-done", SCM_BOOL_T);
 
@@ -76,7 +76,7 @@ get_skylines (Grob *g,
 
   if (!pure)
     {
-      Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+      Skyline_pair *skys = unsmob<Skyline_pair> (g->get_property (a == Y_AXIS
                                                                   ? "vertical-skylines"
                                                                   : "horizontal-skylines"));
       if (skys)
@@ -353,11 +353,11 @@ void
 Align_interface::set_ordered (Grob *me)
 {
   SCM ga_scm = me->get_object ("elements");
-  Grob_array *ga = Grob_array::unsmob (ga_scm);
+  Grob_array *ga = unsmob<Grob_array> (ga_scm);
   if (!ga)
     {
       ga_scm = Grob_array::make_array ();
-      ga = Grob_array::unsmob (ga_scm);
+      ga = unsmob<Grob_array> (ga_scm);
       me->set_object ("elements", ga_scm);
     }
 
index 738f3179b915edf23827f19cd6c372f26f448699..b29ea4bf4bfc48c885b72d7f7aefff50901752e6 100644 (file)
 
 #include "all-font-metrics.hh"
 #include "main.hh"
+#include "protected-scm.hh"
+
+All_font_metrics *all_fonts_global = 0;
+Protected_scm all_fonts_global_scm;
 
 LY_DEFINE (ly_reset_all_fonts, "ly:reset-all-fonts", 0, 0, 0,
            (),
            "Forget all about previously loaded fonts.")
 {
-  delete all_fonts_global;
   all_fonts_global = new All_font_metrics (global_path.to_string ());
+  all_fonts_global_scm = all_fonts_global->unprotect ();
 
   return SCM_UNSPECIFIED;
 }
index bc8ba15dae43fcd93f8e81fe9bdfe4c15b4ca04d..0c855fd4d08043b30f8e24bac8be2ce14293551c 100644 (file)
@@ -42,9 +42,16 @@ All_font_metrics::get_index_to_charcode_map (const string &filename,
 
 All_font_metrics::All_font_metrics (const string &path)
 {
+#if HAVE_PANGO_FT2
+  pango_dict_ = new Scheme_hash_table;
+#endif
+
   otf_dict_ = new Scheme_hash_table;
+  smobify_self ();
+  otf_dict_->unprotect ();
 
 #if HAVE_PANGO_FT2
+  pango_dict_->unprotect ();
   PangoFontMap *pfm = pango_ft2_font_map_new ();
 
   pango_ft2_fontmap_ = PANGO_FT2_FONT_MAP (pfm);
@@ -52,8 +59,6 @@ All_font_metrics::All_font_metrics (const string &path)
   pango_dpi_ = PANGO_RESOLUTION;
   pango_ft2_font_map_set_resolution (pango_ft2_fontmap_,
                                      pango_dpi_, pango_dpi_);
-
-  pango_dict_ = new Scheme_hash_table;
 #endif
 
   search_path_.parse_path (path);
@@ -61,16 +66,21 @@ All_font_metrics::All_font_metrics (const string &path)
 
 All_font_metrics::~All_font_metrics ()
 {
-  otf_dict_->unprotect ();
-
 #if HAVE_PANGO_FT2
-  pango_dict_->unprotect ();
   g_object_unref (pango_ft2_fontmap_);
 #endif
 }
 
-All_font_metrics::All_font_metrics (All_font_metrics const &)
+SCM
+All_font_metrics::mark_smob ()
 {
+#if HAVE_PANGO_FT2
+  if (pango_dict_)
+    scm_gc_mark (pango_dict_->self_scm ());
+#endif
+  if (otf_dict_)
+    return otf_dict_->self_scm ();
+  return SCM_UNDEFINED;
 }
 
 #if HAVE_PANGO_FT2
@@ -103,7 +113,7 @@ All_font_metrics::find_pango_font (PangoFontDescription const *description,
                                    scm_from_double (1.0));
     }
   g_free (pango_fn);
-  return derived_unsmob<Pango_font> (val);
+  return unsmob<Pango_font> (val);
 }
 
 #endif
@@ -128,15 +138,15 @@ All_font_metrics::find_otf (const string &name)
 
       debug_output ("]", false);
 
-      Font_metric::unsmob (val)->file_name_ = file_name;
+      unsmob<Font_metric> (val)->file_name_ = file_name;
       SCM name_string = ly_string2scm (name);
-      Font_metric::unsmob (val)->description_ = scm_cons (name_string,
+      unsmob<Font_metric> (val)->description_ = scm_cons (name_string,
                                                      scm_from_double (1.0));
       otf_dict_->set (sname, val);
-      Font_metric::unsmob (val)->unprotect ();
+      unsmob<Font_metric> (val)->unprotect ();
     }
 
-  return derived_unsmob<Open_type_font> (val);
+  return unsmob<Open_type_font> (val);
 }
 
 Font_metric *
@@ -151,5 +161,3 @@ All_font_metrics::find_font (const string &name)
 
   return f;
 }
-
-All_font_metrics *all_fonts_global;
index fedf31e5d49e0a3a4649f5693b03af0affe7d98b..9ceea9387c59eb09a380fd23ebeaf4b84d9601c9 100644 (file)
@@ -144,9 +144,9 @@ Ambitus_engraver::acknowledge_note_head (Grob_info info)
         If the engraver is added to a percussion context,
         filter out unpitched note heads.
       */
-      if (!Pitch::is_smob (p))
+      if (!unsmob<Pitch> (p))
         return;
-      Pitch pitch = *Pitch::unsmob (p);
+      Pitch pitch = *unsmob<Pitch> (p);
       Drul_array<bool> expands = pitch_interval_.add_point (pitch);
       if (expands[UP])
         causes_[UP] = nr;
index 54a9a4903a7a058347513e6552ff982b1a150104..5ba2e59279ec992270fb443d8faaf022ca3eb6b6 100644 (file)
@@ -60,7 +60,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, calc_cross_staff, 1);
 SCM
 Arpeggio::calc_cross_staff (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   extract_grob_set (me, "stems", stems);
   Grob *vag = 0;
@@ -83,7 +83,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, calc_positions, 1);
 SCM
 Arpeggio::calc_positions (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Grob *common = get_common_y (me);
 
   /*
@@ -116,7 +116,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, print, 1);
 SCM
 Arpeggio::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Interval heads = robust_scm2interval (me->get_property ("positions"),
                                         Interval ())
                    * Staff_symbol_referencer::staff_space (me);
@@ -184,7 +184,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_bracket, 1);
 SCM
 Arpeggio::brew_chord_bracket (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Interval heads = robust_scm2interval (me->get_property ("positions"),
                                         Interval ())
                    * Staff_symbol_referencer::staff_space (me);
@@ -203,7 +203,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_slur, 1);
 SCM
 Arpeggio::brew_chord_slur (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM dash_definition = me->get_property ("dash-definition");
   Interval heads = robust_scm2interval (me->get_property ("positions"),
                                         Interval ())
@@ -230,7 +230,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, width, 1);
 SCM
 Arpeggio::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return ly_interval2scm (get_squiggle (me).extent (X_AXIS));
 }
 
@@ -238,7 +238,7 @@ MAKE_SCHEME_CALLBACK (Arpeggio, pure_height, 3);
 SCM
 Arpeggio::pure_height (SCM smob, SCM, SCM)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (to_boolean (me->get_property ("cross-staff")))
     return ly_interval2scm (Interval ());
 
index e55e7eb8ff0d702cdf1cfa65042aea1dc3eebb15..334e4386828e6e0d2a86ace8dad0586b11f6565e 100644 (file)
@@ -56,7 +56,7 @@ articulation_list (vector<Stream_event *> note_events,
       for (SCM s = event->get_property ("articulations");
            !articulation_event && scm_is_pair (s); s = scm_cdr (s))
         {
-          Stream_event *art = Stream_event::unsmob (scm_car (s));
+          Stream_event *art = unsmob<Stream_event> (scm_car (s));
 
           if (art->in_event_class (articulation_name))
             articulation_event = art;
index beb8fce3902f5d49a89796286d70bc546ac7446a..7500ec9ef09bf9fb9af7dc4d272c2e8d2c0e3218 100644 (file)
@@ -395,7 +395,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info)
       return;
     }
 
-  int durlog = Duration::unsmob (ev->get_property ("duration"))->duration_log ();
+  int durlog = unsmob<Duration> (ev->get_property ("duration"))->duration_log ();
 
   if (durlog <= 2)
     {
@@ -411,10 +411,10 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info)
   if (!is_same_grace_state (beam_start_location_, now))
     return;
 
-  Duration *stem_duration = Duration::unsmob (ev->get_property ("duration"));
+  Duration *stem_duration = unsmob<Duration> (ev->get_property ("duration"));
   Moment dur = stem_duration->get_length ();
 
-  //Moment dur = Duration::unsmob (ev->get_property ("duration"))->get_length ();
+  //Moment dur = unsmob<Duration> (ev->get_property ("duration"))->get_length ();
   Moment measure_now = measure_position (context ());
   bool recheck_needed = false;
 
index 41459bd56aef44ba783187d5e57ab40393ee9595..1709d4a86fc36e83c1948d2746155c113cd525c5 100644 (file)
@@ -108,7 +108,7 @@ Auto_change_iterator::process (Moment m)
 
   for (; scm_is_pair (split_list_); split_list_ = scm_cdr (split_list_))
     {
-      splitm = Moment::unsmob (scm_caar (split_list_));
+      splitm = unsmob<Moment> (scm_caar (split_list_));
       if ((*splitm + start_moment_) > now)
         break;
 
index adc0dae661b92979156be727c5fc14c6a80a6ad5..3a9b0d67752d58fcaa5d52886426c73e65659e97 100644 (file)
@@ -89,7 +89,7 @@ Axis_group_engraver::process_music ()
   if (!staffline_ && active_)
     {
       staffline_ = get_spanner ();
-      Grob *it = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *it = unsmob<Grob> (get_property ("currentCommandColumn"));
       staffline_->set_bound (LEFT, it);
     }
   interesting_ = get_property ("keepAliveInterfaces");
@@ -106,7 +106,7 @@ Axis_group_engraver::finalize ()
 {
   if (staffline_)
     {
-      Grob *it = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *it = unsmob<Grob> (get_property ("currentCommandColumn"));
       staffline_->set_bound (RIGHT, it);
 
       Pointer_group_interface::set_ordered (staffline_, ly_symbol2scm ("elements"), false);
@@ -141,7 +141,7 @@ Axis_group_engraver::process_acknowledged ()
 
   for (vsize i = 0; i < elts_.size (); i++)
     {
-      if (!Grob::is_smob (elts_[i]->get_object ("axis-group-parent-Y")))
+      if (!unsmob<Grob> (elts_[i]->get_object ("axis-group-parent-Y")))
         {
           if (staffline_->get_parent (Y_AXIS)
               && staffline_->get_parent (Y_AXIS) == elts_[i])
index 8e183f9d3417af0cd94c34114bbe35f2cffafa0b..ed47496fdef6a93a7a2a46e8c3f4b3fb00852faa 100644 (file)
@@ -27,7 +27,7 @@ LY_DEFINE (ly_relative_group_extent, "ly:relative-group-extent",
            "Determine the extent of @var{elements} relative to @var{common} in the"
            " @var{axis} direction.")
 {
-  Grob_array *ga = Grob_array::unsmob (elements);
+  Grob_array *ga = unsmob<Grob_array> (elements);
 
   SCM_ASSERT_TYPE (ga || scm_is_pair (elements), elements, SCM_ARG1, __FUNCTION__, "list or Grob_array");
   LY_ASSERT_SMOB (Grob, common, 2);
@@ -37,11 +37,11 @@ LY_DEFINE (ly_relative_group_extent, "ly:relative-group-extent",
   if (!ga)
     {
       for (SCM s = elements; scm_is_pair (s); s = scm_cdr (s))
-        elts.push_back (Grob::unsmob (scm_car (s)));
+        elts.push_back (unsmob<Grob> (scm_car (s)));
     }
 
   Interval ext = Axis_group_interface::relative_group_extent (ga ? ga->array () : elts,
-                                                              Grob::unsmob (common),
+                                                              unsmob<Grob> (common),
                                                               (Axis) scm_to_int (axis));
   return ly_interval2scm (ext);
 }
@@ -56,7 +56,7 @@ LY_DEFINE (ly_generic_bound_extent, "ly:generic-bound-extent",
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, common, 2);
 
-  Interval ext = Axis_group_interface::generic_bound_extent (Grob::unsmob (grob), Grob::unsmob (common), X_AXIS);
+  Interval ext = Axis_group_interface::generic_bound_extent (unsmob<Grob> (grob), unsmob<Grob> (common), X_AXIS);
   return ly_interval2scm (ext);
 }
 
@@ -67,6 +67,6 @@ LY_DEFINE (ly_axis_group_interface__add_element, "ly:axis-group-interface::add-e
 {
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, grob_element, 2);
-  Axis_group_interface::add_element (Grob::unsmob (grob), Grob::unsmob (grob_element));
+  Axis_group_interface::add_element (unsmob<Grob> (grob), unsmob<Grob> (grob_element));
   return SCM_UNSPECIFIED;
 }
index 4056e25651f180eade8c74f9b20b4241f8569ac7..eabb81adaf4ae5af4a83145728d37ff1b60f9159 100644 (file)
@@ -221,9 +221,9 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, adjacent_pure_heights, 1)
 SCM
 Axis_group_interface::adjacent_pure_heights (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
-  Grob *common = Grob::unsmob (me->get_object ("pure-Y-common"));
+  Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
   extract_grob_set (me, "pure-relevant-grobs", elts);
 
   Paper_score *ps = get_root_system (me)->paper_score ();
@@ -331,7 +331,7 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end)
   if (p && Align_interface::has_interface (p))
     return Axis_group_interface::sum_partial_pure_heights (me, start, end);
 
-  Grob *common = Grob::unsmob (me->get_object ("pure-Y-common"));
+  Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
   extract_grob_set (me, "pure-relevant-grobs", elts);
 
   Interval r;
@@ -356,7 +356,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, width, 1);
 SCM
 Axis_group_interface::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return generic_group_extent (me, X_AXIS);
 }
 
@@ -364,7 +364,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, height, 1);
 SCM
 Axis_group_interface::height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return generic_group_extent (me, Y_AXIS);
 }
 
@@ -374,7 +374,7 @@ Axis_group_interface::pure_height (SCM smob, SCM start_scm, SCM end_scm)
 {
   int start = robust_scm2int (start_scm, 0);
   int end = robust_scm2int (end_scm, INT_MAX);
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /* Maybe we are in the second pass of a two-pass spacing run. In that
      case, the Y-extent of a system is already given to us */
@@ -394,7 +394,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_skylines, 1);
 SCM
 Axis_group_interface::calc_skylines (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Skyline_pair skylines = skyline_spacing (me);
   return skylines.smobbed_copy ();
 }
@@ -409,7 +409,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, combine_skylines, 1);
 SCM
 Axis_group_interface::combine_skylines (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "elements", elements);
   Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS);
   Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS);
@@ -421,10 +421,10 @@ Axis_group_interface::combine_skylines (SCM smob)
   for (vsize i = 0; i < elements.size (); i++)
     {
       SCM skyline_scm = elements[i]->get_property ("vertical-skylines");
-      if (Skyline_pair::is_smob (skyline_scm))
+      if (unsmob<Skyline_pair> (skyline_scm))
         {
           Real offset = elements[i]->relative_coordinate (y_common, Y_AXIS);
-          Skyline_pair other = *Skyline_pair::unsmob (skyline_scm);
+          Skyline_pair other = *unsmob<Skyline_pair> (skyline_scm);
           other.raise (offset);
           other.shift (elements[i]->relative_coordinate (x_common, X_AXIS));
           ret.merge (other);
@@ -473,7 +473,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_pure_relevant_grobs, 1);
 SCM
 Axis_group_interface::calc_pure_relevant_grobs (SCM smob)
 {
-  Grob *me = Grob::unsmob (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'}
@@ -520,7 +520,7 @@ Axis_group_interface::internal_calc_pure_relevant_grobs (Grob *me, const string
 
   vector_sort (relevant_grobs, pure_staff_priority_less);
   SCM grobs_scm = Grob_array::make_array ();
-  Grob_array::unsmob (grobs_scm)->set_array (relevant_grobs);
+  unsmob<Grob_array> (grobs_scm)->set_array (relevant_grobs);
 
   return grobs_scm;
 }
@@ -529,7 +529,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_pure_y_common, 1);
 SCM
 Axis_group_interface::calc_pure_y_common (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "pure-relevant-grobs", elts);
   Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
@@ -566,20 +566,20 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_x_common, 1);
 SCM
 Axis_group_interface::calc_x_common (SCM grob)
 {
-  return calc_common (Grob::unsmob (grob), X_AXIS);
+  return calc_common (unsmob<Grob> (grob), X_AXIS);
 }
 
 MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_y_common, 1);
 SCM
 Axis_group_interface::calc_y_common (SCM grob)
 {
-  return calc_common (Grob::unsmob (grob), Y_AXIS);
+  return calc_common (unsmob<Grob> (grob), Y_AXIS);
 }
 
 Interval
 Axis_group_interface::pure_group_height (Grob *me, int start, int end)
 {
-  Grob *common = Grob::unsmob (me->get_object ("pure-Y-common"));
+  Grob *common = unsmob<Grob> (me->get_object ("pure-Y-common"));
 
   if (!common)
     {
@@ -644,7 +644,7 @@ pure_staff_priority_less (Grob *const &g1, Grob *const &g2)
 static void
 add_interior_skylines (Grob *me, Grob *x_common, Grob *y_common, vector<Skyline_pair> *skylines)
 {
-  if (Grob_array *elements = Grob_array::unsmob (me->get_object ("elements")))
+  if (Grob_array *elements = unsmob<Grob_array> (me->get_object ("elements")))
     {
       for (vsize i = 0; i < elements->size (); i++)
         add_interior_skylines (elements->grob (i), x_common, y_common, skylines);
@@ -652,7 +652,7 @@ add_interior_skylines (Grob *me, Grob *x_common, Grob *y_common, vector<Skyline_
   else if (!scm_is_number (me->get_property ("outside-staff-priority"))
            && !to_boolean (me->get_property ("cross-staff")))
     {
-      Skyline_pair *maybe_pair = Skyline_pair::unsmob (me->get_property ("vertical-skylines"));
+      Skyline_pair *maybe_pair = unsmob<Skyline_pair> (me->get_property ("vertical-skylines"));
       if (!maybe_pair)
         return;
       if (maybe_pair->is_empty ())
@@ -794,7 +794,7 @@ add_grobs_of_one_priority (Grob *me,
             }
           last_end[dir] = x_extent[RIGHT];
 
-          Skyline_pair *v_orig = Skyline_pair::unsmob (elt->get_property ("vertical-skylines"));
+          Skyline_pair *v_orig = unsmob<Skyline_pair> (elt->get_property ("vertical-skylines"));
           if (v_orig->is_empty ())
             continue;
 
@@ -806,7 +806,7 @@ add_grobs_of_one_priority (Grob *me,
           for (GrobMapIterator j = range.first; j != range.second; j++)
             {
               Grob *rider = j->second;
-              Skyline_pair *v_rider = Skyline_pair::unsmob (rider->get_property ("vertical-skylines"));
+              Skyline_pair *v_rider = unsmob<Skyline_pair> (rider->get_property ("vertical-skylines"));
               if (v_rider)
                 {
                   Skyline_pair copy (*v_rider);
@@ -866,7 +866,7 @@ Axis_group_interface::outside_staff_ancestor (Grob *me)
 Skyline_pair
 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);
+  extract_grob_set (me, unsmob<Grob_array> (me->get_object ("vertical-skyline-elements")) ? "vertical-skyline-elements" : "elements", fakeelements);
   vector<Grob *> elements (fakeelements);
   for (vsize i = 0; i < elements.size (); i++)
     /*
@@ -981,9 +981,9 @@ Axis_group_interface::print (SCM smob)
   if (!debug_skylines)
     return SCM_BOOL_F;
 
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Stencil ret;
-  if (Skyline_pair *s = Skyline_pair::unsmob (me->get_property ("vertical-skylines")))
+  if (Skyline_pair *s = unsmob<Skyline_pair> (me->get_property ("vertical-skylines")))
     {
       ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[UP].to_points (X_AXIS))
                        .in_color (255, 0, 255));
@@ -997,7 +997,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_pure_staff_staff_spacing, 3)
 SCM
 Axis_group_interface::calc_pure_staff_staff_spacing (SCM smob, SCM start, SCM end)
 {
-  return calc_maybe_pure_staff_staff_spacing (Grob::unsmob (smob),
+  return calc_maybe_pure_staff_staff_spacing (unsmob<Grob> (smob),
                                               true,
                                               scm_to_int (start),
                                               scm_to_int (end));
@@ -1007,7 +1007,7 @@ MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_staff_staff_spacing, 1)
 SCM
 Axis_group_interface::calc_staff_staff_spacing (SCM smob)
 {
-  return calc_maybe_pure_staff_staff_spacing (Grob::unsmob (smob),
+  return calc_maybe_pure_staff_staff_spacing (unsmob<Grob> (smob),
                                               false,
                                               0,
                                               INT_MAX);
@@ -1016,7 +1016,7 @@ Axis_group_interface::calc_staff_staff_spacing (SCM smob)
 SCM
 Axis_group_interface::calc_maybe_pure_staff_staff_spacing (Grob *me, bool pure, int start, int end)
 {
-  Grob *grouper = Grob::unsmob (me->get_object ("staff-grouper"));
+  Grob *grouper = unsmob<Grob> (me->get_object ("staff-grouper"));
 
   if (grouper)
     {
index b5c96bcce111d674bfac94b7fffe150ee6d5c4e7..980aa9223154ff967c4c7157349c25204b36577a 100644 (file)
@@ -71,7 +71,7 @@ Balloon_engraver::acknowledge_grob (Grob_info info)
   SCM arts = cause ? cause->get_property ("articulations") : SCM_EOL;
   for (SCM s = arts; scm_is_pair (s); s = scm_cdr (s))
     {
-      Stream_event *e = Stream_event::unsmob (scm_car (s));
+      Stream_event *e = unsmob<Stream_event> (scm_car (s));
       if (e->in_event_class ("annotate-output-event"))
         {
           balloonify (info.grob (), e);
index b412a435d24005998aa4fbb389e145edcb1f97ef..2b898c3d25958d4a5c30c1748ca55c13c8278289 100644 (file)
@@ -42,7 +42,7 @@ MAKE_SCHEME_CALLBACK (Balloon_interface, print, 1);
 SCM
 Balloon_interface::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   if (Item *item = dynamic_cast<Item *> (me))
     if (!Item::break_visible (item))
@@ -60,7 +60,7 @@ MAKE_SCHEME_CALLBACK (Balloon_interface, print_spanner, 1);
 SCM
 Balloon_interface::print_spanner (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Spanner *orig = dynamic_cast<Spanner *> (me->original ());
 
   if (orig)
@@ -102,7 +102,7 @@ Balloon_interface::internal_balloon_print (Grob *me, Grob *p, Offset off)
   SCM chain = Font_interface::text_font_alist_chain (me);
   SCM stencil = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                   chain, bt);
-  Stencil *text_stil = Stencil::unsmob (stencil);
+  Stencil *text_stil = unsmob<Stencil> (stencil);
 
   Offset z1;
 
index 2a3efe757c74fee0746b691a595f366e24e19d87..d86cfa6bdfbf20a7a4c0b544c7d53de5800262ab 100644 (file)
@@ -56,7 +56,7 @@ Bar_check_iterator::process (Moment m)
       SCM mp = tr->get_property ("measurePosition");
       SCM sync = tr->get_property ("barCheckSynchronize");
 
-      Moment *where = Moment::unsmob (mp);
+      Moment *where = unsmob<Moment> (mp);
       if (!where)
         return;
 
@@ -73,8 +73,8 @@ Bar_check_iterator::process (Moment m)
           else
             {
               SCM lf = tr->get_property ("barCheckLastFail");
-              if (Moment::is_smob (lf)
-                  && *Moment::unsmob (lf) == *where)
+              if (unsmob<Moment> (lf)
+                  && *unsmob<Moment> (lf) == *where)
                 warn = false;
               else
                 tr->set_property ("barCheckLastFail", mp);
index 01dbbf9e5ecb8a58cbed20e5cde106d32a9e0361..bb8e42e1cf19d9c95f75f1336bd95bcb7156e8b9 100644 (file)
@@ -121,11 +121,11 @@ Beam_collision_engraver::finalize ()
             {
               // Do not consider note heads attached to the beam.
               if (Stem::has_interface (covered_grob))
-                if (Grob::is_smob (covered_grob->get_object ("beam")))
+                if (unsmob<Grob> (covered_grob->get_object ("beam")))
                   continue;
 
-              if (Grob *stem = Grob::unsmob (covered_grob->get_object ("stem")))
-                if (Grob *beam = Grob::unsmob (stem->get_object ("beam")))
+              if (Grob *stem = unsmob<Grob> (covered_grob->get_object ("stem")))
+                if (Grob *beam = unsmob<Grob> (stem->get_object ("beam")))
                   if (beam == beam_grob)
                     continue;
 
index f19f7e604e69da3c9919b2bdc365402102ebd248..e6ca4caf16d58586556a288fb7c915bb8e06659c 100644 (file)
@@ -285,9 +285,9 @@ Beam_engraver::acknowledge_stem (Grob_info info)
 
   last_stem_added_at_ = now;
 
-  Duration *stem_duration = Duration::unsmob (ev->get_property ("duration"));
+  Duration *stem_duration = unsmob<Duration> (ev->get_property ("duration"));
   int durlog = stem_duration->duration_log ();
-  //int durlog = Duration::unsmob (ev->get_property ("duration"))->duration_log ();
+  //int durlog = unsmob<Duration> (ev->get_property ("duration"))->duration_log ();
   if (durlog <= 2)
     {
       ev->origin ()->warning (_ ("stem does not fit in beam"));
index a1486cc7ee2de48804a974145d9c49840ef85b9d..54211ed003c48922782e3b1d0da7991114438a7d 100644 (file)
@@ -45,6 +45,7 @@ using namespace std;
 #include "stencil.hh"
 #include "stem.hh"
 #include "warn.hh"
+#include "string-convert.hh"
 
 Real
 get_detail (SCM alist, SCM sym, Real def)
@@ -66,7 +67,10 @@ Beam_quant_parameters::fill (Grob *him)
   REGION_SIZE = get_detail (details, ly_symbol2scm ("region-size"), 2);
 
   // forbidden quants
-  SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0);
+  SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0)
+    // For stems that are non-standard, the forbidden beam quanting
+    // doesn't really work, so decrease their importance.
+    * exp(- 8*fabs (1.0 - robust_scm2double(him->get_property ("length-fraction"), 1.0)));
   STEM_LENGTH_DEMERIT_FACTOR = get_detail (details, ly_symbol2scm ("stem-length-demerit-factor"), 5);
   HORIZONTAL_INTER_QUANT_PENALTY = get_detail (details, ly_symbol2scm ("horizontal-inter-quant"), 500);
 
@@ -79,7 +83,14 @@ Beam_quant_parameters::fill (Grob *him)
 
   // Collisions
   COLLISION_PENALTY = get_detail (details, ly_symbol2scm ("collision-penalty"), 500);
-  COLLISION_PADDING = get_detail (details, ly_symbol2scm ("collision-padding"), 0.5);
+
+  /* For grace notes, beams get scaled down to 80%, but glyphs go down
+     to 63% (magstep -4 for accidentals). To make the padding
+     commensurate with glyph size for grace notes, we take the square
+     of the length fraction, yielding a 64% decrease.
+   */
+  COLLISION_PADDING = get_detail (details, ly_symbol2scm ("collision-padding"), 0.5)
+    * sqr (robust_scm2double(him->get_property ("length-fraction"), 1.0));
   STEM_COLLISION_FACTOR = get_detail (details, ly_symbol2scm ("stem-collision-factor"), 0.1);
 }
 
@@ -352,7 +363,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array<Real> y
           for (LEFT_and_RIGHT (d))
             add_collision (b[X_AXIS][d], b[Y_AXIS], width_factor);
 
-          Grob *stem = Grob::unsmob (collisions[j]->get_object ("stem"));
+          Grob *stem = unsmob<Grob> (collisions[j]->get_object ("stem"));
           if (stem && Stem::has_interface (stem) && Stem::is_normal_stem (stem))
             {
               colliding_stems.insert (stem);
@@ -371,7 +382,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array<Real> y
                          - my_y;
 
           Real factor = parameters_.STEM_COLLISION_FACTOR;
-          if (!Grob::is_smob (s->get_object ("beam")))
+          if (!unsmob<Grob> (s->get_object ("beam")))
             factor = 1.0;
           add_collision (x, y, factor);
         }
@@ -1190,9 +1201,10 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
 {
   Real dy = config->y.delta ();
 
-  Real extra_demerit = parameters_.SECONDARY_BEAM_DEMERIT
-                       / max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]);
-
+  Real extra_demerit =
+    parameters_.SECONDARY_BEAM_DEMERIT
+    / max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]);
+  
   Real dem = 0.0;
   Real eps = parameters_.BEAM_EPS;
 
@@ -1203,13 +1215,15 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
           Direction stem_dir = edge_dirs_[d];
 
           /*
-            The 2.2 factor is to provide a little leniency for
+            The fudge_factor is to provide a little leniency for
             borderline cases. If we do 2.0, then the upper outer line
             will be in the gap of the (2, sit) quant, leading to a
-            false demerit.
+            false demerit. By increasing the fudge factor to 2.2, we
+            fix this case.
           */
-          Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation_ + beam_thickness_ / 2 - line_thickness_ / 2.2);
-          Real gap2 = config->y[d] - stem_dir * (j * beam_translation_ - beam_thickness_ / 2 + line_thickness_ / 2.2);
+          Real fudge_factor = 2.2;
+          Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation_ + beam_thickness_ / 2 - line_thickness_ / fudge_factor);
+          Real gap2 = config->y[d] - stem_dir * (j * beam_translation_ - beam_thickness_ / 2 + line_thickness_ / fudge_factor);
 
           Interval gap;
           gap.add_point (gap1);
@@ -1240,6 +1254,8 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
         }
     }
 
+  config->add (dem, "Fl");
+  dem = 0.0;
   if (max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]) >= 2)
     {
       Real straddle = 0.0;
@@ -1277,7 +1293,7 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
         }
     }
 
-  config->add (dem, "F");
+  config->add (dem, "Fs");
 }
 
 void
@@ -1295,16 +1311,20 @@ Beam_scoring_problem::score_collisions (Beam_configuration *config) const
       Real dist = infinity_f;
       if (!intersection (beam_y, collision_y).is_empty ())
         dist = 0.0;
-      else
+      else 
         dist = min (beam_y.distance (collision_y[DOWN]),
                     beam_y.distance (collision_y[UP]));
 
+      
       Real scale_free
         = max (parameters_.COLLISION_PADDING - dist, 0.0)
           / parameters_.COLLISION_PADDING;
-      demerits
-      += collisions_[i].base_penalty_ *
+      Real collision_demerit = collisions_[i].base_penalty_ *
          pow (scale_free, 3) * parameters_.COLLISION_PENALTY;
+
+      if (collision_demerit > 0) {
+        demerits += collision_demerit;
+      }
     }
 
   config->add (demerits, "C");
index 82cbb1e766f4d314a2bb222bccd0f008e3dad79b..c18c3d8430be70e4b0ccccaf4584283aef3ad913 100644 (file)
@@ -119,11 +119,13 @@ Beam::get_beam_translation (Grob *me)
   Real beam_thickness = get_beam_thickness (me);
   Real fract = robust_scm2double (me->get_property ("length-fraction"), 1.0);
 
-  Real beam_translation = beam_count < 4
-                          ? (2 * staff_space + line - beam_thickness) / 2.0
-                          : (3 * staff_space + line - beam_thickness) / 3.0;
-
-  return fract * beam_translation;
+  /*
+    if fract != 1.0, as is the case for grace notes, we want the gap
+    to decrease too. To achieve this, we divide the thickness by
+    fract */
+  return (beam_count < 4
+          ? (2 * staff_space * fract + line * fract - beam_thickness) / 2.0
+          : (3 * staff_space * fract + line * fract - beam_thickness) / 3.0);
 }
 
 /* Maximum beam_count. */
@@ -145,11 +147,11 @@ MAKE_SCHEME_CALLBACK (Beam, calc_normal_stems, 1);
 SCM
 Beam::calc_normal_stems (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "stems", stems);
   SCM val = Grob_array::make_array ();
-  Grob_array *ga = Grob_array::unsmob (val);
+  Grob_array *ga = unsmob<Grob_array> (val);
   for (vsize i = 0; i < stems.size (); i++)
     if (Stem::is_normal_stem (stems[i]))
       ga->add (stems[i]);
@@ -161,7 +163,7 @@ MAKE_SCHEME_CALLBACK (Beam, calc_direction, 1);
 SCM
 Beam::calc_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /* Beams with less than 2 two stems don't make much sense, but could happen
      when you do
@@ -275,7 +277,7 @@ MAKE_SCHEME_CALLBACK (Beam, calc_beaming, 1)
 SCM
 Beam::calc_beaming (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "stems", stems);
 
@@ -354,7 +356,7 @@ Beam::calc_beam_segments (SCM smob)
 {
   /* ugh, this has a side-effect that we need to ensure that
      Stem #'beaming is correct */
-  Grob *me_grob = Grob::unsmob (smob);
+  Grob *me_grob = unsmob<Grob> (smob);
   (void) me_grob->get_property ("beaming");
 
   Spanner *me = dynamic_cast<Spanner *> (me_grob);
@@ -571,7 +573,7 @@ MAKE_SCHEME_CALLBACK (Beam, calc_x_positions, 1);
 SCM
 Beam::calc_x_positions (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   SCM segments = me->get_property ("beam-segments");
   Interval x_positions;
   x_positions.set_empty ();
@@ -612,7 +614,7 @@ MAKE_SCHEME_CALLBACK (Beam, print, 1);
 SCM
 Beam::print (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
   /*
     TODO - mild code dup for all the commonx calls.
     Some use just common_refpoint_of_array, some (in print and
@@ -740,7 +742,7 @@ Beam::print (SCM grob)
 
       Direction stem_dir = stems.size () ? to_dir (stems[0]->get_property ("direction")) : UP;
 
-      Stencil score = *Stencil::unsmob (Text_interface::interpret_markup
+      Stencil score = *unsmob<Stencil> (Text_interface::interpret_markup
                                        (me->layout ()->self_scm (), properties, annotation));
 
       if (!score.is_empty ())
@@ -948,7 +950,7 @@ MAKE_SCHEME_CALLBACK (Beam, calc_stem_shorten, 1)
 SCM
 Beam::calc_stem_shorten (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /*
     shortening looks silly for x staff beams
@@ -983,7 +985,7 @@ MAKE_SCHEME_CALLBACK (Beam, quanting, 3);
 SCM
 Beam::quanting (SCM smob, SCM ys_scm, SCM align_broken_intos)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Drul_array<Real> ys = robust_scm2drul (ys_scm, Drul_array<Real> (infinity_f, -infinity_f));
   bool cbs = to_boolean (align_broken_intos);
 
@@ -1065,7 +1067,7 @@ MAKE_SCHEME_CALLBACK (Beam, set_stem_lengths, 1);
 SCM
 Beam::set_stem_lengths (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /* trigger callbacks. */
   (void) me->get_property ("direction");
@@ -1218,17 +1220,17 @@ MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Beam, rest_collision_callback, 2, 1, "");
 SCM
 Beam::rest_collision_callback (SCM smob, SCM prev_offset)
 {
-  Grob *rest = Grob::unsmob (smob);
+  Grob *rest = unsmob<Grob> (smob);
   if (scm_is_number (rest->get_property ("staff-position")))
     return scm_from_int (0);
 
   Real offset = robust_scm2double (prev_offset, 0.0);
 
-  Grob *st = Grob::unsmob (rest->get_object ("stem"));
+  Grob *st = unsmob<Grob> (rest->get_object ("stem"));
   Grob *stem = st;
   if (!stem)
     return scm_from_double (0.0);
-  Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
   if (!beam
       || !Beam::has_interface (beam)
       || !Beam::normal_stem_count (beam))
@@ -1313,11 +1315,11 @@ Beam::pure_rest_collision_callback (SCM smob,
 {
   Real previous = robust_scm2double (prev_offset, 0.0);
 
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   if (!stem)
     return scm_from_double (previous);
-  Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
   if (!beam
       || !Beam::normal_stem_count (beam)
       || !is_direction (beam->get_property_data ("direction")))
@@ -1418,7 +1420,7 @@ MAKE_SCHEME_CALLBACK (Beam, calc_cross_staff, 1)
 SCM
 Beam::calc_cross_staff (SCM smob)
 {
-  return scm_from_bool (is_cross_staff (Grob::unsmob (smob)));
+  return scm_from_bool (is_cross_staff (unsmob<Grob> (smob)));
 }
 
 int
index 1dcb791a8d9ca6bc836a10a1276373a4ab47c6ed..cb8c91dbece9de761ba7a5d1421e4f5e8c12987c 100644 (file)
@@ -132,6 +132,8 @@ Beaming_pattern::beamify (Beaming_options const &options)
   if (infos_.size () <= 1)
     return;
 
+  int subdivide_beam_count = intlog2(options.base_moment_.main_part_.den())-2;
+
   unbeam_invisible_stems ();
 
   if (infos_[0].start_moment_.grace_part_)
@@ -167,9 +169,8 @@ Beaming_pattern::beamify (Beaming_options const &options)
         if (non_flag_dir)
           {
             int importance = infos_[i + 1].rhythmic_importance_;
-            int start_dur = intlog2(infos_[i+1].start_moment_.main_part_.den());
             int count = (importance < 0 && options.subdivide_beams_) 
-                        ? max(start_dur,3)-2 // 1/8 note has one beam
+                        ? subdivide_beam_count
                         : min (min (infos_[i].count (non_flag_dir),
                                         infos_[i + non_flag_dir].count (-non_flag_dir)),
                                    infos_[i - non_flag_dir].count (non_flag_dir));
index 30c50388aaf3edc1e038902569969715a3d28a7f..44b0f21eaaa6820b96d7fc24e274db9c107b82f6 100644 (file)
@@ -53,7 +53,7 @@ Bend_engraver::finalize ()
   // We shouldn't end a spanner on the last musical column of a piece because then
   // it would extend past the last breakable column of the piece.
   if (last_fall_)
-    last_fall_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+    last_fall_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
 }
 
 void
@@ -61,7 +61,7 @@ Bend_engraver::stop_fall ()
 {
   bool bar = scm_is_string (get_property ("whichBar"));
 
-  fall_->set_bound (RIGHT, Grob::unsmob (bar
+  fall_->set_bound (RIGHT, unsmob<Grob> (bar
                                         ? get_property ("currentCommandColumn")
                                         : get_property ("currentMusicalColumn")));
   last_fall_ = fall_;
index d5f1c791533b10b4b481159b815ca8e729db3031..5512521bd55bf817f667eaddc87de986072315bc 100644 (file)
@@ -29,7 +29,7 @@ LY_DEFINE (ly_make_book, "ly:make-book",
            "Make a @code{\\book} of @var{paper} and @var{header}"
            " (which may be @code{#f} as well) containing @code{\\scores}.")
 {
-  Output_def *odef = Output_def::unsmob (paper);
+  Output_def *odef = unsmob<Output_def> (paper);
   LY_ASSERT_SMOB (Output_def, paper, 1);
 
   Book *book = new Book;
@@ -66,14 +66,14 @@ LY_DEFINE (ly_book_process, "ly:book-process",
            "  For example, it may be a string (for file based outputs)"
            " or a socket (for network based output).")
 {
-  Book *book = Book::unsmob (book_smob);
+  Book *book = unsmob<Book> (book_smob);
 
   LY_ASSERT_SMOB (Book, book_smob, 1);
   LY_ASSERT_SMOB (Output_def, default_paper, 2);
   LY_ASSERT_SMOB (Output_def, default_layout, 3);
 
-  Paper_book *pb = book->process (Output_def::unsmob (default_paper),
-                                  Output_def::unsmob (default_layout));
+  Paper_book *pb = book->process (unsmob<Output_def> (default_paper),
+                                  unsmob<Output_def> (default_layout));
   if (pb)
     {
       pb->output (output);
@@ -96,10 +96,10 @@ LY_DEFINE (ly_book_process_to_systems, "ly:book-process-to-systems",
   LY_ASSERT_SMOB (Output_def, default_paper, 2);
   LY_ASSERT_SMOB (Output_def, default_layout, 3);
 
-  Book *book = Book::unsmob (book_smob);
+  Book *book = unsmob<Book> (book_smob);
 
-  Paper_book *pb = book->process (Output_def::unsmob (default_paper),
-                                  Output_def::unsmob (default_layout));
+  Paper_book *pb = book->process (unsmob<Output_def> (default_paper),
+                                  unsmob<Output_def> (default_layout));
   if (pb)
     {
       pb->classic_output (output);
@@ -114,7 +114,7 @@ LY_DEFINE (ly_book_add_score_x, "ly:book-add-score!",
            "Add @var{score} to @var{book-smob} score list.")
 {
   LY_ASSERT_SMOB (Book, book_smob, 1);
-  Book *book = Book::unsmob (book_smob);
+  Book *book = unsmob<Book> (book_smob);
   book->add_score (score);
   return SCM_UNSPECIFIED;
 }
@@ -124,7 +124,7 @@ LY_DEFINE (ly_book_add_bookpart_x, "ly:book-add-bookpart!",
            "Add @var{book-part} to @var{book-smob} book part list.")
 {
   LY_ASSERT_SMOB (Book, book_smob, 1);
-  Book *book = Book::unsmob (book_smob);
+  Book *book = unsmob<Book> (book_smob);
   book->add_bookpart (book_part);
   return SCM_UNSPECIFIED;
 }
@@ -134,7 +134,7 @@ LY_DEFINE (ly_book_book_parts, "ly:book-book-parts",
            "Return book parts in @var{book}.")
 {
   LY_ASSERT_SMOB (Book, book, 1);
-  Book *b = Book::unsmob (book);
+  Book *b = unsmob<Book> (book);
   return b->bookparts_;
 }
 
@@ -143,7 +143,7 @@ LY_DEFINE (ly_book_paper, "ly:book-paper",
            "Return paper in @var{book}.")
 {
   LY_ASSERT_SMOB (Book, book, 1);
-  Book *b = Book::unsmob (book);
+  Book *b = unsmob<Book> (book);
   return b->paper_ ? b->paper_->self_scm () : SCM_BOOL_F;
 }
 
@@ -152,7 +152,7 @@ LY_DEFINE (ly_book_header, "ly:book-header",
            "Return header in @var{book}.")
 {
   LY_ASSERT_SMOB (Book, book, 1);
-  Book *b = Book::unsmob (book);
+  Book *b = unsmob<Book> (book);
   return b->header_ ? b->header_ : SCM_BOOL_F;
 }
 
@@ -164,7 +164,7 @@ LY_DEFINE (ly_book_set_header_x, "ly:book-set-header!",
   SCM_ASSERT_TYPE (ly_is_module (module), module, SCM_ARG2, __FUNCTION__,
                    "module");
 
-  Book *b = Book::unsmob (book);
+  Book *b = unsmob<Book> (book);
   b->header_ = (module);
   return SCM_UNSPECIFIED;
 }
@@ -174,7 +174,7 @@ LY_DEFINE (ly_book_scores, "ly:book-scores",
            "Return scores in @var{book}.")
 {
   LY_ASSERT_SMOB (Book, book, 1);
-  Book *b = Book::unsmob (book);
+  Book *b = unsmob<Book> (book);
   return b->scores_;
 }
 
index 8e63d889e09ab80cc51f7f3aba265364afd3e331..8ba2aac9080432144e58aa035a70575871dd7b50 100644 (file)
@@ -72,9 +72,9 @@ Book::Book (Book const &s)
     {
       SCM entry = scm_car (p);
 
-      if (Score *newscore = Score::unsmob (entry))
+      if (Score *newscore = unsmob<Score> (entry))
         * t = scm_cons (newscore->clone ()->unprotect (), SCM_EOL);
-      else if (Page_marker *marker = Page_marker::unsmob (entry))
+      else if (Page_marker *marker = unsmob<Page_marker> (entry))
         * t = scm_cons (marker->clone ()->unprotect (), SCM_EOL);
       else
         {
@@ -87,7 +87,7 @@ Book::Book (Book const &s)
   t = &bookparts_;
   for (SCM p = s.bookparts_; scm_is_pair (p); p = scm_cdr (p))
     {
-      Book *newpart = Book::unsmob (scm_car (p))->clone ();
+      Book *newpart = unsmob<Book> (scm_car (p))->clone ();
 
       *t = scm_cons (newpart->self_scm (), SCM_EOL);
       t = SCM_CDRLOC (*t);
@@ -98,7 +98,7 @@ Book::Book (Book const &s)
 Input *
 Book::origin () const
 {
-  return Input::unsmob (input_location_);
+  return unsmob<Input> (input_location_);
 }
 
 Book::~Book ()
@@ -168,7 +168,7 @@ void
 Book::add_bookpart (SCM b)
 {
   add_scores_to_bookpart ();
-  Book *part = Book::unsmob (b);
+  Book *part = unsmob<Book> (b);
   part->set_parent (this);
   bookparts_ = scm_cons (b, bookparts_);
 }
@@ -177,12 +177,12 @@ bool
 Book::error_found ()
 {
   for (SCM s = scores_; scm_is_pair (s); s = scm_cdr (s))
-    if (Score *score = Score::unsmob (scm_car (s)))
+    if (Score *score = unsmob<Score> (scm_car (s)))
       if (score->error_found_)
         return true;
 
   for (SCM part = bookparts_; scm_is_pair (part); part = scm_cdr (part))
-    if (Book *bookpart = Book::unsmob (scm_car (part)))
+    if (Book *bookpart = unsmob<Book> (scm_car (part)))
       if (bookpart->error_found ())
         return true;
 
@@ -202,7 +202,7 @@ Book::process_bookparts (Paper_book *output_paper_book, Output_def *paper, Outpu
   add_scores_to_bookpart ();
   for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p))
     {
-      if (Book *book = Book::unsmob (scm_car (p)))
+      if (Book *book = unsmob<Book> (scm_car (p)))
         {
           Paper_book *paper_book_part = book->process (paper, layout, output_paper_book);
           if (paper_book_part)
@@ -219,14 +219,14 @@ Book::process_bookparts (Paper_book *output_paper_book, Output_def *paper, Outpu
 void
 Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout)
 {
-  if (Score *score = Score::unsmob (scm_car (s)))
+  if (Score *score = unsmob<Score> (scm_car (s)))
     {
       SCM outputs = score
                     ->book_rendering (output_paper_book->paper_, layout);
 
       while (scm_is_pair (outputs))
         {
-          Music_output *output = Music_output::unsmob (scm_car (outputs));
+          Music_output *output = unsmob<Music_output> (scm_car (outputs));
 
           if (Performance *perf = dynamic_cast<Performance *> (output))
             output_paper_book->add_performance (perf->self_scm ());
@@ -241,7 +241,7 @@ Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout)
         }
     }
   else if (Text_interface::is_markup_list (scm_car (s))
-           || Page_marker::is_smob (scm_car (s)))
+           || unsmob<Page_marker> (scm_car (s)))
     output_paper_book->add_score (scm_car (s));
   else
     assert (0);
index 9883976f0c3399f01974ad20557fad750f6748a4..f9090c8e0829718e61a594437d185ac3e235d771 100644 (file)
@@ -118,7 +118,7 @@ Break_align_engraver::create_alignment (Grob_info inf)
   Context *origin = inf.origin_contexts (this)[0];
 
   Translator_group *tg = origin->implementation ();
-  Engraver *random_source = Engraver::unsmob (scm_car (tg->get_simple_trans_list ()));
+  Engraver *random_source = unsmob<Engraver> (scm_car (tg->get_simple_trans_list ()));
   if (!random_source)
     random_source = this;
 
@@ -138,7 +138,7 @@ Break_align_engraver::add_to_group (SCM align_name, Item *item)
 
   if (scm_is_true (s))
     {
-      Grob *e = Grob::unsmob (scm_cdr (s));
+      Grob *e = unsmob<Grob> (scm_cdr (s));
       group = dynamic_cast<Item *> (e);
     }
   else
index bb7f02eda099cbce13e73a323ac4e3870b30fdcf..58cb488d6b920efd83d21efbe841f9af8d7770fc 100644 (file)
@@ -94,7 +94,7 @@ MAKE_SCHEME_CALLBACK (Break_alignment_interface, calc_positioning_done, 1)
 SCM
 Break_alignment_interface::calc_positioning_done (SCM smob)
 {
-  Grob *grob = Grob::unsmob (smob);
+  Grob *grob = unsmob<Grob> (smob);
   Item *me = dynamic_cast<Item *> (grob);
 
   me->set_property ("positioning-done", SCM_BOOL_T);
@@ -189,8 +189,8 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
             sym_string = ly_symbol2string (rsym);
 
           string orig_string;
-          if (Grob::is_smob (l->get_property ("cause")))
-            orig_string = Grob::unsmob (l->get_property ("cause"))->name ();
+          if (unsmob<Grob> (l->get_property ("cause")))
+            orig_string = unsmob<Grob> (l->get_property ("cause"))->name ();
 
           programming_error (to_string ("No spacing entry from %s to `%s'",
                                         orig_string.c_str (),
@@ -261,7 +261,7 @@ MAKE_SCHEME_CALLBACK (Break_alignable_interface, self_align_callback, 1)
 SCM
 Break_alignable_interface::self_align_callback (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Item *alignment = dynamic_cast<Item *> (me->get_parent (X_AXIS));
   if (!Break_alignment_interface::has_interface (alignment))
     return scm_from_int (0);
@@ -308,7 +308,7 @@ MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_average_anchor, 1)
 SCM
 Break_aligned_interface::calc_average_anchor (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Real avg = 0.0;
   int count = 0;
 
@@ -331,7 +331,7 @@ MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_extent_aligned_anchor, 1)
 SCM
 Break_aligned_interface::calc_extent_aligned_anchor (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real alignment = robust_scm2double (me->get_property ("break-align-anchor-alignment"), 0.0);
   Interval iv = me->extent (me, X_AXIS);
 
@@ -346,7 +346,7 @@ SCM
 Break_aligned_interface::calc_break_visibility (SCM smob)
 {
   /* a BreakAlignGroup is break-visible if it has one element that is break-visible */
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM ret = scm_c_make_vector (3, SCM_EOL);
   extract_grob_set (me, "elements", elts);
   for (int dir = 0; dir <= 2; dir++)
index f26e9510bc9dd565c7288ea83c182bee8a49a895..c465979fb7f5f9abb53a809b523842b321f6023e 100644 (file)
@@ -51,7 +51,7 @@ substitute_grob (Grob *sc)
   else
     {
       System *line
-        = derived_unsmob<System> (break_criterion);
+        = unsmob<System> (break_criterion);
       if (sc->get_system () != line)
         sc = sc->find_broken_piece (line);
 
@@ -101,9 +101,9 @@ do_break_substitution (SCM src)
 {
 again:
 
-  if (Grob::is_smob (src))
+  if (unsmob<Grob> (src))
     {
-      Grob *new_ptr = substitute_grob (Grob::unsmob (src));
+      Grob *new_ptr = substitute_grob (unsmob<Grob> (src));
       return new_ptr ? new_ptr->self_scm () : SCM_UNDEFINED;
     }
   else if (scm_is_vector (src))
@@ -408,13 +408,13 @@ Spanner::fast_substitute_grob_array (SCM sym,
       set_break_subsititution (l ? l->self_scm () : SCM_UNDEFINED);
 
       SCM newval = sc->internal_get_object (sym);
-      if (!Grob_array::is_smob (newval))
+      if (!unsmob<Grob_array> (newval))
         {
           newval = Grob_array::make_array ();
           sc->set_object (sym, newval);
         }
 
-      Grob_array *new_array = Grob_array::unsmob (newval);
+      Grob_array *new_array = unsmob<Grob_array> (newval);
       for (int k = 0; k < 2; k++)
         for (int j = (*arrs[k])[i][LEFT]; j <= (*arrs[k])[i][RIGHT]; j++)
           {
@@ -461,7 +461,7 @@ substitute_object_alist (SCM alist, SCM dest)
       SCM sym = scm_caar (s);
       SCM val = scm_cdar (s);
 
-      if (Grob_array *orig = Grob_array::unsmob (val))
+      if (Grob_array *orig = unsmob<Grob_array> (val))
         {
           SCM handle = scm_assq (sym, dest);
           SCM newval
@@ -469,7 +469,7 @@ substitute_object_alist (SCM alist, SCM dest)
               ? scm_cdr (handle)
               : Grob_array::make_array ();
 
-          Grob_array *new_arr = Grob_array::unsmob (newval);
+          Grob_array *new_arr = unsmob<Grob_array> (newval);
 
           substitute_grob_array (orig, new_arr);
           val = newval;
@@ -497,7 +497,7 @@ Spanner::substitute_one_mutable_property (SCM sym,
   Spanner *s = this;
 
   bool fast_done = false;
-  Grob_array *grob_array = Grob_array::unsmob (val);
+  Grob_array *grob_array = unsmob<Grob_array> (val);
   if (grob_array)
     fast_done = s->fast_substitute_grob_array (sym, grob_array);
 
@@ -511,12 +511,12 @@ Spanner::substitute_one_mutable_property (SCM sym,
         if (grob_array)
           {
             SCM newval = sc->internal_get_object (sym);
-            if (!Grob_array::is_smob (newval))
+            if (!unsmob<Grob_array> (newval))
               {
                 newval = Grob_array::make_array ();
                 sc->set_object (sym, newval);
               }
-            substitute_grob_array (grob_array, Grob_array::unsmob (newval));
+            substitute_grob_array (grob_array, unsmob<Grob_array> (newval));
           }
         else
           {
index 77dcfb4a30f2573bb63128d91a8d0139817e1de6..6037e777e510d24289cdb8634aa184d1bfbd7114 100644 (file)
@@ -43,7 +43,7 @@ MAKE_SCHEME_CALLBACK (Breathing_sign, divisio_minima, 1);
 SCM
 Breathing_sign::divisio_minima (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
 
   Real thickness = Staff_symbol_referencer::line_thickness (me);
@@ -69,7 +69,7 @@ MAKE_SCHEME_CALLBACK (Breathing_sign, divisio_maior, 1);
 SCM
 Breathing_sign::divisio_maior (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
 
@@ -149,7 +149,7 @@ MAKE_SCHEME_CALLBACK (Breathing_sign, divisio_maxima, 1);
 SCM
 Breathing_sign::divisio_maxima (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
@@ -172,7 +172,7 @@ MAKE_SCHEME_CALLBACK (Breathing_sign, finalis, 1);
 SCM
 Breathing_sign::finalis (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
@@ -196,7 +196,7 @@ MAKE_SCHEME_CALLBACK (Breathing_sign, offset_callback, 1);
 SCM
 Breathing_sign::offset_callback (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Direction d = get_grob_direction (me);
   if (!d)
index 10420273ab645bd8e8c56dd90fe937b72ddbd909..db8493e2a5a6648478caf455e780dc104d15c65f 100644 (file)
@@ -96,7 +96,7 @@ Chord_name_engraver::process_music ()
             {
               Stream_event *n = notes_[i];
               SCM p = n->get_property ("pitch");
-              if (!Pitch::is_smob (p))
+              if (!unsmob<Pitch> (p))
                 continue;
 
               if (to_boolean (n->get_property ("bass")))
@@ -106,7 +106,7 @@ Chord_name_engraver::process_music ()
                   SCM oct = n->get_property ("octavation");
                   if (scm_is_number (oct))
                     {
-                      Pitch orig = Pitch::unsmob (p)->transposed (Pitch (-scm_to_int (oct), 0));
+                      Pitch orig = unsmob<Pitch> (p)->transposed (Pitch (-scm_to_int (oct), 0));
                       pitches = scm_cons (orig.smobbed_copy (), pitches);
                     }
                   else
index 2fcff940bbd81e2d607ca8fea39c69f8b83edf25..8111c7711756e75fde147d0f14d6404d66a134d5 100644 (file)
@@ -30,7 +30,7 @@ MAKE_SCHEME_CALLBACK (Chord_name, after_line_breaking, 1);
 SCM
 Chord_name::after_line_breaking (SCM smob)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
   assert (me);
 
   SCM s = me->get_property ("begin-of-line-visible");
index ebeb71a7cbd912a733536afb879b772541078616..540bcd5f7bd3bd71cfcaaa0a3506bab52ebc83e4 100644 (file)
@@ -145,7 +145,7 @@ static void apply_on_children (Context *context, SCM fun)
   scm_call_1 (fun, context->self_scm ());
   for (SCM s = context->children_contexts ();
        scm_is_pair (s); s = scm_cdr (s))
-    apply_on_children (Context::unsmob (scm_car (s)), fun);
+    apply_on_children (unsmob<Context> (scm_car (s)), fun);
 }
 
 void
index 04ae174f6fbc9a84c7c738d3fe1c78ab26db1f2f..4c24dd356e0473a9aa98ee603ff729798807bd18 100644 (file)
@@ -29,7 +29,7 @@ MAKE_SCHEME_CALLBACK (Clef_modifier, calc_parent_alignment, 1)
 SCM
 Clef_modifier::calc_parent_alignment (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *clef = me->get_parent (X_AXIS);
   string full_clef_name = ly_scm2string (clef->get_property ("glyph"));
   string clef_name = replace_all(&full_clef_name, "clefs.", "");
index c38b899d00e0e443f018dd37db981efc44eb1967..6f9062190ef46f91b37ffbbc6b99f3cf01dd70f4 100644 (file)
@@ -28,7 +28,7 @@ MAKE_SCHEME_CALLBACK (Clef, calc_glyph_name, 1);
 SCM
 Clef::calc_glyph_name (SCM smob)
 {
-  Item *s = Item::unsmob (smob);
+  Item *s = unsmob<Item> (smob);
   SCM glyph = s->get_property ("glyph");
 
   if (scm_is_string (glyph))
@@ -53,7 +53,7 @@ MAKE_SCHEME_CALLBACK (Clef, print, 1)
 SCM
 Clef::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM glyph_scm = me->get_property ("glyph-name");
   if (!scm_is_string (glyph_scm))
     return SCM_EOL;
index 462a1d21fe752fd827cb3bc520cc5de8e3beb7ae..8af3137f90e9c21f5db4f3f9839afac418d0c767 100644 (file)
@@ -101,7 +101,7 @@ Cluster_spanner_engraver::process_music ()
 
       for (vsize i = 0; i < cluster_notes_.size (); i++)
         {
-          Pitch *pit = Pitch::unsmob (cluster_notes_[i]->get_property ("pitch"));
+          Pitch *pit = unsmob<Pitch> (cluster_notes_[i]->get_property ("pitch"));
 
           int p = (pit ? pit->steps () : 0) + c0;
 
index 03e4e1eb36426e50199682e04b1188f35ac55c25..694da482a5fba6cb4de806fd06963e43e5b723b1 100644 (file)
@@ -125,7 +125,7 @@ MAKE_SCHEME_CALLBACK (Cluster, calc_cross_staff, 1);
 SCM
 Cluster::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "columns", cols);
   Grob *commony = common_refpoint_of_array (cols, me, Y_AXIS);
@@ -137,7 +137,7 @@ MAKE_SCHEME_CALLBACK (Cluster, print, 1);
 SCM
 Cluster::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Spanner *spanner = dynamic_cast<Spanner *> (me);
   if (!spanner)
@@ -235,7 +235,7 @@ MAKE_SCHEME_CALLBACK (Cluster_beacon, height, 1);
 SCM
 Cluster_beacon::height (SCM g)
 {
-  Grob *me = Grob::unsmob (g);
+  Grob *me = unsmob<Grob> (g);
   Interval v = robust_scm2interval (me->get_property ("positions"),
                                     Interval (0, 0));
   return ly_interval2scm (Staff_symbol_referencer::staff_space (me) * 0.5 * v);
index d7960b4ff806d129ac27b9b08cfe446d0854384c..2ba9eeca85aecae4cb43aa42084c697e0f4179ac 100644 (file)
@@ -151,7 +151,7 @@ compute_delta_pitches (vector<Grob_info> const &primitives)
       primitive = dynamic_cast<Item *> (primitives[i].grob ());
       Stream_event *cause = primitives[i].event_cause ();
       int pitch
-        = Pitch::unsmob (cause->get_property ("pitch"))->steps ();
+        = unsmob<Pitch> (cause->get_property ("pitch"))->steps ();
       if (prev_primitive)
         {
           delta_pitch = pitch - prev_pitch;
index 677ede56a6558b91dc76d06bd3462362314d144f..f590d2a40f014fabadebbae1afd7b818740c62e6 100644 (file)
@@ -109,8 +109,8 @@ Completion_heads_engraver::listen_note (Stream_event *ev)
 Moment
 Completion_heads_engraver::next_moment (Rational const &note_len)
 {
-  Moment *e = Moment::unsmob (get_property ("measurePosition"));
-  Moment *l = Moment::unsmob (get_property ("measureLength"));
+  Moment *e = unsmob<Moment> (get_property ("measurePosition"));
+  Moment *l = unsmob<Moment> (get_property ("measureLength"));
   if (!e || !l || !to_boolean (get_property ("timing")))
     {
       return Moment (0, 0);
@@ -123,7 +123,7 @@ Completion_heads_engraver::next_moment (Rational const &note_len)
                          + e->to_string () + " of " + l->to_string ());
       return 0;
     }
-  Moment const *unit = Moment::unsmob (get_property ("completionUnit"));
+  Moment const *unit = unsmob<Moment> (get_property ("completionUnit"));
 
   if (unit)
     {
@@ -162,7 +162,7 @@ Item *
 Completion_heads_engraver::make_note_head (Stream_event *ev)
 {
   Item *note = make_item ("NoteHead", ev->self_scm ());
-  Pitch *pit = Pitch::unsmob (ev->get_property ("pitch"));
+  Pitch *pit = unsmob<Pitch> (ev->get_property ("pitch"));
 
   int pos = pit->steps ();
   SCM c0 = get_property ("middleCPosition");
@@ -198,7 +198,7 @@ Completion_heads_engraver::process_music ()
     }
   else
     {
-      orig = Duration::unsmob (note_events_[0]->get_property ("duration"));
+      orig = unsmob<Duration> (note_events_[0]->get_property ("duration"));
       note_dur = *orig;
       SCM factor = get_property ("completionFactor");
       if (ly_is_procedure (factor))
index 6430629873db8299cbdf7edcd9e08437f12dad6b..8f809fde7021f9cd7cc9a175602ef6cbc1435b61 100644 (file)
@@ -105,15 +105,15 @@ Completion_rest_engraver::listen_rest (Stream_event *ev)
 Moment
 Completion_rest_engraver::next_moment (Rational const &note_len)
 {
-  Moment *e = Moment::unsmob (get_property ("measurePosition"));
-  Moment *l = Moment::unsmob (get_property ("measureLength"));
+  Moment *e = unsmob<Moment> (get_property ("measurePosition"));
+  Moment *l = unsmob<Moment> (get_property ("measureLength"));
   if (!e || !l || !to_boolean (get_property ("timing")))
     {
       return Moment (0, 0);
     }
 
   Moment result = *l - *e;
-  Moment const *unit = Moment::unsmob (get_property ("completionUnit"));
+  Moment const *unit = unsmob<Moment> (get_property ("completionUnit"));
 
   if (unit)
     {
@@ -152,7 +152,7 @@ Item *
 Completion_rest_engraver::make_rest (Stream_event *ev)
 {
   Item *rest = make_item ("Rest", ev->self_scm ());
-  if (Pitch *p = Pitch::unsmob (ev->get_property ("pitch")))
+  if (Pitch *p = unsmob<Pitch> (ev->get_property ("pitch")))
     {
       int pos = p->steps ();
       SCM c0 = get_property ("middleCPosition");
@@ -188,7 +188,7 @@ Completion_rest_engraver::process_music ()
     }
   else
     {
-      orig = Duration::unsmob (rest_events_[0]->get_property ("duration"));
+      orig = unsmob<Duration> (rest_events_[0]->get_property ("duration"));
       rest_dur = *orig;
       SCM factor = get_property ("completionFactor");
       if (ly_is_procedure (factor))
index 1a98775a96e929480e48cc83c749f7279093004f..df08d5433ce6cefd38c944448a80c20f0350c8cf 100644 (file)
@@ -560,7 +560,7 @@ Line_details::Line_details (Prob *pb, Output_def *paper)
   if (scm_is_pair (footnotes))
     for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s))
       {
-        Stencil *sten = Stencil::unsmob (scm_caddar (s));
+        Stencil *sten = unsmob<Stencil> (scm_caddar (s));
         if (!sten)
           {
             programming_error ("expecting stencil, got empty pointer");
@@ -571,7 +571,7 @@ Line_details::Line_details (Prob *pb, Output_def *paper)
 
   last_column_ = 0;
   force_ = 0;
-  Stencil *st = Stencil::unsmob (pb->get_property ("stencil"));
+  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
index 10f31ae83079c71cfa6062abbb2c9b2a82fffda1..7e391740a6d2f4327df101a85f6b4df513e2c76f 100644 (file)
@@ -50,7 +50,7 @@ Context_def::Context_def ()
 Input *
 Context_def::origin () const
 {
-  return Input::unsmob (input_location_);
+  return unsmob<Input> (input_location_);
 }
 
 Context_def::Context_def (Context_def const &s)
@@ -235,7 +235,7 @@ Context_def::internal_path_to_acceptable_context (SCM type_sym,
 
   vector<Context_def *> accepteds;
   for (SCM s = accepted; scm_is_pair (s); s = scm_cdr (s))
-    if (Context_def *t = Context_def::unsmob (find_context_def (odef,
+    if (Context_def *t = unsmob<Context_def> (find_context_def (odef,
                                                                scm_car (s))))
       accepteds.push_back (t);
 
@@ -398,7 +398,7 @@ LY_DEFINE (ly_context_def_lookup, "ly:context-def-lookup",
            " @samp{property-ops}, @samp{context-name}, @samp{group-type}.")
 {
   LY_ASSERT_SMOB (Context_def, def, 1);
-  Context_def *cd = Context_def::unsmob (def);
+  Context_def *cd = unsmob<Context_def> (def);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
 
   SCM res = cd->lookup (sym);
@@ -422,9 +422,9 @@ LY_DEFINE (ly_context_def_modify, "ly:context-def-modify",
   LY_ASSERT_SMOB (Context_def, def, 1);
   LY_ASSERT_SMOB (Context_mod, mod, 2);
 
-  Context_def *cd = Context_def::unsmob (def)->clone ();
+  Context_def *cd = unsmob<Context_def> (def)->clone ();
 
-  for (SCM s = Context_mod::unsmob (mod)->get_mods ();
+  for (SCM s = unsmob<Context_mod> (mod)->get_mods ();
        scm_is_pair (s);
        s = scm_cdr (s))
     cd->add_context_mod (scm_car (s));
index 493e151c1d93a944b49133a21eabad224e40047c..a774fc7426a571135ee2467390f539659e2006ea 100644 (file)
@@ -26,7 +26,7 @@ LY_DEFINE (ly_get_context_mods, "ly:get-context-mods",
            "Returns the list of context modifications stored in"
            " @var{contextmod}.")
 {
-  Context_mod *tr = Context_mod::unsmob (contextmod);
+  Context_mod *tr = unsmob<Context_mod> (contextmod);
   LY_ASSERT_SMOB (Context_mod, contextmod, 1);
   return tr->get_mods ();
 }
@@ -36,7 +36,7 @@ LY_DEFINE (ly_add_context_mod, "ly:add-context-mod",
            "Adds the given context @var{modification} to the list"
            " @var{contextmods} of context modifications.")
 {
-  Context_mod *ctxmod = Context_mod::unsmob (contextmods);
+  Context_mod *ctxmod = unsmob<Context_mod> (contextmods);
   LY_ASSERT_SMOB (Context_mod, contextmods, 1);
   ctxmod->add_context_mod (modification);
   return SCM_UNSPECIFIED;
@@ -63,8 +63,8 @@ LY_DEFINE (ly_context_mod_apply_x, "ly:context-mod-apply!",
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_SMOB (Context_mod, mod, 2);
 
-  apply_property_operations (Context::unsmob (context),
-                             Context_mod::unsmob (mod)->get_mods ());
+  apply_property_operations (unsmob<Context> (context),
+                             unsmob<Context_mod> (mod)->get_mods ());
   scm_remember_upto_here_1 (context);
   return SCM_UNSPECIFIED;
 }
index 59bcf9afc6764fdf1cf1cd81a97c98bcc2ec53d6..5904254d7d9e263520f5f025a385bb8137820257 100644 (file)
@@ -55,11 +55,11 @@ general_pushpop_property (Context *context,
 bool
 typecheck_grob (SCM symbol, SCM value)
 {
-  if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (value))
+  if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (value))
     return typecheck_grob (symbol, upc->unpure_part ())
       && typecheck_grob (symbol, upc->pure_part ());
   return ly_is_procedure (value)
-    || Simple_closure::is_smob (value)
+    || unsmob<Simple_closure> (value)
     || type_check_assignment (symbol, value, ly_symbol2scm ("backend-type?"));
 }
 
@@ -124,8 +124,8 @@ Grob_property_info::find ()
   SCM res = SCM_UNDEFINED;
   if (Context *c = context_->where_defined (symbol_, &res))
     if (c != context_)
-      return Grob_property_info (c, symbol_, Grob_properties::unsmob (res));
-  props_  = Grob_properties::unsmob (res);
+      return Grob_property_info (c, symbol_, unsmob<Grob_properties> (res));
+  props_  = unsmob<Grob_properties> (res);
   return *this;
 }
 
@@ -136,7 +136,7 @@ Grob_property_info::check ()
     return true;
   SCM res = SCM_UNDEFINED;
   if (context_->here_defined (symbol_, &res))
-    props_ = Grob_properties::unsmob (res);
+    props_ = unsmob<Grob_properties> (res);
   return props_;
 }
 
@@ -165,7 +165,7 @@ Grob_property_info::create ()
       || !g->here_defined (symbol_, &current_context_val))
     return false;
 
-  Grob_properties *def = Grob_properties::unsmob (current_context_val);
+  Grob_properties *def = unsmob<Grob_properties> (current_context_val);
 
   if (!def)
     {
@@ -180,7 +180,7 @@ Grob_property_info::create ()
   // any, they will be factored in when `updated' is being called.
   SCM props = Grob_properties (def->alist_, def->alist_).smobbed_copy ();
   context_->set_property (symbol_, props);
-  props_ = Grob_properties::unsmob (props);
+  props_ = unsmob<Grob_properties> (props);
   return props_;
 }
 
index d4bd77296c70a078247f75ea8f66f4af20b1ca46..a26c168faccb2e073959d240f390a7a651d3613e 100644 (file)
@@ -28,7 +28,7 @@ LY_DEFINE (ly_context_current_moment,
            1, 0, 0, (SCM context),
            "Return the current moment of @var{context}.")
 {
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   LY_ASSERT_SMOB (Context, context, 1);
 
@@ -41,7 +41,7 @@ LY_DEFINE (ly_context_id, "ly:context-id",
            " i.e., for @code{\\context Voice = \"one\" @dots{}}"
            " return the string @code{one}.")
 {
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   LY_ASSERT_SMOB (Context, context, 1);
 
@@ -56,7 +56,7 @@ LY_DEFINE (ly_context_name, "ly:context-name",
 {
   LY_ASSERT_SMOB (Context, context, 1);
 
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   return ly_symbol2scm (tr->context_name ().c_str ());
 }
@@ -66,7 +66,7 @@ LY_DEFINE (ly_context_grob_definition, "ly:context-grob-definition",
            "Return the definition of @var{name} (a symbol) within"
            " @var{context} as an alist.")
 {
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, name, 2);
@@ -81,7 +81,7 @@ LY_DEFINE (ly_context_pushpop_property, "ly:context-pushpop-property",
            " with @var{eltprop} (if @var{val} is specified) or reverted"
            " (if unspecified).")
 {
-  Context *tg = Context::unsmob (context);
+  Context *tg = unsmob<Context> (context);
 
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, grob, 2);
@@ -101,7 +101,7 @@ LY_DEFINE (ly_context_property, "ly:context-property",
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
 
-  Context *t = Context::unsmob (context);
+  Context *t = unsmob<Context> (context);
   SCM result = t->get_property (sym);
   return !SCM_UNBNDP (def) && scm_is_null (result) ? def : result;
 }
@@ -114,7 +114,7 @@ LY_DEFINE (ly_context_set_property_x, "ly:context-set-property!",
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, name, 2);
 
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   tr->set_property (name, val);
 
@@ -129,7 +129,7 @@ LY_DEFINE (ly_context_property_where_defined, "ly:context-property-where-defined
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, name, 2);
 
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   SCM val;
   tr = tr->where_defined (name, &val);
@@ -145,7 +145,7 @@ LY_DEFINE (ly_context_unset_property, "ly:context-unset-property", 2, 0, 0,
 {
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, name, 2);
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   tr->unset_property (name);
   return SCM_UNSPECIFIED;
@@ -156,7 +156,7 @@ LY_DEFINE (ly_context_parent, "ly:context-parent",
            "Return the parent of @var{context}, @code{#f} if none.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   tr = tr->get_parent_context ();
   if (tr)
@@ -173,7 +173,7 @@ LY_DEFINE (ly_context_find, "ly:context-find",
 {
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, name, 2);
-  Context *tr = Context::unsmob (context);
+  Context *tr = unsmob<Context> (context);
 
   while (tr)
     {
@@ -190,7 +190,7 @@ LY_DEFINE (ly_context_now, "ly:context-now",
            "Return @code{now-moment} of context @var{context}.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
-  Context *ctx = Context::unsmob (context);
+  Context *ctx = unsmob<Context> (context);
   return ctx->now_mom ().smobbed_copy ();
 }
 
@@ -199,7 +199,7 @@ LY_DEFINE (ly_context_event_source, "ly:context-event-source",
            "Return @code{event-source} of context @var{context}.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
-  Context *ctx = Context::unsmob (context);
+  Context *ctx = unsmob<Context> (context);
   return ctx->event_source ()->self_scm ();
 }
 
@@ -209,6 +209,6 @@ LY_DEFINE (ly_context_events_below, "ly:context-events-below",
            " from @var{context} and all its subcontexts.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
-  Context *ctx = Context::unsmob (context);
+  Context *ctx = unsmob<Context> (context);
   return ctx->events_below ()->self_scm ();
 }
index 4c0caac040c8e24644bc729e964326ee6f8cc033..1167883b6a29007c9f2f8683b85b6f0eb23ac849 100644 (file)
@@ -43,7 +43,7 @@ Context::check_removal ()
 {
   for (SCM p = context_list_; scm_is_pair (p); p = scm_cdr (p))
     {
-      Context *ctx = Context::unsmob (scm_car (p));
+      Context *ctx = unsmob<Context> (scm_car (p));
 
       ctx->check_removal ();
       if (ctx->is_removable ())
@@ -59,7 +59,7 @@ Context::check_removal ()
 Scheme_hash_table *
 Context::properties_dict () const
 {
-  return Scheme_hash_table::unsmob (properties_scm_);
+  return unsmob<Scheme_hash_table> (properties_scm_);
 }
 
 void
@@ -170,7 +170,7 @@ Context::find_create_context (SCM n, const string &id, SCM operations)
       SCM score_name = default_child_context_name ();
       SCM score_def = find_context_def (get_output_def (), score_name);
 
-      if (Context_def *cd = Context_def::unsmob (score_def))
+      if (Context_def *cd = unsmob<Context_def> (score_def))
         {
           if (cd->is_alias (n))
             return create_context (cd, id, operations);
@@ -229,13 +229,13 @@ Context::find_create_context (SCM n, const string &id, SCM operations)
 void
 Context::acknowledge_infant (SCM sev)
 {
-  infant_event_ = Stream_event::unsmob (sev);
+  infant_event_ = unsmob<Stream_event> (sev);
 }
 
 void
 Context::set_property_from_event (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
 
   SCM sym = ev->get_property ("symbol");
   if (scm_is_symbol (sym))
@@ -258,7 +258,7 @@ Context::set_property_from_event (SCM sev)
 void
 Context::unset_property_from_event (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
 
   SCM sym = ev->get_property ("symbol");
   type_check_assignment (sym, SCM_EOL, ly_symbol2scm ("translation-type?"));
@@ -272,7 +272,7 @@ Context::unset_property_from_event (SCM sev)
 void
 Context::create_context_from_event (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
 
   string id = ly_scm2string (ev->get_property ("id"));
   SCM ops = ev->get_property ("ops");
@@ -318,7 +318,7 @@ Context::create_context_from_event (SCM sev)
 
   new_context->unprotect ();
 
-  Context_def *td = Context_def::unsmob (new_context->definition_);
+  Context_def *td = unsmob<Context_def> (new_context->definition_);
 
   /* This cannot move before add_context (), because \override
      operations require that we are in the hierarchy.  */
@@ -343,7 +343,7 @@ Context::path_to_acceptable_context (SCM name) const
         accepts = scm_cons (elt, accepts);
       }
 
-  return Context_def::unsmob (definition_)->path_to_acceptable_context (name,
+  return unsmob<Context_def> (definition_)->path_to_acceptable_context (name,
          get_output_def (),
          scm_reverse_x (accepts, SCM_EOL));
 
@@ -373,7 +373,7 @@ Context::create_context (Context_def *cdef,
 
   assert (infant_event_);
   SCM infant_scm = infant_event_->get_property ("context");
-  Context *infant = Context::unsmob (infant_scm);
+  Context *infant = unsmob<Context> (infant_scm);
 
   if (!infant || infant->get_parent_context () != this)
     {
@@ -409,11 +409,11 @@ Context::get_default_interpreter (const string &context_id)
       SCM st = find_context_def (get_output_def (), nm);
 
       string name = ly_symbol2string (nm);
-      Context_def *t = Context_def::unsmob (st);
+      Context_def *t = unsmob<Context_def> (st);
       if (!t)
         {
           warning (_f ("cannot find or create: `%s'", name.c_str ()));
-          t = Context_def::unsmob (this->definition_);
+          t = unsmob<Context_def> (this->definition_);
         }
       if (scm_is_symbol (t->get_default_child (SCM_EOL)))
         {
@@ -438,7 +438,7 @@ Context::get_default_interpreter (const string &context_id)
 Context *
 Context::where_defined (SCM sym, SCM *value) const
 {
-#ifndef NDEBUG
+#ifdef DEBUG
   if (profile_property_accesses)
     note_property_access (&context_property_lookup_table, sym);
 #endif
@@ -454,7 +454,7 @@ Context::where_defined (SCM sym, SCM *value) const
 bool
 Context::here_defined (SCM sym, SCM *value) const
 {
-#ifndef NDEBUG
+#ifdef DEBUG
   if (profile_property_accesses)
     note_property_access (&context_property_lookup_table, sym);
 #endif
@@ -468,7 +468,7 @@ Context::here_defined (SCM sym, SCM *value) const
 SCM
 Context::internal_get_property (SCM sym) const
 {
-#ifndef NDEBUG
+#ifdef DEBUG
   if (profile_property_accesses)
     note_property_access (&context_property_lookup_table, sym);
 #endif
@@ -550,8 +550,8 @@ Context::unset_property (SCM sym)
 void
 Context::change_parent (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
-  Context *to = Context::unsmob (ev->get_property ("context"));
+  Stream_event *ev = unsmob<Stream_event> (sev);
+  Context *to = unsmob<Context> (ev->get_property ("context"));
 
   disconnect_from_parent ();
   to->add_context (this);
@@ -595,7 +595,7 @@ find_context_below (Context *where,
   for (SCM s = where->children_contexts ();
        !found && scm_is_pair (s); s = scm_cdr (s))
     {
-      Context *tr = Context::unsmob (scm_car (s));
+      Context *tr = unsmob<Context> (scm_car (s));
 
       found = find_context_below (tr, type, id);
     }
@@ -612,7 +612,7 @@ Context::properties_as_alist () const
 SCM
 Context::context_name_symbol () const
 {
-  Context_def *td = Context_def::unsmob (definition_);
+  Context_def *td = unsmob<Context_def> (definition_);
   return td->get_context_name ();
 }
 
@@ -656,7 +656,7 @@ Context::print_smob (SCM port, scm_print_state *)
 {
   scm_puts ("#<", port);
   scm_puts (class_name (), port);
-  if (Context_def *d = Context_def::unsmob (definition_))
+  if (Context_def *d = unsmob<Context_def> (definition_))
     {
       scm_puts (" ", port);
       scm_display (d->get_context_name (), port);
@@ -728,8 +728,8 @@ measure_length (Context const *context)
 {
   SCM l = context->get_property ("measureLength");
   Rational length (1);
-  if (Moment::is_smob (l))
-    length = Moment::unsmob (l)->main_part_;
+  if (unsmob<Moment> (l))
+    length = unsmob<Moment> (l)->main_part_;
   return length;
 }
 
@@ -739,9 +739,9 @@ measure_position (Context const *context)
   SCM sm = context->get_property ("measurePosition");
 
   Moment m = 0;
-  if (Moment::is_smob (sm))
+  if (unsmob<Moment> (sm))
     {
-      m = *Moment::unsmob (sm);
+      m = *unsmob<Moment> (sm);
 
       if (m.main_part_ < Rational (0))
         {
@@ -789,7 +789,7 @@ set_context_property_on_children (Context *trans, SCM sym, SCM val)
   trans->set_property (sym, ly_deep_copy (val));
   for (SCM p = trans->children_contexts (); scm_is_pair (p); p = scm_cdr (p))
     {
-      Context *trg = Context::unsmob (scm_car (p));
+      Context *trg = unsmob<Context> (scm_car (p));
       set_context_property_on_children (trg, sym, ly_deep_copy (val));
     }
 }
@@ -806,7 +806,7 @@ melisma_busy (Context *tr)
       // to true.
 
       do {
-        if (!melisma_busy (Context::unsmob (scm_car (ch))))
+        if (!melisma_busy (unsmob<Context> (scm_car (ch))))
           return false;
         ch = scm_cdr (ch);
       } while (scm_is_pair (ch));
index 90c221c10f4a63e1617845221e13e870b8c1d7a9..5893dc205b731d84d6e8b3901d992b23bac4b6a9 100644 (file)
@@ -95,7 +95,7 @@ Custos_engraver::acknowledge_note_head (Grob_info info)
         don't look at the staff-position, since we can't be sure
         whether Clef_engraver already applied a vertical shift.
       */
-      pitches_.push_back (*Pitch::unsmob (ev->get_property ("pitch")));
+      pitches_.push_back (*unsmob<Pitch> (ev->get_property ("pitch")));
     }
 }
 
index 584dcaba4962a8c645db60d9432865c961084aa3..37aeb66f6b9202ed8db498f7dd5e3139fc547837 100644 (file)
@@ -41,7 +41,7 @@ MAKE_SCHEME_CALLBACK (Custos, print, 1);
 SCM
 Custos::print (SCM smob)
 {
-  Item *me = (Item *)Grob::unsmob (smob);
+  Item *me = (Item *)unsmob<Grob> (smob);
 
   SCM scm_style = me->get_property ("style");
   string style;
index 61674b3c756440af8a6c2444999d232e005f76af..3fd4decc42b28640ce77f2a76d7ca968e7d909ec 100644 (file)
@@ -30,8 +30,8 @@ LY_DEFINE (ly_connect_dispatchers, "ly:connect-dispatchers",
            2, 0, 0, (SCM to, SCM from),
            "Make the dispatcher @var{to} listen to events from @var{from}.")
 {
-  Dispatcher *t = Dispatcher::unsmob (to);
-  Dispatcher *f = Dispatcher::unsmob (from);
+  Dispatcher *t = unsmob<Dispatcher> (to);
+  Dispatcher *f = unsmob<Dispatcher> (from);
 
   LY_ASSERT_SMOB (Dispatcher, to, 1);
   LY_ASSERT_SMOB (Dispatcher, from, 2);
@@ -41,13 +41,28 @@ LY_DEFINE (ly_connect_dispatchers, "ly:connect-dispatchers",
   return SCM_UNSPECIFIED;
 }
 
+LY_DEFINE (ly_disconnect_dispatchers, "ly:disconnect-dispatchers",
+           2, 0, 0, (SCM to, SCM from),
+           "Stop the dispatcher @var{to} listening to events from @var{from}.")
+{
+  Dispatcher *t = unsmob<Dispatcher> (to);
+  Dispatcher *f = unsmob<Dispatcher> (from);
+
+  LY_ASSERT_SMOB (Dispatcher, to, 1);
+  LY_ASSERT_SMOB (Dispatcher, from, 2);
+
+  t->unregister_as_listener (f);
+
+  return SCM_UNSPECIFIED;
+}
+
 LY_DEFINE (ly_add_listener, "ly:add-listener",
            2, 0, 1, (SCM callback, SCM disp, SCM cl),
            "Add the single-argument procedure @var{callback} as listener"
            " to the dispatcher @var{disp}.  Whenever @var{disp} hears"
            " an event of class @var{cl}, it calls @var{callback} with it.")
 {
-  Dispatcher *d = Dispatcher::unsmob (disp);
+  Dispatcher *d = unsmob<Dispatcher> (disp);
 
   LY_ASSERT_TYPE (ly_is_procedure, callback, 1);
   LY_ASSERT_SMOB (Dispatcher, disp, 2);
@@ -69,7 +84,7 @@ LY_DEFINE (ly_listened_event_types, "ly:listened-event-types",
 {
   LY_ASSERT_SMOB (Dispatcher, disp, 1);
 
-  SCM result = Dispatcher::unsmob (disp)->listened_types ();
+  SCM result = unsmob<Dispatcher> (disp)->listened_types ();
 
   scm_remember_upto_here_1 (disp);
 
@@ -84,7 +99,7 @@ LY_DEFINE (ly_listened_event_class_p, "ly:listened-event-class?",
   LY_ASSERT_SMOB (Dispatcher, disp, 1);
   LY_ASSERT_TYPE (scm_is_pair, cl, 2);
 
-  bool result = Dispatcher::unsmob (disp)->is_listened_class (cl);
+  bool result = unsmob<Dispatcher> (disp)->is_listened_class (cl);
 
   scm_remember_upto_here_1 (disp);
 
@@ -95,8 +110,8 @@ LY_DEFINE (ly_broadcast, "ly:broadcast",
            2, 0, 0, (SCM disp, SCM ev),
            "Send the stream event @var{ev} to the dispatcher @var{disp}.")
 {
-  Dispatcher *d = Dispatcher::unsmob (disp);
-  Stream_event *e = Stream_event::unsmob (ev);
+  Dispatcher *d = unsmob<Dispatcher> (disp);
+  Stream_event *e = unsmob<Stream_event> (ev);
 
   LY_ASSERT_SMOB (Dispatcher, disp, 1);
 
index d47c2739d29d0adc53867a30ad4de2f0ed1fdbe2..2b80c3358ef69ad1caf3d9011b10901353d23130 100644 (file)
@@ -75,7 +75,7 @@ Event dispatching:
 void
 Dispatcher::dispatch (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
   SCM class_list = ev->get_property ("class");
   if (!scm_is_pair (class_list))
     {
@@ -235,7 +235,7 @@ Dispatcher::internal_add_listener (SCM callback, SCM ev_class, int priority)
       for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp))
         {
           int priority = scm_to_int (scm_cdar (disp));
-          Dispatcher *d = Dispatcher::unsmob (scm_caar (disp));
+          Dispatcher *d = unsmob<Dispatcher> (scm_caar (disp));
           d->internal_add_listener (GET_LISTENER (Dispatcher, dispatch).smobbed_copy (),
                                     ev_class, priority);
         }
@@ -264,7 +264,7 @@ Dispatcher::remove_listener (Listener l, SCM ev_class)
   SCM dummy = scm_cons (SCM_EOL, list);
   SCM e = dummy;
   while (scm_is_pair (scm_cdr (e)))
-    if (*Listener::unsmob (scm_cdadr (e)) == l && first)
+    if (*unsmob<Listener> (scm_cdadr (e)) == l && first)
       {
         scm_set_cdr_x (e, scm_cddr (e));
         first = false;
@@ -282,7 +282,7 @@ Dispatcher::remove_listener (Listener l, SCM ev_class)
       /* Unregister with all dispatchers. */
       for (SCM disp = dispatchers_; scm_is_pair (disp); disp = scm_cdr (disp))
         {
-          Dispatcher *d = Dispatcher::unsmob (scm_caar (disp));
+          Dispatcher *d = unsmob<Dispatcher> (scm_caar (disp));
           d->remove_listener (GET_LISTENER (Dispatcher, dispatch), ev_class);
         }
       listen_classes_ = scm_delq_x (ev_class, listen_classes_);
index 7064eafba3dc2ecaffe4c2c807c027f42bb476ef..c646ed038cde099d9169ff488e34e125c5a48081 100644 (file)
@@ -51,7 +51,7 @@ Dot_column_engraver::stop_translation_timestep ()
 void
 Dot_column_engraver::acknowledge_rhythmic_head (Grob_info info)
 {
-  Grob *d = Grob::unsmob (info.grob ()->get_object ("dot"));
+  Grob *d = unsmob<Grob> (info.grob ()->get_object ("dot"));
   if (d)
     {
       if (!dotcol_)
index 1ec7baa05911c142250b71f3ed80931b939542a7..98db3b1476ff602668f4df05b2add7af317355c4 100644 (file)
@@ -45,13 +45,13 @@ MAKE_SCHEME_CALLBACK (Dot_column, calc_positioning_done, 1);
 SCM
 Dot_column::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /*
     Trigger note collision resolution first, since that may kill off
     dots when merging.
   */
-  if (Grob *collision = Grob::unsmob (me->get_object ("note-collision")))
+  if (Grob *collision = unsmob<Grob> (me->get_object ("note-collision")))
     (void) collision->get_property ("positioning-done");
 
   me->set_property ("positioning-done", SCM_BOOL_T);
@@ -68,7 +68,7 @@ Dot_column::calc_positioning_done (SCM smob)
       Grob *n = dots[i]->get_parent (Y_AXIS);
       commonx = n->common_refpoint (commonx, X_AXIS);
 
-      if (Grob *stem = Grob::unsmob (n->get_object ("stem")))
+      if (Grob *stem = unsmob<Grob> (n->get_object ("stem")))
         {
           commonx = stem->common_refpoint (commonx, X_AXIS);
 
@@ -125,7 +125,7 @@ Dot_column::calc_positioning_done (SCM smob)
       Box b (s->extent (commonx, X_AXIS), y);
       boxes.push_back (b);
 
-      if (Grob *stem = Grob::unsmob (s->get_object ("stem")))
+      if (Grob *stem = unsmob<Grob> (s->get_object ("stem")))
         stems.insert (stem);
     }
 
@@ -159,7 +159,7 @@ Dot_column::calc_positioning_done (SCM smob)
       // Sort dots by stem, then check for dots above the limit for each stem
       vector <vector <Grob *> > dots_each_stem (parent_stems.size ());
       for (vsize i = 0; i < dots.size (); i++)
-        if (Grob *stem = Grob::unsmob (dots[i]->get_parent (Y_AXIS)
+        if (Grob *stem = unsmob<Grob> (dots[i]->get_parent (Y_AXIS)
                                       -> get_object ("stem")))
           for (vsize j = 0; j < parent_stems.size (); j++)
             if (stem == parent_stems[j])
@@ -242,7 +242,7 @@ Dot_column::calc_positioning_done (SCM smob)
 void
 Dot_column::add_head (Grob *me, Grob *head)
 {
-  Grob *d = Grob::unsmob (head->get_object ("dot"));
+  Grob *d = unsmob<Grob> (head->get_object ("dot"));
   if (d)
     {
       Side_position_interface::add_support (me, head);
index b58bd46912038a0828e4f44402e7339d4ae99a2b..5465f460f6077e61d46fa4de53ffadbfe90b9495 100644 (file)
@@ -43,10 +43,10 @@ Dots_engraver::acknowledge_rhythmic_head (Grob_info gi)
     return;
 
   Grob *note = gi.grob ();
-  if (Grob::is_smob (note->get_object ("dot")))
+  if (unsmob<Grob> (note->get_object ("dot")))
     return;
 
-  Duration *dur = Duration::unsmob (cause->get_property ("duration"));
+  Duration *dur = unsmob<Duration> (cause->get_property ("duration"));
   if (dur && dur->dot_count ())
     {
       Item *d = make_item ("Dots", note->self_scm ());
index a8d6809026f755b4eed7c7c72c3989b4406678a5..b7f787bc022f0e9c1af1428ba9b1d645abd2ae39 100644 (file)
@@ -30,7 +30,7 @@ MAKE_SCHEME_CALLBACK (Dots, print, 1);
 SCM
 Dots::print (SCM d)
 {
-  Grob *sc = Grob::unsmob (d);
+  Grob *sc = unsmob<Grob> (d);
   Stencil mol;
 
   SCM c = sc->get_property ("dot-count");
index 4b74f791cfaffbaaa10e3e234cdabb624c646b56..0285de650478c880493963c576389112057058c5 100644 (file)
@@ -58,7 +58,7 @@ Drum_note_performer::process_music ()
           && to_boolean (scm_hash_table_p (tab)))
         defn = scm_hashq_ref (tab, sym, SCM_EOL);
 
-      if (Pitch *pit = Pitch::unsmob (defn))
+      if (Pitch *pit = unsmob<Pitch> (defn))
         {
           SCM articulations = n->get_property ("articulations");
           Stream_event *tie_event = 0;
@@ -66,7 +66,7 @@ Drum_note_performer::process_music ()
           int velocity = 0;
           for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
             {
-              Stream_event *ev = Stream_event::unsmob (scm_car (s));
+              Stream_event *ev = unsmob<Stream_event> (scm_car (s));
               if (!ev)
                 continue;
 
index 55fbf382b23c9b0171ff90c7a5272a956832e35b..7d0788ea3eef5c4aa42e5b67d1e9dde2be60c1b8 100644 (file)
@@ -25,8 +25,8 @@ MAKE_SCHEME_CALLBACK (Duration, less_p, 2);
 SCM
 Duration::less_p (SCM p1, SCM p2)
 {
-  Duration *a = Duration::unsmob (p1);
-  Duration *b = Duration::unsmob (p2);
+  Duration *a = unsmob<Duration> (p1);
+  Duration *b = unsmob<Duration> (p2);
 
   if (compare (*a, *b) < 0)
     return SCM_BOOL_T;
@@ -41,8 +41,8 @@ LY_DEFINE (ly_duration_less_p, "ly:duration<?",
   LY_ASSERT_SMOB (Duration, p1, 1);
   LY_ASSERT_SMOB (Duration, p2, 2);
 
-  Duration *a = Duration::unsmob (p1);
-  Duration *b = Duration::unsmob (p2);
+  Duration *a = unsmob<Duration> (p1);
+  Duration *b = unsmob<Duration> (p2);
 
   if (Duration::compare (*a, *b) < 0)
     return SCM_BOOL_T;
@@ -102,7 +102,7 @@ LY_DEFINE (ly_duration_log, "ly:duration-log",
            "Extract the duration log from @var{dur}.")
 {
   LY_ASSERT_SMOB (Duration, dur, 1);
-  return scm_from_int (Duration::unsmob (dur)->duration_log ());
+  return scm_from_int (unsmob<Duration> (dur)->duration_log ());
 }
 
 LY_DEFINE (ly_duration_dot_count, "ly:duration-dot-count",
@@ -110,7 +110,7 @@ LY_DEFINE (ly_duration_dot_count, "ly:duration-dot-count",
            "Extract the dot count from @var{dur}.")
 {
   LY_ASSERT_SMOB (Duration, dur, 1);
-  return scm_from_int (Duration::unsmob (dur)->dot_count ());
+  return scm_from_int (unsmob<Duration> (dur)->dot_count ());
 }
 
 LY_DEFINE (ly_intlog2, "ly:intlog2",
@@ -127,7 +127,7 @@ LY_DEFINE (ly_duration_length, "ly:duration-length",
            "The length of the duration as a @code{moment}.")
 {
   LY_ASSERT_SMOB (Duration, dur, 1);
-  return Moment (Duration::unsmob (dur)->get_length ()).smobbed_copy ();
+  return Moment (unsmob<Duration> (dur)->get_length ()).smobbed_copy ();
 }
 
 LY_DEFINE (ly_duration_2_string, "ly:duration->string",
@@ -135,7 +135,7 @@ LY_DEFINE (ly_duration_2_string, "ly:duration->string",
            "Convert @var{dur} to a string.")
 {
   LY_ASSERT_SMOB (Duration, dur, 1);
-  return ly_string2scm (Duration::unsmob (dur)->to_string ());
+  return ly_string2scm (unsmob<Duration> (dur)->to_string ());
 }
 
 LY_DEFINE (ly_duration_factor, "ly:duration-factor",
@@ -144,7 +144,7 @@ LY_DEFINE (ly_duration_factor, "ly:duration-factor",
            "  Return it as a pair.")
 {
   LY_ASSERT_SMOB (Duration, dur, 1);
-  Rational r = Duration::unsmob (dur)->factor ();
+  Rational r = unsmob<Duration> (dur)->factor ();
   return scm_cons (scm_from_int64 (r.num ()), scm_from_int64 (r.den ()));
 }
 
@@ -156,7 +156,7 @@ LY_DEFINE (ly_duration_scale, "ly:duration-scale",
            "  Return it as a rational.")
 {
   LY_ASSERT_SMOB (Duration, dur, 1);
-  Rational r = Duration::unsmob (dur)->factor ();
+  Rational r = unsmob<Duration> (dur)->factor ();
 
   return ly_rational2scm (r);
 }
index df5c24cb330afd78c3632f8489a9ad096e3255ff..4a443dec5c7dfe1bb975e3d435c37e65c0cceb6d 100644 (file)
@@ -181,7 +181,7 @@ Dynamic_align_engraver::set_spanner_bounds (Spanner *line, bool end)
             bound = spanners[0]->get_bound (d);
           else
             {
-              bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+              bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
               programming_error ("started DynamicLineSpanner but have no left bound");
             }
 
index 0bbe69f075c81cefd3ebd14711fe881229b3a159..4b51d904140e9f0a6e4d87d716a5c534cf174308 100644 (file)
@@ -209,12 +209,12 @@ Dynamic_engraver::stop_translation_timestep ()
   if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
     finished_spanner_
     ->set_bound (RIGHT,
-                 Grob::unsmob (get_property ("currentMusicalColumn")));
+                 unsmob<Grob> (get_property ("currentMusicalColumn")));
 
   if (current_spanner_ && !current_spanner_->get_bound (LEFT))
     current_spanner_
     ->set_bound (LEFT,
-                 Grob::unsmob (get_property ("currentMusicalColumn")));
+                 unsmob<Grob> (get_property ("currentMusicalColumn")));
   script_ = 0;
   script_event_ = 0;
   accepted_spanevents_drul_.set (0, 0);
@@ -267,7 +267,7 @@ Dynamic_engraver::acknowledge_note_column (Grob_info info)
       */
       Grob *x_parent = (heads.size ()
                         ? info.grob ()
-                        : Grob::unsmob (info.grob ()->get_object ("rest")));
+                        : unsmob<Grob> (info.grob ()->get_object ("rest")));
       if (x_parent)
         script_->set_parent (x_parent, X_AXIS);
     }
index be22297ad7ee50ef85c69e979d7cc4567b41f7f7..57593649d30332b79cbf9b8583107212646ddb28 100644 (file)
@@ -54,7 +54,7 @@ Enclosing_bracket::width (SCM grob)
   /*
      UGH. cut & paste code.
   */
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   extract_grob_set (me, "elements", elements);
   if (elements.empty ())
     {
@@ -82,7 +82,7 @@ MAKE_SCHEME_CALLBACK (Enclosing_bracket, print, 1);
 SCM
 Enclosing_bracket::print (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   extract_grob_set (me, "elements", elements);
   if (elements.empty ())
     {
index 9b5efb27797015c40e0b39fc5a24ff6d732eebae..c69b974a69631aba681068aaadf91bae9789fa1a 100644 (file)
@@ -29,7 +29,7 @@
 void
 Engraver_group::override (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
 
   Grob_property_info (context (), ev->get_property ("symbol"))
     .push (ev->get_property ("property-path"),
@@ -39,7 +39,7 @@ Engraver_group::override (SCM sev)
 void
 Engraver_group::revert (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
 
   Grob_property_info (context (), ev->get_property ("symbol"))
     .pop (ev->get_property ("property-path"));
@@ -117,7 +117,7 @@ Engraver_group::acknowledge_grobs ()
         }
 
       Engraver_dispatch_list *dispatch
-        = Engraver_dispatch_list::unsmob (acklist);
+        = unsmob<Engraver_dispatch_list> (acklist);
 
       if (dispatch)
         dispatch->apply (info);
@@ -136,7 +136,7 @@ Engraver_group::pending_grobs () const
   for (SCM s = context_->children_contexts ();
        scm_is_pair (s); s = scm_cdr (s))
     {
-      Context *c = Context::unsmob (scm_car (s));
+      Context *c = unsmob<Context> (scm_car (s));
       Engraver_group *group
         = dynamic_cast<Engraver_group *> (c->implementation ());
 
@@ -157,7 +157,7 @@ Engraver_group::do_announces ()
       for (SCM s = context ()->children_contexts ();
            scm_is_pair (s); s = scm_cdr (s))
         {
-          Context *c = Context::unsmob (scm_car (s));
+          Context *c = unsmob<Context> (scm_car (s));
           Engraver_group *group
             = dynamic_cast<Engraver_group *> (c->implementation ());
           if (group)
index e3aa2aaab29aba19712b7f2d56d834279cddde21..587a93199f8af73690cc0cc30298c46f903d527c 100644 (file)
@@ -31,7 +31,7 @@ LY_DEFINE (ly_engraver_make_grob, "ly:engraver-make-grob",
   LY_ASSERT_TYPE (ly_is_symbol, grob_name, 2);
   LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3);
 
-  Grob *g = Engraver::unsmob (engraver)->
+  Grob *g = unsmob<Engraver> (engraver)->
             internal_make_grob (grob_name, cause,
                                 ly_symbol2string (grob_name).c_str (),
                                 "scheme", 0, "scheme");
@@ -49,8 +49,8 @@ LY_DEFINE (ly_engraver_announce_end_grob, "ly:engraver-announce-end-grob",
   LY_ASSERT_SMOB (Grob, grob, 2);
   LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3);
 
-  Engraver::unsmob (engraver)->
-  announce_end_grob (Grob::unsmob (grob), cause);
+  unsmob<Engraver> (engraver)->
+  announce_end_grob (unsmob<Grob> (grob), cause);
 
   return SCM_UNSPECIFIED;
 }
index fd352d836db951c14f13899691dd79eba2a7347e..23d7fd9fc2701b0f795d024b70326d44c164dc21 100644 (file)
@@ -52,12 +52,12 @@ Grob_info
 Engraver::make_grob_info (Grob *e, SCM cause)
 {
   /* TODO: Remove Music code when it's no longer needed */
-  if (Music *m = Music::unsmob (cause))
+  if (Music *m = unsmob<Music> (cause))
     {
       cause = m->to_event ()->unprotect ();
     }
   if (scm_is_null (e->get_property ("cause"))
-      && (Stream_event::is_smob (cause) || Grob::is_smob (cause)))
+      && (unsmob<Stream_event> (cause) || unsmob<Grob> (cause)))
     e->set_property ("cause", cause);
 
   return Grob_info (this, e);
@@ -86,7 +86,7 @@ Engraver::Engraver ()
 {
 }
 
-#ifndef NDEBUG
+#ifdef DEBUG
 static SCM creation_callback = SCM_EOL;
 LY_DEFINE (ly_set_grob_creation_callback, "ly:set-grob-creation-callback",
            1, 0, 0, (SCM cb),
@@ -112,7 +112,7 @@ Engraver::internal_make_grob (SCM symbol,
                               int line,
                               char const *fun)
 {
-#ifdef NDEBUG
+#ifndef DEBUG
   (void)file;
   (void)line;
   (void)fun;
@@ -135,7 +135,7 @@ Engraver::internal_make_grob (SCM symbol,
   assert (grob);
   announce_grob (grob, cause);
 
-#ifndef NDEBUG
+#ifdef DEBUG
   if (ly_is_procedure (creation_callback))
     scm_apply_0 (creation_callback,
                  scm_list_n (grob->self_scm (), scm_from_utf8_string (file),
@@ -174,7 +174,7 @@ Engraver::internal_make_spanner (SCM x, SCM cause, char const *name,
 bool
 ly_is_grob_cause (SCM obj)
 {
-  return Grob::is_smob (obj) || Stream_event::is_smob (obj) || scm_is_null (obj);
+  return unsmob<Grob> (obj) || unsmob<Stream_event> (obj) || scm_is_null (obj);
 }
 
 #include "translator.icc"
index f8b714b1372e96594a0ff421d53e23a4dd4e33a1..a62ed3726f8bd9c2269e4c8f73148dba80528d0b 100644 (file)
@@ -106,7 +106,7 @@ Episema_engraver::typeset_all ()
         {
           Grob *col = (note_columns_.size ()
                        ? note_columns_.back ()
-                       : Grob::unsmob (get_property ("currentMusicalColumn")));
+                       : unsmob<Grob> (get_property ("currentMusicalColumn")));
           finished_->set_bound (RIGHT, col);
         }
       finished_ = 0;
@@ -120,7 +120,7 @@ Episema_engraver::stop_translation_timestep ()
     {
       Grob *col = (note_columns_.size ()
                    ? note_columns_.front ()
-                   : Grob::unsmob (get_property ("currentMusicalColumn")));
+                   : unsmob<Grob> (get_property ("currentMusicalColumn")));
       span_->set_bound (LEFT, col);
     }
 
index 0eea36763f3b0fd527dbf29eacd91ed77aa43760..92b385fe57651eff555d4b74b3ba9cf5c5a13e76 100644 (file)
@@ -46,13 +46,13 @@ Event_chord_iterator::process (Moment m)
       for (SCM s = get_music ()->get_property ("elements");
            scm_is_pair (s); s = scm_cdr (s))
         {
-          Music *mus = Music::unsmob (scm_car (s));
+          Music *mus = unsmob<Music> (scm_car (s));
           report_event (mus);
         }
       for (SCM s = get_music ()->get_property ("articulations");
            scm_is_pair (s); s = scm_cdr (s))
         {
-          Music *mus = Music::unsmob (scm_car (s));
+          Music *mus = unsmob<Music> (scm_car (s));
           report_event (mus);
         }
     }
index cdec42d6f2884fc21e589f906a80fde50056a42c..371c4d24babd3dd1ceec00976acb1ab50edf5988 100644 (file)
@@ -41,7 +41,7 @@ MAKE_SCHEME_CALLBACK (Figured_bass_continuation, center_on_figures, 1);
 SCM
 Figured_bass_continuation::center_on_figures (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
   extract_grob_set (me, "figures", figures);
   if (figures.empty ())
     return scm_from_double (0.0);
@@ -57,7 +57,7 @@ MAKE_SCHEME_CALLBACK (Figured_bass_continuation, print, 1);
 SCM
 Figured_bass_continuation::print (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
 
   Real thick
     = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
index 4222fbe7b0a4258831678135e7cbd21917255265..2ed07e3e836fc410e2cddb846b332b9e2d3bab2a 100644 (file)
@@ -222,11 +222,11 @@ Figured_bass_engraver::center_continuations (vector<Spanner *> const &consecutiv
     left_figs.push_back (consecutive_lines[j]->get_bound (LEFT));
 
   SCM ga = Grob_array::make_array ();
-  Grob_array::unsmob (ga)->set_array (left_figs);
+  unsmob<Grob_array> (ga)->set_array (left_figs);
 
   for (vsize j = consecutive_lines.size (); j--;)
     consecutive_lines[j]->set_object ("figures",
-                                      Grob_array::unsmob (ga)->smobbed_copy ());
+                                      unsmob<Grob_array> (ga)->smobbed_copy ());
 }
 
 void
@@ -407,7 +407,7 @@ void
 Figured_bass_engraver::create_grobs ()
 {
   Grob *muscol
-    = Item::unsmob (get_property ("currentMusicalColumn"));
+    = unsmob<Item> (get_property ("currentMusicalColumn"));
   if (!alignment_)
     {
       alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL);
index 73a393584eee1461d1a1389ea47b3ca97856938d..c9db28baf93e8bb26ff6810cc28d43770247292e 100644 (file)
@@ -49,7 +49,7 @@ MAKE_SCHEME_CALLBACK (Fingering_column, calc_positioning_done, 1);
 SCM
 Fingering_column::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (!me->is_live ())
     return SCM_BOOL_T;
 
index 58dfa4106a6b6c9081951fe67d36ff7fda320476..d5b4102d8bf844bd3ef8cbb28aa71a357bb673aa 100644 (file)
@@ -101,7 +101,7 @@ Fingering_engraver::make_script (Direction d, Stream_event *r, int i)
     junkme.
   */
   SCM pitch = r->get_property ("pitch");
-  if (Pitch::is_smob (pitch))
+  if (unsmob<Pitch> (pitch))
     fingering->set_property ("pitch", pitch);
 
   /*
index 7ce1fc1021d587fed79937872d491ec19e8ddc68..1e1ba55ffee9be9dbdfaa0f5710312dc61bc2103 100644 (file)
@@ -47,8 +47,8 @@ MAKE_SCHEME_CALLBACK (Flag, width, 1);
 SCM
 Flag::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Stencil *sten = Stencil::unsmob (me->get_property ("stencil"));
+  Grob *me = unsmob<Grob> (smob);
+  Stencil *sten = unsmob<Stencil> (me->get_property ("stencil"));
   if (!sten)
     return ly_interval2scm (Interval (0.0, 0.0));
 
@@ -67,7 +67,7 @@ MAKE_SCHEME_CALLBACK (Flag, glyph_name, 1);
 SCM
 Flag::glyph_name (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *stem = me->get_parent (X_AXIS);
 
   Direction d = get_grob_direction (stem);
@@ -113,7 +113,7 @@ MAKE_SCHEME_CALLBACK (Flag, print, 1);
 SCM
 Flag::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *stem = me->get_parent (X_AXIS);
 
   Direction d = get_grob_direction (stem);
@@ -179,7 +179,7 @@ Flag::calc_y_offset (SCM smob)
 SCM
 Flag::internal_calc_y_offset (SCM smob, bool pure)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *stem = me->get_parent (X_AXIS);
   Direction d = get_grob_direction (stem);
 
@@ -199,7 +199,7 @@ MAKE_SCHEME_CALLBACK (Flag, calc_x_offset, 1);
 SCM
 Flag::calc_x_offset (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *stem = me->get_parent (X_AXIS);
   return scm_from_double (stem->extent (stem, X_AXIS)[RIGHT]);
 }
index 8f1e2c3b5271b8cc48156041dd793c709bf5942b..de787fd852bf2e4ff04a1fdb96d80d54e412dc89 100644 (file)
@@ -28,7 +28,7 @@
 Font_metric *
 Font_interface::get_default_font (Grob *me)
 {
-  Font_metric *fm = Font_metric::unsmob (me->get_property ("font"));
+  Font_metric *fm = unsmob<Font_metric> (me->get_property ("font"));
   if (!fm)
     {
       SCM chain = music_font_alist_chain (me);
index b2b9db1123e03827d70bad63f47463b7938c35b7..0dc41d687668405fb5bb5b02bc98cd076dc83053 100644 (file)
@@ -36,7 +36,7 @@ LY_DEFINE (ly_font_get_glyph, "ly:font-get-glyph",
            " to the font encodings @code{fetaMusic} and @code{fetaBraces},"
            " respectively.")
 {
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   LY_ASSERT_SMOB (Font_metric, font, 1);
   LY_ASSERT_TYPE (scm_is_string, name, 2);
 
@@ -57,7 +57,7 @@ LY_DEFINE (ly_font_glyph_name_to_index, "ly:font-glyph-name-to-index",
            " to the font encodings @code{fetaMusic} and @code{fetaBraces},"
            " respectively.")
 {
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   LY_ASSERT_SMOB (Font_metric, font, 1);
   LY_ASSERT_TYPE (scm_is_string, name, 2);
 
@@ -75,7 +75,7 @@ LY_DEFINE (ly_font_index_to_charcode, "ly:font-index-to-charcode",
            " to the font encodings @code{fetaMusic} and @code{fetaBraces},"
            " respectively.")
 {
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   LY_ASSERT_SMOB (Font_metric, font, 1);
   LY_ASSERT_TYPE (scm_is_integer, index, 2);
 
@@ -93,7 +93,7 @@ LY_DEFINE (ly_font_glyph_name_to_charcode, "ly:font-glyph-name-to-charcode",
            " to the font encodings @code{fetaMusic} and @code{fetaBraces},"
            " respectively.")
 {
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   LY_ASSERT_SMOB (Font_metric, font, 1);
   LY_ASSERT_TYPE (scm_is_string, name, 2);
 
@@ -111,7 +111,7 @@ LY_DEFINE (ly_font_file_name, "ly:font-file-name",
 {
   LY_ASSERT_SMOB (Font_metric, font, 1);
 
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   SCM name = fm->font_file_name ();
 
   return name;
@@ -124,7 +124,7 @@ LY_DEFINE (ly_font_name, "ly:font-name",
            " return the corresponding name.")
 {
   LY_ASSERT_SMOB (Font_metric, font, 1);
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
 
   return ly_string2scm (fm->font_name ());
 }
@@ -136,7 +136,7 @@ LY_DEFINE (ly_font_magnification, "ly:font-magnification", 1, 0, 0,
 {
   LY_ASSERT_SMOB (Font_metric, font, 1);
 
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   return scm_cdr (fm->description_);
 }
 
@@ -147,7 +147,7 @@ LY_DEFINE (ly_font_design_size, "ly:font-design-size", 1, 0, 0,
 {
   LY_ASSERT_SMOB (Font_metric, font, 1);
 
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   return scm_from_double (fm->design_size ());
 }
 
index 9950d1a7474f3d2ad09b995776cf39820ab510df..b38ff9268a29ba41e0d284386819c260db6e1971 100644 (file)
@@ -42,7 +42,7 @@ get_font_by_design_size (Output_def *layout, Real requested,
 
       if (to_boolean (scm_promise_p (entry)))
         {
-          Font_metric *fm = Font_metric::unsmob (scm_force (entry));
+          Font_metric *fm = unsmob<Font_metric> (scm_force (entry));
           size = fm->design_size ();
         }
 #if HAVE_PANGO_FT2
@@ -86,7 +86,7 @@ get_font_by_design_size (Output_def *layout, Real requested,
 #endif
     }
   else
-    fm = Font_metric::unsmob (scm_force (scm_c_vector_ref (font_vector, i)));
+    fm = unsmob<Font_metric> (scm_force (scm_c_vector_ref (font_vector, i)));
 
   return find_scaled_font (layout, fm, requested / size);
 }
index 3b04ceae18c098b0a57befe82f8e548ae559a6aa..636379125f73b36caf936bbddba4fc632244f0e8 100644 (file)
@@ -63,7 +63,7 @@ Footnote_engraver::footnotify (Grob *g, SCM cause)
       Spanner *b = make_spanner ("FootnoteSpanner", cause);
       b->set_parent (s, Y_AXIS);
       b->set_parent (s, X_AXIS);
-      Grob *bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
       b->set_bound (LEFT, bound);
       annotated_spanners_.push_back (Drul_array<Spanner *> (s, b));
     }
@@ -78,7 +78,7 @@ Footnote_engraver::footnotify (Grob *g, SCM cause)
 void
 Footnote_engraver::acknowledge_grob (Grob_info info)
 {
-  Music *mus = Music::unsmob (info.grob ()->get_property ("footnote-music"));
+  Music *mus = unsmob<Music> (info.grob ()->get_property ("footnote-music"));
 
   if (mus)
     {
@@ -107,7 +107,7 @@ Footnote_engraver::acknowledge_end_grob (Grob_info info)
       {
         if (annotated_spanners_[i][LEFT] == s)
           {
-            Grob *bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+            Grob *bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
             annotated_spanners_[i][RIGHT]->set_bound (RIGHT, bound);
             break;
           }
index a0e45c84241b5495cacf5cbe10f8ed16a496cca5..db0e254739c3cc5d7cee1a1eecaa1ada39adcb68 100644 (file)
@@ -46,12 +46,12 @@ Forbid_line_break_engraver::start_translation_timestep ()
   SCM busy = get_property ("busyGrobs");
 
   Moment now = now_mom ();
-  while (scm_is_pair (busy) && Moment::unsmob (scm_caar (busy))->main_part_ == now.main_part_)
+  while (scm_is_pair (busy) && unsmob<Moment> (scm_caar (busy))->main_part_ == now.main_part_)
     busy = scm_cdr (busy);
 
   while (scm_is_pair (busy))
     {
-      Grob *g = Grob::unsmob (scm_cdar (busy));
+      Grob *g = unsmob<Grob> (scm_cdar (busy));
       if (g->internal_has_interface (ly_symbol2scm ("rhythmic-grob-interface")))
         context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
       busy = scm_cdr (busy);
index 7a9d33bd6241712901afb2b0a70fe1cd91490fb4..8535f7f2a672fc0c80c411bdc7589b4a55e8220c 100644 (file)
@@ -105,9 +105,9 @@ init_func_doc ()
   ly_add_type_predicate ((void *) &is_direction, "direction");
   ly_add_type_predicate ((void *) &ly_is_port, "port");
   ly_add_type_predicate ((void *) &ly_cheap_is_list, "list");
-  ly_add_type_predicate ((void *) &Global_context::is_smob, "Global_context");
-  ly_add_type_predicate ((void *) &Paper_score::is_smob, "Paper_score");
-  ly_add_type_predicate ((void *) &Performance::is_smob, "Performance");
+  ly_add_type_predicate ((void *) &unsmob<Global_context>, "Global_context");
+  ly_add_type_predicate ((void *) &unsmob<Paper_score>, "Paper_score");
+  ly_add_type_predicate ((void *) &unsmob<Performance>, "Performance");
   ly_add_type_predicate ((void *) &is_axis, "axis");
   ly_add_type_predicate ((void *) &is_number_pair, "number pair");
   ly_add_type_predicate ((void *) &ly_is_list, "list");
@@ -120,10 +120,10 @@ init_func_doc ()
   ly_add_type_predicate ((void *) &scm_is_rational, "rational");
   ly_add_type_predicate ((void *) &scm_is_string, "string");
   ly_add_type_predicate ((void *) &scm_is_vector, "vector");
-  ly_add_type_predicate ((void *) &Item::is_smob, "Item");
-  ly_add_type_predicate ((void *) &Music::is_smob, "Music");
-  ly_add_type_predicate ((void *) &Spanner::is_smob, "Spanner");
-  ly_add_type_predicate ((void *) &Stream_event::is_smob, "Stream_event");
+  ly_add_type_predicate ((void *) &unsmob<Item>, "Item");
+  ly_add_type_predicate ((void *) &unsmob<Music>, "Music");
+  ly_add_type_predicate ((void *) &unsmob<Spanner>, "Spanner");
+  ly_add_type_predicate ((void *) &unsmob<Stream_event>, "Stream_event");
 }
 
 ADD_SCM_INIT_FUNC (func_doc, init_func_doc);
index e39b36699a80a7699cf955f7f03877224564d87a..ea100c912aa703998cce74ebd0bfbe1ca6ace223 100644 (file)
@@ -34,14 +34,14 @@ LY_DEFINE (ly_format_output, "ly:format-output",
            " process it and return the @code{Music_output} object"
            " in its final state.")
 {
-  Global_context *g = Global_context::unsmob (context);
+  Global_context *g = unsmob<Global_context> (context);
 
   LY_ASSERT_SMOB (Global_context, context, 1);
 
   SCM output = g->get_output ();
   progress_indication ("\n");
 
-  if (Music_output *od = Music_output::unsmob (output))
+  if (Music_output *od = unsmob<Music_output> (output))
     od->process ();
 
   return output;
@@ -52,7 +52,7 @@ LY_DEFINE (ly_make_global_translator, "ly:make-global-translator",
            "Create a translator group and connect it to the global context"
            " @var{global}.  The translator group is returned.")
 {
-  Global_context *g = Global_context::unsmob (global);
+  Global_context *g = unsmob<Global_context> (global);
   LY_ASSERT_SMOB (Global_context, global, 1);
 
   Translator_group *tg = new Translator_group ();
@@ -68,7 +68,7 @@ LY_DEFINE (ly_make_global_context, "ly:make-global-context",
            " block @var{output-def}.  The context is returned.")
 {
   LY_ASSERT_SMOB (Output_def, output_def, 1);
-  Output_def *odef = Output_def::unsmob (output_def);
+  Output_def *odef = unsmob<Output_def> (output_def);
 
   Global_context *glob = new Global_context (odef);
 
@@ -89,21 +89,21 @@ LY_DEFINE (ly_interpret_music_expression, "ly:interpret-music-expression",
   LY_ASSERT_SMOB (Music, mus, 1);
   LY_ASSERT_SMOB (Global_context, ctx, 2);
 
-  Music *music = Music::unsmob (mus);
+  Music *music = unsmob<Music> (mus);
   if (!music)
     {
       warning (_ ("no music found in score"));
       return SCM_BOOL_F;
     }
 
-  Global_context *g = Global_context::unsmob (ctx);
+  Global_context *g = unsmob<Global_context> (ctx);
 
   Cpu_timer timer;
 
   message (_ ("Interpreting music..."));
 
   SCM protected_iter = Music_iterator::get_static_get_iterator (music);
-  Music_iterator *iter = Music_iterator::unsmob (protected_iter);
+  Music_iterator *iter = unsmob<Music_iterator> (protected_iter);
 
   iter->init_context (music, g);
   iter->construct_children ();
index b9afbd7671d51ee680030f14dcf40cb8bdd6586c..c21deb3b9ba54651c20cf21237d5ba538a249dc2 100644 (file)
@@ -46,7 +46,7 @@ Global_context::Global_context (Output_def *o)
                                  ly_symbol2scm ("Prepare"));
   events_below ()->register_as_listener (event_source_);
 
-  Context_def *globaldef = Context_def::unsmob (definition_);
+  Context_def *globaldef = unsmob<Context_def> (definition_);
   if (!globaldef)
     programming_error ("no `Global' context found");
   else
@@ -91,8 +91,8 @@ Global_context::get_moments_left () const
 void
 Global_context::prepare (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
-  Moment *mom = Moment::unsmob (ev->get_property ("moment"));
+  Stream_event *ev = unsmob<Stream_event> (sev);
+  Moment *mom = unsmob<Moment> (ev->get_property ("moment"));
 
   assert (mom);
 
@@ -113,7 +113,7 @@ Context *
 Global_context::get_score_context () const
 {
   return (scm_is_pair (context_list_))
-         ? Context::unsmob (scm_car (context_list_))
+         ? unsmob<Context> (scm_car (context_list_))
          : 0;
 }
 
index 42b6742dbc7274d0c33c6581fdab38ebfc856561..b4fdbec695784a4de5cdfdbbd217fecb1e2c996d 100644 (file)
@@ -100,7 +100,7 @@ Grace_engraver::consider_change_grace_settings ()
           SCM grob = scm_cadr (elt);
           SCM cell = scm_cddr (elt);
 
-          Grob_property_info (Context::unsmob (context), grob).matched_pop (cell);
+          Grob_property_info (unsmob<Context> (context), grob).matched_pop (cell);
         }
       grace_settings_ = SCM_EOL;
     }
index cf71a7950535eb736855e0241dfb48ad5d1163b2..8337a0b7f5e2b1bb72ee0b5d126900abec60f45c 100644 (file)
@@ -30,7 +30,7 @@ MAKE_SCHEME_CALLBACK (Grace_music, start_callback, 1);
 SCM
 Grace_music::start_callback (SCM m)
 {
-  Moment *l = Moment::unsmob (Music_wrapper::length_callback (m));
+  Moment *l = unsmob<Moment> (Music_wrapper::length_callback (m));
   Moment gl;
   gl.grace_part_ = -(l->main_part_ + l->grace_part_);
   return gl.smobbed_copy ();
index 641c99c7d9a8caecb6cd583d9df2fd7f899e5230..5da9c90b5cc40b16f177261373e99c2096fdb0b3 100644 (file)
@@ -54,7 +54,7 @@ Grace_spacing_engraver::process_music ()
 
   if (grace_spacing_ && (now.grace_part_ || last_moment_.grace_part_))
     {
-      Grob *column = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *column = unsmob<Grob> (get_property ("currentMusicalColumn"));
       Pointer_group_interface::add_grob (grace_spacing_,
                                          ly_symbol2scm ("columns"),
                                          column);
index 485b97a184460c2b0b6e8651d1a433f65e3ac39c..4e4fc135c406010197d1ead57183781728827e08 100644 (file)
@@ -215,7 +215,7 @@ provide_context_info (vector<Grob_info> const &primitives)
       Grob *primitive = primitives[i].grob ();
       Stream_event *event_cause = primitives[i].event_cause ();
       int context_info = 0;
-      int pitch = Pitch::unsmob (event_cause->get_property ("pitch"))->steps ();
+      int pitch = unsmob<Pitch> (event_cause->get_property ("pitch"))->steps ();
       int prefix_set = scm_to_int (primitive->get_property ("prefix-set"));
 
       if (prefix_set & PES_OR_FLEXA)
index 4c86d2f7ea068ec2a4ae33b8dcc6e466ff8cd3fa..8fb2690caa7cb8202ca02c6641664689b7e12249 100644 (file)
@@ -28,7 +28,7 @@ MAKE_SCHEME_CALLBACK (Grid_line_interface, print, 1);
 SCM
 Grid_line_interface::print (SCM smobbed_me)
 {
-  Grob *me = Grob::unsmob (smobbed_me);
+  Grob *me = unsmob<Grob> (smobbed_me);
 
   extract_grob_set (me, "elements", elts);
   /* compute common refpoint of elements */
@@ -63,7 +63,7 @@ MAKE_SCHEME_CALLBACK (Grid_line_interface, width, 1);
 SCM
 Grid_line_interface::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Real staffline = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
   Real thick = robust_scm2double (me->get_property ("thickness"), 1.0)
index b39ad0b2d68a1e5266878710314a4e55f40ecf12..f4361957874aadb5cd71e7f0d3b69776a11662a6 100644 (file)
@@ -35,7 +35,7 @@ void
 Grid_point_engraver::process_music ()
 {
   SCM grid_interval = get_property ("gridInterval");
-  if (Moment *mom = Moment::unsmob (grid_interval))
+  if (Moment *mom = unsmob<Moment> (grid_interval))
     {
       Moment now = now_mom ();
 
index b62c629224b5402c06586fe60d6a84a84c90977d..877876328465821f67f1d6071762fe0a86eb204f 100644 (file)
@@ -28,7 +28,7 @@ LY_DEFINE (ly_grob_array_length, "ly:grob-array-length",
 {
   LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
 
-  Grob_array *me = Grob_array::unsmob (grob_arr);
+  Grob_array *me = unsmob<Grob_array> (grob_arr);
   return scm_from_int (me->size ());
 }
 
@@ -37,7 +37,7 @@ LY_DEFINE (ly_grob_array_ref, "ly:grob-array-ref",
            (SCM grob_arr, SCM index),
            "Retrieve the @var{index}th element of @var{grob-arr}.")
 {
-  Grob_array *me = Grob_array::unsmob (grob_arr);
+  Grob_array *me = unsmob<Grob_array> (grob_arr);
   LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
   LY_ASSERT_TYPE (scm_is_integer, index, 2);
 
@@ -53,7 +53,7 @@ LY_DEFINE (ly_grob_array_2_list, "ly:grob-array->list",
            (SCM grob_arr),
            "Return the elements of @var{grob-arr} as a Scheme list.")
 {
-  Grob_array *me = Grob_array::unsmob (grob_arr);
+  Grob_array *me = unsmob<Grob_array> (grob_arr);
   LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
 
   return grob_array_to_list (me);
index 2747e0d77fb052e66339263500d21cd9996a90a4..27f05076f2c47d25ce0ba0a1a51422ad57a9dfa3 100644 (file)
@@ -114,9 +114,9 @@ SCM
 grob_list_to_grob_array (SCM lst)
 {
   SCM arr_scm = Grob_array::make_array ();
-  Grob_array *ga = Grob_array::unsmob (arr_scm);
+  Grob_array *ga = unsmob<Grob_array> (arr_scm);
   for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
-    ga->add (Grob::unsmob (scm_car (s)));
+    ga->add (unsmob<Grob> (scm_car (s)));
   return arr_scm;
 }
 
index ee4d1b04076c6e8d434d9333102e1af1b1e59d5f..c9080f4fb7a6241865fb356c16e14370f9c88e6e 100644 (file)
@@ -33,15 +33,15 @@ add_offset_callback (Grob *g, SCM proc, Axis a)
   SCM data = g->get_property_data (axis_offset_symbol (a));
   if (!scm_is_number (data)
       && !ly_is_procedure (data)
-      && !Simple_closure::is_smob (data))
+      && !unsmob<Simple_closure> (data))
     {
       g->set_property (axis_offset_symbol (a), proc);
       return;
     }
 
-  if (ly_is_procedure (data) || Unpure_pure_container::is_smob (data))
+  if (ly_is_procedure (data) || unsmob<Unpure_pure_container> (data))
     data = Simple_closure::make_smob (scm_list_1 (data));
-  else if (Simple_closure *sc = Simple_closure::unsmob (data))
+  else if (Simple_closure *sc = unsmob<Simple_closure> (data))
     data = sc->expression ();
 
   SCM plus = ly_lily_module_constant ("+");
@@ -67,9 +67,9 @@ chain_callback (Grob *g, SCM proc, SCM sym)
 {
   SCM data = g->get_property_data (sym);
 
-  if (ly_is_procedure (data) || Unpure_pure_container::is_smob (data))
+  if (ly_is_procedure (data) || unsmob<Unpure_pure_container> (data))
     data = Simple_closure::make_smob (scm_list_1 (data));
-  else if (Simple_closure *sc = Simple_closure::unsmob (data))
+  else if (Simple_closure *sc = unsmob<Simple_closure> (data))
     data = sc->expression ();
   else
     /*
index ee79e4ec661aebbc5414d4794dc5b8c804385336..ef991418a1510ac2cd14f8acb9a8e8aa7a470aa1 100644 (file)
@@ -50,7 +50,7 @@ Stream_event *
 Grob_info::event_cause () const
 {
   SCM cause = grob_->get_property ("cause");
-  return Stream_event::unsmob (cause);
+  return unsmob<Stream_event> (cause);
 }
 
 vector<Context *>
@@ -90,11 +90,11 @@ Stream_event *
 Grob_info::ultimate_event_cause () const
 {
   SCM cause = grob_->self_scm ();
-  while (Grob::is_smob (cause))
+  while (unsmob<Grob> (cause))
     {
-      cause = Grob::unsmob (cause)->get_property ("cause");
+      cause = unsmob<Grob> (cause)->get_property ("cause");
     }
-  return Stream_event::unsmob (cause);
+  return unsmob<Stream_event> (cause);
 }
 
 bool
index 82083f464894c734703f40a3c166d26a60cb91e9..8644f6f08315902e8597b596ad2d409b69a7669f 100644 (file)
@@ -63,8 +63,8 @@ LY_DEFINE (ly_grob_pq_less_p, "ly:grob-pq<?",
            "Compare two grob priority queue entries."
            "  This is an internal function.")
 {
-  if (Moment::compare (*Moment::unsmob (scm_car (a)),
-                       *Moment::unsmob (scm_car (b))) < 0)
+  if (Moment::compare (*unsmob<Moment> (scm_car (a)),
+                       *unsmob<Moment> (scm_car (b))) < 0)
     return SCM_BOOL_T;
   else
     return SCM_BOOL_F;
@@ -121,7 +121,7 @@ Grob_pq_engraver::stop_translation_timestep ()
   Moment now = now_mom ();
   SCM start_busy = get_property ("busyGrobs");
   SCM busy = start_busy;
-  while (scm_is_pair (busy) && *Moment::unsmob (scm_caar (busy)) == now)
+  while (scm_is_pair (busy) && *unsmob<Moment> (scm_caar (busy)) == now)
     busy = scm_cdr (busy);
 
 }
@@ -133,7 +133,7 @@ Grob_pq_engraver::start_translation_timestep ()
 
   SCM start_busy = get_property ("busyGrobs");
   SCM busy = start_busy;
-  while (scm_is_pair (busy) && *Moment::unsmob (scm_caar (busy)) < now)
+  while (scm_is_pair (busy) && *unsmob<Moment> (scm_caar (busy)) < now)
     {
       /*
         The grob-pq-engraver is not water tight, and stuff like
index 2812643c3ee7a3f2e5fcb772717ee7fd5abf0357..9ec39db159640e7c822c6473bb3eccf425b0114d 100644 (file)
@@ -26,7 +26,7 @@ Protected_scm grob_property_callback_stack (SCM_EOL);
 
 extern bool debug_property_callbacks;
 
-#ifndef NDEBUG
+#ifdef DEBUG
 static void
 print_property_callback_stack ()
 {
@@ -77,7 +77,7 @@ Grob::instrumented_set_property (SCM sym, SCM v,
                                  int line,
                                  char const *fun)
 {
-#ifndef NDEBUG
+#ifdef DEBUG
   if (ly_is_procedure (modification_callback))
     scm_apply_0 (modification_callback,
                  scm_list_n (self_scm (),
@@ -123,8 +123,8 @@ Grob::internal_set_value_on_alist (SCM *alist, SCM sym, SCM v)
   if (do_internal_type_checking_global)
     {
       if (!ly_is_procedure (v)
-          && !Simple_closure::is_smob (v)
-          && !Unpure_pure_container::is_smob (v)
+          && !unsmob<Simple_closure> (v)
+          && !unsmob<Unpure_pure_container> (v)
           && !scm_is_eq (v, ly_symbol2scm ("calculation-in-progress")))
         type_check_assignment (sym, v, ly_symbol2scm ("backend-type?"));
 
@@ -137,7 +137,7 @@ Grob::internal_set_value_on_alist (SCM *alist, SCM sym, SCM v)
 SCM
 Grob::internal_get_property_data (SCM sym) const
 {
-#ifndef NDEBUG
+#ifdef DEBUG
   if (profile_property_accesses)
     note_property_access (&grob_property_lookup_table, sym);
 #endif
@@ -151,8 +151,8 @@ Grob::internal_get_property_data (SCM sym) const
   if (do_internal_type_checking_global && scm_is_pair (handle))
     {
       SCM val = scm_cdr (handle);
-      if (!ly_is_procedure (val) && !Simple_closure::is_smob (val)
-          && !Unpure_pure_container::is_smob (val))
+      if (!ly_is_procedure (val) && !unsmob<Simple_closure> (val)
+          && !unsmob<Unpure_pure_container> (val))
         type_check_assignment (sym, val, ly_symbol2scm ("backend-type?"));
 
       check_interfaces_for_property (this, sym);
@@ -166,7 +166,7 @@ Grob::internal_get_property (SCM sym) const
 {
   SCM val = get_property_data (sym);
 
-#ifndef NDEBUG
+#ifdef DEBUG
   if (scm_is_eq (val, ly_symbol2scm ("calculation-in-progress")))
     {
       programming_error (to_string ("cyclic dependency: calculation-in-progress encountered for #'%s (%s)",
@@ -180,11 +180,11 @@ Grob::internal_get_property (SCM sym) const
     }
 #endif
 
-  if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (val))
+  if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (val))
     val = upc->unpure_part ();
 
   if (ly_is_procedure (val)
-      || Simple_closure::is_smob (val))
+      || unsmob<Simple_closure> (val))
     {
       Grob *me = ((Grob *)this);
       val = me->try_callback_on_alist (&me->mutable_property_alist_, sym, val);
@@ -201,7 +201,7 @@ Grob::internal_get_pure_property (SCM sym, int start, int end) const
   if (ly_is_procedure (val))
     return call_pure_function (val, scm_list_1 (self_scm ()), start, end);
 
-  if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (val)) {
+  if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (val)) {
     // Do cache, if the function ignores 'start' and 'end'
     if (upc->is_unchanging ())
       return internal_get_property (sym);
@@ -209,7 +209,7 @@ Grob::internal_get_pure_property (SCM sym, int start, int end) const
       return call_pure_function (val, scm_list_1 (self_scm ()), start, end);
   }
 
-  if (Simple_closure *sc = Simple_closure::unsmob (val))
+  if (Simple_closure *sc = unsmob<Simple_closure> (val))
     return evaluate_with_simple_closure (self_scm (),
                                          sc->expression (),
                                          true, start, end);
@@ -232,7 +232,7 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
   */
   *alist = scm_assq_set_x (*alist, sym, marker);
 
-#ifndef NDEBUG
+#ifdef DEBUG
   if (debug_property_callbacks)
     grob_property_callback_stack = scm_cons (scm_list_3 (self_scm (), sym, proc), grob_property_callback_stack);
 #endif
@@ -240,14 +240,14 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
   SCM value = SCM_EOL;
   if (ly_is_procedure (proc))
     value = scm_call_1 (proc, self_scm ());
-  else if (Simple_closure *sc = Simple_closure::unsmob (proc))
+  else if (Simple_closure *sc = unsmob<Simple_closure> (proc))
     {
       value = evaluate_with_simple_closure (self_scm (),
                                             sc->expression (),
                                             false, 0, 0);
     }
 
-#ifndef NDEBUG
+#ifdef DEBUG
   if (debug_property_callbacks)
     grob_property_callback_stack = scm_cdr (grob_property_callback_stack);
 #endif
@@ -261,7 +261,7 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
     }
   else
     {
-#ifndef NDEBUG
+#ifdef DEBUG
       if (ly_is_procedure (cache_callback))
         scm_apply_0 (cache_callback,
                      scm_list_n (self_scm (),
@@ -304,8 +304,8 @@ Grob::internal_get_object (SCM sym) const
     {
       SCM val = scm_cdr (s);
       if (ly_is_procedure (val)
-          || Simple_closure::is_smob (val)
-          || Unpure_pure_container::is_smob (val))
+          || unsmob<Simple_closure> (val)
+          || unsmob<Unpure_pure_container> (val))
         {
           Grob *me = ((Grob *)this);
           val = me->try_callback_on_alist (&me->object_alist_, sym, val);
@@ -332,11 +332,11 @@ Grob::internal_has_interface (SCM k)
 SCM
 call_pure_function (SCM unpure, SCM args, int start, int end)
 {
-  if (Unpure_pure_container *upc = Unpure_pure_container::unsmob (unpure))
+  if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (unpure))
     {
       SCM pure = upc->pure_part ();
 
-      if (Simple_closure *sc = Simple_closure::unsmob (pure))
+      if (Simple_closure *sc = unsmob<Simple_closure> (pure))
         {
           SCM expr = sc->expression ();
           return evaluate_with_simple_closure (scm_car (args), expr, true, start, end);
@@ -352,7 +352,7 @@ call_pure_function (SCM unpure, SCM args, int start, int end)
       return pure;
     }
 
-  if (Simple_closure *sc = Simple_closure::unsmob (unpure))
+  if (Simple_closure *sc = unsmob<Simple_closure> (unpure))
     {
       SCM expr = sc->expression ();
       return evaluate_with_simple_closure (scm_car (args), expr, true, start, end);
index 2a42439fb58a90b5a78c191a393994c5b8d88497..b6d07cb8c4dcbc8d939984d82cc550d30e330a2a 100644 (file)
@@ -33,7 +33,7 @@ LY_DEFINE (ly_grob_property_data, "ly:grob-property-data",
            "Return the value for property @var{sym} of @var{grob},"
            " but do not process callbacks.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
@@ -45,13 +45,13 @@ LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!",
            3, 0, 0, (SCM grob, SCM sym, SCM val),
            "Set @var{sym} in grob @var{grob} to value @var{val}.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
 
   if (!ly_is_procedure (val)
-      && !Simple_closure::is_smob (val)
+      && !unsmob<Simple_closure> (val)
       && !type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
     error ("typecheck failed");
 
@@ -63,7 +63,7 @@ LY_DEFINE (ly_grob_set_nested_property_x, "ly:grob-set-nested-property!",
            3, 0, 0, (SCM grob, SCM symlist, SCM val),
            "Set nested property @var{symlist} in grob @var{grob} to value @var{val}.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -88,7 +88,7 @@ LY_DEFINE (ly_grob_pure_property, "ly:grob-pure-property",
            "  If no value is found, return @var{val} or @code{'()}"
            " if @var{val} is not specified.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
@@ -110,8 +110,8 @@ LY_DEFINE (ly_grob_pure_height, "ly:grob-pure-height",
            "  If no value is found, return @var{val} or @code{'()}"
            " if @var{val} is not specified.")
 {
-  Grob *sc = Grob::unsmob (grob);
-  Grob *ref = Grob::unsmob (refp);
+  Grob *sc = unsmob<Grob> (grob);
+  Grob *ref = unsmob<Grob> (refp);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, refp, 2);
@@ -131,7 +131,7 @@ LY_DEFINE (ly_grob_property, "ly:grob-property",
            "  If no value is found, return @var{val} or @code{'()}"
            " if @var{val} is not specified.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
@@ -149,7 +149,7 @@ LY_DEFINE (ly_grob_interfaces, "ly:grob-interfaces",
            1, 0, 0, (SCM grob),
            "Return the interfaces list of grob @var{grob}.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -162,7 +162,7 @@ LY_DEFINE (ly_grob_object, "ly:grob-object",
            " @var{sym}.  It returns @code{'()} (end-of-list) if @var{sym}"
            " is undefined in @var{grob}.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
@@ -174,7 +174,7 @@ LY_DEFINE (ly_grob_set_object_x, "ly:grob-set-object!",
            3, 0, 0, (SCM grob, SCM sym, SCM val),
            "Set @var{sym} in grob @var{grob} to value @var{val}.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
@@ -189,7 +189,7 @@ LY_DEFINE (ly_grob_layout, "ly:grob-layout",
            1, 0, 0, (SCM grob),
            "Get @code{\\layout} definition from grob @var{grob}.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -202,7 +202,7 @@ LY_DEFINE (ly_grob_alist_chain, "ly:grob-alist-chain",
            " the global default.  If unspecified, @code{font-defaults}"
            " from the layout block is taken.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -221,8 +221,8 @@ LY_DEFINE (ly_grob_extent, "ly:grob-extent",
            "Get the extent in @var{axis} direction of @var{grob} relative to"
            " the grob @var{refp}.")
 {
-  Grob *sc = Grob::unsmob (grob);
-  Grob *ref = Grob::unsmob (refp);
+  Grob *sc = unsmob<Grob> (grob);
+  Grob *ref = unsmob<Grob> (refp);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, refp, 2);
@@ -243,8 +243,8 @@ LY_DEFINE (ly_grob_robust_relative_extent, "ly:grob-robust-relative-extent",
            "Get the extent in @var{axis} direction of @var{grob} relative to"
            " the grob @var{refp}, or @code{(0,0)} if empty.")
 {
-  Grob *sc = Grob::unsmob (grob);
-  Grob *ref = Grob::unsmob (refp);
+  Grob *sc = unsmob<Grob> (grob);
+  Grob *ref = unsmob<Grob> (refp);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, refp, 2);
@@ -266,8 +266,8 @@ LY_DEFINE (ly_grob_relative_coordinate, "ly:grob-relative-coordinate",
            "Get the coordinate in @var{axis} direction of @var{grob} relative"
            " to the grob @var{refp}.")
 {
-  Grob *sc = Grob::unsmob (grob);
-  Grob *ref = Grob::unsmob (refp);
+  Grob *sc = unsmob<Grob> (grob);
+  Grob *ref = unsmob<Grob> (refp);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, refp, 2);
@@ -289,7 +289,7 @@ LY_DEFINE (ly_grob_parent, "ly:grob-parent",
            "Get the parent of @var{grob}.  @var{axis} is 0 for the X-axis,"
            " 1@tie{}for the Y-axis.")
 {
-  Grob *sc = Grob::unsmob (grob);
+  Grob *sc = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (is_axis, axis, 2);
@@ -302,8 +302,8 @@ LY_DEFINE (ly_grob_set_parent_x, "ly:grob-set-parent!",
            3, 0, 0, (SCM grob, SCM axis, SCM parent_grob),
            "Set @var{parent-grob} the parent of grob @var{grob} in axis @var{axis}.")
 {
-  Grob *gr = Grob::unsmob (grob);
-  Grob *parent = Grob::unsmob (parent_grob);
+  Grob *gr = unsmob<Grob> (grob);
+  Grob *parent = unsmob<Grob> (parent_grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (is_axis, axis, 2);
@@ -318,7 +318,7 @@ LY_DEFINE (ly_grob_properties, "ly:grob-properties",
            1, 0, 0, (SCM grob),
            "Get the mutable properties of @var{grob}.")
 {
-  Grob *g = Grob::unsmob (grob);
+  Grob *g = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -330,7 +330,7 @@ LY_DEFINE (ly_grob_basic_properties, "ly:grob-basic-properties",
            1, 0, 0, (SCM grob),
            "Get the immutable properties of @var{grob}.")
 {
-  Grob *g = Grob::unsmob (grob);
+  Grob *g = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -342,7 +342,7 @@ LY_DEFINE (ly_grob_system, "ly:grob-system",
            1, 0, 0, (SCM grob),
            "Return the system grob of @var{grob}.")
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -356,7 +356,7 @@ LY_DEFINE (ly_grob_original, "ly:grob-original",
            1, 0, 0, (SCM grob),
            "Return the unbroken original grob of @var{grob}.")
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   return me->original () ? me->original ()->self_scm () : me->self_scm ();
@@ -366,7 +366,7 @@ LY_DEFINE (ly_grob_suicide_x, "ly:grob-suicide!",
            1, 0, 0, (SCM grob),
            "Kill @var{grob}.")
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -379,7 +379,7 @@ LY_DEFINE (ly_grob_translate_axis_x, "ly:grob-translate-axis!",
            "Translate @var{grob} on axis@tie{}@var{a} over"
            " distance@tie{}@var{d}.")
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_TYPE (scm_is_number, d, 2);
@@ -393,7 +393,7 @@ LY_DEFINE (ly_grob_default_font, "ly:grob-default-font",
            1, 0, 0, (SCM grob),
            "Return the default font for grob @var{grob}.")
 {
-  Grob *gr = Grob::unsmob (grob);
+  Grob *gr = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
@@ -411,12 +411,12 @@ LY_DEFINE (ly_grob_common_refpoint, "ly:grob-common-refpoint",
            " for @var{axis}.")
 {
 
-  Grob *gr = Grob::unsmob (grob);
+  Grob *gr = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob, other, 2);
 
-  Grob *o = Grob::unsmob (other);
+  Grob *o = unsmob<Grob> (other);
 
   LY_ASSERT_TYPE (is_axis, axis, 3);
 
@@ -429,12 +429,12 @@ LY_DEFINE (ly_grob_common_refpoint_of_array, "ly:grob-common-refpoint-of-array",
            "Find the common refpoint of @var{grob} and @var{others}"
            " (a grob-array) for @var{axis}.")
 {
-  Grob *gr = Grob::unsmob (grob);
+  Grob *gr = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
   LY_ASSERT_SMOB (Grob_array, others, 2);
 
-  Grob_array *ga = Grob_array::unsmob (others);
+  Grob_array *ga = unsmob<Grob_array> (others);
   LY_ASSERT_TYPE (is_axis, axis, 3);
 
   Grob *refp = common_refpoint_of_array (ga->array (), gr, Axis (scm_to_int (axis)));
@@ -448,10 +448,10 @@ LY_DEFINE (ly_grob_chain_callback, "ly:grob-chain-callback",
            " to the head of this, meaning that it is called"
            " using @var{grob} and the previous callback's result.")
 {
-  Grob *gr = Grob::unsmob (grob);
+  Grob *gr = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
-  SCM_ASSERT_TYPE (ly_is_procedure (proc) || Unpure_pure_container::is_smob (proc), proc, SCM_ARG2, __FUNCTION__, "procedure or unpure pure container");
+  SCM_ASSERT_TYPE (ly_is_procedure (proc) || unsmob<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);
@@ -465,8 +465,8 @@ LY_DEFINE (ly_grob_vertical_less_p, "ly:grob-vertical<?",
   LY_ASSERT_SMOB (Grob, a, 1);
   LY_ASSERT_SMOB (Grob, b, 2);
 
-  Grob *ga = Grob::unsmob (a);
-  Grob *gb = Grob::unsmob (b);
+  Grob *ga = unsmob<Grob> (a);
+  Grob *gb = unsmob<Grob> (b);
 
   return ly_bool2scm (Grob::vertical_less (ga, gb));
 }
@@ -476,7 +476,7 @@ LY_DEFINE (ly_grob_get_vertical_axis_group_index, "ly:grob-get-vertical-axis-gro
            "Get the index of the vertical axis group the grob @var{grob} belongs to;"
            " return @code{-1} if none is found.")
 {
-  Grob *gr = Grob::unsmob (grob);
+  Grob *gr = unsmob<Grob> (grob);
 
   LY_ASSERT_SMOB (Grob, grob, 1);
 
index 435a6faff3a92447ad67c637678a89129f5a09dd..2377a5d963f92d794916185c6518b395fcf29aca 100644 (file)
@@ -127,7 +127,7 @@ Grob::get_stencil () const
     return 0;
 
   SCM stil = get_property ("stencil");
-  return Stencil::unsmob (stil);
+  return unsmob<Stencil> (stil);
 }
 
 Stencil
@@ -136,7 +136,7 @@ Grob::get_print_stencil () const
   SCM stil = get_property ("stencil");
 
   Stencil retval;
-  if (Stencil *m = Stencil::unsmob (stil))
+  if (Stencil *m = unsmob<Stencil> (stil))
     {
       retval = *m;
       bool transparent = to_boolean (get_property ("transparent"));
@@ -180,7 +180,7 @@ Grob::get_print_stencil () const
           /* Call the scheme procedure stencil-whiteout in scm/stencils.scm */
           /* to add a round-filled-box stencil to the stencil list */
           retval
-            = *Stencil::unsmob (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"),
+            = *unsmob<Stencil> (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"),
                                            retval.smobbed_copy ()));
         }
 
@@ -720,13 +720,13 @@ void
 Grob::programming_error (const string &s) const
 {
   SCM cause = self_scm ();
-  while (Grob *g = Grob::unsmob (cause))
+  while (Grob *g = unsmob<Grob> (cause))
     cause = g->get_property ("cause");
 
   /* ES TODO: cause can't be Music*/
-  if (Music *m = Music::unsmob (cause))
+  if (Music *m = unsmob<Music> (cause))
     m->origin ()->programming_error (s);
-  else if (Stream_event *ev = Stream_event::unsmob (cause))
+  else if (Stream_event *ev = unsmob<Stream_event> (cause))
     ev->origin ()->programming_error (s);
   else
     ::programming_error (s);
@@ -736,13 +736,13 @@ void
 Grob::warning (const string &s) const
 {
   SCM cause = self_scm ();
-  while (Grob *g = Grob::unsmob (cause))
+  while (Grob *g = unsmob<Grob> (cause))
     cause = g->get_property ("cause");
 
   /* ES TODO: cause can't be Music*/
-  if (Music *m = Music::unsmob (cause))
+  if (Music *m = unsmob<Music> (cause))
     m->origin ()->warning (s);
-  else if (Stream_event *ev = Stream_event::unsmob (cause))
+  else if (Stream_event *ev = unsmob<Stream_event> (cause))
     ev->origin ()->warning (s);
   else
     ::warning (s);
@@ -848,7 +848,7 @@ MAKE_SCHEME_CALLBACK (Grob, stencil_height, 1);
 SCM
 Grob::stencil_height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return grob_stencil_extent (me, Y_AXIS);
 }
 
@@ -856,8 +856,8 @@ MAKE_SCHEME_CALLBACK (Grob, pure_stencil_height, 3);
 SCM
 Grob::pure_stencil_height (SCM smob, SCM /* beg */, SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
-  if (Stencil::is_smob (me->get_property_data ("stencil")))
+  Grob *me = unsmob<Grob> (smob);
+  if (unsmob<Stencil> (me->get_property_data ("stencil")))
     return grob_stencil_extent (me, Y_AXIS);
 
   return ly_interval2scm (Interval ());
@@ -868,7 +868,7 @@ MAKE_SCHEME_CALLBACK (Grob, y_parent_positioning, 1);
 SCM
 Grob::y_parent_positioning (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *par = me->get_parent (Y_AXIS);
   if (par)
     (void) par->get_property ("positioning-done");
@@ -880,7 +880,7 @@ MAKE_SCHEME_CALLBACK (Grob, x_parent_positioning, 1);
 SCM
 Grob::x_parent_positioning (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Grob *par = me->get_parent (X_AXIS);
   if (par)
@@ -893,7 +893,7 @@ MAKE_SCHEME_CALLBACK (Grob, stencil_width, 1);
 SCM
 Grob::stencil_width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return grob_stencil_extent (me, X_AXIS);
 }
 
@@ -901,7 +901,7 @@ Grob *
 common_refpoint_of_list (SCM elist, Grob *common, Axis a)
 {
   for (; scm_is_pair (elist); elist = scm_cdr (elist))
-    if (Grob *s = Grob::unsmob (scm_car (elist)))
+    if (Grob *s = unsmob<Grob> (scm_car (elist)))
       {
         if (common)
           common = common->common_refpoint (s, a);
index 2ba6ab0d23bf796c15d3b52a7fdd6643423d761a..a083062e392499c72bf4523a5f7b1e6fa9f6c325 100644 (file)
@@ -38,7 +38,7 @@ MAKE_SCHEME_CALLBACK (Hairpin, pure_height, 3);
 SCM
 Hairpin::pure_height (SCM smob, SCM, SCM)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real height = robust_scm2double (me->get_property ("height"), 0.0)
                 * Staff_symbol_referencer::staff_space (me);
 
@@ -53,7 +53,7 @@ MAKE_SCHEME_CALLBACK (Hairpin, broken_bound_padding, 1);
 SCM
 Hairpin::broken_bound_padding (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Item *r_bound = me->get_bound (RIGHT);
   if (r_bound->break_status_dir () != -1)
     {
@@ -88,7 +88,7 @@ Hairpin::broken_bound_padding (SCM smob)
             if (!scm_is_pair (hsb))
               break;
 
-            span_bars[d] = Grob::unsmob ((d == UP ? scm_car : scm_cdr) (hsb));
+            span_bars[d] = unsmob<Grob> ((d == UP ? scm_car : scm_cdr) (hsb));
             break;
           }
 
@@ -107,7 +107,7 @@ MAKE_SCHEME_CALLBACK (Hairpin, print, 1);
 SCM
 Hairpin::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   SCM s = me->get_property ("grow-direction");
   if (!is_direction (s))
index a682a0aa6da887c63333c630c44cfa72b280232d..06410786a67fc3e770d4efa56c857b787c0ffed7 100644 (file)
@@ -30,7 +30,7 @@ MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, y_extent, 1);
 SCM
 Hara_kiri_group_spanner::y_extent (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   consider_suicide (me);
   return Axis_group_interface::generic_group_extent (me, Y_AXIS);
 }
@@ -39,7 +39,7 @@ MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, calc_skylines, 1);
 SCM
 Hara_kiri_group_spanner::calc_skylines (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   consider_suicide (me);
   return Axis_group_interface::calc_skylines (smob);
 }
@@ -48,7 +48,7 @@ MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, pure_height, 3);
 SCM
 Hara_kiri_group_spanner::pure_height (SCM smob, SCM start_scm, SCM end_scm)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   int start = robust_scm2int (start_scm, 0);
   int end = robust_scm2int (end_scm, INT_MAX);
 
@@ -167,7 +167,7 @@ MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_callback, 1);
 SCM
 Hara_kiri_group_spanner::force_hara_kiri_callback (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   consider_suicide (me);
   return scm_from_double (0.0);
 }
@@ -176,7 +176,7 @@ MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_in_y_parent_callb
 SCM
 Hara_kiri_group_spanner::force_hara_kiri_in_y_parent_callback (SCM smob)
 {
-  Grob *daughter = Grob::unsmob (smob);
+  Grob *daughter = unsmob<Grob> (smob);
   force_hara_kiri_callback (daughter->get_parent (Y_AXIS)->self_scm ());
   return scm_from_double (0.0);
 }
index df8b79173b774cdb3cb793bc43d7bf997afc1341..ddeec44d750e74b12fd0cef139280846dc62293d 100644 (file)
@@ -101,7 +101,7 @@ MAKE_SCHEME_CALLBACK (Horizontal_bracket, print, 1);
 SCM
 Horizontal_bracket::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   extract_grob_set (me, "columns", gs);
 
   vector<Grob *> enclosed = gs;
index 784a337afab3a7b54fef35afd59aaaf62a825136..88820ea363a6765bff0d34906b5313bd7c2bcd8e 100644 (file)
@@ -33,7 +33,7 @@
    Interface to all fonts (both system fonts and fonts loaded
    via Pango).
 */
-class All_font_metrics
+class All_font_metrics : public Smob<All_font_metrics>
 {
   Scheme_hash_table *otf_dict_;
   File_path search_path_;
@@ -48,6 +48,7 @@ class All_font_metrics
 
   All_font_metrics (All_font_metrics const &);
 public:
+  SCM mark_smob ();
 
   Index_to_charcode_map const *get_index_to_charcode_map (const string &filename,
                                                           int face_index,
index a2b31181922cf6ec471508f75cc40b029751a734..70e168d783ad15b1b18c64ccd7e2c7bb31d7d74d 100644 (file)
@@ -65,12 +65,6 @@ public:
      override other ctor
   */
   TRANSLATOR_DECLARATIONS (Engraver);
-  static Engraver *unsmob (SCM eng) {
-    return dynamic_cast<Engraver *> (Translator::unsmob (eng));
-  }
-  static bool is_smob (SCM eng) {
-    return Translator::is_smob (eng) && unsmob (eng);
-  }
 };
 
 #define make_item(x, cause) internal_make_item (ly_symbol2scm (x), cause, x, __FILE__, __LINE__, __FUNCTION__)
index e5dbc82deb06d0744d87e4920acb8a7317cddf23..75b52c95ae01f9fd943e46ed65add4fd4615be99 100644 (file)
@@ -48,13 +48,6 @@ public:
   virtual Moment now_mom () const;
   virtual Context *get_default_interpreter (const string &context_id = "");
 
-  static Global_context *unsmob (SCM x) {
-    return dynamic_cast<Global_context *> (Context::unsmob (x));
-  }
-  static bool is_smob (SCM x) {
-    return Context::is_smob (x) && unsmob (x);
-  }
-
   Moment previous_moment () const;
 protected:
   Moment prev_mom_;
diff --git a/lily/include/group-interface.hh b/lily/include/group-interface.hh
deleted file mode 100644 (file)
index a3abca8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 1999--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  LilyPond is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  LilyPond is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef GROUP_INTERFACE_HH
-#define GROUP_INTERFACE_HH
-
-#include "grob.hh"
-#include "std-string.hh"
-/**
-   Look at Score element ELT as thing which has a list property called
-   NAME_. Normally the list would contain Grobs, but
-   sometimes it can be different things.
-
-   todo: reename as list_interface?
-*/
-
-struct Group_interface
-{
-public:
-  static int count (Grob *, SCM);
-  static void add_thing (Grob *, SCM, SCM);
-};
-
-#endif /* GROUP_INTERFACE_HH */
-
index 914d2ef7b8311b6c622ae0158d680b1846e9e9e5..3b13ed8477b804e6a108f5e93e88a345e8a3a5a5 100644 (file)
@@ -36,13 +36,6 @@ public:
   Item (SCM);
   Item (Item const &);
 
-  static Item *unsmob (SCM g) {
-    return dynamic_cast <Item *> (Grob::unsmob (g));
-  }
-  static bool is_smob (SCM g) {
-    return Grob::is_smob (g) && unsmob (g);
-  }
-
   virtual Grob *clone () const;
 
   static bool is_non_musical (Grob *);
index 10520d6dc9cfbc3dfb0fc3501f10ca687e2a9401..9c6e59332fbf930615e95aee811078ae402e569e 100644 (file)
@@ -215,7 +215,7 @@ void ly_check_name (const string &cxx, const string &fname);
 #define set_object(x, y) internal_set_object (ly_symbol2scm (x), y)
 #define del_property(x) internal_del_property (ly_symbol2scm (x))
 
-#ifndef NDEBUG
+#ifdef DEBUG
 /*
   TODO: include modification callback support here, perhaps
   through intermediate Grob::instrumented_set_property( .. __LINE__ ).
@@ -235,23 +235,28 @@ void ly_check_name (const string &cxx, const string &fname);
       }                                                                 \
   }
 
+template <class T>
+T *unsmob (SCM var);
+
 void ly_wrong_smob_arg (bool pred (SCM), SCM var, int number, const char *fun);
 
+// Do not call this directly.
+// Use LY_ASSERT_SMOB() which supplies the function name automatically.
+template <class T>
+inline T *ly_assert_smob (SCM var, int number, const char *fun)
+{
+  T *smob = unsmob<T> (var);
+  if (smob)
+    return smob;
+
+  ly_wrong_smob_arg (T::is_smob, var, number, fun);
+  return 0;
+}
+
 // Could be just implemented using LY_ASSERT_TYPE, but this variant
 // saves a slight amount of code
 
 #define LY_ASSERT_SMOB(klass, var, number)                              \
-  {                                                                     \
-    if (!klass::is_smob (var))                                          \
-      ly_wrong_smob_arg (klass::is_smob, var, number, __FUNCTION__);    \
-  }
-
-// This variant is for the case where klass::unsmob might actually be
-// situated in a base class of klass
-#define LY_ASSERT_DERIVED_SMOB(klass, var, number)                      \
-  {                                                                     \
-    if (!derived_unsmob<klass> (var))                                   \
-      ly_wrong_smob_arg (klass::is_smob, var, number, __FUNCTION__);    \
-  }
+  ly_assert_smob<klass> (var, number, __FUNCTION__)
 
 #endif /* LILY_GUILE_MACROS_HH */
index 881b980e4048421144bf7f075058ea781c933200..6f8995c64e88d134406abab2a799c9b527a67e37 100644 (file)
@@ -101,11 +101,10 @@ public:
   Listener (SCM callback, SCM target)
     : callback_ (callback), target_ (target) { }
 
-  void listen (SCM ev) const { scm_call_2 (callback_, target_, ev); }
-
-  LY_DECLARE_SMOB_PROC (1, 0, 0, (SCM self, SCM ev))
+  LY_DECLARE_SMOB_PROC (&Listener::listen, 1, 0, 0)
+  SCM listen (SCM ev)
   {
-    Listener::unsmob (self)->listen (ev);
+    scm_call_2 (callback_, target_, ev);
     return SCM_UNSPECIFIED;
   }
 
@@ -123,7 +122,7 @@ public:
 
   static SCM equal_p (SCM a, SCM b)
   {
-    return *Listener::unsmob (a) == *Listener::unsmob (b)
+    return *unchecked_unsmob (a) == *unchecked_unsmob (b)
       ? SCM_BOOL_T : SCM_BOOL_F;
   }
 };
@@ -158,8 +157,8 @@ class Callback_wrapper : public Simple_smob<Callback_wrapper>
   template <class T, void (T::*callback)(SCM)>
   static void trampoline (SCM target, SCM ev)
   {
-    T *t = derived_unsmob<T> (target);
-    LY_ASSERT_DERIVED_SMOB (T, target, 1);
+    T *t = unsmob<T> (target);
+    LY_ASSERT_SMOB (T, target, 1);
 
     (t->*callback) (ev);
   }
@@ -169,20 +168,21 @@ class Callback_wrapper : public Simple_smob<Callback_wrapper>
     // The same, but for callbacks for translator listeners which get
     // the unpacked event which, in turn, gets protected previously
 
-    T *t = derived_unsmob<T> (target);
-    LY_ASSERT_DERIVED_SMOB (T, target, 1);
+    T *t = unsmob<T> (target);
+    LY_ASSERT_SMOB (T, target, 1);
     LY_ASSERT_SMOB (Stream_event, event, 2);
 
     t->protect_event (event);
-    (t->*callback) (Stream_event::unsmob (event));
+    (t->*callback) (unsmob<Stream_event> (event));
   }
 
   Callback_wrapper (void (*trampoline) (SCM, SCM)) : trampoline_ (trampoline)
   { } // Private constructor, use only in make_smob
 public:
-  LY_DECLARE_SMOB_PROC (2, 0, 0, (SCM self, SCM target, SCM ev))
+  LY_DECLARE_SMOB_PROC (&Callback_wrapper::call, 2, 0, 0)
+  SCM call (SCM target, SCM ev)
   {
-    unsmob (self)->trampoline_ (target, ev);
+    trampoline_ (target, ev);
     return SCM_UNSPECIFIED;
   }
   // Callback wrappers are for an unchanging entity, so we do the Lisp
index 8cb69d0700b724e91f7b62f51d12074f86ec7caa..7c23ee21f8bc89e561176728b7969884cb13e68a 100644 (file)
@@ -47,12 +47,6 @@ public:
   Moment get_length () const;
   Moment start_mom () const;
   void print () const;
-  static Music *unsmob (SCM m) {
-    return dynamic_cast <Music *> (Prob::unsmob (m));
-  }
-  static bool is_smob (SCM m) {
-    return Prob::is_smob (m) && unsmob (m);
-  }
 
   /// Transpose, with the interval central C to #p#
   void transpose (Pitch p);
index e3d0813b4b0820754390a6356bd97f84ad7950ff..3d4d5840e1f075481c8d20b060353c7bfca9f633 100644 (file)
@@ -39,13 +39,6 @@ public:
 
   DECLARE_CLASSNAME (Paper_score);
 
-  static Paper_score *unsmob (SCM ps) {
-    return dynamic_cast <Paper_score *> (Music_output::unsmob (ps));
-  }
-  static bool is_smob (SCM ps) {
-    return Music_output::is_smob (ps) && unsmob (ps);
-  }
-
   Output_def *layout () const;
   System *root_system () const;
 
index 14c811b150231cc2867de9ecdec455cf9d068f9c..3f9c5d6f1ba044d2e00fb7a92f33dc61baa720cb 100644 (file)
@@ -31,13 +31,6 @@ public:
   ~Performance ();
   DECLARE_CLASSNAME (Performance);
 
-  static Performance *unsmob (SCM p) {
-    return dynamic_cast <Performance *> (Music_output::unsmob (p));
-  }
-  static bool is_smob (SCM p) {
-    return Music_output::is_smob (p) && unsmob (p);
-  }
-
   void add_element (Audio_element *p);
   virtual void process ();
   void remap_grace_durations ();
index 82b4ce50cc2b66bf04e228ebc74aacd476ce64f4..a640e240aa27449065dad6564fd6e7b524f955a0 100644 (file)
@@ -33,12 +33,6 @@ public:
   VIRTUAL_COPY_CONSTRUCTOR (Translator, Performer);
   friend class Performer_group;
   Performer_group *get_daddy_performer () const;
-  static Performer *unsmob (SCM perf) {
-    return dynamic_cast <Performer *> (Translator::unsmob (perf));
-  }
-  static bool is_smob (SCM perf) {
-    return Translator::is_smob (perf) && unsmob (perf);
-  }
 
 protected:
   virtual void announce_element (Audio_element_info);
index 61d0173dac12ab295f38baf8015ef10bff0de2c5..48a26b15c995a4d948a5c4974dd9da02f414cb71 100644 (file)
@@ -43,6 +43,8 @@
 class Protected_scm
 {
   SCM object_;
+  static SCM list_;
+  static SCM last_;
   Protected_scm (Protected_scm const &);
 public:
   Protected_scm ();
index eb8bb482f002b127bdd3090bd604f2fdaa86ee8c..e95637cb7c8fda31faea46f6b50402baa89490e8 100644 (file)
 
   CALLING INTERFACE
 
-  Common public methods to C++ smob objects:
+  Common global functions for accessing C++ smob objects:
 
-  - unsmob (SCM x) - unpacks X and returns pointer to the C++ object,
-    or 0 if it has the wrong type.  This can be used as a boolean
-    condition at C++ level.
-  - smob_p (SCM x) returns #t or #f at Scheme level.
+  - unsmob<T> (SCM x) - unpack X and return a pointer to the C++ object,
+    or 0 if it has the wrong type.
 
   IMPLEMENTATION
 
@@ -153,11 +151,11 @@ class Smob_base
   static Scm_init scm_init_;
   static void init (void);
   static string smob_name_;
+protected:
   static Super *unchecked_unsmob (SCM s)
   {
     return reinterpret_cast<Super *> (SCM_SMOB_DATA (s));
   }
-protected:
   // reference scm_init_ in smob_tag which is sure to be called.  The
   // constructor, in contrast, may not be called at all in classes
   // like Smob1.
@@ -185,6 +183,7 @@ private:
   static SCM equal_p (SCM, SCM);
   int print_smob (SCM, scm_print_state *);
   static int print_trampoline (SCM, SCM, scm_print_state *);
+  static void smob_proc_init (scm_t_bits) { };
 
   // type_p_name_ can be overriden in the Super class with a static
   // const char [] string.  This requires both a declaration in the
@@ -200,27 +199,42 @@ private:
   static const int type_p_name_ = 0;
 
   // LY_DECLARE_SMOB_PROC is used in the Super class definition for
-  // making a smob callable like a function.  Declaration has to be
-  // public.  It may be either be completed with a semicolon in which
-  // case a definition of the member function smob_proc has to be done
-  // outside of the class body, or the semicolon is left off and an
-  // inline function body is added immediately below.  It would be
-  // nice if this were a non-static member function but it would seem
-  // tricky to do the required trampolining for unsmobbing the first
-  // argument of the callback and using it as a this pointer.
-#define LY_DECLARE_SMOB_PROC(REQ, OPT, VAR, ARGLIST)                    \
-  static const int smob_proc_signature_ = ((REQ)<<8)|((OPT)<<4)|(VAR);  \
-  static SCM smob_proc ARGLIST
-
-  // a separate LY_DEFINE_SMOB_PROC seems sort of pointless as it
-  // would just result in SCM CLASS::smob_proc ARGLIST
-  //
-  // The default case without function functionality is recognized by
-  // smob_proc_signature being -1.
-  static const int smob_proc = 0;
-  static const int smob_proc_signature_ = -1;
+  // making a smob callable like a function.  Its first argument is a
+  // function member pointer constant, to a function taking the
+  // correct number of SCM arguments and returning SCM.  The function
+  // itself has to be defined separately.
+
+#define LY_DECLARE_SMOB_PROC(PMF, REQ, OPT, VAR)                        \
+  static void smob_proc_init (scm_t_bits smob_tag)                      \
+  {                                                                     \
+    scm_set_smob_apply (smob_tag,                                       \
+                        (scm_t_subr)smob_trampoline<PMF>,               \
+                        REQ, OPT, VAR);                                 \
+  }
+
+  // Well, function template argument packs are a C++11 feature.  So
+  // we just define a bunch of trampolines manually.
+  template <SCM (Super::*pmf)(void)>
+  static SCM smob_trampoline (SCM self)
+  {
+    return (Super::unchecked_unsmob (self)->*pmf)();
+  }
+  template <SCM (Super::*pmf)(SCM)>
+  static SCM smob_trampoline (SCM self, SCM arg1)
+  {
+    return (Super::unchecked_unsmob (self)->*pmf)(arg1);
+  }
+  template <SCM (Super::*pmf)(SCM, SCM)>
+  static SCM smob_trampoline (SCM self, SCM arg1, SCM arg2)
+  {
+    return (Super::unchecked_unsmob (self)->*pmf)(arg1, arg2);
+  }
+  template <SCM (Super::*pmf)(SCM, SCM, SCM)>
+  static SCM smob_trampoline (SCM self, SCM arg1, SCM arg2, SCM arg3)
+  {
+    return (Super::unchecked_unsmob (self)->*pmf)(arg1, arg2, arg3);
+  }
 
-public:
   static bool is_smob (SCM s)
   {
     return SCM_SMOB_PREDICATE (smob_tag (), s);
@@ -229,18 +243,18 @@ public:
   {
     return is_smob (s) ? SCM_BOOL_T : SCM_BOOL_F;
   }
-  static Super *unsmob (SCM s)
-  {
-    return is_smob (s) ? Super::unchecked_unsmob (s) : 0;
-  }
-};
 
-// derived_unsmob includes a dynamic_cast:
+  template <class T>
+  friend T *unsmob (SCM s);
+
+  template <class T>
+  friend T *ly_assert_smob (SCM s, int number, const char *fun);
+};
 
 template <class T>
-inline T *derived_unsmob (SCM arg)
+inline T *unsmob (SCM s)
 {
-  return dynamic_cast<T *> (T::unsmob (arg));
+  return T::is_smob (s) ? dynamic_cast<T *> (T::unchecked_unsmob (s)) : 0;
 }
 
 // Simple smobs
@@ -333,7 +347,7 @@ public:
 // least some, so they are apparently not protected in spite of being
 // included in the GC scans.  So it would appear that scanning smobs
 // is not equivalent to marking them.  Ugh.
-#if !defined(NDEBUG) && !GUILEV2
+#if defined(DEBUG) && !GUILEV2
 #define ASSERT_LIVE_IS_ALLOWED(arg)                                     \
   do {                                                                  \
     static parsed_dead pass_here;                                       \
index 913785315ae9bb46f9d72f1ea6f44233ac5e277e..f76609bf5b96ac8fca532f4cb975d109c0ac8b2c 100644 (file)
@@ -32,7 +32,7 @@ template <class Super>
 SCM
 Smob_base<Super>::mark_trampoline (SCM arg)
 {
-  Super *ptr = Super::unsmob (arg);
+  Super *ptr = unsmob<Super> (arg);
   if (ptr)
     return ptr->mark_smob ();
   return SCM_UNDEFINED;
@@ -42,7 +42,7 @@ template <class Super>
 int
 Smob_base<Super>::print_trampoline (SCM arg, SCM port, scm_print_state *p)
 {
-  Super *ptr = Super::unsmob (arg);
+  Super *ptr = unsmob<Super> (arg);
   if (ptr)
     return ptr->print_smob (port, p);
   return 0;
@@ -135,13 +135,7 @@ void Smob_base<Super>::init ()
 
   if (&Super::free_smob != &Smob_base<Super>::free_smob)
     scm_set_smob_free (smob_tag_, Super::free_smob);
-  // Old GCC versions get their type lattice for pointers-to-members
-  // tangled up to a degree where we need to typecast _both_ covariant
-  // types in order to be able to compare them.  The other comparisons
-  // are for static member functions and thus are ordinary function
-  // pointers which work without those contortions.
-  if (static_cast<SCM (Super::*)()>(&Super::mark_smob) !=
-      static_cast<SCM (Super::*)()>(&Smob_base<Super>::mark_smob))
+  if (&Super::mark_smob != &Smob_base<Super>::mark_smob)
     scm_set_smob_mark (smob_tag_, Super::mark_trampoline);
   scm_set_smob_print (smob_tag_, Super::print_trampoline);
   if (&Super::equal_p != &Smob_base<Super>::equal_p)
@@ -157,11 +151,6 @@ void Smob_base<Super>::init ()
       scm_c_export (Super::type_p_name_, NULL);
     }
   ly_add_type_predicate ((void *) is_smob, smob_name_.c_str ());
-  if (Super::smob_proc_signature_ >= 0)
-    scm_set_smob_apply (smob_tag_,
-                        (scm_t_subr)Super::smob_proc,
-                        Super::smob_proc_signature_ >> 8,
-                        (Super::smob_proc_signature_ >> 4)&0xf,
-                        Super::smob_proc_signature_ & 0xf);
+  Super::smob_proc_init (smob_tag_);
 }
 #endif
index 788b0e46ee46e1ef4889862b58d8c1bd4ed5a04e..7ee27abcb19208d0218d53062f8aeda1d12cba66 100644 (file)
@@ -52,13 +52,6 @@ public:
   DECLARE_SCHEME_CALLBACK (bounds_width, (SCM));
   DECLARE_SCHEME_CALLBACK (kill_zero_spanned_time, (SCM));
 
-  static Spanner *unsmob (SCM s) {
-    return dynamic_cast <Spanner *> (Grob::unsmob (s));
-  }
-  static bool is_smob (SCM s) {
-    return Grob::is_smob (s) && unsmob (s);
-  }
-
   vector<Spanner *> broken_intos_;
 
   vsize get_break_index () const;
index 6b78c18e4b313ac59980909a917ed6dd90556152..23a5be7fbc41ada9b061c24983159498d6d78b79 100644 (file)
@@ -47,7 +47,7 @@ using namespace std;
     efficient to add "fresh" stencils to what you're going to build.
 
     * Do not create Stencil objects on the heap. That includes passing
-    around Stencil* which are produced by Stencil::unsmob(). Either
+    around Stencil* which are produced by unsmob<Stencil>(). Either
     copy Stencil objects, or use SCM references.
 
     * Empty stencils have empty dimensions.  If add_at_edge is used to
index 27a83ed72ff83e5f274398842029e69d2ce01fb7..d554f584dcec8eaaeb34556edc1a465a1e0784cf 100644 (file)
@@ -30,13 +30,6 @@ public:
   Stream_event ();
   VIRTUAL_COPY_CONSTRUCTOR (Stream_event, Stream_event);
 
-  static Stream_event *unsmob (SCM s) {
-    return dynamic_cast <Stream_event *> (Prob::unsmob (s));
-  }
-  static bool is_smob (SCM s) {
-    return Prob::is_smob (s) && unsmob (s);
-  }
-
   Stream_event (SCM event_class, SCM immutable_props = SCM_EOL);
   Stream_event (SCM class_name, Input *);
 
diff --git a/lily/include/time-scaled-music-iterator.hh b/lily/include/time-scaled-music-iterator.hh
deleted file mode 100644 (file)
index e8c6a83..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>,
-                 Erik Sandberg <mandolaerik@gmail.com>
-
-  LilyPond is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  LilyPond is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef TIME_SCALED_MUSIC_ITERATOR_HH
-#define TIME_SCALED_MUSIC_ITERATOR_HH
-
-#include "sequential-iterator.hh"
-
-class Time_scaled_music_iterator : public Sequential_iterator
-{
-public:
-  DECLARE_SCHEME_CALLBACK (constructor, ());
-  /* construction */
-  DECLARE_CLASSNAME (Time_scaled_music_iterator);
-  Time_scaled_music_iterator ();
-protected:
-  virtual SCM get_music_list () const;
-private:
-};
-
-#endif /* TIME_SCALED_MUSIC_ITERATOR_HH */
index a324ccf0f4f747441febe98455cc3f49c7a2ff66..42d35816c31b1f9dc81fdc9ce534b039dd7d96c0 100644 (file)
@@ -25,7 +25,7 @@ LY_DEFINE (ly_input_warning, "ly:input-warning", 2, 0, 1, (SCM sip, SCM msg, SCM
            " to the location in @var{sip}.  @var{msg} is interpreted"
            " similar to @code{format}'s argument, using @var{rest}.")
 {
-  Input *ip = Input::unsmob (sip);
+  Input *ip = unsmob<Input> (sip);
 
   LY_ASSERT_SMOB (Input, sip, 1);
   LY_ASSERT_TYPE (scm_is_string, msg, 2);
@@ -43,7 +43,7 @@ LY_DEFINE (ly_input_message, "ly:input-message", 2, 0, 1, (SCM sip, SCM msg, SCM
            " to the location in @var{sip}.  @var{msg} is interpreted"
            " similar to @code{format}'s argument, using @var{rest}.")
 {
-  Input *ip = Input::unsmob (sip);
+  Input *ip = unsmob<Input> (sip);
 
   LY_ASSERT_SMOB (Input, sip, 1);
   LY_ASSERT_TYPE (scm_is_string, msg, 2);
@@ -63,7 +63,7 @@ LY_DEFINE (ly_input_file_line_char_column,
            " @code{(file-name line char column)}.")
 {
   LY_ASSERT_SMOB (Input, sip, 1);
-  Input *ip = Input::unsmob (sip);
+  Input *ip = unsmob<Input> (sip);
 
   int l, ch, col, offset = 0;
   ip->get_counts (&l, &ch, &col, &offset);
@@ -81,7 +81,7 @@ LY_DEFINE (ly_input_both_locations,
 {
 
   LY_ASSERT_SMOB (Input, sip, 1);
-  Input *ip = Input::unsmob (sip);
+  Input *ip = unsmob<Input> (sip);
 
   return scm_list_5 (ly_string2scm (ip->file_string ()),
                      scm_from_int (ip->line_number ()),
index 0a33bd6a596243159596b864c38378e4cbc709f2..605b790a686675875a13d2db0c72188e34fc3f2f 100644 (file)
@@ -47,8 +47,8 @@ Input::print_smob (SCM port, scm_print_state *)
 SCM
 Input::equal_p (SCM sa, SCM sb)
 {
-  Input *a = unsmob (sa);
-  Input *b = unsmob (sb);
+  Input *a = unsmob<Input> (sa);
+  Input *b = unsmob<Input> (sb);
   if (a->get_source_file () == b->get_source_file ()
       && a->start () == b->start ()
       && a->end () == b->end ())
index f65c2958332f664eae2e091e4e4bc1ec25672f93..8b1a4c30033cddcdcfe59fd8e8509e82f5349233 100644 (file)
@@ -107,7 +107,7 @@ Instrument_name_engraver::start_spanner ()
 {
   text_spanner_ = make_spanner ("InstrumentName", SCM_EOL);
 
-  Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+  Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
   text_spanner_->set_bound (LEFT, col);
   text_spanner_->set_property ("text", short_text_);
   text_spanner_->set_property ("long-text", long_text_);
@@ -115,7 +115,7 @@ Instrument_name_engraver::start_spanner ()
   /*
     UGH, should handle this in Score_engraver.
   */
-  Grob *system = Grob::unsmob (get_property ("rootSystem"));
+  Grob *system = unsmob<Grob> (get_property ("rootSystem"));
   if (system)
     Axis_group_interface::add_element (system, text_spanner_);
   else
@@ -164,7 +164,7 @@ Instrument_name_engraver::stop_spanner ()
                                        axis_groups_[i]);
 
   text_spanner_->set_bound (RIGHT,
-                            Grob::unsmob (get_property ("currentCommandColumn")));
+                            unsmob<Grob> (get_property ("currentCommandColumn")));
 
   Pointer_group_interface::set_ordered (text_spanner_,
                                         ly_symbol2scm ("elements"),
index 24ccf5bf0de97ba6666751afa514b2e777392c73..48f3218f22951f11f218f8feffefcb42e22ef95d 100644 (file)
@@ -25,7 +25,7 @@ LY_DEFINE (ly_item_p, "ly:item?",
            1, 0, 0, (SCM g),
            "Is @var{g} an @code{Item} object?")
 {
-  Grob *me = Grob::unsmob (g);
+  Grob *me = unsmob<Grob> (g);
   bool b = dynamic_cast<Item *> (me);
   return ly_bool2scm (b);
 }
@@ -37,7 +37,7 @@ LY_DEFINE (ly_item_break_dir, "ly:item-break-dir",
            " @code{1}@tie{}beginning of line.")
 {
   LY_ASSERT_SMOB (Item, it, 1);
-  Item *me = Item::unsmob (it);
+  Item *me = unsmob<Item> (it);
   return scm_from_int (me->break_status_dir ());
 }
 
@@ -47,7 +47,7 @@ LY_DEFINE (ly_item_get_column, "ly:item-get-column",
            " associated with this @code{Item}.")
 {
   LY_ASSERT_SMOB (Item, it, 1);
-  Item *me = Item::unsmob (it);
+  Item *me = unsmob<Item> (it);
 
   if (Paper_column *col = me->get_column ())
     return col->self_scm ();
index c67e6e0cca4918bc9f40373f7d2bdcf7b894801b..79fedc96df05e2976660b766605ae4d28271bad5 100644 (file)
@@ -56,9 +56,9 @@ Keep_alive_together_engraver::finalize ()
         continue;
 
       SCM live_scm = Grob_array::make_array ();
-      Grob_array *live = Grob_array::unsmob (live_scm);
+      Grob_array *live = unsmob<Grob_array> (live_scm);
       SCM dead_scm = Grob_array::make_array ();
-      Grob_array *dead = Grob_array::unsmob (dead_scm);
+      Grob_array *dead = unsmob<Grob_array> (dead_scm);
 
       for (vsize j = 0; j < group_spanners_.size (); ++j)
         {
index 9720b680f5e4b756715e066d79c1ff7f6aa52e51..89695f7c5f6d39247ee95e6011bbfae41f908019 100644 (file)
@@ -42,7 +42,7 @@ MAKE_SCHEME_CALLBACK (Key_signature_interface, print, 1);
 SCM
 Key_signature_interface::print (SCM smob)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
 
   Real inter = Staff_symbol_referencer::staff_space (me) / 2.0;
 
index f56e73c101e4e65d404edc593ff83e69a6e77975..25582c6a395ebccaede5622c680ce4814663e576 100644 (file)
@@ -81,7 +81,7 @@ Kievan_ligature_engraver::fold_up_primitives (vector<Grob_info> const &primitive
          first = current;
 
       // must keep track of accidentals in spacing problem
-      Grob *acc_gr = Grob::unsmob (current->get_object ("accidental-grob"));
+      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);
@@ -107,7 +107,7 @@ Kievan_ligature_engraver::fold_up_primitives (vector<Grob_info> const &primitive
       if (i < primitives.size () - 1)
         {
            Item *next = dynamic_cast<Item *> (primitives[i + 1].grob ());
-           Grob *acc_gr = Grob::unsmob (next->get_object ("accidental-grob"));
+           Grob *acc_gr = unsmob<Grob> (next->get_object ("accidental-grob"));
            if (acc_gr)
              {
                 Interval acc_ext = acc_gr->extent (acc_gr, X_AXIS);
index 1ab028bfd0cbc5fda561706c2630919c386f1d31..6e57a7e9df6b92e7cb7fec9b30daea722a460a75 100644 (file)
@@ -67,13 +67,13 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf)
    * a single note head (attached as an articulation inside a chord) */
   Stream_event *tie_ev = event_;
   Grob *head = inf.grob ();
-  Stream_event *note_ev = Stream_event::unsmob (head->get_property ("cause"));
+  Stream_event *note_ev = unsmob<Stream_event> (head->get_property ("cause"));
   if (!tie_ev && note_ev && note_ev->in_event_class ("note-event"))
     {
       SCM articulations = note_ev->get_property ("articulations");
       for (SCM s = articulations; !tie_ev && scm_is_pair (s); s = scm_cdr (s))
         {
-          Stream_event *ev = Stream_event::unsmob (scm_car (s));
+          Stream_event *ev = unsmob<Stream_event> (scm_car (s));
           if (ev && ev->in_event_class ("laissez-vibrer-event"))
             tie_ev = ev;
         }
@@ -93,9 +93,9 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf)
   Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"),
                                      lv_tie);
 
-  if (is_direction (Stream_event::unsmob (cause)->get_property ("direction")))
+  if (is_direction (unsmob<Stream_event> (cause)->get_property ("direction")))
     {
-      Direction d = to_dir (Stream_event::unsmob (cause)->get_property ("direction"));
+      Direction d = to_dir (unsmob<Stream_event> (cause)->get_property ("direction"));
       lv_tie->set_property ("direction", scm_from_int (d));
     }
 
index 9004dc07e39bce7dcc0d939b9c0140bf65d6fa68..40ef019d234d80d0733e48455dd672b689b6ce30 100644 (file)
@@ -53,7 +53,7 @@ Ledger_line_engraver::start_spanner ()
   assert (!span_);
 
   span_ = make_spanner ("LedgerLineSpanner", SCM_EOL);
-  span_->set_bound (LEFT, Grob::unsmob (get_property ("currentCommandColumn")));
+  span_->set_bound (LEFT, unsmob<Grob> (get_property ("currentCommandColumn")));
 }
 
 void
@@ -94,7 +94,7 @@ Ledger_line_engraver::stop_spanner ()
 {
   if (span_)
     {
-      span_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+      span_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
       span_ = 0;
     }
 }
index 6904698d7d86b9efe1c1b0f5f1c93a82b9ae6f73..5cb5462351667fc1d84f834e8a0190d6fe41e21a 100644 (file)
@@ -66,7 +66,7 @@ MAKE_SCHEME_CALLBACK (Ledger_line_spanner, set_spacing_rods, 1);
 SCM
 Ledger_line_spanner::set_spacing_rods (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   // find size of note heads.
   Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
@@ -164,7 +164,7 @@ MAKE_SCHEME_CALLBACK (Ledger_line_spanner, print, 1);
 SCM
 Ledger_line_spanner::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   extract_grob_set (me, "note-heads", heads);
 
@@ -193,7 +193,7 @@ Ledger_line_spanner::print (SCM smob)
       Axis a = Axis (i);
       common[a] = common_refpoint_of_array (heads, me, a);
       for (vsize i = heads.size (); i--;)
-        if (Grob *g = Grob::unsmob (me->get_object ("accidental-grob")))
+        if (Grob *g = unsmob<Grob> (me->get_object ("accidental-grob")))
           common[a] = common[a]->common_refpoint (g, a);
     }
 
@@ -287,7 +287,7 @@ Ledger_line_spanner::print (SCM smob)
               Interval x_extent = ledger_size;
 
               if (i == 0)
-                if (Grob *g = Grob::unsmob (h->get_object ("accidental-grob")))
+                if (Grob *g = unsmob<Grob> (h->get_object ("accidental-grob")))
                   {
                     Interval accidental_size = g->extent (common[X_AXIS], X_AXIS);
                     Real d
index 775cbdde0f831fc359ccde97e9b87ca2f713db40..3c09299b4b857983fbeabfc5248efd38ff24c925 100644 (file)
@@ -826,7 +826,7 @@ Lily_lexer::pop_extra_token ()
                return -1;
 
   /* produce requested token */
-       yylloc = *Input::unsmob (scm_caar (extra_tokens_));
+       yylloc = *unsmob<Input> (scm_caar (extra_tokens_));
        int type = scm_to_int (scm_cadar (extra_tokens_));
        yylval = scm_cddar (extra_tokens_);
        extra_tokens_ = scm_cdr (extra_tokens_);
@@ -913,7 +913,7 @@ Lily_lexer::scan_escaped_word (const string &str)
                return i;
 
        SCM sid = lookup_identifier (str);
-       if (Music *m = Music::unsmob (sid))
+       if (Music *m = unsmob<Music> (sid))
        {
                m->set_spot (override_input (here_input ()));
        }
@@ -933,7 +933,7 @@ int
 Lily_lexer::scan_shorthand (const string &str)
 {
        SCM sid = lookup_identifier (str);
-       if (Music *m = Music::unsmob (sid))
+       if (Music *m = unsmob<Music> (sid))
        {
                m->set_spot (override_input (here_input ()));
        }
@@ -952,7 +952,7 @@ Lily_lexer::scan_shorthand (const string &str)
 int
 Lily_lexer::scan_scm_id (SCM sid)
 {
-       if (Music_function *fun = Music_function::unsmob (sid))
+       if (Music_function *fun = unsmob<Music_function> (sid))
        {
                int funtype = SCM_FUNCTION;
 
@@ -1013,7 +1013,7 @@ Lily_lexer::scan_bare_word (const string &str)
 
                if (scm_is_pair (handle)) {
                        yylval = scm_cdr (handle);
-                       if (Pitch::is_smob (yylval))
+                       if (unsmob<Pitch> (yylval))
                            return (YYSTATE == notes) ? NOTENAME_PITCH : TONICNAME_PITCH;
                        else if (scm_is_symbol (yylval))
                            return DRUM_PITCH;
@@ -1095,9 +1095,9 @@ Lily_lexer::eval_scm (SCM readerdata, Input hi, char extra_token)
                             p = scm_cdr (p))
                        {
                                SCM v = scm_car (p);
-                               if (Music *m = Music::unsmob (v))
+                               if (Music *m = unsmob<Music> (v))
                                {
-                                       if (!Input::is_smob (m->get_property ("origin")))
+                                       if (!unsmob<Input> (m->get_property ("origin")))
                                                m->set_spot (override_input (here_input ()));
                                }
 
@@ -1120,9 +1120,9 @@ Lily_lexer::eval_scm (SCM readerdata, Input hi, char extra_token)
                        sval = SCM_UNSPECIFIED;
        }
 
-       if (Music *m = Music::unsmob (sval))
+       if (Music *m = unsmob<Music> (sval))
        {
-               if (!Input::is_smob (m->get_property ("origin")))
+               if (!unsmob<Input> (m->get_property ("origin")))
                        m->set_spot (override_input (here_input ()));
        }
 
index b647e02edddf16fec3772f1ede8e2e45ea27ac94..f3bac03c76955f62a913224224d3966aacc2016c 100644 (file)
@@ -121,7 +121,7 @@ Ligature_engraver::process_music ()
       primitives_.clear ();
       ligature_ = 0;
     }
-  last_bound_ = Grob::unsmob (get_property ("currentMusicalColumn"));
+  last_bound_ = unsmob<Grob> (get_property ("currentMusicalColumn"));
 
   if (ligature_)
     {
@@ -140,7 +140,7 @@ Ligature_engraver::process_music ()
       prev_start_event_ = events_drul_[START];
       ligature_ = create_ligature_spanner ();
 
-      Grob *bound = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *bound = unsmob<Grob> (get_property ("currentMusicalColumn"));
       if (!bound)
         events_drul_[START]->origin ()->warning (_ ("no left bound"));
       else
index d8d8d10edba05276889af19161e3a25b205e837b..3408291c663b88c85cc86ae1e41cd816f7ec8528 100644 (file)
@@ -455,8 +455,8 @@ ly_wrong_smob_arg (bool pred (SCM), SCM var, int number, const char *fun)
   string type = predicate_to_typename ((void *) pred);
   if (pred (var))
     {
-      // Uh oh.  derived_unsmob <T> delivered 0, yet
-      // T::is_smob delivers true.  This means that T::is_smob is a
+      // Uh oh.  unsmob<T> delivered 0, yet
+      // unsmob<T> delivers true.  This means that unsmob<T> is a
       // matching check from a base class of T, but var is of an
       // incompatible derived type.
       type = string (_ ("Wrong kind of ")).append (type);
index c5a0bc5b7ad1e407f96bb182ce894ccd7866d861..6ce3f7b90dd2e9b2288db828c21c288cadd12adf 100644 (file)
@@ -27,6 +27,6 @@ LY_DEFINE (ly_lexer_keywords, "ly:lexer-keywords",
 {
   LY_ASSERT_SMOB (Lily_lexer, lexer, 1);
 
-  Lily_lexer *lex = Lily_lexer::unsmob (lexer);
+  Lily_lexer *lex = unsmob<Lily_lexer> (lexer);
   return lex->keyword_list ();
 }
index 3bb7921b2b89d9d5356ec8e4c80edb0f8d177f20..f2c0d1863733a4bb8d342f4780d114aa459cdceb 100644 (file)
@@ -123,8 +123,8 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser,
   main_input_level_ = 0;
 
   extra_tokens_ = SCM_EOL;
-  if (Input::is_smob (override_input))
-    override_input_ = *Input::unsmob (override_input);
+  if (unsmob<Input> (override_input))
+    override_input_ = *unsmob<Input> (override_input);
 
   smobify_self ();
 
index 806cc62fd61cfa0facaefe1b8f8599d05b4cdb22..6e706f29f711abfc5a33c23f40b9705d1c4eaab0 100644 (file)
@@ -141,7 +141,7 @@ LY_DEFINE (ly_parser_lexer, "ly:parser-lexer",
            1, 0, 0, (SCM parser_smob),
            "Return the lexer for @var{parser-smob}.")
 {
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
   return parser->lexer_->self_scm ();
 }
 
@@ -154,7 +154,7 @@ LY_DEFINE (ly_parser_clone, "ly:parser-clone",
            " it becomes the source of all music expressions inside.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
   if (SCM_UNBNDP (closures))
     closures = SCM_EOL;
   else
@@ -170,7 +170,7 @@ LY_DEFINE (ly_parser_define_x, "ly:parser-define!",
 {
 
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
 
   LY_ASSERT_TYPE (ly_is_symbol, symbol, 2);
 
@@ -185,7 +185,7 @@ LY_DEFINE (ly_parser_lookup, "ly:parser-lookup",
 {
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
 
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
 
   LY_ASSERT_TYPE (ly_is_symbol, symbol, 2);
 
@@ -202,7 +202,7 @@ LY_DEFINE (ly_parser_parse_string, "ly:parser-parse-string",
            "  Upon failure, throw @code{ly-file-failed} key.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
   LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
 
   if (!parser->lexer_->is_clean ())
@@ -222,7 +222,7 @@ LY_DEFINE (ly_parse_string_expression, "ly:parse-string-expression",
            " @var{filename} and @var{line} are optional source indicators.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
   LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
   string fn;
   if (SCM_UNBNDP (filename) || !scm_is_string (filename))
@@ -253,7 +253,7 @@ LY_DEFINE (ly_parser_include_string, "ly:parser-include-string",
            " Scheme expressions (@code{$} instead of @code{#}).")
 {
   LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
-  Lily_parser *parser = Lily_parser::unsmob (parser_smob);
+  Lily_parser *parser = unsmob<Lily_parser> (parser_smob);
   LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
 
   parser->include_string (ly_scm2string (ly_code));
@@ -268,7 +268,7 @@ LY_DEFINE (ly_parser_set_note_names, "ly:parser-set-note-names",
            " if the current mode is notes.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser, 1);
-  Lily_parser *p = Lily_parser::unsmob (parser);
+  Lily_parser *p = unsmob<Lily_parser> (parser);
 
   if (p->lexer_->is_note_state ())
     {
@@ -284,7 +284,7 @@ LY_DEFINE (ly_parser_output_name, "ly:parser-output-name",
            "Return the base name of the output file.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser, 1);
-  Lily_parser *p = Lily_parser::unsmob (parser);
+  Lily_parser *p = unsmob<Lily_parser> (parser);
 
   return ly_string2scm (p->output_basename_);
 }
@@ -294,12 +294,12 @@ LY_DEFINE (ly_parser_error, "ly:parser-error",
            "Display an error message and make the parser fail.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser, 1);
-  Lily_parser *p = Lily_parser::unsmob (parser);
+  Lily_parser *p = unsmob<Lily_parser> (parser);
 
   LY_ASSERT_TYPE (scm_is_string, msg, 2);
   string s = ly_scm2string (msg);
 
-  Input *i = Input::unsmob (input);
+  Input *i = unsmob<Input> (input);
   if (i)
     p->parser_error (*i, s);
   else
@@ -313,7 +313,7 @@ LY_DEFINE (ly_parser_clear_error, "ly:parser-clear-error",
            "Clear the error flag for the parser.")
 {
   LY_ASSERT_SMOB (Lily_parser, parser, 1);
-  Lily_parser *p = Lily_parser::unsmob (parser);
+  Lily_parser *p = unsmob<Lily_parser> (parser);
 
   p->error_level_ = 0;
   p->lexer_->error_level_ = 0;
@@ -326,7 +326,7 @@ LY_DEFINE (ly_parser_has_error_p, "ly:parser-has-error?",
            "Does @var{parser} have an error flag?")
 {
   LY_ASSERT_SMOB (Lily_parser, parser, 1);
-  Lily_parser *p = Lily_parser::unsmob (parser);
+  Lily_parser *p = unsmob<Lily_parser> (parser);
 
   return scm_from_bool (p->error_level_ || p->lexer_->error_level_);
 }
index 2d006f8d788894fe0c8b4407a16279d18c78a757..8645d58cf1e1d04fbc274a701f0cffffc98d3aad 100644 (file)
@@ -219,7 +219,7 @@ Output_def *
 get_layout (Lily_parser *parser)
 {
   SCM id = parser->lexer_->lookup_identifier ("$defaultlayout");
-  Output_def *layout = Output_def::unsmob (id);
+  Output_def *layout = unsmob<Output_def> (id);
   layout = layout ? layout->clone () : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T);
 
@@ -230,7 +230,7 @@ Output_def *
 get_midi (Lily_parser *parser)
 {
   SCM id = parser->lexer_->lookup_identifier ("$defaultmidi");
-  Output_def *layout = Output_def::unsmob (id);
+  Output_def *layout = unsmob<Output_def> (id);
   layout = layout ? layout->clone () : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
   return layout;
@@ -243,9 +243,9 @@ get_paper (Lily_parser *parser)
 {
   SCM papers = parser->lexer_->lookup_identifier ("$papers");
   Output_def *layout = (SCM_UNBNDP (papers) || scm_is_null (papers))
-                       ? 0 : Output_def::unsmob (scm_car (papers));
+                       ? 0 : unsmob<Output_def> (scm_car (papers));
   SCM default_paper = parser->lexer_->lookup_identifier ("$defaultpaper");
-  layout = layout ? layout : Output_def::unsmob (default_paper);
+  layout = layout ? layout : unsmob<Output_def> (default_paper);
 
   layout = layout ? dynamic_cast<Output_def *> (layout->clone ()) : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
index e4f1e4c4548914e0c67dbac3b1e35b4c7303bba7..be20f25d98fb0a824030cb48ecd4faa77bfa3974 100644 (file)
@@ -56,7 +56,7 @@ Spanner *parent_spanner (Grob *g)
 SCM
 Line_spanner::calc_bound_info (SCM smob, Direction dir)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   Grob *commonx = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
   commonx = me->common_refpoint (commonx, X_AXIS);
@@ -114,11 +114,11 @@ 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 = Grob::unsmob (bound_grob->get_object ("accidental-grob"));
+      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);
 
-      Grob *dot = Grob::unsmob (bound_grob->get_object ("dot"));
+      Grob *dot = unsmob<Grob> (bound_grob->get_object ("dot"));
       if (dot && to_boolean (ly_assoc_get (ly_symbol2scm ("start-at-dot"), details, SCM_BOOL_F)))
         x_coord = robust_relative_extent (dot, commonx, X_AXIS).linear_combination (attach);
 
@@ -210,7 +210,7 @@ MAKE_SCHEME_CALLBACK (Line_spanner, calc_cross_staff, 1);
 SCM
 Line_spanner::calc_cross_staff (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   if (!me)
     return SCM_BOOL_F;
 
@@ -241,7 +241,7 @@ SCM
 Line_spanner::calc_left_bound_info_and_text (SCM smob)
 {
   SCM alist = Line_spanner::calc_bound_info (smob, LEFT);
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   SCM text = me->get_property ("text");
   if (Text_interface::is_markup (text)
@@ -263,7 +263,7 @@ MAKE_SCHEME_CALLBACK (Line_spanner, print, 1);
 SCM
 Line_spanner::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   // Triggers simple-Y calculations
   bool simple_y = to_boolean (me->get_property ("simple-Y")) && !to_boolean (me->get_property ("cross-staff"));
@@ -301,9 +301,9 @@ Line_spanner::print (SCM smob)
                                                  bounds[d], SCM_BOOL_F), 0.0);
       arrows[d] = to_boolean (ly_assoc_get (ly_symbol2scm ("arrow"),
                                             bounds[d], SCM_BOOL_F));
-      stencils[d] = Stencil::unsmob (ly_assoc_get (ly_symbol2scm ("stencil"),
+      stencils[d] = unsmob<Stencil> (ly_assoc_get (ly_symbol2scm ("stencil"),
                                                   bounds[d], SCM_BOOL_F));
-      common_y[d] = Grob::unsmob (ly_assoc_get (ly_symbol2scm ("common-Y"),
+      common_y[d] = unsmob<Grob> (ly_assoc_get (ly_symbol2scm ("common-Y"),
                                                bounds[d], SCM_BOOL_F));
       if (!common_y[d])
         common_y[d] = me;
index 6bd55bbc7d3826ced290d51bb8f0ff537e4a54c9..280b85bcfab09a193c2cd4fd386b70890a07b9cc 100644 (file)
@@ -244,7 +244,7 @@ Lookup::round_filled_polygon (vector<Offset> const &points,
 
   const Real epsilon = 0.01;
 
-#ifndef NDEBUG
+#ifdef DEBUG
   /* remove consecutive duplicate points */
   for (vsize i = 0; i < points.size (); i++)
     {
index d0b31c4963ee94986fb09021f758d409d13babbc..e83d4e716c238701139515fb804910a017592528 100644 (file)
@@ -96,7 +96,7 @@ Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
 void
 Lyric_combine_music_iterator::set_busy (SCM se)
 {
-  Stream_event *e = Stream_event::unsmob (se);
+  Stream_event *e = unsmob<Stream_event> (se);
 
   if ((e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
       && music_context_)
@@ -191,8 +191,8 @@ Lyric_combine_music_iterator::derived_substitute (Context *f, Context *t)
 void
 Lyric_combine_music_iterator::construct_children ()
 {
-  Music *m = Music::unsmob (get_music ()->get_property ("element"));
-  lyric_iter_ = Music_iterator::unsmob (get_iterator (m));
+  Music *m = unsmob<Music> (get_music ()->get_property ("element"));
+  lyric_iter_ = unsmob<Music_iterator> (get_iterator (m));
   if (!lyric_iter_)
     return;
   lyrics_context_ = find_context_below (lyric_iter_->get_outlet (),
index 7611d7554378e2ced26e1b0fe3162e0bb08c1e71..9cf603a3a4929f70aaef18db2c0a5779f0985c8e 100644 (file)
@@ -29,7 +29,7 @@ MAKE_SCHEME_CALLBACK (Lyric_combine_music, length_callback, 1);
 SCM
 Lyric_combine_music::length_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Music *melody = Music::unsmob (scm_car (me->get_property ("elements")));
+  Music *me = unsmob<Music> (m);
+  Music *melody = unsmob<Music> (scm_car (me->get_property ("elements")));
   return melody->get_length ().smobbed_copy ();
 }
index 0d3ea00dee27448243201e2cb2fa6686e2ebc2ab..58b8f6cdd294e7a6a17907d75c8e4e9418d3c542 100644 (file)
@@ -95,7 +95,7 @@ get_voice_to_lyrics (Context *lyrics)
   bool searchForVoice = to_boolean (lyrics->get_property ("searchForVoice"));
 
   SCM avc = lyrics->get_property ("associatedVoiceContext");
-  if (Context *c = Context::unsmob (avc))
+  if (Context *c = unsmob<Context> (avc))
     return c;
 
   SCM voice_name = lyrics->get_property ("associatedVoice");
@@ -145,8 +145,8 @@ get_current_note_head (Context *voice)
   for (SCM s = voice->get_property ("busyGrobs");
        scm_is_pair (s); s = scm_cdr (s))
     {
-      Grob *g = Grob::unsmob (scm_cdar (s));;
-      Moment *end_mom = Moment::unsmob (scm_caar (s));
+      Grob *g = unsmob<Grob> (scm_cdar (s));;
+      Moment *end_mom = unsmob<Moment> (scm_caar (s));
       if (!end_mom || !g)
         {
           programming_error ("busyGrobs invalid");
@@ -156,7 +156,7 @@ get_current_note_head (Context *voice)
       // It's a bit irritating that we just have the length and
       // duration of the Grob.
       Moment end_from_now =
-        get_event_length (Stream_event::unsmob (g->get_property ("cause")), now)
+        get_event_length (unsmob<Stream_event> (g->get_property ("cause")), now)
         + now;
       // We cannot actually include more than a single grace note
       // using busyGrobs on ungraced lyrics since a grob ending on
index e6943fefa0a66d41ee89f76aa365cbc22d5adfb4..8afe2c5569200d48a8a4caec55c460e0af91ee8f 100644 (file)
@@ -32,9 +32,9 @@ MAKE_SCHEME_CALLBACK (Lyric_extender, print, 1);
 SCM
 Lyric_extender::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Item *left_edge = me->get_bound (LEFT);
-  Item *right_text = Item::unsmob (me->get_object ("next"));
+  Item *right_text = unsmob<Item> (me->get_object ("next"));
 
   Grob *common = left_edge;
 
index b8afd7718c4ee3e194155488f4bd87291f82d5ea..029391f92f681fbe3e144efa7c66444c0da20fd4 100644 (file)
@@ -35,7 +35,7 @@ MAKE_SCHEME_CALLBACK (Lyric_hyphen, print, 1);
 SCM
 Lyric_hyphen::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Drul_array<Item *> bounds (me->get_bound (LEFT),
                              me->get_bound (RIGHT));
 
@@ -115,7 +115,7 @@ MAKE_SCHEME_CALLBACK (Lyric_hyphen, set_spacing_rods, 1);
 SCM
 Lyric_hyphen::set_spacing_rods (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Rod r;
   Spanner *sp = dynamic_cast<Spanner *> (me);
index 84da38886143de09402494bddf72002dcf331e22..e7fc3c6726cb874513b016b23c874976bfa03bfb 100644 (file)
@@ -44,7 +44,7 @@ Measure_grouping_engraver::finalize ()
 {
   if (grouping_)
     {
-      grouping_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+      grouping_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
       grouping_->suicide ();
       grouping_ = 0;
     }
@@ -64,7 +64,7 @@ Measure_grouping_engraver::process_music ()
   if (grouping_ && now.main_part_ >= stop_grouping_mom_ && !now.grace_part_)
     {
       grouping_->set_bound (RIGHT,
-                            Grob::unsmob (get_property ("currentMusicalColumn")));
+                            unsmob<Grob> (get_property ("currentMusicalColumn")));
 
       grouping_ = 0;
     }
@@ -75,10 +75,10 @@ Measure_grouping_engraver::process_music ()
   SCM grouping = get_property ("beatStructure");
   if (scm_is_pair (grouping))
     {
-      Moment *measpos = Moment::unsmob (get_property ("measurePosition"));
+      Moment *measpos = unsmob<Moment> (get_property ("measurePosition"));
       Rational mp = measpos->main_part_;
 
-      Moment *base_mom = Moment::unsmob (get_property ("baseMoment"));
+      Moment *base_mom = unsmob<Moment> (get_property ("baseMoment"));
       Rational base_moment = base_mom->main_part_;
 
       Rational where (0);
@@ -97,7 +97,7 @@ Measure_grouping_engraver::process_music ()
               if (grouplen > 1)
                 {
                   grouping_ = make_spanner ("MeasureGrouping", SCM_EOL);
-                  grouping_->set_bound (LEFT, Grob::unsmob (get_property ("currentMusicalColumn")));
+                  grouping_->set_bound (LEFT, unsmob<Grob> (get_property ("currentMusicalColumn")));
 
                   stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * base_moment;
                   get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_));
index a5cb9fd32159017dc0271a209fb4794b1f34f836..052aae12ac6071a5799de95728f7bf0e33efa4b2 100644 (file)
@@ -29,7 +29,7 @@ MAKE_SCHEME_CALLBACK (Measure_grouping, print, 1);
 SCM
 Measure_grouping::print (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
 
   SCM which = me->get_property ("style");
   Real height = robust_scm2double (me->get_property ("height"), 1);
index 9713b999996a967cc6a0b37d48eec86b129543bb..3550e8938240d13abd1b4f1ff76a0bb2d9f6916e 100644 (file)
@@ -34,8 +34,8 @@ MAKE_SCHEME_CALLBACK (Melody_spanner, calc_neutral_stem_direction, 1);
 SCM
 Melody_spanner::calc_neutral_stem_direction (SCM smob)
 {
-  Grob *stem = Grob::unsmob (smob);
-  Grob *me = Grob::unsmob (stem->get_object ("melody-spanner"));
+  Grob *stem = unsmob<Grob> (smob);
+  Grob *me = unsmob<Grob> (stem->get_object ("melody-spanner"));
   if (!me || !me->is_live ())
     return scm_from_int (DOWN);
 
index 7d4794434d510250c0259cef83d13b3db7929bb5..ac1eb1f10af267f215b2385e723ff0ab361bf071 100644 (file)
@@ -129,7 +129,7 @@ Mensural_ligature_engraver::transform_heads (vector<Grob_info> const &primitives
           continue;
         }
 
-      int pitch = Pitch::unsmob (nr->get_property ("pitch"))->steps ();
+      int pitch = unsmob<Pitch> (nr->get_property ("pitch"))->steps ();
       int prim = 0;
 
       if (at_beginning)
@@ -182,7 +182,7 @@ Mensural_ligature_engraver::transform_heads (vector<Grob_info> const &primitives
             }
           // b. descendens longa or brevis
           else if (i < s - 1
-                   && (Pitch::unsmob (primitives[i + 1].event_cause ()
+                   && (unsmob<Pitch> (primitives[i + 1].event_cause ()
                                      ->get_property ("pitch"))->steps () < pitch)
                    && duration_log > -3)
             {
@@ -275,7 +275,7 @@ Mensural_ligature_engraver::transform_heads (vector<Grob_info> const &primitives
                   /*
                     breve: check whether descending
                   */
-                  int const next_pitch = Pitch::unsmob
+                  int const next_pitch = unsmob<Pitch>
                                          (next_info.event_cause ()->get_property ("pitch"))->steps ();
                   if (next_pitch < pitch)
                     /*
index 42f5270cc53ce67573ac83d03647d5a1c16a0331..5a3b3e9543a210e1e95e5338bb838f347ada0014 100644 (file)
@@ -270,7 +270,7 @@ MAKE_SCHEME_CALLBACK (Mensural_ligature, brew_ligature_primitive, 1);
 SCM
 Mensural_ligature::brew_ligature_primitive (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return internal_brew_primitive (me).smobbed_copy ();
 }
 
index 279f8f721cef5e99618f8792f0933de2e46c1638..e1de3e23e0f48692e536060357856741152f65ee 100644 (file)
@@ -138,9 +138,9 @@ Metronome_mark_engraver::stop_translation_timestep ()
             first notational element of the measure if no time
             signature is present in that measure).
           */
-          if (Grob *mc = Grob::unsmob (get_property ("currentMusicalColumn")))
+          if (Grob *mc = unsmob<Grob> (get_property ("currentMusicalColumn")))
             text_->set_parent (mc, X_AXIS);
-          else if (Grob *cc = Grob::unsmob (get_property ("currentCommandColumn")))
+          else if (Grob *cc = unsmob<Grob> (get_property ("currentCommandColumn")))
             text_->set_parent (cc, X_AXIS);
         }
       text_->set_object ("side-support-elements",
index c35286c1eba8960e78c983b64b0839407ebf40fc..90ea063f736d1c3af3a884ba7cc5858506d1ff7e 100644 (file)
@@ -73,7 +73,7 @@ Midi_control_function_performer::disconnect_from_context (Context *c)
 void
 Midi_control_function_performer::announce_function_value_change (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
   SCM sym = ev->get_property ("symbol");
   if (!scm_is_symbol (sym))
     return;
index 9f17543bdbb47da6b07f5a7b1be4796280a9226c..740b6ee2c9075789ee2dee31d16fee22bd1e4e2e 100644 (file)
@@ -78,8 +78,8 @@ LY_DEFINE (ly_moment_sub, "ly:moment-sub",
   LY_ASSERT_SMOB (Moment, a, 1);
   LY_ASSERT_SMOB (Moment, b, 2);
 
-  Moment *ma = Moment::unsmob (a);
-  Moment *mb = Moment::unsmob (b);
+  Moment *ma = unsmob<Moment> (a);
+  Moment *mb = unsmob<Moment> (b);
 
   return (*ma - *mb).smobbed_copy ();
 }
@@ -91,8 +91,8 @@ LY_DEFINE (ly_moment_add, "ly:moment-add",
   LY_ASSERT_SMOB (Moment, a, 1);
   LY_ASSERT_SMOB (Moment, b, 2);
 
-  Moment *ma = Moment::unsmob (a);
-  Moment *mb = Moment::unsmob (b);
+  Moment *ma = unsmob<Moment> (a);
+  Moment *mb = unsmob<Moment> (b);
 
   return (*ma + *mb).smobbed_copy ();
 }
@@ -104,8 +104,8 @@ LY_DEFINE (ly_moment_mul, "ly:moment-mul",
   LY_ASSERT_SMOB (Moment, a, 1);
   LY_ASSERT_SMOB (Moment, b, 2);
 
-  Moment *ma = Moment::unsmob (a);
-  Moment *mb = Moment::unsmob (b);
+  Moment *ma = unsmob<Moment> (a);
+  Moment *mb = unsmob<Moment> (b);
   return (*ma * * mb).smobbed_copy ();
 }
 
@@ -116,8 +116,8 @@ LY_DEFINE (ly_moment_div, "ly:moment-div",
   LY_ASSERT_SMOB (Moment, a, 1);
   LY_ASSERT_SMOB (Moment, b, 2);
 
-  Moment *ma = Moment::unsmob (a);
-  Moment *mb = Moment::unsmob (b);
+  Moment *ma = unsmob<Moment> (a);
+  Moment *mb = unsmob<Moment> (b);
 
   return (*ma / * mb).smobbed_copy ();
 }
@@ -129,8 +129,8 @@ LY_DEFINE (ly_moment_mod, "ly:moment-mod",
   LY_ASSERT_SMOB (Moment, a, 1);
   LY_ASSERT_SMOB (Moment, b, 2);
 
-  Moment *ma = Moment::unsmob (a);
-  Moment *mb = Moment::unsmob (b);
+  Moment *ma = unsmob<Moment> (a);
+  Moment *mb = unsmob<Moment> (b);
   return (*ma % * mb).smobbed_copy ();
 }
 
@@ -140,7 +140,7 @@ LY_DEFINE (ly_moment_grace, "ly:moment-grace",
 {
   LY_ASSERT_SMOB (Moment, mom, 1);
 
-  return ly_rational2scm (Moment::unsmob (mom)->grace_part_);
+  return ly_rational2scm (unsmob<Moment> (mom)->grace_part_);
 }
 
 LY_DEFINE (ly_moment_grace_numerator, "ly:moment-grace-numerator",
@@ -149,7 +149,7 @@ LY_DEFINE (ly_moment_grace_numerator, "ly:moment-grace-numerator",
 {
   LY_ASSERT_SMOB (Moment, mom, 1);
 
-  Moment *ma = Moment::unsmob (mom);
+  Moment *ma = unsmob<Moment> (mom);
 
   return scm_from_int64 (ma->grace_part_.numerator ());
 }
@@ -159,7 +159,7 @@ LY_DEFINE (ly_moment_grace_denominator, "ly:moment-grace-denominator",
            "Extract denominator from grace timing.")
 {
   LY_ASSERT_SMOB (Moment, mom, 1);
-  Moment *ma = Moment::unsmob (mom);
+  Moment *ma = unsmob<Moment> (mom);
 
   return scm_from_int64 (ma->grace_part_.denominator ());
 }
@@ -170,7 +170,7 @@ LY_DEFINE (ly_moment_main, "ly:moment-main",
 {
   LY_ASSERT_SMOB (Moment, mom, 1);
 
-  return ly_rational2scm (Moment::unsmob (mom)->main_part_);
+  return ly_rational2scm (unsmob<Moment> (mom)->main_part_);
 }
 
 LY_DEFINE (ly_moment_main_numerator, "ly:moment-main-numerator",
@@ -178,7 +178,7 @@ LY_DEFINE (ly_moment_main_numerator, "ly:moment-main-numerator",
            "Extract numerator from main timing.")
 {
   LY_ASSERT_SMOB (Moment, mom, 1);
-  Moment *ma = Moment::unsmob (mom);
+  Moment *ma = unsmob<Moment> (mom);
 
   return scm_from_int64 (ma->main_part_.numerator ());
 }
@@ -188,7 +188,7 @@ LY_DEFINE (ly_moment_main_denominator, "ly:moment-main-denominator",
            "Extract denominator from main timing.")
 {
   LY_ASSERT_SMOB (Moment, mom, 1);
-  Moment *ma = Moment::unsmob (mom);
+  Moment *ma = unsmob<Moment> (mom);
 
   return scm_from_int64 (ma->main_part_.denominator ());
 }
@@ -200,8 +200,8 @@ LY_DEFINE (ly_moment_less_p, "ly:moment<?",
   LY_ASSERT_SMOB (Moment, a, 1);
   LY_ASSERT_SMOB (Moment, b, 2);
 
-  Moment *ma = Moment::unsmob (a);
-  Moment *mb = Moment::unsmob (b);
+  Moment *ma = unsmob<Moment> (a);
+  Moment *mb = unsmob<Moment> (b);
 
   return ly_bool2scm (*ma < *mb);
 }
index 9f3e8ed383837e3fb7059eebff437cac5423588a..6fbd55f498876c0a604deb1007efd673cc23cf4b 100644 (file)
@@ -71,8 +71,8 @@ Moment::as_scheme () const
 SCM
 Moment::equal_p (SCM a, SCM b)
 {
-  Moment *m1 = Moment::unsmob (a);
-  Moment *m2 = Moment::unsmob (b);
+  Moment *m1 = unsmob<Moment> (a);
+  Moment *m2 = unsmob<Moment> (b);
 
   return (*m1 == *m2) ? SCM_BOOL_T : SCM_BOOL_F;
 }
@@ -186,7 +186,7 @@ operator << (ostream &os, Moment const &m)
 Moment
 robust_scm2moment (SCM m, Moment d)
 {
-  Moment *p = Moment::unsmob (m);
+  Moment *p = unsmob<Moment> (m);
   if (!p)
     return d;
   else
@@ -196,5 +196,5 @@ robust_scm2moment (SCM m, Moment d)
 bool
 moment_less (SCM a, SCM b)
 {
-  return *Moment::unsmob (a) < *Moment::unsmob (b);
+  return *unsmob<Moment> (a) < *unsmob<Moment> (b);
 }
index 045359f7e948e9715e9152f6e39df7896ac2fdf1..30f3435d99708e3f22c1b7e8d746c59f827ca000 100644 (file)
@@ -167,7 +167,7 @@ Multi_measure_rest_engraver::stop_translation_timestep ()
      -- jneem */
   if (bar_seen_)
     {
-      Grob *cmc = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *cmc = unsmob<Grob> (get_property ("currentCommandColumn"));
 
       /* Ugh, this is a kludge - need this for multi-measure-rest-grace.ly  */
       last_command_item_ = dynamic_cast<Item *> (cmc);
index 0321082a57dee37a98cb0cf1d540ddaef1c4ff32..7f2a720d6f809e06736272397e703d577d70f827 100644 (file)
@@ -62,7 +62,7 @@ MAKE_SCHEME_CALLBACK (Multi_measure_rest, percent, 1);
 SCM
 Multi_measure_rest::percent (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Spanner *sp = dynamic_cast<Spanner *> (me);
 
   Stencil r = Percent_repeat_item_interface::x_percent (me, 1);
@@ -96,7 +96,7 @@ MAKE_SCHEME_CALLBACK (Multi_measure_rest, print, 1);
 SCM
 Multi_measure_rest::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Spanner *sp = dynamic_cast<Spanner *> (me);
 
   Interval sp_iv = bar_width (sp);
@@ -120,7 +120,7 @@ MAKE_SCHEME_CALLBACK (Multi_measure_rest, height, 1);
 SCM
 Multi_measure_rest::height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Real space = 1000000; // something very large...
 
@@ -189,7 +189,7 @@ calc_measure_duration_log (Grob *me)
 {
   SCM sml = dynamic_cast<Spanner *> (me)->get_bound (LEFT)
             ->get_property ("measure-length");
-  Rational ml = (Moment::is_smob (sml)) ? Moment::unsmob (sml)->main_part_
+  Rational ml = (unsmob<Moment> (sml)) ? unsmob<Moment> (sml)->main_part_
                 : Rational (1);
   double measure_duration = ml.Rational::to_double ();
   bool force_round_up = to_boolean (scm_list_p (scm_member (scm_cons (scm_from_int64 (ml.numerator ()),
@@ -326,7 +326,7 @@ Multi_measure_rest::church_rest (Grob *me, Font_metric *musfont, int measure_cou
 
   Stencil mol;
   for (SCM s = mols; scm_is_pair (s); s = scm_cdr (s))
-    mol.add_at_edge (X_AXIS, LEFT, *Stencil::unsmob (scm_car (s)),
+    mol.add_at_edge (X_AXIS, LEFT, *unsmob<Stencil> (scm_car (s)),
                      inner_padding);
   mol.align_to (X_AXIS, LEFT);
   mol.translate_axis (outer_padding_factor * inner_padding, X_AXIS);
@@ -355,9 +355,9 @@ Multi_measure_rest::calculate_spacing_rods (Grob *me, Real length)
   Item *lb = li->find_prebroken_piece (RIGHT);
   Item *rb = ri->find_prebroken_piece (LEFT);
 
-  Grob *spacing = Grob::unsmob (li->get_object ("spacing"));
+  Grob *spacing = unsmob<Grob> (li->get_object ("spacing"));
   if (!spacing)
-    spacing = Grob::unsmob (ri->get_object ("spacing"));
+    spacing = unsmob<Grob> (ri->get_object ("spacing"));
   if (spacing)
     {
       Spacing_options options;
@@ -402,7 +402,7 @@ MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_spacing_rods, 1);
 SCM
 Multi_measure_rest::set_spacing_rods (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real sym_width = symbol_stencil (me, 0.0).extent (X_AXIS).length ();
   calculate_spacing_rods (me, sym_width);
 
@@ -413,7 +413,7 @@ MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_text_rods, 1);
 SCM
 Multi_measure_rest::set_text_rods (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Stencil *stil = me->get_stencil ();
 
   /* FIXME uncached */
index 3afb1099f03c388ce74ebc9e3372ec81b7def2e2..5246b6dbe6282c3dc0e67e41c74611d3a49e9d5c 100644 (file)
@@ -6,7 +6,7 @@ LY_DEFINE (ly_music_function_extract, "ly:music-function-extract", 1, 0, 0,
 {
   LY_ASSERT_SMOB (Music_function, x, 1);
 
-  return Music_function::unsmob (x)->get_function ();
+  return unsmob<Music_function> (x)->get_function ();
 }
 
 LY_DEFINE (ly_music_function_signature, "ly:music-function-signature", 1, 0, 0,
@@ -15,7 +15,7 @@ LY_DEFINE (ly_music_function_signature, "ly:music-function-signature", 1, 0, 0,
 {
   LY_ASSERT_SMOB (Music_function, x, 1);
 
-  return Music_function::unsmob (x)->get_signature ();
+  return unsmob<Music_function> (x)->get_signature ();
 }
 
 LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0,
index dabcccfb25aaeb4b56160e550155df72ab18338c..a9098bcba31d8486ad821f6b4255095a9d6f4591 100644 (file)
@@ -85,7 +85,7 @@ Music_iterator::get_static_get_iterator (Music *m)
   if (ly_is_procedure (ctor))
     {
       iter = scm_call_0 (ctor);
-      p = Music_iterator::unsmob (iter);
+      p = unsmob<Music_iterator> (iter);
     }
   else
     {
@@ -149,7 +149,7 @@ SCM
 Music_iterator::get_iterator (Music *m) const
 {
   SCM ip = get_static_get_iterator (m);
-  Music_iterator *p = Music_iterator::unsmob (ip);
+  Music_iterator *p = unsmob<Music_iterator> (ip);
 
   p->init_context (m, get_outlet ());
 
index 64866c75c75ceeabec734b9bf694c5b8c00008e8..16959dbfb35132d9d69df60abe08d79c438d49fe 100644 (file)
@@ -29,7 +29,7 @@ LY_DEFINE (ly_music_length, "ly:music-length",
            " it as a @code{Moment} object.")
 {
   LY_ASSERT_SMOB (Music, mus, 1);
-  Music *sc = Music::unsmob (mus);
+  Music *sc = unsmob<Music> (mus);
   return sc->get_length ().smobbed_copy ();
 }
 
@@ -71,14 +71,14 @@ LY_DEFINE (ly_music_p, "ly:music?",
            1, 0, 0, (SCM obj),
            "Is @var{obj} a music object?")
 {
-  return ly_bool2scm (Music::is_smob (obj));
+  return ly_bool2scm (unsmob<Music> (obj));
 }
 
 LY_DEFINE (ly_event_p, "ly:event?",
            1, 0, 0, (SCM obj),
            "Is @var{obj} a proper (non-rhythmic) event object?")
 {
-  if (Music *m = Music::unsmob (obj))
+  if (Music *m = unsmob<Music> (obj))
     {
       return scm_from_bool (m->is_mus_type ("post-event"));
     }
@@ -93,7 +93,7 @@ LY_DEFINE (ly_music_mutable_properties, "ly:music-mutable-properties",
            " constant and initialized by the @code{make-music} function.")
 {
   LY_ASSERT_SMOB (Music, mus, 1);
-  Music *m = Music::unsmob (mus);
+  Music *m = unsmob<Music> (mus);
   return m->get_property_alist (true);
 }
 
@@ -106,7 +106,7 @@ LY_DEFINE (ly_music_list_p, "ly:music-list?",
 
   while (scm_is_pair (lst))
     {
-      if (!Music::is_smob (scm_car (lst)))
+      if (!unsmob<Music> (scm_car (lst)))
         return SCM_BOOL_F;
       lst = scm_cdr (lst);
     }
@@ -120,8 +120,8 @@ LY_DEFINE (ly_music_deep_copy, "ly:music-deep-copy",
            " @var{m} may be an arbitrary type; cons cells and music"
            " are copied recursively.")
 {
-  if (Music::is_smob (m))
-      return Music::unsmob (m)->clone ()->unprotect ();
+  if (unsmob<Music> (m))
+      return unsmob<Music> (m)->clone ()->unprotect ();
   if (scm_is_pair (m))
     {
       SCM copy = SCM_EOL;
@@ -150,8 +150,8 @@ LY_DEFINE (ly_music_transpose, "ly:music-transpose",
   LY_ASSERT_SMOB (Music, m, 1);
   LY_ASSERT_SMOB (Pitch, p, 2);
 
-  Music *sc = Music::unsmob (m);
-  Pitch *sp = Pitch::unsmob (p);
+  Music *sc = unsmob<Music> (m);
+  Pitch *sp = unsmob<Pitch> (p);
 
   sc->transpose (*sp);
   // SCM_UNDEFINED ?
@@ -168,8 +168,8 @@ LY_DEFINE (ly_music_compress, "ly:music-compress",
   LY_ASSERT_SMOB (Music, m, 1);
   LY_ASSERT_SMOB (Moment, factor, 2);
 
-  Music *sc = Music::unsmob (m);
-  sc->compress (*Moment::unsmob (factor));
+  Music *sc = unsmob<Music> (m);
+  sc->compress (*unsmob<Moment> (factor));
   return sc->self_scm ();
 }
 
@@ -181,8 +181,8 @@ LY_DEFINE (ly_make_music_relative_x, "ly:make-music-relative!",
   LY_ASSERT_SMOB (Music, music, 1);
   LY_ASSERT_SMOB (Pitch, pitch, 2);
 
-  Pitch start = *Pitch::unsmob (pitch);
-  Music *m = Music::unsmob (music);
+  Pitch start = *unsmob<Pitch> (pitch);
+  Music *m = unsmob<Music> (music);
   Pitch last = m->to_relative_octave (start);
 
   return last.smobbed_copy ();
@@ -194,9 +194,9 @@ LY_DEFINE (ly_music_duration_length, "ly:music-duration-length", 1, 0, 0,
            " length.")
 {
   LY_ASSERT_SMOB (Music, mus, 1);
-  Music *m = Music::unsmob (mus);
+  Music *m = unsmob<Music> (mus);
 
-  Duration *d = Duration::unsmob (m->get_property ("duration"));
+  Duration *d = unsmob<Duration> (m->get_property ("duration"));
   Moment len;
 
   if (d)
@@ -214,10 +214,10 @@ LY_DEFINE (ly_music_duration_compress, "ly:music-duration-compress", 2, 0, 0,
   LY_ASSERT_SMOB (Music, mus, 1);
   LY_ASSERT_SMOB (Moment, fact, 2);
 
-  Music *m = Music::unsmob (mus);
-  Moment *f = Moment::unsmob (fact);
+  Music *m = unsmob<Music> (mus);
+  Moment *f = unsmob<Moment> (fact);
 
-  Duration *d = Duration::unsmob (m->get_property ("duration"));
+  Duration *d = unsmob<Duration> (m->get_property ("duration"));
   if (d)
     m->set_property ("duration", d->compressed (f->main_part_).smobbed_copy ());
   return SCM_UNSPECIFIED;
@@ -236,7 +236,7 @@ LY_DEFINE (ly_transpose_key_alist, "ly:transpose-key-alist",
            " pitch @var{pit}.")
 {
   SCM newlist = SCM_EOL;
-  Pitch *p = Pitch::unsmob (pit);
+  Pitch *p = unsmob<Pitch> (pit);
 
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
     {
index 38c384ab05c8b55e7862303f231e80ba995cf363..d280953714b820c25513cd4e54ddf89b84b2ba80 100644 (file)
@@ -30,7 +30,7 @@ void
 transpose_music_list (SCM lst, Pitch rq)
 {
   for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
-    Music::unsmob (scm_car (s))->transpose (rq);
+    unsmob<Music> (scm_car (s))->transpose (rq);
 }
 
 Moment
@@ -41,7 +41,7 @@ Music_sequence::cumulative_length (SCM l)
 
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
     {
-      Moment l = Music::unsmob (scm_car (s))->get_length ();
+      Moment l = unsmob<Music> (scm_car (s))->get_length ();
       if (last_len.grace_part_ && l.main_part_)
         last_len.grace_part_ = Rational (0);
       cumulative += last_len;
@@ -60,7 +60,7 @@ Music_sequence::maximum_length (SCM l)
   Moment dur = 0;
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
     {
-      Music *m = Music::unsmob (scm_car (s));
+      Music *m = unsmob<Music> (scm_car (s));
       if (!m)
         programming_error ("Music sequence should have music elements");
       else
@@ -77,7 +77,7 @@ MAKE_SCHEME_CALLBACK (Music_sequence, maximum_length_callback, 1);
 SCM
 Music_sequence::maximum_length_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
   return maximum_length (me->get_property ("elements")).smobbed_copy ();
 }
 
@@ -85,8 +85,8 @@ MAKE_SCHEME_CALLBACK (Music_sequence, event_chord_length_callback, 1);
 SCM
 Music_sequence::event_chord_length_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Duration *d = Duration::unsmob (me->get_property ("duration"));
+  Music *me = unsmob<Music> (m);
+  Duration *d = unsmob<Duration> (me->get_property ("duration"));
   // Preset duration is used in chord repetitions.
   if (d)
     {
@@ -100,7 +100,7 @@ MAKE_SCHEME_CALLBACK (Music_sequence, cumulative_length_callback, 1);
 SCM
 Music_sequence::cumulative_length_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
   return cumulative_length (me->get_property ("elements")).smobbed_copy ();
 }
 
@@ -108,7 +108,7 @@ MAKE_SCHEME_CALLBACK (Music_sequence, minimum_start_callback, 1);
 SCM
 Music_sequence::minimum_start_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
   return minimum_start (me->get_property ("elements")).smobbed_copy ();
 }
 
@@ -116,7 +116,7 @@ MAKE_SCHEME_CALLBACK (Music_sequence, first_start_callback, 1);
 SCM
 Music_sequence::first_start_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
   return first_start (me->get_property ("elements")).smobbed_copy ();
 }
 
@@ -129,7 +129,7 @@ music_list_to_relative (SCM l, Pitch p, bool ret_first)
   Pitch last = p;
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
     {
-      if (Music *m = Music::unsmob (scm_car (s)))
+      if (Music *m = unsmob<Music> (scm_car (s)))
         {
           last = m->to_relative_octave (last);
           if (!count++)
@@ -144,7 +144,7 @@ void
 compress_music_list (SCM l, Moment m)
 {
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
-    Music::unsmob (scm_car (s))->compress (m);
+    unsmob<Music> (scm_car (s))->compress (m);
 }
 
 Moment
@@ -153,7 +153,7 @@ Music_sequence::minimum_start (SCM l)
   Moment m;
 
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
-    m = min (m, Music::unsmob (scm_car (s))->start_mom ());
+    m = min (m, unsmob<Music> (scm_car (s))->start_mom ());
   return m;
 }
 
@@ -163,7 +163,7 @@ Music_sequence::first_start (SCM l)
 
   for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
     {
-      Music *mus = Music::unsmob (scm_car (s));
+      Music *mus = unsmob<Music> (scm_car (s));
       Moment start = mus->start_mom ();
       if (mus->get_length ().to_bool () || start.to_bool ())
         return start;
@@ -175,8 +175,8 @@ MAKE_SCHEME_CALLBACK (Music_sequence, simultaneous_relative_callback, 2);
 SCM
 Music_sequence::simultaneous_relative_callback (SCM music, SCM pitch)
 {
-  Music *me = Music::unsmob (music);
-  Pitch p = *Pitch::unsmob (pitch);
+  Music *me = unsmob<Music> (music);
+  Pitch p = *unsmob<Pitch> (pitch);
   return music_list_to_relative (me->get_property ("elements"),
                                  p, false).smobbed_copy ();
 }
@@ -185,8 +185,8 @@ MAKE_SCHEME_CALLBACK (Music_sequence, event_chord_relative_callback, 2);
 SCM
 Music_sequence::event_chord_relative_callback (SCM music, SCM pitch)
 {
-  Music *me = Music::unsmob (music);
-  Pitch p = *Pitch::unsmob (pitch);
+  Music *me = unsmob<Music> (music);
+  Pitch p = *unsmob<Pitch> (pitch);
   return music_list_to_relative (me->get_property ("elements"),
                                  p, true).smobbed_copy ();
 }
index cf0ee67a974c9d3ea3f008003d3dc5a4d6592a84..009f64f237caa0e7bdd782f435a0736958ffeede 100644 (file)
@@ -51,9 +51,9 @@ void
 Music_wrapper_iterator::construct_children ()
 {
   Music *my_music = get_music ();
-  Music *child = Music::unsmob (my_music->get_property ("element"));
+  Music *child = unsmob<Music> (my_music->get_property ("element"));
   child_iter_ = (child)
-                ? Music_iterator::unsmob (get_iterator (child))
+                ? unsmob<Music_iterator> (get_iterator (child))
                 : 0;
 }
 
index f3feee844952fd87d7c16be226066e5011329509..adf510c2f8473eea6a8887c8046c7285721d6d42 100644 (file)
@@ -25,8 +25,8 @@ MAKE_SCHEME_CALLBACK (Music_wrapper, start_callback, 1);
 SCM
 Music_wrapper::start_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Music *elt = Music::unsmob (me->get_property ("element"));
+  Music *me = unsmob<Music> (m);
+  Music *elt = unsmob<Music> (me->get_property ("element"));
   if (elt)
     return elt->start_mom ().smobbed_copy ();
   else
@@ -37,8 +37,8 @@ MAKE_SCHEME_CALLBACK (Music_wrapper, length_callback, 1);
 SCM
 Music_wrapper::length_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Music *elt = Music::unsmob (me->get_property ("element"));
+  Music *me = unsmob<Music> (m);
+  Music *elt = unsmob<Music> (me->get_property ("element"));
   if (elt)
     return elt->get_length ().smobbed_copy ();
   else
index 6d8c9a281e480a70d010b3d75498206b6d5a7e5d..613b5387ff772989ad19adf62b0338c89ba33553 100644 (file)
@@ -90,13 +90,13 @@ Moment
 Music::get_length () const
 {
   SCM lst = get_property ("length");
-  if (Moment::is_smob (lst))
-    return *Moment::unsmob (lst);
+  if (unsmob<Moment> (lst))
+    return *unsmob<Moment> (lst);
 
   if (ly_is_procedure (length_callback_))
     {
       SCM res = scm_call_1 (length_callback_, self_scm ());
-      return *Moment::unsmob (res);
+      return *unsmob<Moment> (res);
     }
 
   return Moment (0);
@@ -109,7 +109,7 @@ Music::start_mom () const
   if (ly_is_procedure (lst))
     {
       SCM res = scm_call_1 (lst, self_scm ());
-      return *Moment::unsmob (res);
+      return *unsmob<Moment> (res);
     }
 
   Moment m;
@@ -133,7 +133,7 @@ Pitch
 Music::generic_to_relative_octave (Pitch last)
 {
   SCM elt = get_property ("element");
-  Pitch *old_pit = Pitch::unsmob (get_property ("pitch"));
+  Pitch *old_pit = unsmob<Pitch> (get_property ("pitch"));
   if (old_pit)
     {
       Pitch new_pit = *old_pit;
@@ -157,7 +157,7 @@ Music::generic_to_relative_octave (Pitch last)
       last = new_pit;
     }
 
-  if (Music *m = Music::unsmob (elt))
+  if (Music *m = unsmob<Music> (elt))
     last = m->to_relative_octave (last);
 
   (void) music_list_to_relative (get_property ("articulations"), last, true);
@@ -171,7 +171,7 @@ Music::to_relative_octave (Pitch last)
   SCM callback = get_property ("to-relative-callback");
   if (ly_is_procedure (callback))
     {
-      Pitch *p = Pitch::unsmob (scm_call_2 (callback, self_scm (),
+      Pitch *p = unsmob<Pitch> (scm_call_2 (callback, self_scm (),
                                            last.smobbed_copy ()));
       return *p;
     }
@@ -184,11 +184,11 @@ Music::compress (Moment factor)
 {
   SCM elt = get_property ("element");
 
-  if (Music *m = Music::unsmob (elt))
+  if (Music *m = unsmob<Music> (elt))
     m->compress (factor);
 
   compress_music_list (get_property ("elements"), factor);
-  Duration *d = Duration::unsmob (get_property ("duration"));
+  Duration *d = unsmob<Duration> (get_property ("duration"));
   if (d)
     set_property ("duration",
                   d->compressed (factor.main_part_).smobbed_copy ());
@@ -207,7 +207,7 @@ transpose_mutable (SCM alist, Pitch delta)
       SCM val = scm_cdr (entry);
       SCM new_val = val;
 
-      if (Pitch *p = Pitch::unsmob (val))
+      if (Pitch *p = unsmob<Pitch> (val))
         {
           Pitch transposed = p->transposed (delta);
 
@@ -219,7 +219,7 @@ transpose_mutable (SCM alist, Pitch delta)
         }
       else if (scm_is_eq (prop, ly_symbol2scm ("element")))
         {
-          if (Music *m = Music::unsmob (val))
+          if (Music *m = unsmob<Music> (val))
             m->transpose (delta);
         }
       else if (scm_is_eq (prop, ly_symbol2scm ("elements"))
@@ -252,7 +252,7 @@ Music::set_spot (Input ip)
 Input *
 Music::origin () const
 {
-  Input *ip = Input::unsmob (get_property ("origin"));
+  Input *ip = unsmob<Input> (get_property ("origin"));
   return ip ? ip : &dummy_input_global;
 }
 
@@ -282,7 +282,7 @@ Music::to_event () const
       SCM art_ev = SCM_EOL;
       for (; scm_is_pair (art_mus); art_mus = scm_cdr (art_mus))
         {
-          Music *m = Music::unsmob (scm_car (art_mus));
+          Music *m = unsmob<Music> (scm_car (art_mus));
           art_ev = scm_cons (m->to_event ()->unprotect (), art_ev);
         }
       e->set_property ("articulations", scm_reverse_x (art_ev, SCM_EOL));
@@ -312,7 +312,7 @@ make_music_by_name (SCM sym)
   SCM rv = scm_call_1 (make_music_proc, sym);
 
   /* UGH. */
-  Music *m = Music::unsmob (rv);
+  Music *m = unsmob<Music> (rv);
   m->protect ();
   return m;
 }
@@ -321,8 +321,8 @@ MAKE_SCHEME_CALLBACK (Music, duration_length_callback, 1);
 SCM
 Music::duration_length_callback (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Duration *d = Duration::unsmob (me->get_property ("duration"));
+  Music *me = unsmob<Music> (m);
+  Duration *d = unsmob<Duration> (me->get_property ("duration"));
 
   Moment mom;
   if (d)
index bcb7766a4cffeb685615f4fce86370b20034701b..3ecad3a89e3d10cefca9de2fd65ffe161ee3842e 100644 (file)
@@ -99,7 +99,7 @@ New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
 
   for (SCM s = arts; scm_is_pair (s); s = scm_cdr (s))
     {
-      Stream_event *ev = Stream_event::unsmob (scm_car (s));
+      Stream_event *ev = unsmob<Stream_event> (scm_car (s));
 
       if (!ev)
         continue;
@@ -132,7 +132,7 @@ New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
       else if (ev->in_event_class ("harmonic-event"))
         {
           inf.grob ()->set_property ("style", ly_symbol2scm ("harmonic"));
-          Grob *d = Grob::unsmob (inf.grob ()->get_object ("dot"));
+          Grob *d = unsmob<Grob> (inf.grob ()->get_object ("dot"));
           if (d && !to_boolean (get_property ("harmonicDots")))
             d->suicide ();
         }
@@ -197,7 +197,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
     if (stem_)
       {
         Side_position_interface::add_support (scripts->at (i).script_, stem_);
-        if (Grob *flag = Grob::unsmob (stem_->get_object ("flag")))
+        if (Grob *flag = unsmob<Grob> (stem_->get_object ("flag")))
           Side_position_interface::add_support (scripts->at (i).script_, flag);
       }
 
@@ -281,12 +281,12 @@ New_fingering_engraver::position_scripts (SCM orientations,
       f->set_parent (ft.head_, Y_AXIS);
       f->set_property ("avoid-slur", ly_symbol2scm ("inside"));
       if (hordir == LEFT
-          && Grob::is_smob (ft.head_->get_object ("accidental-grob")))
+          && unsmob<Grob> (ft.head_->get_object ("accidental-grob")))
         Side_position_interface::add_support (f,
-                                              Grob::unsmob (ft.head_->get_object ("accidental-grob")));
-      else if (Grob::is_smob (ft.head_->get_object ("dot")))
+                                              unsmob<Grob> (ft.head_->get_object ("accidental-grob")));
+      else if (unsmob<Grob> (ft.head_->get_object ("dot")))
         Side_position_interface::add_support (f,
-                                              Grob::unsmob (ft.head_->get_object ("dot")));
+                                              unsmob<Grob> (ft.head_->get_object ("dot")));
 
       Self_alignment_interface::set_aligned_on_parent (f, Y_AXIS);
       Side_position_interface::set_axis (f, X_AXIS);
index 6f205e3f22153dd4763d15e95247d93111566e73..a9564951f3a6a8b349f1f579cb8842e3d81807af 100644 (file)
@@ -266,7 +266,7 @@ check_meshing_chords (Grob *me,
 
       if (dot_wipe_head)
         {
-          if (Grob *d = Grob::unsmob (dot_wipe_head->get_object ("dot")))
+          if (Grob *d = unsmob<Grob> (dot_wipe_head->get_object ("dot")))
             d->suicide ();
         }
 
@@ -307,18 +307,18 @@ check_meshing_chords (Grob *me,
   if (shift_amount < -1e-6
       && Rhythmic_head::dot_count (head_up))
     {
-      Grob *d = Grob::unsmob (head_up->get_object ("dot"));
+      Grob *d = unsmob<Grob> (head_up->get_object ("dot"));
       Grob *parent = d->get_parent (X_AXIS);
       if (Dot_column::has_interface (parent))
         Side_position_interface::add_support (parent, head_down);
     }
   else if (Rhythmic_head::dot_count (head_down))
     {
-      Grob *d = Grob::unsmob (head_down->get_object ("dot"));
+      Grob *d = unsmob<Grob> (head_down->get_object ("dot"));
       Grob *parent = d->get_parent (X_AXIS);
       if (Dot_column::has_interface (parent))
         {
-          Grob *stem = Grob::unsmob (head_up->get_object ("stem"));
+          Grob *stem = unsmob<Grob> (head_up->get_object ("stem"));
           // Loop over all heads on an up-pointing-stem to see if dots
           // need to clear any heads suspended on its right side.
           extract_grob_set (stem, "note-heads", heads);
@@ -331,12 +331,12 @@ check_meshing_chords (Grob *me,
   if (shift_amount > 1e-6
       && Rhythmic_head::dot_count (head_down))
     {
-      Grob *dot_down = Grob::unsmob (head_down->get_object ("dot"));
+      Grob *dot_down = unsmob<Grob> (head_down->get_object ("dot"));
       Grob *col_down = dot_down->get_parent (X_AXIS);
       Direction dir = UP;
       if (Rhythmic_head::dot_count (head_up))
         {
-          Grob *dot_up = Grob::unsmob (head_up->get_object ("dot"));
+          Grob *dot_up = unsmob<Grob> (head_up->get_object ("dot"));
           Grob *col_up = dot_up->get_parent (X_AXIS);
           if (col_up == col_down) // let the common DotColumn arrange dots
             dir = CENTER;
@@ -345,10 +345,10 @@ check_meshing_chords (Grob *me,
         }
       if (dir != CENTER)
         {
-          Grob *stem = Grob::unsmob (head_down->get_object ("stem"));
+          Grob *stem = unsmob<Grob> (head_down->get_object ("stem"));
           extract_grob_set (stem, "note-heads", heads);
           for (vsize i = 0; i < heads.size (); i++)
-            if (Grob *dot = Grob::unsmob (heads[i]->get_object ("dot")))
+            if (Grob *dot = unsmob<Grob> (heads[i]->get_object ("dot")))
               dot->set_property ("direction", scm_from_int (dir));
         }
     }
@@ -360,7 +360,7 @@ MAKE_SCHEME_CALLBACK (Note_collision_interface, calc_positioning_done, 1)
 SCM
 Note_collision_interface::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   me->set_property ("positioning-done", SCM_BOOL_T);
 
   Drul_array<vector<Grob *> > clash_groups = get_clash_groups (me);
@@ -397,7 +397,7 @@ Note_collision_interface::calc_positioning_done (SCM smob)
   vector<Real> amounts;
   for (; scm_is_pair (hand); hand = scm_cdr (hand))
     {
-      Grob *s = Grob::unsmob (scm_caar (hand));
+      Grob *s = unsmob<Grob> (scm_caar (hand));
       Real amount = scm_to_double (scm_cdar (hand)) * wid;
 
       done.push_back (s);
@@ -407,7 +407,7 @@ Note_collision_interface::calc_positioning_done (SCM smob)
     }
   for (; scm_is_pair (autos); autos = scm_cdr (autos))
     {
-      Grob *s = Grob::unsmob (scm_caar (autos));
+      Grob *s = unsmob<Grob> (scm_caar (autos));
       Real amount = scm_to_double (scm_cdar (autos)) * wid;
 
       vsize x = find (done, s) - done.begin ();
@@ -589,7 +589,7 @@ Note_collision_interface::note_head_positions (Grob *me)
   vector<int> out;
   extract_grob_set (me, "elements", elts);
   for (vsize i = 0; i < elts.size (); i++)
-    if (Grob *stem = Grob::unsmob (elts[i]->get_object ("stem")))
+    if (Grob *stem = unsmob<Grob> (elts[i]->get_object ("stem")))
       {
         vector<int> nhp = Stem::note_head_positions (stem);
         out.insert (out.end (), nhp.begin (), nhp.end ());
index d9eee204caade4e29711f702b7817af81ca427c5..c665b70548ac4f163d132ba73e21a7a545abbd99 100644 (file)
@@ -26,7 +26,7 @@ LY_DEFINE (ly_note_column_accidentals, "ly:note-column-accidentals",
            "Return the @code{AccidentalPlacement} grob from @var{note-column}"
            " if any, or @code{SCM_EOL} otherwise.")
 {
-  Grob *grob = Grob::unsmob (note_column);
+  Grob *grob = unsmob<Grob> (note_column);
   LY_ASSERT_SMOB (Grob, note_column, 1);
   Grob *acc = Note_column::accidentals (grob);
   if (acc)
@@ -39,7 +39,7 @@ LY_DEFINE (ly_note_column_dot_column, "ly:note-column-dot-column",
            "Return the @code{DotColumn} grob from @var{note-column}"
            " if any, or @code{SCM_EOL} otherwise.")
 {
-  Grob *grob = Grob::unsmob (note_column);
+  Grob *grob = unsmob<Grob> (note_column);
   LY_ASSERT_SMOB (Grob, note_column, 1);
   Grob *dot_column = Note_column::dot_column (grob);
   if (dot_column)
index 91a7690697e338a8fe054808d2aabc9c4401b19d..f5b6f35e9045189b6ba5f88118cefc522b7100cf 100644 (file)
@@ -43,7 +43,7 @@ using namespace std;
 bool
 Note_column::has_rests (Grob *me)
 {
-  return Grob::is_smob (me->get_object ("rest"));
+  return unsmob<Grob> (me->get_object ("rest"));
 }
 
 bool
@@ -61,7 +61,7 @@ Item *
 Note_column::get_stem (Grob *me)
 {
   SCM s = me->get_object ("stem");
-  return Item::unsmob (s);
+  return unsmob<Item> (s);
 }
 
 Item *
@@ -71,7 +71,7 @@ Note_column::get_flag (Grob *me)
   if (stem)
     {
       SCM s = stem->get_object ("flag");
-      return Item::unsmob (s);
+      return unsmob<Item> (s);
     }
   return 0;
 }
@@ -97,7 +97,7 @@ Note_column::head_positions_interval (Grob *me)
 Direction
 Note_column::dir (Grob *me)
 {
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   if (stem && Stem::has_interface (stem))
     return get_grob_direction (stem);
   else
@@ -124,7 +124,7 @@ Note_column::set_stem (Grob *me, Grob *stem)
 Grob *
 Note_column::get_rest (Grob *me)
 {
-  return Grob::unsmob (me->get_object ("rest"));
+  return unsmob<Grob> (me->get_object ("rest"));
 }
 
 void
@@ -141,7 +141,7 @@ Note_column::add_head (Grob *me, Grob *h)
     }
   else if (Note_head::has_interface (h))
     {
-      if (Grob::is_smob (me->get_object ("rest")))
+      if (unsmob<Grob> (me->get_object ("rest")))
         both = true;
       Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"), h);
     }
@@ -179,7 +179,7 @@ Note_column::calc_main_extent (Grob *me)
       }
     Grob *main_item = main_head
             ? main_head
-            : Grob::unsmob (me->get_object ("rest"));
+            : unsmob<Grob> (me->get_object ("rest"));
 
     return main_item
             ? main_item->extent (me, X_AXIS)
@@ -197,7 +197,7 @@ Note_column::accidentals (Grob *me)
   for (vsize i = 0; i < heads.size (); i++)
     {
       Grob *h = heads[i];
-      acc = h ? Grob::unsmob (h->get_object ("accidental-grob")) : 0;
+      acc = h ? unsmob<Grob> (h->get_object ("accidental-grob")) : 0;
       if (acc)
         break;
     }
@@ -218,7 +218,7 @@ Note_column::dot_column (Grob *me)
   extract_grob_set (me, "note-heads", heads);
   for (vsize i = 0; i < heads.size (); i++)
     {
-      Grob *dots = Grob::unsmob (heads[i]->get_object ("dot"));
+      Grob *dots = unsmob<Grob> (heads[i]->get_object ("dot"));
       if (dots)
         return dots->get_parent (X_AXIS);
     }
index fa0e58dcc6d97a2628870f95afa61bd62c799a05..c87aab64beb91a4ce9df15ccf69eacf298d9550c 100644 (file)
@@ -27,7 +27,7 @@ LY_DEFINE (ly_note_head__stem_attachment, "ly:note-head::stem-attachment",
            " notehead @var{glyph-name}.")
 {
   LY_ASSERT_SMOB (Font_metric, font_metric, 1);
-  Font_metric *fm = Font_metric::unsmob (font_metric);
+  Font_metric *fm = unsmob<Font_metric> (font_metric);
   LY_ASSERT_TYPE (scm_is_string, glyph_name, 2);
 
   return ly_offset2scm (Note_head::get_stem_attachment (fm, ly_scm2string (glyph_name)));
index 3c6dc827631566aa25e3ed4e872d2d36bd61a4fd..33bbf339cafd9b431b83d2955522c2c8f91c1379 100644 (file)
@@ -51,7 +51,7 @@ internal_print (Grob *me, string *font_char)
   Stencil out = fm->find_by_name (idx_either + suffix);
   if (out.is_empty ())
     {
-      Grob *stem = Grob::unsmob (me->get_object ("stem"));
+      Grob *stem = unsmob<Grob> (me->get_object ("stem"));
       Direction stem_dir = stem ? get_grob_direction (stem) : CENTER;
 
       if (stem_dir == CENTER)
@@ -83,8 +83,8 @@ internal_print (Grob *me, string *font_char)
   if (style == "kievan"
       && 3 == robust_scm2int (me->get_property ("duration-log"), 2))
     {
-      Grob *stem = Grob::unsmob (me->get_object ("stem"));
-      Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+      Grob *stem = unsmob<Grob> (me->get_object ("stem"));
+      Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
       if (beam)
         out = fm->find_by_name (idx_either + "2kievan");
     }
@@ -109,8 +109,8 @@ MAKE_SCHEME_CALLBACK (Note_head, stem_x_shift, 1);
 SCM
 Note_head::stem_x_shift (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   if (stem)
     (void) stem->get_property ("positioning-done");
 
@@ -121,7 +121,7 @@ MAKE_SCHEME_CALLBACK (Note_head, print, 1);
 SCM
 Note_head::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   string idx;
   return internal_print (me, &idx).smobbed_copy ();
@@ -131,7 +131,7 @@ MAKE_SCHEME_CALLBACK (Note_head, include_ledger_line_height, 1);
 SCM
 Note_head::include_ledger_line_height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
 
   if (staff)
@@ -190,7 +190,7 @@ MAKE_SCHEME_CALLBACK (Note_head, calc_stem_attachment, 1);
 SCM
 Note_head::calc_stem_attachment (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Font_metric *fm = Font_interface::get_default_font (me);
   string key;
   internal_print (me, &key);
index 0431981eb65a46b3543acd02b9c8af0c78dc1e06..6322dfa2b9f7ed72b5a8bdfd9af6109fa62fa9b5 100644 (file)
@@ -68,7 +68,7 @@ Note_heads_engraver::process_music ()
       Stream_event *ev = note_evs_[i];
       Item *note = make_item ("NoteHead", ev->self_scm ());
 
-      Pitch *pit = Pitch::unsmob (ev->get_property ("pitch"));
+      Pitch *pit = unsmob<Pitch> (ev->get_property ("pitch"));
 
 #if 0 /* TODO: should have a mechanism to switch off these warnings. */
 
@@ -100,8 +100,8 @@ Note_heads_engraver::process_music ()
         {
           SCM scm_tonic = get_property ("tonic");
           Pitch tonic;
-          if (Pitch::is_smob (scm_tonic))
-            tonic = *Pitch::unsmob (scm_tonic);
+          if (unsmob<Pitch> (scm_tonic))
+            tonic = *unsmob<Pitch> (scm_tonic);
 
           unsigned int delta = (pit->get_notename () - tonic.get_notename () + 7) % 7;
 
index 13d3746faf05f7a2044c995bd5f32f40c86a583e..3ae9840e0d4090e2e30c6287bda48d5f982008d1 100644 (file)
@@ -50,7 +50,7 @@ Note_name_engraver::process_music ()
     {
       if (i)
         s += " ";
-      Pitch p = *Pitch::unsmob (events_[i]->get_property ("pitch"));
+      Pitch p = *unsmob<Pitch> (events_[i]->get_property ("pitch"));
 
       if (!to_boolean (get_property ("printOctaveNames")))
         p = Pitch (-1, p.get_notename (), p.get_alteration ());
index 1ddbb13ca3daf670056457ecd7ce54826cdc5e2c..aa46440006c21140b3f12828b3e97c5ef6ba2ae0 100644 (file)
@@ -54,15 +54,15 @@ Note_performer::process_music ()
 
   Pitch transposing;
   SCM prop = get_property ("instrumentTransposition");
-  if (Pitch::is_smob (prop))
-    transposing = *Pitch::unsmob (prop);
+  if (unsmob<Pitch> (prop))
+    transposing = *unsmob<Pitch> (prop);
 
   for (vsize i = 0; i < note_evs_.size (); i++)
     {
       Stream_event *n = note_evs_[i];
       SCM pit = n->get_property ("pitch");
 
-      if (Pitch *pitp = Pitch::unsmob (pit))
+      if (Pitch *pitp = unsmob<Pitch> (pit))
         {
           SCM articulations = n->get_property ("articulations");
           Stream_event *tie_event = 0;
@@ -70,7 +70,7 @@ Note_performer::process_music ()
           int velocity = 0;
           for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
             {
-              Stream_event *ev = Stream_event::unsmob (scm_car (s));
+              Stream_event *ev = unsmob<Stream_event> (scm_car (s));
               if (!ev)
                 continue;
 
index 7a7ca7275fc832a0ee978e30400eb0a4ba754d48..f0bca862d98585972abaf03ade23d336de06243f 100644 (file)
@@ -101,9 +101,9 @@ Note_spacing_engraver::finalize ()
   Grob *last_spacing = last_spacings_[parent];
 
   if (last_spacing
-      && !Grob_array::is_smob (last_spacing->get_object ("right-items")))
+      && !unsmob<Grob_array> (last_spacing->get_object ("right-items")))
     {
-      Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
 
       Pointer_group_interface::add_grob (last_spacing,
                                          ly_symbol2scm ("right-items"),
@@ -120,7 +120,7 @@ Note_spacing_engraver::stop_translation_timestep ()
   if (last_spacing
       && to_boolean (get_property ("hasStaffSpacing")))
     {
-      Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
       Pointer_group_interface::add_grob (last_spacing,
                                          ly_symbol2scm ("right-items"),
                                          col);
index 0a90b2ddf769f7b892a74a57a8a3e503edf86420..fcd1523d2f1d2ba88f5b3ca3b2b04da561ac2847 100644 (file)
@@ -49,7 +49,7 @@ Note_spacing::get_spacing (Grob *me, Item *right_col,
   for (vsize i = 0; i < note_columns.size (); i++)
     {
       SCM r = note_columns[i]->get_object ("rest");
-      Grob *g = Grob::unsmob (r);
+      Grob *g = unsmob<Grob> (r);
       Grob *col = note_columns[i]->get_column ();
 
       if (!g)
index 76c5bd8db2280a99ae9dab1d3df252b335e0bbdc..79370fa698dffa4b3eeea8d997c53163ee7ffe4f 100644 (file)
@@ -27,7 +27,7 @@ LY_DEFINE (ly_font_sub_fonts, "ly:font-sub-fonts", 1, 0, 0,
 {
   LY_ASSERT_SMOB (Font_metric, font, 1);
 
-  Font_metric *fm = Font_metric::unsmob (font);
+  Font_metric *fm = unsmob<Font_metric> (font);
   return fm->sub_fonts ();
 }
 
@@ -37,10 +37,10 @@ LY_DEFINE (ly_otf_font_glyph_info, "ly:otf-font-glyph-info", 2, 0, 0,
            " information about named glyph @var{glyph} (a string).")
 {
   Modified_font_metric *fm
-    = derived_unsmob<Modified_font_metric> (font);
+    = unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : derived_unsmob<Open_type_font> (font);
+                        : unsmob<Open_type_font> (font);
 
   SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
   LY_ASSERT_TYPE (scm_is_string, glyph, 2);
@@ -55,10 +55,10 @@ LY_DEFINE (ly_otf_font_table_data, "ly:otf-font-table-data", 2, 0, 0,
            " for non-existent @var{tag}.")
 {
   Modified_font_metric *fm
-    = derived_unsmob<Modified_font_metric> (font);
+    = unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : derived_unsmob<Open_type_font> (font);
+                        : unsmob<Open_type_font> (font);
 
   SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
   LY_ASSERT_TYPE (scm_is_string, tag, 2);
@@ -78,10 +78,10 @@ LY_DEFINE (ly_otf_font_p, "ly:otf-font?", 1, 0, 0,
            "Is @var{font} an OpenType font?")
 {
   Modified_font_metric *fm
-    = derived_unsmob<Modified_font_metric> (font);
+    = unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : derived_unsmob<Open_type_font> (font);
+                        : unsmob<Open_type_font> (font);
 
   return scm_from_bool (otf);
 }
@@ -91,10 +91,10 @@ LY_DEFINE (ly_otf_glyph_count, "ly:otf-glyph-count", 1, 0, 0,
            "Return the number of glyphs in @var{font}.")
 {
   Modified_font_metric *fm
-    = derived_unsmob<Modified_font_metric> (font);
+    = unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : derived_unsmob<Open_type_font> (font);
+                        : unsmob<Open_type_font> (font);
 
   SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
 
@@ -106,10 +106,10 @@ LY_DEFINE (ly_otf_glyph_list, "ly:otf-glyph-list", 1, 0, 0,
            "Return a list of glyph names for @var{font}.")
 {
   Modified_font_metric *fm
-    = derived_unsmob<Modified_font_metric> (font);
+    = unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : derived_unsmob<Open_type_font> (font);
+                        : unsmob<Open_type_font> (font);
 
   SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
 
index 255f7caa0d1431e88e1c18eddb2c52284bbebca8..0007563ed42618fdde566f978e100f0670cdcf7e 100644 (file)
@@ -178,7 +178,7 @@ Open_type_font::get_indexed_char_dimensions (size_t signed_idx) const
     {
       SCM box = scm_hashq_ref (lily_index_to_bbox_table_,
                                scm_from_unsigned_integer (signed_idx), SCM_BOOL_F);
-      Box *box_ptr = Box::unsmob (box);
+      Box *box_ptr = unsmob<Box> (box);
       if (box_ptr)
         return *box_ptr;
     }
index 78aef5d09bbea5889e3db721ba1bf2f63bd0269a..5e962a6bb3eef0b3dcffaea7818419ccf0aa5684 100644 (file)
@@ -49,7 +49,7 @@ MAKE_SCHEME_CALLBACK (Ottava_bracket, print, 1);
 SCM
 Ottava_bracket::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Interval span_points;
 
   Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
@@ -79,7 +79,7 @@ Ottava_bracket::print (SCM smob)
   SCM markup = me->get_property ("text");
   Stencil text;
   if (Text_interface::is_markup (markup))
-    text = *Stencil::unsmob (Text_interface::interpret_markup (layout->self_scm (),
+    text = *unsmob<Stencil> (Text_interface::interpret_markup (layout->self_scm (),
                                                               properties, markup));
 
   Drul_array<Real> shorten = robust_scm2interval (me->get_property ("shorten-pair"),
index a2562b785a1151b90adb4a68e7de4356e68a0a6b..d236ed779d28439768480e21fedaa41af7efb490 100644 (file)
@@ -103,7 +103,7 @@ Ottava_spanner_engraver::typeset_all ()
         {
           if (!finished_->get_bound (RIGHT))
             {
-              Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+              Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
               finished_->set_bound (d, e);
             }
         }
@@ -117,7 +117,7 @@ Ottava_spanner_engraver::stop_translation_timestep ()
 {
   if (span_ && !span_->get_bound (LEFT))
     {
-      Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
       span_->set_bound (LEFT, e);
     }
 
index 3c4ee413e7cc1a099b9f0501b5d99e2449c00ed4..e78eff0673375d921eaeeb6cecf3cf0ffcb5f240 100644 (file)
@@ -32,7 +32,7 @@ LY_DEFINE (ly_output_def_lookup, "ly:output-def-lookup",
           " @var{val} or @code{'()} if @var{val} is undefined.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *op = Output_def::unsmob (def);
+  Output_def *op = unsmob<Output_def> (def);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
 
   SCM answer = op->lookup_variable (sym);
@@ -52,7 +52,7 @@ LY_DEFINE (ly_output_def_scope, "ly:output-def-scope",
           "Return the variable scope inside @var{def}.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *op = Output_def::unsmob (def);
+  Output_def *op = unsmob<Output_def> (def);
   return op->scope_;
 }
 
@@ -61,7 +61,7 @@ LY_DEFINE (ly_output_def_parent, "ly:output-def-parent",
           "Return the parent output definition of @var{def}.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *op = Output_def::unsmob (def);
+  Output_def *op = unsmob<Output_def> (def);
   return op->parent_ ? op->parent_->self_scm () : SCM_EOL;
 }
 
@@ -70,7 +70,7 @@ LY_DEFINE (ly_output_def_set_variable_x, "ly:output-def-set-variable!",
            "Set an output definition @var{def} variable @var{sym} to @var{val}.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *output_def = Output_def::unsmob (def);
+  Output_def *output_def = unsmob<Output_def> (def);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
   output_def->set_variable (sym, val);
   return SCM_UNSPECIFIED;
@@ -81,7 +81,7 @@ LY_DEFINE (ly_output_def_clone, "ly:output-def-clone",
           "Clone output definition @var{def}.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *op = Output_def::unsmob (def);
+  Output_def *op = unsmob<Output_def> (def);
 
   Output_def *clone = op->clone ();
   return clone->unprotect ();
@@ -93,13 +93,13 @@ LY_DEFINE (ly_output_description, "ly:output-description",
 {
   LY_ASSERT_SMOB (Output_def, output_def, 1);
 
-  Output_def *id = Output_def::unsmob (output_def);
+  Output_def *id = unsmob<Output_def> (output_def);
 
   SCM al = ly_module_2_alist (id->scope_);
   SCM ell = SCM_EOL;
   for (SCM s = al; scm_is_pair (s); s = scm_cdr (s))
     {
-      Context_def *td = Context_def::unsmob (scm_cdar (s));
+      Context_def *td = unsmob<Context_def> (scm_cdar (s));
       SCM key = scm_caar (s);
       if (td && key == td->get_context_name ())
        ell = scm_cons (scm_cons (key, td->to_alist ()), ell);
@@ -116,14 +116,14 @@ LY_DEFINE (ly_output_find_context_def, "ly:output-find-context-def",
   if (!SCM_UNBNDP (context_name))
     LY_ASSERT_TYPE (ly_is_symbol, context_name, 2);
 
-  Output_def *id = Output_def::unsmob (output_def);
+  Output_def *id = unsmob<Output_def> (output_def);
 
   SCM al = ly_module_2_alist (id->scope_);
   SCM ell = SCM_EOL;
   for (SCM s = al; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM p = scm_car (s);
-      Context_def *td = Context_def::unsmob (scm_cdr (p));
+      Context_def *td = unsmob<Context_def> (scm_cdr (p));
       if (td && scm_is_eq (scm_car (p), td->get_context_name ())
          && (SCM_UNBNDP (context_name) || td->is_alias (context_name)))
        ell = scm_cons (p, ell);
@@ -139,7 +139,7 @@ LY_DEFINE (ly_paper_outputscale, "ly:paper-outputscale",
           "Return the output-scale for output definition @var{def}.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *b = Output_def::unsmob (def);
+  Output_def *b = unsmob<Output_def> (def);
   return scm_from_double (output_scale (b));
 }
 
@@ -160,7 +160,7 @@ LY_DEFINE (ly_paper_get_font, "ly:paper-get-font",
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
 
-  Output_def *paper = Output_def::unsmob (def);
+  Output_def *paper = unsmob<Output_def> (def);
   Font_metric *fm = select_font (paper, chain);
   return fm->self_scm ();
 }
@@ -171,7 +171,7 @@ LY_DEFINE (ly_paper_get_number, "ly:paper-get-number",
           " @var{def} as a double.")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *layout = Output_def::unsmob (def);
+  Output_def *layout = unsmob<Output_def> (def);
   return scm_from_double (layout->get_dimension (sym));
 }
 
@@ -181,7 +181,7 @@ LY_DEFINE (ly_paper_fonts, "ly:paper-fonts",
           " @var{def} (e.g., @code{\\paper}).")
 {
   LY_ASSERT_SMOB (Output_def, def, 1);
-  Output_def *b = Output_def::unsmob (def);
+  Output_def *b = unsmob<Output_def> (def);
 
   SCM tab1 = b->lookup_variable (ly_symbol2scm ("scaled-fonts"));
   SCM tab2 = b->lookup_variable (ly_symbol2scm ("pango-fonts"));
@@ -210,7 +210,7 @@ LY_DEFINE (ly_paper_fonts, "ly:paper-fonts",
     {
       SCM entry = scm_car (s);
 
-      Font_metric *fm = Font_metric::unsmob (entry);
+      Font_metric *fm = unsmob<Font_metric> (entry);
 
       if (dynamic_cast<Modified_font_metric *> (fm)
          || dynamic_cast<Pango_font *> (fm))
index af407fb70ac08465f87757fde59b59b2936db0de..b58feaea6c588c6141c6d67f5e39a4aa87566994 100644 (file)
@@ -76,7 +76,7 @@ Output_def::mark_smob ()
 void
 assign_context_def (Output_def * m, SCM transdef)
 {
-  Context_def *tp = Context_def::unsmob (transdef);
+  Context_def *tp = unsmob<Context_def> (transdef);
   assert (tp);
 
   if (tp)
@@ -90,7 +90,7 @@ assign_context_def (Output_def * m, SCM transdef)
 SCM
 find_context_def (Output_def const *m, SCM name)
 {
-  Context_def *cd = Context_def::unsmob (m->lookup_variable (name));
+  Context_def *cd = unsmob<Context_def> (m->lookup_variable (name));
   return cd ? cd->self_scm () : SCM_EOL;
 }
 
index 2ab01aa5095bfe5cfb17386b8a761bc3a60f0497..70ec63971dc83c69f35bd9b9f5e482f46944444f 100644 (file)
@@ -29,7 +29,7 @@ LY_DEFINE (ly_page_turn_breaking, "ly:page-turn-breaking",
            " @var{pb} such that page turns only happen in specified places,"
            " returning its pages.")
 {
-  Page_turn_page_breaking b (Paper_book::unsmob (pb));
+  Page_turn_page_breaking b (unsmob<Paper_book> (pb));
   return b.solve ();
 }
 
@@ -39,7 +39,7 @@ LY_DEFINE (ly_optimal_breaking, "ly:optimal-breaking",
            " @var{pb} to minimize badness in bother vertical and horizontal"
            " spacing.")
 {
-  Optimal_page_breaking b (Paper_book::unsmob (pb));
+  Optimal_page_breaking b (unsmob<Paper_book> (pb));
   return b.solve ();
 }
 
@@ -49,7 +49,7 @@ LY_DEFINE (ly_minimal_breaking, "ly:minimal-breaking",
            " without looking for optimal spacing: stack as many lines on"
            " a page before moving to the next one.")
 {
-  Minimal_page_breaking b (Paper_book::unsmob (pb));
+  Minimal_page_breaking b (unsmob<Paper_book> (pb));
   return b.solve ();
 }
 
@@ -59,6 +59,6 @@ LY_DEFINE (ly_one_line_breaking, "ly:one-line-breaking",
            " page.  The paper-width setting will be modified so that"
            " every page will be wider than the widest line.")
 {
-  One_line_page_breaking b (Paper_book::unsmob (pb));
+  One_line_page_breaking b (unsmob<Paper_book> (pb));
   return b.solve ();
 }
index 5a3e64623788854b5adf8ff674302e7bb3ccc613..ef9e095d6abe144f189e39b34709d2cb490a7406 100644 (file)
@@ -554,7 +554,7 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las
   for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM paper_system = scm_car (s);
-      if (Grob *g = Grob::unsmob (scm_car (s)))
+      if (Grob *g = unsmob<Grob> (scm_car (s)))
         {
           System *sys = dynamic_cast<System *> (g);
           paper_system = sys->get_paper_system ();
@@ -567,11 +567,11 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las
   // Create the page and draw it.
   SCM page = make_page (page_num, last);
 
-  Prob *p = Prob::unsmob (page);
+  Prob *p = unsmob<Prob> (page);
   p->set_property ("lines", paper_systems);
   p->set_property ("configuration", configuration);
 
-  Stencil *foot_p = Stencil::unsmob (p->get_property ("foot-stencil"));
+  Stencil *foot_p = unsmob<Stencil> (p->get_property ("foot-stencil"));
   Stencil foot = foot_p ? *foot_p : Stencil ();
 
   SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems);
@@ -658,12 +658,12 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
       for (SCM l = lines; scm_is_pair (l); l = scm_cdr (l))
         {
           SCM labels = SCM_EOL;
-          if (Grob *line = Grob::unsmob (scm_car (l)))
+          if (Grob *line = unsmob<Grob> (scm_car (l)))
             {
               System *system = dynamic_cast<System *> (line);
               labels = system->get_property ("labels");
             }
-          else if (Prob *prob = Prob::unsmob (scm_car (l)))
+          else if (Prob *prob = unsmob<Prob> (scm_car (l)))
             labels = prob->get_property ("labels");
 
           for (SCM lbls = labels; scm_is_pair (lbls); lbls = scm_cdr (lbls))
@@ -689,13 +689,13 @@ Page_breaking::create_system_list ()
   SCM specs = book_->get_system_specs ();
   for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
     {
-      if (Paper_score *ps = Paper_score::unsmob (scm_car (s)))
+      if (Paper_score *ps = unsmob<Paper_score> (scm_car (s)))
         {
           system_specs_.push_back (System_spec (ps));
         }
       else
         {
-          Prob *pb = Prob::unsmob (scm_car (s));
+          Prob *pb = unsmob<Prob> (scm_car (s));
           assert (pb);
 
           pb->protect ();
index 68df82a9597830118d90748bd8b47b9886c5ec10..d242966a9ba24fa95e62240c773e3fbe520e0120 100644 (file)
@@ -29,8 +29,8 @@ LY_DEFINE (ly_get_spacing_spec, "ly:get-spacing-spec", 2, 0, 0,
   LY_ASSERT_SMOB (Grob, from_scm, 1);
   LY_ASSERT_SMOB (Grob, to_scm, 2);
 
-  Grob *from = Grob::unsmob (from_scm);
-  Grob *to = Grob::unsmob (to_scm);
+  Grob *from = unsmob<Grob> (from_scm);
+  Grob *to = unsmob<Grob> (to_scm);
 
   return Page_layout_problem::get_spacing_spec (from, to, false, 0, 0);
 }
index 6fe02c8bad04b73080e1f6a123f7bbe534a6b321..1e79ba0ec528386e740dc879239321b4e33267d4 100644 (file)
@@ -44,7 +44,7 @@ Page_layout_problem::get_footnote_grobs (SCM lines)
   vector<Grob *> footnotes;
   for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
     {
-      if (Grob *g = Grob::unsmob (scm_car (s)))
+      if (Grob *g = unsmob<Grob> (scm_car (s)))
         {
           System *sys = dynamic_cast<System *> (g);
           if (!sys)
@@ -55,7 +55,7 @@ Page_layout_problem::get_footnote_grobs (SCM lines)
           extract_grob_set (sys, "footnotes-after-line-breaking", footnote_grobs);
           footnotes.insert (footnotes.end (), footnote_grobs.begin (), footnote_grobs.end ());
         }
-      else if (Prob *p = Prob::unsmob (scm_car (s)))
+      else if (Prob *p = unsmob<Prob> (scm_car (s)))
         {
           SCM stencils = p->get_property ("footnotes");
           if (scm_is_null (stencils))
@@ -82,9 +82,9 @@ Page_layout_problem::get_footnotes_from_lines (SCM lines)
     return SCM_EOL;
 
   bool footnotes_added;
-  if (Grob *g = Grob::unsmob (scm_car (lines)))
+  if (Grob *g = unsmob<Grob> (scm_car (lines)))
     footnotes_added = !scm_is_null (g->get_property ("footnote-stencil"));
-  else if (Prob *p = Prob::unsmob (scm_car (lines)))
+  else if (Prob *p = unsmob<Prob> (scm_car (lines)))
     footnotes_added = !scm_is_null (p->get_property ("footnote-stencil"));
   else
     {
@@ -100,9 +100,9 @@ Page_layout_problem::get_footnotes_from_lines (SCM lines)
   SCM out = SCM_EOL;
   for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
     {
-      if (Grob *g = Grob::unsmob (scm_car (s)))
+      if (Grob *g = unsmob<Grob> (scm_car (s)))
         out = scm_cons (g->get_property ("footnote-stencil"), out);
-      else if (Prob *p = Prob::unsmob (scm_car (s)))
+      else if (Prob *p = unsmob<Prob> (scm_car (s)))
         out = scm_cons (p->get_property ("footnote-stencil"), out);
       else
         programming_error ("Systems on a page must be a prob or grob.");
@@ -175,13 +175,13 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
         }
       SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
       SCM stencil = Text_interface::interpret_markup (layout, props, markup);
-      Stencil *st = Stencil::unsmob (stencil);
+      Stencil *st = unsmob<Stencil> (stencil);
       if (!st)
         {
           programming_error ("Your numbering function needs to return a stencil.");
           markup = SCM_EOL;
           stencil = Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL).smobbed_copy ();
-          st = Stencil::unsmob (stencil);
+          st = unsmob<Stencil> (stencil);
         }
       in_text_numbers = scm_cons (markup, in_text_numbers);
       numbers = scm_cons (stencil, numbers);
@@ -202,7 +202,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
 
   for (SCM p = numbers; scm_is_pair (p); p = scm_cdr (p))
     {
-      Stencil *st = Stencil::unsmob (scm_car (p));
+      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);
@@ -213,7 +213,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
   for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
     {
       // Take care of musical systems.
-      if (Grob *g = Grob::unsmob (scm_car (s)))
+      if (Grob *g = unsmob<Grob> (scm_car (s)))
         {
           System *sys = dynamic_cast<System *> (g);
           if (!sys)
@@ -238,7 +238,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
               SCM footnote_stl = Text_interface::interpret_markup (paper->self_scm (),
                                                                    props, footnote_markup);
 
-              Stencil footnote_stencil = *Stencil::unsmob (footnote_stl);
+              Stencil footnote_stencil = *unsmob<Stencil> (footnote_stl);
               bool do_numbering = to_boolean (footnote->get_property ("automatically-numbered"));
               if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
                 {
@@ -259,7 +259,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
                           orig->broken_intos_[i]->set_property ("text", annotation_scm);
                     }
 
-                  Stencil annotation = *Stencil::unsmob (scm_car (numbers));
+                  Stencil annotation = *unsmob<Stencil> (scm_car (numbers));
                   annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
                                               + number_raise
                                               - annotation.extent (Y_AXIS)[UP]),
@@ -280,24 +280,24 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
           sys->set_property ("footnote-stencil", mol.smobbed_copy ());
         }
       // Take care of top-level markups
-      else if (Prob *p = Prob::unsmob (scm_car (s)))
+      else if (Prob *p = unsmob<Prob> (scm_car (s)))
         {
           SCM stencils = p->get_property ("footnotes");
           Stencil mol;
 
           for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
             {
-              Stencil footnote_stencil = *Stencil::unsmob (scm_caddar (st));
+              Stencil footnote_stencil = *unsmob<Stencil> (scm_caddar (st));
               bool do_numbering = to_boolean (scm_cadar (st));
               SCM in_text_stencil = Stencil ().smobbed_copy ();
               if (do_numbering)
                 {
-                  Stencil annotation = *Stencil::unsmob (scm_car (numbers));
+                  Stencil annotation = *unsmob<Stencil> (scm_car (numbers));
                   SCM in_text_annotation = scm_car (in_text_numbers);
                   in_text_stencil = Text_interface::interpret_markup (layout,
                                                                       props,
                                                                       in_text_annotation);
-                  if (!Stencil::is_smob (in_text_stencil))
+                  if (!unsmob<Stencil> (in_text_stencil))
                     in_text_stencil = SCM_EOL;
                   annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
                                               + number_raise
@@ -335,7 +335,7 @@ Page_layout_problem::get_footnote_separator_stencil (Output_def *paper)
   SCM footnote_stencil = Text_interface::interpret_markup (paper->self_scm (),
                                                            props, markup);
 
-  Stencil *footnote_separator = Stencil::unsmob (footnote_stencil);
+  Stencil *footnote_separator = unsmob<Stencil> (footnote_stencil);
 
   return footnote_separator ? *footnote_separator : Stencil ();
 }
@@ -352,7 +352,7 @@ Page_layout_problem::add_footnotes_to_footer (SCM footnotes, Stencil foot, Paper
 
   for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s))
     {
-      Stencil *stencil = Stencil::unsmob (scm_car (s));
+      Stencil *stencil = unsmob<Stencil> (scm_car (s));
 
       if (!stencil)
         continue;
@@ -377,7 +377,7 @@ Page_layout_problem::add_footnotes_to_footer (SCM footnotes, Stencil foot, Paper
 Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems)
   : bottom_skyline_ (DOWN)
 {
-  Prob *page = Prob::unsmob (page_scm);
+  Prob *page = unsmob<Prob> (page_scm);
   bottom_loose_baseline_ = 0;
   header_height_ = 0;
   footer_height_ = 0;
@@ -388,8 +388,8 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst
 
   if (page)
     {
-      Stencil *head = Stencil::unsmob (page->get_property ("head-stencil"));
-      Stencil *foot = Stencil::unsmob (page->get_property ("foot-stencil"));
+      Stencil *head = unsmob<Stencil> (page->get_property ("head-stencil"));
+      Stencil *foot = unsmob<Stencil> (page->get_property ("foot-stencil"));
 
       Stencil foot_stencil = foot ? *foot : Stencil ();
 
@@ -433,7 +433,7 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst
       markup_markup_spacing = paper->c_variable ("markup-markup-spacing");
       last_bottom_spacing = paper->c_variable ("last-bottom-spacing");
       top_system_spacing = paper->c_variable ("top-system-spacing");
-      if (scm_is_pair (systems) && Prob::is_smob (scm_car (systems)))
+      if (scm_is_pair (systems) && unsmob<Prob> (scm_car (systems)))
         top_system_spacing = paper->c_variable ("top-markup-spacing");
 
       // Note: the page height here does _not_ reserve space for headers and
@@ -453,7 +453,7 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst
     {
       bool first = (s == systems);
 
-      if (Grob *g = Grob::unsmob (scm_car (s)))
+      if (Grob *g = unsmob<Grob> (scm_car (s)))
         {
           System *sys = dynamic_cast<System *> (g);
           if (!sys)
@@ -479,7 +479,7 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst
           append_system (sys, spring, indent, padding);
           last_system_was_title = false;
         }
-      else if (Prob *p = Prob::unsmob (scm_car (s)))
+      else if (Prob *p = unsmob<Prob> (scm_car (s)))
         {
           SCM spec = first ? top_system_spacing
                      : (last_system_was_title ? markup_markup_spacing : score_markup_spacing);
@@ -538,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 = Grob::unsmob (sys->get_object ("vertical-alignment"));
+  Grob *align = unsmob<Grob> (sys->get_object ("vertical-alignment"));
   if (!align)
     return;
 
@@ -554,7 +554,7 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
   build_system_skyline (elts, minimum_offsets_with_min_dist, &up_skyline, &down_skyline);
   up_skyline.shift (indent);
   down_skyline.shift (indent);
-  Stencil *in_note_stencil = Stencil::unsmob (sys->get_property ("in-note-stencil"));
+  Stencil *in_note_stencil = unsmob<Stencil> (sys->get_property ("in-note-stencil"));
 
   if (in_note_stencil && in_note_stencil->extent (Y_AXIS).length () > 0)
     {
@@ -587,7 +587,7 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
       // store the minimum distance, considering relative indents,
       // for a loose line
       Skyline first_skyline (UP);
-      Skyline_pair *sky = Skyline_pair::unsmob (elts[0]->get_property ("vertical-skylines"));
+      Skyline_pair *sky = unsmob<Skyline_pair> (elts[0]->get_property ("vertical-skylines"));
       if (sky)
         first_skyline.merge ((*sky)[UP]);
       first_skyline.shift (indent);
@@ -659,7 +659,7 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
 void
 Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding)
 {
-  Skyline_pair *sky = Skyline_pair::unsmob (prob->get_property ("vertical-skylines"));
+  Skyline_pair *sky = unsmob<Skyline_pair> (prob->get_property ("vertical-skylines"));
   Real minimum_distance = 0;
   bool tight_spacing = to_boolean (prob->get_property ("tight-spacing"));
 
@@ -669,7 +669,7 @@ Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding
                               bottom_loose_baseline_);
       bottom_skyline_ = (*sky)[DOWN];
     }
-  else if (Stencil *sten = Stencil::unsmob (prob->get_property ("stencil")))
+  else if (Stencil *sten = unsmob<Stencil> (prob->get_property ("stencil")))
     {
       Interval iv = sten->extent (Y_AXIS);
       minimum_distance = iv[UP] - bottom_skyline_.max_height ();
@@ -772,7 +772,7 @@ Page_layout_problem::find_system_offsets ()
         {
           *tail = scm_cons (scm_from_double (solution_[spring_idx]), SCM_EOL);
           tail = SCM_CDRLOC (*tail);
-          Interval prob_extent = Stencil::unsmob (elements_[i].prob->get_property ("stencil"))->extent (Y_AXIS);
+          Interval prob_extent = unsmob<Stencil> (elements_[i].prob->get_property ("stencil"))->extent (Y_AXIS);
 
           // Lay out any non-spaceable lines between this line and
           // the last one.
@@ -991,7 +991,7 @@ Page_layout_problem::build_system_skyline (vector<Grob *> const &staves,
     {
       Real dy = minimum_translations[i] - first_translation;
       Grob *g = staves[i];
-      Skyline_pair *sky = Skyline_pair::unsmob (g->get_property ("vertical-skylines"));
+      Skyline_pair *sky = unsmob<Skyline_pair> (g->get_property ("vertical-skylines"));
       if (sky)
         {
           up->raise (-dy);
@@ -1025,7 +1025,7 @@ Page_layout_problem::build_system_skyline (vector<Grob *> const &staves,
 Interval
 Page_layout_problem::prob_extent (Prob *p)
 {
-  Stencil *sten = Stencil::unsmob (p->get_property ("stencil"));
+  Stencil *sten = unsmob<Stencil> (p->get_property ("stencil"));
   return sten ? sten->extent (Y_AXIS) : Interval (0, 0);
 }
 
index c658c0c94bbd4241c9aa8e9054cc2ac48f7415dc..dd90ba71cf196afea1691f7d348f9c550ce129d3 100644 (file)
@@ -148,7 +148,7 @@ Page_turn_engraver::acknowledge_note_head (Grob_info gi)
   Stream_event *cause = gi.event_cause ();
 
   Duration *dur_ptr = cause
-                      ? Duration::unsmob (cause->get_property ("duration"))
+                      ? unsmob<Duration> (cause->get_property ("duration"))
                       : 0;
 
   if (!dur_ptr)
@@ -208,7 +208,7 @@ Page_turn_engraver::start_translation_timestep ()
 void
 Page_turn_engraver::stop_translation_timestep ()
 {
-  Grob *pc = Grob::unsmob (get_property ("currentCommandColumn"));
+  Grob *pc = unsmob<Grob> (get_property ("currentCommandColumn"));
 
   if (pc)
     {
@@ -239,7 +239,7 @@ Page_turn_engraver::stop_translation_timestep ()
     {
       Rational now = now_mom ().main_part_;
       Real pen = penalty ((now_mom () - rest_begin_).main_part_ + repeat_begin_rest_length_);
-      Moment *m = Moment::unsmob (get_property ("minimumRepeatLengthForPageTurn"));
+      Moment *m = unsmob<Moment> (get_property ("minimumRepeatLengthForPageTurn"));
       if (m && *m > (now_mom () - repeat_begin_))
         pen = infinity_f;
 
index e6d89b47f30f6544dd98f03cda564a75679e5174..504e4ca3dd2483ffa179602086f10fe4352ac9d7 100644 (file)
@@ -35,7 +35,7 @@ LY_DEFINE (ly_pango_font_p, "ly:pango-font?",
            (SCM f),
            "Is @var{f} a pango font?")
 {
-  return scm_from_bool (derived_unsmob<Pango_font> (f));
+  return scm_from_bool (unsmob<Pango_font> (f));
 }
 
 LY_DEFINE (ly_pango_font_physical_fonts, "ly:pango-font-physical-fonts",
@@ -44,7 +44,7 @@ LY_DEFINE (ly_pango_font_physical_fonts, "ly:pango-font-physical-fonts",
            "Return alist of @code{(ps-name file-name font-index)} lists"
            " for Pango font@tie{}@var{f}.")
 {
-  Pango_font *pf = derived_unsmob<Pango_font> (f);
+  Pango_font *pf = unsmob<Pango_font> (f);
 
   SCM alist = SCM_EOL;
   if (pf)
index da2522b56055ad5a18416b04bf3a7d5727028378..ba0c8592e22dff7d01780f061d17474121b2be88 100644 (file)
@@ -26,7 +26,7 @@ LY_DEFINE (ly_paper_book_pages, "ly:paper-book-pages",
            "Return pages in @code{Paper_book} object @var{pb}.")
 {
   LY_ASSERT_SMOB (Paper_book, pb, 1);
-  return Paper_book::unsmob (pb)->pages ();
+  return unsmob<Paper_book> (pb)->pages ();
 }
 
 LY_DEFINE (ly_paper_book_scopes, "ly:paper-book-scopes",
@@ -34,7 +34,7 @@ LY_DEFINE (ly_paper_book_scopes, "ly:paper-book-scopes",
            "Return scopes in @code{Paper_book} object @var{pb}.")
 {
   LY_ASSERT_SMOB (Paper_book, pb, 1);
-  Paper_book *book = Paper_book::unsmob (pb);
+  Paper_book *book = unsmob<Paper_book> (pb);
 
   SCM scopes = SCM_EOL;
   if (book->parent_)
@@ -52,7 +52,7 @@ LY_DEFINE (ly_paper_book_performances, "ly:paper-book-performances",
            "Return performances in @code{Paper_book} object @var{pb}.")
 {
   LY_ASSERT_SMOB (Paper_book, pb, 1);
-  return Paper_book::unsmob (pb)->performances ();
+  return unsmob<Paper_book> (pb)->performances ();
 }
 
 LY_DEFINE (ly_paper_book_systems, "ly:paper-book-systems",
@@ -60,7 +60,7 @@ LY_DEFINE (ly_paper_book_systems, "ly:paper-book-systems",
            "Return systems in @code{Paper_book} object @var{pb}.")
 {
   LY_ASSERT_SMOB (Paper_book, pb, 1);
-  return Paper_book::unsmob (pb)->systems ();
+  return unsmob<Paper_book> (pb)->systems ();
 }
 
 LY_DEFINE (ly_paper_book_paper, "ly:paper-book-paper",
@@ -69,7 +69,7 @@ LY_DEFINE (ly_paper_book_paper, "ly:paper-book-paper",
            " in @code{Paper_book} object @var{pb}.")
 {
   LY_ASSERT_SMOB (Paper_book, pb, 1);
-  Paper_book *pbook = Paper_book::unsmob (pb);
+  Paper_book *pbook = unsmob<Paper_book> (pb);
   return pbook->paper_->self_scm ();
 }
 
@@ -79,6 +79,6 @@ LY_DEFINE (ly_paper_book_header, "ly:paper-book-header",
            " in @code{Paper_book} object @var{pb}.")
 {
   LY_ASSERT_SMOB (Paper_book, pb, 1);
-  Paper_book *pbook = Paper_book::unsmob (pb);
+  Paper_book *pbook = unsmob<Paper_book> (pb);
   return pbook->header_;
 }
index fbaccb3babeb7be5e5e028ccbc343359323cdcd8..b79041bb7b44eb30c55d433267a46d2718bc9b11 100644 (file)
@@ -128,7 +128,7 @@ Paper_book::output_aux (SCM output_channel,
   if (scm_is_pair (bookparts_))
     {
       for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
-        if (Paper_book *pbookpart = Paper_book::unsmob (scm_car (p)))
+        if (Paper_book *pbookpart = unsmob<Paper_book> (scm_car (p)))
           {
             bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p)));
             page_nb += pbookpart->output_aux (output_channel,
@@ -285,8 +285,8 @@ Paper_book::book_title ()
                       paper_->self_scm (),
                       scopes);
 
-  if (Stencil::is_smob (tit))
-    title = *Stencil::unsmob (tit);
+  if (unsmob<Stencil> (tit))
+    title = *unsmob<Stencil> (tit);
 
   if (!title.is_empty ())
     title.align_to (Y_AXIS, UP);
@@ -314,8 +314,8 @@ Paper_book::score_title (SCM header)
                       paper_->self_scm (),
                       scopes);
 
-  if (Stencil::is_smob (tit))
-    title = *Stencil::unsmob (tit);
+  if (unsmob<Stencil> (tit))
+    title = *unsmob<Stencil> (tit);
 
   if (!title.is_empty ())
     title.align_to (Y_AXIS, UP);
@@ -326,7 +326,7 @@ Paper_book::score_title (SCM header)
 void
 set_page_permission (SCM sys, SCM symbol, SCM permission)
 {
-  if (Paper_score *ps = Paper_score::unsmob (sys))
+  if (Paper_score *ps = unsmob<Paper_score> (sys))
     {
       vector<Grob *> cols = ps->get_columns ();
       if (cols.size ())
@@ -336,7 +336,7 @@ set_page_permission (SCM sys, SCM symbol, SCM permission)
           col->find_prebroken_piece (LEFT)->set_property (symbol, permission);
         }
     }
-  else if (Prob *pb = Prob::unsmob (sys))
+  else if (Prob *pb = unsmob<Prob> (sys))
     pb->set_property (symbol, permission);
 }
 
@@ -370,7 +370,7 @@ set_system_penalty (SCM sys, SCM header)
 void
 set_labels (SCM sys, SCM labels)
 {
-  if (Paper_score *ps = Paper_score::unsmob (sys))
+  if (Paper_score *ps = unsmob<Paper_score> (sys))
     {
       vector<Grob *> cols = ps->get_columns ();
       if (cols.size ())
@@ -386,7 +386,7 @@ set_labels (SCM sys, SCM labels)
                                                              labels)));
         }
     }
-  else if (Prob *pb = Prob::unsmob (sys))
+  else if (Prob *pb = unsmob<Prob> (sys))
     pb->set_property ("labels",
                       scm_append_x (scm_list_2 (pb->get_property ("labels"),
                                                 labels)));
@@ -447,7 +447,7 @@ Paper_book::get_system_specs ()
           if (scm_is_null (header_0_))
             header_0_ = header;
         }
-      else if (Page_marker *page_marker = Page_marker::unsmob (scm_car (s)))
+      else if (Page_marker *page_marker = unsmob<Page_marker> (scm_car (s)))
         {
           /* page markers are used to set page breaking/turning permission,
              or to place bookmarking labels */
@@ -465,7 +465,7 @@ Paper_book::get_system_specs ()
               labels = scm_cons (page_marker->label (), labels);
             }
         }
-      else if (Music_output *mop = Music_output::unsmob (scm_car (s)))
+      else if (Music_output *mop = unsmob<Music_output> (scm_car (s)))
         {
           if (Paper_score *pscore = dynamic_cast<Paper_score *> (mop))
             {
@@ -474,10 +474,10 @@ Paper_book::get_system_specs ()
               if (scm_is_pair (system_specs))
                 set_system_penalty (scm_car (system_specs), header);
 
-              if (Prob::is_smob (title))
+              if (unsmob<Prob> (title))
                 {
                   system_specs = scm_cons (title, system_specs);
-                  Prob::unsmob (title)->unprotect ();
+                  unsmob<Prob> (title)->unprotect ();
                 }
 
               header = SCM_EOL;
@@ -515,9 +515,9 @@ Paper_book::get_system_specs ()
               ps->set_property ("last-markup-line", SCM_BOOL_F);
               ps->set_property ("first-markup-line", SCM_BOOL_F);
 
-              paper_system_set_stencil (ps, *Stencil::unsmob (t));
+              paper_system_set_stencil (ps, *unsmob<Stencil> (t));
 
-              SCM footnotes = get_footnotes (Stencil::unsmob (t)->expr ());
+              SCM footnotes = get_footnotes (unsmob<Stencil> (t)->expr ());
               ps->set_property ("footnotes", footnotes);
               ps->set_property ("is-title", SCM_BOOL_T);
               if (list == texts)
@@ -568,7 +568,7 @@ Paper_book::systems ()
     {
       SCM system_list = SCM_EOL;
       for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
-        if (Paper_book *pbookpart = Paper_book::unsmob (scm_car (p)))
+        if (Paper_book *pbookpart = unsmob<Paper_book> (scm_car (p)))
           system_list = scm_cons (pbookpart->systems (), system_list);
       systems_ = scm_append (scm_reverse_x (system_list, SCM_EOL));
     }
@@ -578,7 +578,7 @@ Paper_book::systems ()
       for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
         {
           if (Paper_score * pscore
-              = Paper_score::unsmob (scm_car (s)))
+              = unsmob<Paper_score> (scm_car (s)))
             {
               SCM system_list
                 = scm_vector_to_list (pscore->get_paper_systems ());
@@ -597,7 +597,7 @@ Paper_book::systems ()
       Prob *last = 0;
       for (SCM s = systems_; scm_is_pair (s); s = scm_cdr (s))
         {
-          Prob *ps = Prob::unsmob (scm_car (s));
+          Prob *ps = unsmob<Prob> (scm_car (s));
           ps->set_property ("number", scm_from_int (++i));
 
           if (last
@@ -609,7 +609,7 @@ Paper_book::systems ()
           if (scm_is_pair (scm_cdr (s)))
             {
               SCM perm = ps->get_property ("page-break-permission");
-              Prob *next = Prob::unsmob (scm_cadr (s));
+              Prob *next = unsmob<Prob> (scm_cadr (s));
               if (scm_is_null (perm))
                 next->set_property ("penalty", scm_from_int (10001));
               else if (scm_is_eq (perm, ly_symbol2scm ("force")))
@@ -631,7 +631,7 @@ Paper_book::pages ()
   if (scm_is_pair (bookparts_))
     {
       for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
-        if (Paper_book *pbookpart = Paper_book::unsmob (scm_car (p)))
+        if (Paper_book *pbookpart = unsmob<Paper_book> (scm_car (p)))
           pages_ = scm_cons (pbookpart->pages (), pages_);
       pages_ = scm_append (scm_reverse_x (pages_, SCM_EOL));
     }
@@ -658,7 +658,7 @@ Paper_book::pages ()
           systems_ = SCM_EOL;
           for (SCM p = pages_; scm_is_pair (p); p = scm_cdr (p))
             {
-              Prob *page = Prob::unsmob (scm_car (p));
+              Prob *page = unsmob<Prob> (scm_car (p));
               SCM systems = page->get_property ("lines");
               systems_ = scm_cons (systems, systems_);
             }
index b92abe8171da0747fce745c7cc9b7ff1af81e428..87df2cbe59e761a5e570e57a6b01855d8011b200 100644 (file)
@@ -98,7 +98,7 @@ Paper_column_engraver::make_columns ()
 void
 Paper_column_engraver::initialize ()
 {
-  system_ = derived_unsmob<System> (get_property ("rootSystem"));
+  system_ = unsmob<System> (get_property ("rootSystem"));
   make_columns ();
 
   system_->set_bound (LEFT, command_column_);
@@ -214,7 +214,7 @@ Paper_column_engraver::process_music ()
   if (start_of_measure)
     {
       Moment mlen = Moment (measure_length (context ()));
-      Grob *column = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *column = unsmob<Grob> (get_property ("currentCommandColumn"));
       if (column)
         column->set_property ("measure-length", mlen.smobbed_copy ());
       else
@@ -239,7 +239,7 @@ Paper_column_engraver::stop_translation_timestep ()
 
       if (!elem->get_parent (X_AXIS))
         elem->set_parent (col, X_AXIS);
-      if (!Grob::is_smob (elem->get_object ("axis-group-parent-X")))
+      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)
@@ -280,7 +280,7 @@ Paper_column_engraver::stop_translation_timestep ()
 
   SCM mpos = get_property ("measurePosition");
   SCM barnum = get_property ("internalBarNumber");
-  if (Moment::is_smob (mpos)
+  if (unsmob<Moment> (mpos)
       && scm_is_integer (barnum))
     {
       SCM where = scm_cons (barnum,
index a6e44849b60eee620e02e5a2263fe025afba1387..6ea2d268895dcb558f6136ca1d9f1709a92996f2 100644 (file)
@@ -118,7 +118,7 @@ Moment
 Paper_column::when_mom (Grob *me)
 {
   SCM m = me->get_property ("when");
-  if (Moment *when = Moment::unsmob (m))
+  if (Moment *when = unsmob<Moment> (m))
     return *when;
   return Moment (0);
 }
@@ -128,8 +128,8 @@ Paper_column::is_musical (Grob *me)
 {
   SCM m = me->get_property ("shortest-starter-duration");
   Moment s (0);
-  if (Moment::unsmob (m))
-    s = *Moment::unsmob (m);
+  if (unsmob<Moment> (m))
+    s = *unsmob<Moment> (m);
   return s != Moment (0);
 }
 
@@ -170,7 +170,7 @@ Paper_column::minimum_distance (Grob *left, Grob *right)
 
   for (LEFT_and_RIGHT (d))
     {
-      Skyline_pair *sp = Skyline_pair::unsmob (cols[d]->get_property ("horizontal-skylines"));
+      Skyline_pair *sp = unsmob<Skyline_pair> (cols[d]->get_property ("horizontal-skylines"));
       if (sp)
         skys[d] = (*sp)[-d];
     }
@@ -266,11 +266,11 @@ MAKE_DOCUMENTED_SCHEME_CALLBACK (Paper_column, print, 1,
 SCM
 Paper_column::print (SCM p)
 {
-  Paper_column *me = derived_unsmob<Paper_column> (p);
+  Paper_column *me = unsmob<Paper_column> (p);
 
   string r = ::to_string (Paper_column::get_rank (me));
 
-  Moment *mom = Moment::unsmob (me->get_property ("when"));
+  Moment *mom = unsmob<Moment> (me->get_property ("when"));
   string when = mom ? mom->to_string () : "?/?";
 
   Font_metric *musfont = Font_interface::get_default_font (me);
@@ -281,9 +281,9 @@ Paper_column::print (SCM p)
   SCM when_mol = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                    properties,
                                                    ly_string2scm (when));
-  Stencil t = *Stencil::unsmob (scm_mol);
+  Stencil t = *unsmob<Stencil> (scm_mol);
   t.scale (1.2, 1.4);
-  t.add_at_edge (Y_AXIS, DOWN, *Stencil::unsmob (when_mol), 0.1);
+  t.add_at_edge (Y_AXIS, DOWN, *unsmob<Stencil> (when_mol), 0.1);
   t.align_to (X_AXIS, LEFT);
   // compensate for font serifs and half letter-distance
   t.translate (Offset (-0.1, 0));
@@ -301,9 +301,9 @@ Paper_column::print (SCM p)
   for (SCM s = me->get_object ("ideal-distances");
        scm_is_pair (s); s = scm_cdr (s))
     {
-      Spring *sp = Spring::unsmob (scm_caar (s));
-      if (!Grob::is_smob (scm_cdar (s))
-          || !Grob::unsmob (scm_cdar (s))->get_system ())
+      Spring *sp = unsmob<Spring> (scm_caar (s));
+      if (!unsmob<Grob> (scm_cdar (s))
+          || !unsmob<Grob> (scm_cdar (s))->get_system ())
         continue;
 
       j++;
@@ -316,7 +316,7 @@ Paper_column::print (SCM p)
       SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                    properties,
                                                    ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ())));
-      Stencil *number_stc = Stencil::unsmob (stil);
+      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 ();
@@ -347,7 +347,7 @@ Paper_column::print (SCM p)
        scm_is_pair (s); s = scm_cdr (s))
     {
       Real dist = scm_to_double (scm_cdar (s));
-      Grob *other = Grob::unsmob (scm_caar (s));
+      Grob *other = unsmob<Grob> (scm_caar (s));
       if (!other || other->get_system () != me->get_system ())
         continue;
 
@@ -361,7 +361,7 @@ Paper_column::print (SCM p)
       SCM stil = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                    properties,
                                                    ly_string2scm (String_convert::form_string ("%5.2lf", dist)));
-      Stencil *number_stc = Stencil::unsmob (stil);
+      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 ();
@@ -403,10 +403,10 @@ MAKE_SCHEME_CALLBACK (Paper_column, before_line_breaking, 1);
 SCM
 Paper_column::before_line_breaking (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   SCM bbm = me->get_object ("bounded-by-me");
-  Grob_array *ga = Grob_array::unsmob (bbm);
+  Grob_array *ga = unsmob<Grob_array> (bbm);
   if (!ga)
     return SCM_UNSPECIFIED;
 
index 3d473f202de9818bb54e48fb5c06bd960033d8ef..5329d305553f19909bccdfdd1dfaa7f619c6c84d 100644 (file)
@@ -67,14 +67,14 @@ find_scaled_font (Output_def *mod, Font_metric *f, Real m)
   SCM sizes = scm_hashq_ref (font_table, f->self_scm (), SCM_EOL);
   SCM handle = scm_assoc (scm_from_double (lookup_mag), sizes);
   if (scm_is_pair (handle))
-    return Font_metric::unsmob (scm_cdr (handle));
+    return unsmob<Font_metric> (scm_cdr (handle));
 
   SCM val = Modified_font_metric::make_scaled_font_metric (f, lookup_mag);
 
   sizes = scm_acons (scm_from_double (lookup_mag), val, sizes);
-  Font_metric::unsmob (val)->unprotect ();
+  unsmob<Font_metric> (val)->unprotect ();
   scm_hashq_set_x (font_table, f->self_scm (), sizes);
-  return Font_metric::unsmob (val);
+  return unsmob<Font_metric> (val);
 }
 
 Font_metric *
@@ -88,7 +88,7 @@ find_pango_font (Output_def *layout, SCM descr, Real factor)
   SCM size_key = scm_from_double (factor);
   SCM handle = scm_assoc (size_key, sizes);
   if (scm_is_pair (handle))
-    return Font_metric::unsmob (scm_cdr (handle));
+    return unsmob<Font_metric> (scm_cdr (handle));
 
   PangoFontDescription *description
     = pango_font_description_from_string (scm_i_string_chars (descr));
@@ -117,7 +117,7 @@ scale_output_def (Output_def *o, Real amount)
   SCM proc = ly_lily_module_constant ("scale-layout");
   SCM new_pap = scm_call_2 (proc, o->self_scm (), scm_from_double (amount));
 
-  o = Output_def::unsmob (new_pap);
+  o = unsmob<Output_def> (new_pap);
   o->protect ();
   return o;
 }
index 92863533c4770e965aea4f5e95cf33b4781ec362..145e9bfa9323b16d1ead30ec4189d3bbc6815127 100644 (file)
@@ -57,8 +57,8 @@ LY_DEFINE (ly_outputter_dump_stencil, "ly:outputter-dump-stencil",
   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
   LY_ASSERT_SMOB (Stencil, stencil, 2);
 
-  Paper_outputter *po = Paper_outputter::unsmob (outputter);
-  Stencil *st = Stencil::unsmob (stencil);
+  Paper_outputter *po = unsmob<Paper_outputter> (outputter);
+  Stencil *st = unsmob<Stencil> (stencil);
 
   po->output_stencil (*st);
   return SCM_UNSPECIFIED;
@@ -71,7 +71,7 @@ LY_DEFINE (ly_outputter_dump_string, "ly:outputter-dump-string",
   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
   LY_ASSERT_TYPE (scm_is_string, str, 2);
 
-  Paper_outputter *po = Paper_outputter::unsmob (outputter);
+  Paper_outputter *po = unsmob<Paper_outputter> (outputter);
 
   return po->dump_string (str);
 }
@@ -81,7 +81,7 @@ LY_DEFINE (ly_outputter_port, "ly:outputter-port",
            "Return output port for @var{outputter}.")
 {
   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
-  Paper_outputter *po = Paper_outputter::unsmob (outputter);
+  Paper_outputter *po = unsmob<Paper_outputter> (outputter);
 
   return po->file ();
 }
@@ -91,7 +91,7 @@ LY_DEFINE (ly_outputter_close, "ly:outputter-close",
            "Close port of @var{outputter}.")
 {
   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
-  Paper_outputter *po = Paper_outputter::unsmob (outputter);
+  Paper_outputter *po = unsmob<Paper_outputter> (outputter);
 
   po->close ();
   return SCM_UNSPECIFIED;
@@ -102,7 +102,7 @@ LY_DEFINE (ly_outputter_output_scheme, "ly:outputter-output-scheme",
            "Eval @var{expr} in module of @var{outputter}.")
 {
   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
-  Paper_outputter *po = Paper_outputter::unsmob (outputter);
+  Paper_outputter *po = unsmob<Paper_outputter> (outputter);
 
   po->output_scheme (expr);
 
@@ -115,6 +115,6 @@ LY_DEFINE (ly_outputter_module, "ly:outputter-module",
 {
   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
 
-  Paper_outputter *po = Paper_outputter::unsmob (outputter);
+  Paper_outputter *po = unsmob<Paper_outputter> (outputter);
   return po->module ();
 }
index 6d2b397d9a27f72883185d0458d9d62f8f923b8b..e2909e284433ebbccc10f5428e3f3c50e7beb91a 100644 (file)
@@ -27,6 +27,6 @@ LY_DEFINE (ly_paper_score_paper_systems, "ly:paper-score-paper-systems",
 {
   LY_ASSERT_SMOB (Paper_score, paper_score, 1);
 
-  Paper_score *pscore = Paper_score::unsmob (paper_score);
+  Paper_score *pscore = unsmob<Paper_score> (paper_score);
   return pscore->get_paper_systems ();
 }
index c8f515aa52051b9daddb39b3de4de18430f93f21..1f5a39b96af82208e73285d8595951a3b992fccd 100644 (file)
@@ -37,17 +37,17 @@ LY_DEFINE (ly_paper_system_minimum_distance, "ly:paper-system-minimum-distance",
            " their extents otherwise.")
 {
   Real ret = 0;
-  Prob *p1 = Prob::unsmob (sys1);
-  Prob *p2 = Prob::unsmob (sys2);
-  Skyline_pair *sky1 = Skyline_pair::unsmob (p1->get_property ("vertical-skylines"));
-  Skyline_pair *sky2 = Skyline_pair::unsmob (p2->get_property ("vertical-skylines"));
+  Prob *p1 = unsmob<Prob> (sys1);
+  Prob *p2 = unsmob<Prob> (sys2);
+  Skyline_pair *sky1 = unsmob<Skyline_pair> (p1->get_property ("vertical-skylines"));
+  Skyline_pair *sky2 = unsmob<Skyline_pair> (p2->get_property ("vertical-skylines"));
 
   if (sky1 && sky2)
     ret = (*sky1)[DOWN].distance ((*sky2)[UP]);
   else
     {
-      Stencil *s1 = Stencil::unsmob (p1->get_property ("stencil"));
-      Stencil *s2 = Stencil::unsmob (p2->get_property ("stencil"));
+      Stencil *s1 = unsmob<Stencil> (p1->get_property ("stencil"));
+      Stencil *s2 = unsmob<Stencil> (p2->get_property ("stencil"));
       Interval iv1 = s1->extent (Y_AXIS);
       Interval iv2 = s2->extent (Y_AXIS);
       ret = iv2[UP] - iv1[DOWN];
index ec0c1572f07aa51e02c96f9ce2a8cc8fc4c10f88..08c67cc17f4a0571a184ff7ef627292eacf5545c 100644 (file)
@@ -146,15 +146,15 @@ protected_ly_parse_scm (Parse_start *ps)
 }
 
 SCM
-protected_ly_eval_scm (Parse_start *ps)
+protected_ly_eval_scm (void *ps)
 {
   /*
     Catch #t : catch all Scheme level errors.
    */
   return scm_internal_catch (SCM_BOOL_T,
                              catch_protected_eval_body,
-                             (void *) ps,
-                             &parse_handler, (void *) ps);
+                             ps,
+                             &parse_handler, ps);
 }
 
 bool parse_protect_global = true;
@@ -178,8 +178,14 @@ ly_eval_scm (SCM form, Input i, bool safe, Lily_parser *parser)
 {
   Parse_start ps (form, i, safe, parser);
 
-  SCM ans = parse_protect_global ? protected_ly_eval_scm (&ps)
-            : internal_ly_eval_scm (&ps);
+  SCM ans = scm_c_with_fluids
+    (scm_list_2 (ly_lily_module_constant ("%parser"),
+                 ly_lily_module_constant ("%location")),
+     scm_list_2 (parser->self_scm (),
+                 i.smobbed_copy ()),
+     parse_protect_global ? protected_ly_eval_scm
+     : catch_protected_eval_body, (void *) &ps);
+
   scm_remember_upto_here_1 (form);
   return ans;
 }
index 9630ff4837910d052fd101692654cea2656c7cd7..71095680c53fa5db76c6f98631b30b7479a24660 100644 (file)
@@ -408,7 +408,7 @@ toplevel_expression:
        }
        | BOOK_IDENTIFIER {
                SCM proc = parser->lexer_->lookup_identifier
-                       (Book::unsmob($1)->paper_
+                       (unsmob<Book>($1)->paper_
                         ? "toplevel-book-handler"
                         : "toplevel-bookpart-handler");
                scm_call_2 (proc, parser->self_scm (), $1);
@@ -444,11 +444,11 @@ toplevel_expression:
                {
                        SCM proc = parser->lexer_->lookup_identifier ("toplevel-text-handler");
                        scm_call_2 (proc, parser->self_scm (), out);
-               } else if (Score::is_smob ($1))
+               } else if (unsmob<Score> ($1))
                {
                        SCM proc = parser->lexer_->lookup_identifier ("toplevel-score-handler");
                        scm_call_2 (proc, parser->self_scm (), $1);
-               } else if (Output_def * od = Output_def::unsmob ($1)) {
+               } else if (Output_def * od = unsmob<Output_def> ($1)) {
                        SCM id = SCM_EOL;
 
                        if (to_boolean (od->c_variable ("is-paper")))
@@ -464,7 +464,7 @@ toplevel_expression:
        }
        | output_def {
                SCM id = SCM_EOL;
-               Output_def * od = Output_def::unsmob ($1);
+               Output_def * od = unsmob<Output_def> ($1);
 
                if (to_boolean (od->c_variable ("is-paper")))
                        id = ly_symbol2scm ("$defaultpaper");
@@ -561,7 +561,7 @@ embedded_lilypond:
        | post_event post_events
        {
                $$ = scm_reverse_x ($2, SCM_EOL);
-               if (Music *m = Music::unsmob ($1))
+               if (Music *m = unsmob<Music> ($1))
                {
                        if (m->is_mus_type ("post-event-wrapper"))
                                $$ = scm_append
@@ -583,9 +583,9 @@ embedded_lilypond:
        | multiplied_duration
        | music_embedded music_embedded music_list {
                $3 = scm_reverse_x ($3, SCM_EOL);
-               if (Music::is_smob ($2))
+               if (unsmob<Music> ($2))
                        $3 = scm_cons ($2, $3);
-               if (Music::is_smob ($1))
+               if (unsmob<Music> ($1))
                        $3 = scm_cons ($1, $3);
                $$ = MAKE_SYNTAX ("sequential-music", @$, $3);
        }
@@ -647,7 +647,7 @@ identifier_init:
        | post_event_nofinger post_events
        {
                $$ = scm_reverse_x ($2, SCM_EOL);
-               if (Music *m = Music::unsmob ($1))
+               if (Music *m = unsmob<Music> ($1))
                {
                        if (m->is_mus_type ("post-event-wrapper"))
                                $$ = scm_append
@@ -687,10 +687,10 @@ context_def_spec_block:
        CONTEXT '{' context_def_spec_body '}'
        {
                $$ = $3;
-               Context_def *td = Context_def::unsmob ($$);
+               Context_def *td = unsmob<Context_def> ($$);
                if (!td) {
                        $$ = Context_def::make_scm ();
-                       td = Context_def::unsmob ($$);
+                       td = unsmob<Context_def> ($$);
                }
                td->origin ()->set_spot (@$);
        }
@@ -717,41 +717,41 @@ context_def_spec_body:
        }
        | context_def_spec_body context_mod {
                if (!SCM_UNBNDP ($2)) {
-                       Context_def *td = Context_def::unsmob ($$);
+                       Context_def *td = unsmob<Context_def> ($$);
                        if (!td) {
                                $$ = Context_def::make_scm ();
-                               td = Context_def::unsmob ($$);
+                               td = unsmob<Context_def> ($$);
                        }
-                       Context_def::unsmob ($$)->add_context_mod ($2);
+                       unsmob<Context_def> ($$)->add_context_mod ($2);
                }
        }
        | context_def_spec_body context_modification {
-                Context_def *td = Context_def::unsmob ($$);
+                Context_def *td = unsmob<Context_def> ($$);
                if (!td) {
                        $$ = Context_def::make_scm ();
-                       td = Context_def::unsmob ($$);
+                       td = unsmob<Context_def> ($$);
                }
-                SCM new_mods = Context_mod::unsmob ($2)->get_mods ();
+                SCM new_mods = unsmob<Context_mod> ($2)->get_mods ();
                 for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
                     td->add_context_mod (scm_car (m));
                 }
        }
        | context_def_spec_body context_mod_arg {
-               Context_def *td = Context_def::unsmob ($1);
+               Context_def *td = unsmob<Context_def> ($1);
                if (scm_is_eq ($2, SCM_UNSPECIFIED))
                        ;
-               else if (!td && Context_def::unsmob ($2))
+               else if (!td && unsmob<Context_def> ($2))
                        $$ = $2;
                else {
                        if (!td) {
                                $$ = Context_def::make_scm ();
-                               td = Context_def::unsmob ($$);
+                               td = unsmob<Context_def> ($$);
                        }
-                       if (Music::is_smob ($2)) {
+                       if (unsmob<Music> ($2)) {
                                SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
                                $2 = scm_call_2 (proc, parser->self_scm (), $2);
                        }
-                       if (Context_mod *cm = Context_mod::unsmob ($2)) {
+                       if (Context_mod *cm = unsmob<Context_mod> ($2)) {
                                for (SCM m = cm->get_mods (); scm_is_pair (m); m = scm_cdr (m)) {
                                        td->add_context_mod (scm_car (m));
                                }
@@ -766,7 +766,7 @@ context_def_spec_body:
 book_block:
        BOOK '{' book_body '}'  {
                $$ = $3;
-               Book::unsmob ($$)->origin ()->set_spot (@$);
+               unsmob<Book> ($$)->origin ()->set_spot (@$);
                pop_paper (parser);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F);
        }
@@ -779,7 +779,7 @@ book_body:
        {
                Book *book = new Book;
                init_papers (parser);
-               book->paper_ = dynamic_cast<Output_def*> (Output_def::unsmob (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
+               book->paper_ = dynamic_cast<Output_def*> (unsmob<Output_def> (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
                book->paper_->unprotect ();
                push_paper (parser, book->paper_);
                book->header_ = get_header (parser);
@@ -790,8 +790,8 @@ book_body:
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1);
        }
        | book_body paper_block {
-               Book::unsmob ($1)->paper_ = Output_def::unsmob ($2);
-               set_paper (parser, Output_def::unsmob ($2));
+               unsmob<Book> ($1)->paper_ = unsmob<Output_def> ($2);
+               set_paper (parser, unsmob<Output_def> ($2));
        }
        | book_body bookpart_block {
                SCM proc = parser->lexer_->lookup_identifier ("book-bookpart-handler");
@@ -828,11 +828,11 @@ book_body:
                {
                        SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
                        scm_call_2 (proc, $1, out);
-               } else if (Score::is_smob ($2))
+               } else if (unsmob<Score> ($2))
                {
                        SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
                        scm_call_2 (proc, $1, $2);
-               } else if (Output_def *od = Output_def::unsmob ($2)) {
+               } else if (Output_def *od = unsmob<Output_def> ($2)) {
                        SCM id = SCM_EOL;
 
                        if (to_boolean (od->c_variable ("is-paper")))
@@ -848,10 +848,10 @@ book_body:
        }
        | book_body
        {
-               parser->lexer_->add_scope (Book::unsmob ($1)->header_);
+               parser->lexer_->add_scope (unsmob<Book> ($1)->header_);
        } lilypond_header
        | book_body error {
-                Book *book = Book::unsmob ($1);
+                Book *book = unsmob<Book> ($1);
                book->paper_ = 0;
                book->scores_ = SCM_EOL;
                book->bookparts_ = SCM_EOL;
@@ -861,7 +861,7 @@ book_body:
 bookpart_block:
        BOOKPART '{' bookpart_body '}' {
                $$ = $3;
-               Book::unsmob ($$)->origin ()->set_spot (@$);
+               unsmob<Book> ($$)->origin ()->set_spot (@$);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F);
        }
        ;
@@ -876,7 +876,7 @@ bookpart_body:
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1);
        }
        | bookpart_body paper_block {
-               Book::unsmob ($$)->paper_ = Output_def::unsmob ($2);
+               unsmob<Book> ($$)->paper_ = unsmob<Output_def> ($2);
        }
        | bookpart_body score_block {
                SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
@@ -909,11 +909,11 @@ bookpart_body:
                {
                        SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
                        scm_call_2 (proc, $1, out);
-               } else if (Score::is_smob ($2))
+               } else if (unsmob<Score> ($2))
                {
                        SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
                        scm_call_2 (proc, $1, $2);
-               } else if (Output_def *od = Output_def::unsmob ($2)) {
+               } else if (Output_def *od = unsmob<Output_def> ($2)) {
                        SCM id = SCM_EOL;
 
                        if (to_boolean (od->c_variable ("is-paper")))
@@ -929,13 +929,13 @@ bookpart_body:
        }
        | bookpart_body
        {
-                Book *book = Book::unsmob ($1);
+                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 error {
-                Book *book = Book::unsmob ($1);
+                Book *book = unsmob<Book> ($1);
                book->paper_ = 0;
                book->scores_ = SCM_EOL;
        }
@@ -943,31 +943,31 @@ bookpart_body:
 
 score_block:
        SCORE '{' score_body '}'        {
-               Score::unsmob ($3)->origin ()->set_spot (@$);
+               unsmob<Score> ($3)->origin ()->set_spot (@$);
                $$ = $3;
        }
        ;
 
 score_body:
        score_items {
-               if (!Score::is_smob ($1)) {
+               if (!unsmob<Score> ($1)) {
                        parser->parser_error (@1, _("Missing music in \\score"));
                        $$ = (new Score)->unprotect ();
                        if (scm_is_pair ($1) && ly_is_module (scm_car ($1)))
                        {
-                               Score::unsmob ($$)->set_header (scm_car ($1));
+                               unsmob<Score> ($$)->set_header (scm_car ($1));
                                $1 = scm_cdr ($1);
                        }
                        for (SCM p = scm_reverse_x ($1, SCM_EOL);
                             scm_is_pair (p); p = scm_cdr (p))
                        {
-                               Score::unsmob ($$)->
-                                       add_output_def (Output_def::unsmob (scm_car (p)));
+                               unsmob<Score> ($$)->
+                                       add_output_def (unsmob<Output_def> (scm_car (p)));
                        }
                }
        }
        | score_body error {
-               Score::unsmob ($$)->error_found_ = true;
+               unsmob<Score> ($$)->error_found_ = true;
        }
        ;
 
@@ -984,7 +984,7 @@ score_items:
        }
        | score_items score_item
        {
-               Output_def *od = Output_def::unsmob ($2);
+               Output_def *od = unsmob<Output_def> ($2);
                if (od) {
                        if (to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper"))))
                        {
@@ -992,18 +992,18 @@ score_items:
                                od = 0;
                                $2 = SCM_UNSPECIFIED;
                        }
-               } else if (!Score::is_smob ($$)) {
-                       if (Music::is_smob ($2)) {
+               } else if (!unsmob<Score> ($$)) {
+                       if (unsmob<Music> ($2)) {
                                SCM scorify = ly_lily_module_constant ("scorify-music");
                                $2 = scm_call_2 (scorify, $2, parser->self_scm ());
                        }
-                       if (Score::is_smob ($2))
+                       if (unsmob<Score> ($2))
                        {
                                $$ = $2;
                                $2 = SCM_UNSPECIFIED;
                        }
                }
-               Score *score = Score::unsmob ($$);
+               Score *score = unsmob<Score> ($$);
                if (score && scm_is_pair ($1)) {
                        if (ly_is_module (scm_car ($1)))
                        {
@@ -1013,7 +1013,7 @@ score_items:
                        for (SCM p = scm_reverse_x ($1, SCM_EOL);
                             scm_is_pair (p); p = scm_cdr (p))
                        {
-                               score->add_output_def (Output_def::unsmob (scm_car (p)));
+                               score->add_output_def (unsmob<Output_def> (scm_car (p)));
                        }
                }
                if (od) {
@@ -1028,7 +1028,7 @@ score_items:
        }
        | score_items
        {
-               if (Score *score = Score::unsmob ($1)) {
+               if (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 ());
@@ -1050,7 +1050,7 @@ score_items:
 
 paper_block:
        output_def {
-                Output_def *od = Output_def::unsmob ($1);
+                Output_def *od = unsmob<Output_def> ($1);
 
                if (!to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper"))))
                {
@@ -1110,7 +1110,7 @@ music_or_context_def:
 
 output_def_body:
        output_def_head_with_mode_switch '{' {
-               Output_def::unsmob ($1)->input_origin_.set_spot (@$);
+               unsmob<Output_def> ($1)->input_origin_.set_spot (@$);
                // This is a stupid trick to mark the beginning of the
                // body for deciding whether to allow
                // embedded_scm_active to have an output definition
@@ -1127,7 +1127,7 @@ output_def_body:
                // definitions.
                if (scm_is_pair ($1))
                {
-                       Output_def *o = Output_def::unsmob ($2);
+                       Output_def *o = unsmob<Output_def> ($2);
                        if (o) {
                                o->input_origin_.set_spot (@$);
                                $1 = o->self_scm ();
@@ -1137,10 +1137,10 @@ output_def_body:
                        } else
                                $1 = scm_car ($1);
                }
-               if (Context_def::is_smob ($2))
-                       assign_context_def (Output_def::unsmob ($1), $2);
+               if (unsmob<Context_def> ($2))
+                       assign_context_def (unsmob<Output_def> ($1), $2);
                // Seems unlikely, but let's be complete:
-               else if (Music::is_smob ($2))
+               else if (unsmob<Music> ($2))
                {
                        SCM proc = parser->lexer_->lookup_identifier
                                ("output-def-music-handler");
@@ -1165,8 +1165,8 @@ output_def_body:
        } music_or_context_def
        {
                parser->lexer_->pop_state ();
-               if (Context_def::is_smob ($3))
-                       assign_context_def (Output_def::unsmob ($1), $3);
+               if (unsmob<Context_def> ($3))
+                       assign_context_def (unsmob<Output_def> ($1), $3);
                else {
 
                        SCM proc = parser->lexer_->lookup_identifier
@@ -1201,7 +1201,7 @@ music_list:
                $$ = SCM_EOL;
        }
        | music_list music_embedded {
-               if (Music::is_smob ($2))
+               if (unsmob<Music> ($2))
                        $$ = scm_cons ($2, $1);
        }
        | music_list error {
@@ -1229,7 +1229,7 @@ pitch_as_music:
        pitch_or_music
        {
                $$ = make_music_from_simple (parser, @1, $1);
-                if (!Music::is_smob ($$))
+                if (!unsmob<Music> ($$))
                {
                         parser->parser_error (@1, _ ("music expected"));
                        $$ = MAKE_SYNTAX ("void-music", @$);
@@ -1240,7 +1240,7 @@ pitch_as_music:
 music_embedded:
        music
        {
-               if (Music::unsmob ($1)->is_mus_type ("post-event")) {
+               if (unsmob<Music> ($1)->is_mus_type ("post-event")) {
                        parser->parser_error (@1, _ ("unexpected post-event"));
                        $$ = SCM_UNSPECIFIED;
                }
@@ -1257,7 +1257,7 @@ music_embedded:
        {
                Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
 
-               parser->default_duration_ = *Duration::unsmob ($1);
+               parser->default_duration_ = *unsmob<Duration> ($1);
                n->set_property ("duration", $1);
 
                if (scm_is_pair ($2))
@@ -1272,7 +1272,7 @@ music_embedded_backup:
        {
                if (scm_is_eq ($1, SCM_UNSPECIFIED))
                        $$ = $1;
-               else if (Music *m = Music::unsmob ($1)) {
+               else if (Music *m = unsmob<Music> ($1)) {
                        if (m->is_mus_type ("post-event")) {
                                parser->parser_error
                                        (@1, _ ("unexpected post-event"));
@@ -1351,11 +1351,11 @@ context_modification:
         }
        | WITH context_modification_arg
        {
-               if (Music::is_smob ($2)) {
+               if (unsmob<Music> ($2)) {
                        SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
                        $2 = scm_call_2 (proc, parser->self_scm (), $2);
                }
-               if (Context_mod::is_smob ($2))
+               if (unsmob<Context_mod> ($2))
                        $$ = $2;
                else {
                        parser->parser_error (@2, _ ("not a context mod"));
@@ -1385,23 +1385,23 @@ context_mod_list:
         }
         | context_mod_list context_mod  {
                if (!SCM_UNBNDP ($2))
-                       Context_mod::unsmob ($1)->add_context_mod ($2);
+                       unsmob<Context_mod> ($1)->add_context_mod ($2);
         }
         | context_mod_list CONTEXT_MOD_IDENTIFIER {
-                 Context_mod *md = Context_mod::unsmob ($2);
+                 Context_mod *md = unsmob<Context_mod> ($2);
                  if (md)
-                     Context_mod::unsmob ($1)->add_context_mods (md->get_mods ());
+                     unsmob<Context_mod> ($1)->add_context_mods (md->get_mods ());
         }
        | context_mod_list context_mod_arg {
                if (scm_is_eq ($2, SCM_UNSPECIFIED))
                        ;
-               else if (Music::is_smob ($2)) {
+               else if (unsmob<Music> ($2)) {
                        SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
                        $2 = scm_call_2 (proc, parser->self_scm (), $2);
                }
-               if (Context_mod::is_smob ($2))
-                       Context_mod::unsmob ($$)->add_context_mods
-                               (Context_mod::unsmob ($2)->get_mods ());
+               if (unsmob<Context_mod> ($2))
+                       unsmob<Context_mod> ($$)->add_context_mods
+                               (unsmob<Context_mod> ($2)->get_mods ());
                else {
                        parser->parser_error (@2, _ ("not a context mod"));
                }
@@ -1410,14 +1410,14 @@ context_mod_list:
 
 context_prefix:
        CONTEXT symbol optional_id optional_context_mod {
-                Context_mod *ctxmod = Context_mod::unsmob ($4);
+                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 symbol optional_id optional_context_mod {
-                Context_mod *ctxmod = Context_mod::unsmob ($4);
+                Context_mod *ctxmod = unsmob<Context_mod> ($4);
                 SCM mods = SCM_EOL;
                 if (ctxmod)
                         mods = ctxmod->get_mods ();
@@ -2238,7 +2238,7 @@ mode_changed_music:
                parser->lexer_->pop_state ();
        }
        | mode_changing_head_with_context optional_context_mod grouped_music_list {
-                Context_mod *ctxmod = Context_mod::unsmob ($2);
+                Context_mod *ctxmod = unsmob<Context_mod> ($2);
                 SCM mods = SCM_EOL;
                 if (ctxmod)
                         mods = ctxmod->get_mods ();
@@ -2639,7 +2639,7 @@ event_chord:
        simple_element post_events {
                // Let the rhythmic music iterator sort this mess out.
                if (scm_is_pair ($2)) {
-                       Music::unsmob ($$)->set_property ("articulations",
+                       unsmob<Music> ($$)->set_property ("articulations",
                                                         scm_reverse_x ($2, SCM_EOL));
                }
        } %prec ':'
@@ -2663,13 +2663,13 @@ event_chord:
 note_chord_element:
        chord_body optional_notemode_duration post_events
        {
-               Music *m = Music::unsmob ($1);
-               SCM dur = Duration::unsmob ($2)->smobbed_copy ();
+               Music *m = unsmob<Music> ($1);
+               SCM dur = unsmob<Duration> ($2)->smobbed_copy ();
                SCM es = m->get_property ("elements");
                SCM postevs = scm_reverse_x ($3, SCM_EOL);
 
                for (SCM s = es; scm_is_pair (s); s = scm_cdr (s))
-                 Music::unsmob (scm_car (s))->set_property ("duration", dur);
+                 unsmob<Music> (scm_car (s))->set_property ("duration", dur);
                es = ly_append2 (es, postevs);
 
                m-> set_property ("elements", es);
@@ -2736,11 +2736,11 @@ chord_body_element:
        }
        | music_function_chord_body
        {
-               Music *m = Music::unsmob ($1);
+               Music *m = unsmob<Music> ($1);
 
                while (m && m->is_mus_type ("music-wrapper-music")) {
                        $$ = m->get_property ("element");
-                       m = Music::unsmob ($$);
+                       m = unsmob<Music> ($$);
                }
 
                if (!(m && m->is_mus_type ("rhythmic-event"))) {
@@ -2769,7 +2769,7 @@ post_events:
        }
        | post_events post_event {
                $$ = $1;
-               if (Music *m = Music::unsmob ($2))
+               if (Music *m = unsmob<Music> ($2))
                {
                        if (m->is_mus_type ("post-event-wrapper"))
                        {
@@ -2793,12 +2793,12 @@ post_event_nofinger:
        }
        | script_dir music_function_call {
                $$ = $2;
-               if (!Music::unsmob ($2)->is_mus_type ("post-event")) {
+               if (!unsmob<Music> ($2)->is_mus_type ("post-event")) {
                        parser->parser_error (@2, _ ("post-event expected"));
                        $$ = SCM_UNSPECIFIED;
                } else if (!SCM_UNBNDP ($1))
                {
-                       Music::unsmob ($$)->set_property ("direction", $1);
+                       unsmob<Music> ($$)->set_property ("direction", $1);
                }
        }
        | HYPHEN {
@@ -2814,7 +2814,7 @@ post_event_nofinger:
        | script_dir direction_reqd_event {
                if (!SCM_UNBNDP ($1))
                {
-                       Music *m = Music::unsmob ($2);
+                       Music *m = unsmob<Music> ($2);
                        m->set_property ("direction", $1);
                }
                $$ = $2;
@@ -2822,7 +2822,7 @@ post_event_nofinger:
        | script_dir direction_less_event {
                if (!SCM_UNBNDP ($1))
                {
-                       Music *m = Music::unsmob ($2);
+                       Music *m = unsmob<Music> ($2);
                        m->set_property ("direction", $1);
                }
                $$ = $2;
@@ -2830,12 +2830,12 @@ post_event_nofinger:
        | '^' fingering
        {
                $$ = $2;
-               Music::unsmob ($$)->set_property ("direction", scm_from_int (UP));
+               unsmob<Music> ($$)->set_property ("direction", scm_from_int (UP));
        }
        | '_' fingering
        {
                $$ = $2;
-               Music::unsmob ($$)->set_property ("direction", scm_from_int (DOWN));
+               unsmob<Music> ($$)->set_property ("direction", scm_from_int (DOWN));
        }
        ;
 
@@ -2878,7 +2878,7 @@ direction_reqd_event:
                        a->set_property ("articulation-type", s);
                        $$ = a->unprotect ();
                } else {
-                       Music *original = Music::unsmob (s);
+                       Music *original = unsmob<Music> (s);
                        if (original && original->is_mus_type ("post-event")) {
                                Music *a = original->clone ();
                                a->set_spot (parser->lexer_->override_input (@$));
@@ -2927,7 +2927,7 @@ steno_pitch:
        NOTENAME_PITCH quotes {
                 if (!scm_is_eq (SCM_INUM0, $2))
                 {
-                        Pitch p = *Pitch::unsmob ($1);
+                        Pitch p = *unsmob<Pitch> ($1);
                         p = p.transposed (Pitch (scm_to_int ($2), 0));
                         $$ = p.smobbed_copy ();
                 }
@@ -2942,7 +2942,7 @@ steno_tonic_pitch:
        TONICNAME_PITCH quotes {
                 if (!scm_is_eq (SCM_INUM0, $2))
                 {
-                        Pitch p = *Pitch::unsmob ($1);
+                        Pitch p = *unsmob<Pitch> ($1);
                         p = p.transposed (Pitch (scm_to_int ($2), 0));
                         $$ = p.smobbed_copy ();
                 }
@@ -2954,7 +2954,7 @@ pitch:
        | PITCH_IDENTIFIER quotes {
                 if (!scm_is_eq (SCM_INUM0, $2))
                 {
-                        Pitch p = *Pitch::unsmob ($1);
+                        Pitch p = *unsmob<Pitch> ($1);
                         p = p.transposed (Pitch (scm_to_int ($2), 0));
                         $$ = p.smobbed_copy ();
                 }
@@ -2980,7 +2980,7 @@ gen_text_def:
        }
        | embedded_scm
        {
-               Music *m = Music::unsmob ($1);
+               Music *m = unsmob<Music> ($1);
                if (m && m->is_mus_type ("post-event"))
                        $$ = $1;
                else if (Text_interface::is_markup ($1)) {
@@ -3042,7 +3042,7 @@ maybe_notemode_duration:
        } %prec ':'
        | multiplied_duration   {
                $$ = $1;
-               parser->default_duration_ = *Duration::unsmob ($$);
+               parser->default_duration_ = *unsmob<Duration> ($$);
        }
 ;
 
@@ -3065,7 +3065,7 @@ steno_duration:
                }
        }
        | DURATION_IDENTIFIER dots      {
-               Duration *d = Duration::unsmob ($1);
+               Duration *d = unsmob<Duration> ($1);
                Duration k (d->duration_log (),
                             d->dot_count () + scm_to_int ($2));
                k = k.compressed (d->factor ());
@@ -3079,12 +3079,12 @@ multiplied_duration:
                $$ = $1;
        }
        | multiplied_duration '*' UNSIGNED {
-               $$ = Duration::unsmob ($$)->compressed (scm_to_int ($3)).smobbed_copy ();
+               $$ = 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)));
 
-               $$ = Duration::unsmob ($$)->compressed (m).smobbed_copy ();
+               $$ = unsmob<Duration> ($$)->compressed (m).smobbed_copy ();
        }
        ;
 
@@ -3154,10 +3154,10 @@ bass_figure:
        }
        | bass_figure ']' {
                $$ = $1;
-               Music::unsmob ($1)->set_property ("bracket-stop", SCM_BOOL_T);
+               unsmob<Music> ($1)->set_property ("bracket-stop", SCM_BOOL_T);
        }
        | bass_figure figured_bass_alteration {
-               Music *m = Music::unsmob ($1);
+               Music *m = unsmob<Music> ($1);
                if (scm_to_double ($2)) {
                        SCM salter = m->get_property ("alteration");
                        SCM alter = scm_is_number (salter) ? salter : scm_from_int (0);
@@ -3168,7 +3168,7 @@ bass_figure:
                }
        }
        | bass_figure figured_bass_modification  {
-               Music *m = Music::unsmob ($1);
+               Music *m = unsmob<Music> ($1);
                m->set_property ($2, SCM_BOOL_T);
        }
        ;
@@ -3195,7 +3195,7 @@ br_bass_figure:
        }
        | '[' bass_figure {
                $$ = $2;
-               Music::unsmob ($$)->set_property ("bracket-start", SCM_BOOL_T);
+               unsmob<Music> ($$)->set_property ("bracket-start", SCM_BOOL_T);
        }
        ;
 
@@ -3257,7 +3257,7 @@ pitch_or_music:
                if (!parser->lexer_->is_chord_state ())
                         parser->parser_error (@1, _ ("have to be in Chord mode for chords"));
                if (scm_is_pair ($2)) {
-                       if (Pitch::is_smob ($1))
+                       if (unsmob<Pitch> ($1))
                                $1 = make_chord_elements (@1,
                                                          $1,
                                                          parser->default_duration_.smobbed_copy (),
@@ -3266,7 +3266,7 @@ pitch_or_music:
                        SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
 
                        $$ = MAKE_SYNTAX ("event-chord", @1, elts);
-               } else if (!Pitch::is_smob ($1))
+               } else if (!unsmob<Pitch> ($1))
                        $$ = MAKE_SYNTAX ("event-chord", @1, $1);
                // A mere pitch drops through.
        } %prec ':'
@@ -3313,7 +3313,7 @@ lyric_element_music:
        lyric_element optional_notemode_duration post_events {
                $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
                if (scm_is_pair ($3))
-                       Music::unsmob ($$)->set_property
+                       unsmob<Music> ($$)->set_property
                                ("articulations", scm_reverse_x ($3, SCM_EOL));
        } %prec ':'
        ;
@@ -3567,7 +3567,7 @@ markup_uncomposed_list:
                SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
                parser->lexer_->push_note_state (nn);
        } '{' score_body '}' {
-               Score *sc = Score::unsmob ($4);
+               Score *sc = unsmob<Score> ($4);
                sc->origin ()->set_spot (@$);
                if (sc->defs_.empty ()) {
                        Output_def *od = get_layout (parser);
@@ -3650,7 +3650,7 @@ simple_markup:
                SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
                parser->lexer_->push_note_state (nn);
        } '{' score_body '}' {
-               Score *sc = Score::unsmob ($4);
+               Score *sc = unsmob<Score> ($4);
                sc->origin ()->set_spot (@$);
                if (sc->defs_.empty ()) {
                        Output_def *od = get_layout (parser);
@@ -3709,8 +3709,8 @@ otherwise, we have to import music classes into the lexer.
 int
 Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
 {
-       if (Book::is_smob (sid)) {
-               Book *book =  Book::unsmob (sid)->clone ();
+       if (unsmob<Book> (sid)) {
+               Book *book =  unsmob<Book> (sid)->clone ();
                *destination = book->self_scm ();
                book->unprotect ();
 
@@ -3718,30 +3718,30 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
        } else if (scm_is_number (sid)) {
                *destination = sid;
                return NUMBER_IDENTIFIER;
-       } else if (Context_def::is_smob (sid))
+       } else if (unsmob<Context_def> (sid))
        {
-               *destination = Context_def::unsmob (sid)->clone ()->unprotect ();
+               *destination = unsmob<Context_def> (sid)->clone ()->unprotect ();
                return SCM_IDENTIFIER;
-        } else if (Context_mod::is_smob (sid)) {
-                *destination = Context_mod::unsmob (sid)->smobbed_copy ();
+        } else if (unsmob<Context_mod> (sid)) {
+                *destination = unsmob<Context_mod> (sid)->smobbed_copy ();
                 return CONTEXT_MOD_IDENTIFIER;
-       } else if (Music *mus = Music::unsmob (sid)) {
+       } else if (Music *mus = unsmob<Music> (sid)) {
                mus = mus->clone ();
                *destination = mus->self_scm ();
                bool is_event = mus->is_mus_type ("post-event");
                mus->unprotect ();
                return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER;
-       } else if (Pitch::is_smob (sid)) {
-               *destination = Pitch::unsmob (sid)->smobbed_copy ();
+       } else if (unsmob<Pitch> (sid)) {
+               *destination = unsmob<Pitch> (sid)->smobbed_copy ();
                return PITCH_IDENTIFIER;
-       } else if (Duration::is_smob (sid)) {
-               *destination = Duration::unsmob (sid)->smobbed_copy ();
+       } else if (unsmob<Duration> (sid)) {
+               *destination = unsmob<Duration> (sid)->smobbed_copy ();
                return DURATION_IDENTIFIER;
-       } else if (Output_def::is_smob (sid)) {
-               *destination = Output_def::unsmob (sid)->clone ()->unprotect ();
+       } else if (unsmob<Output_def> (sid)) {
+               *destination = unsmob<Output_def> (sid)->clone ()->unprotect ();
                return SCM_IDENTIFIER;
-       } else if (Score::is_smob (sid)) {
-               *destination = Score::unsmob (sid)->clone ()->unprotect ();
+       } else if (unsmob<Score> (sid)) {
+               *destination = unsmob<Score> (sid)->clone ()->unprotect ();
                return SCM_IDENTIFIER;
        }
 
@@ -3798,7 +3798,7 @@ SCM check_scheme_arg (Lily_parser *parser, Input loc,
 
 SCM loc_on_music (Input loc, SCM arg)
 {
-       if (Music *m = Music::unsmob (arg))
+       if (Music *m = unsmob<Music> (arg))
        {
                m = m->clone ();
                m->set_spot (loc);
@@ -3877,7 +3877,7 @@ is_regular_identifier (SCM id, bool multiple)
 SCM
 make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
 {
-       if (Music::is_smob (simple))
+       if (unsmob<Music> (simple))
                return simple;
        if (parser->lexer_->is_note_state ()) {
                if (scm_is_symbol (simple)) {
@@ -3886,7 +3886,7 @@ make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
                        n->set_property ("drum-type", simple);
                        return n->unprotect ();
                }
-               if (Pitch::is_smob (simple)) {
+               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);
@@ -3898,7 +3898,7 @@ make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
                        return MAKE_SYNTAX ("lyric-event", loc, simple,
                                            parser->default_duration_.smobbed_copy ());
        } else if (parser->lexer_->is_chord_state ()) {
-               if (Pitch::is_smob (simple))
+               if (unsmob<Pitch> (simple))
                        return MAKE_SYNTAX
                                ("event-chord",
                                 loc,
@@ -3955,7 +3955,7 @@ make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list)
        SCM res = scm_call_3 (chord_ctor, pitch, dur, modification_list);
        for (SCM s = res; scm_is_pair (s); s = scm_cdr (s))
        {
-               Music::unsmob (scm_car (s))->set_spot (loc);
+               unsmob<Music> (scm_car (s))->set_spot (loc);
        }
        return res;
 }
index 065ee1bce24164553691e28407e27697d3bf2209..61bb19ed165a15a6d66566196853135902f3debd 100644 (file)
 #include "music-sequence.hh"
 #include "warn.hh"
 
-enum Outlet_type
-{
-  CONTEXT_ONE, CONTEXT_TWO,
-  CONTEXT_SHARED, CONTEXT_SOLO,
-  CONTEXT_NULL, NUM_OUTLETS
-};
-
-static const char *outlet_names_[NUM_OUTLETS]
-  = {"one", "two", "shared", "solo", "null"};
+static const char *const CONTEXT_ONE = "one";
+static const char *const CONTEXT_TWO = "two";
+static const char *const CONTEXT_SHARED = "shared";
+static const char *const CONTEXT_SOLO = "solo";
+static const char *const CONTEXT_NULL = "null";
 
 class Part_combine_iterator : public Music_iterator
 {
@@ -53,15 +49,8 @@ protected:
   virtual bool ok () const;
 
 private:
-  /* used by try_process */
-  void set_busy (SCM);
-  bool busy_;
-  bool notice_busy_;
-
-  bool try_process (Music_iterator *i, Moment m);
-
-  Music_iterator *first_iter_;
-  Music_iterator *second_iter_;
+  static const size_t NUM_PARTS = 2;
+  Music_iterator *iterators_[NUM_PARTS];
   Moment start_moment_;
 
   SCM split_list_;
@@ -70,6 +59,7 @@ private:
 
   enum Status
   {
+    INITIAL,
     APART,
     TOGETHER,
     SOLO,
@@ -82,18 +72,10 @@ private:
   // e.g. 1 for Solo I, 2 for Solo II.
   int chosen_part_;
 
-  int last_playing_;
-
-  /*
-    TODO: this is getting off hand...
-  */
-  Context_handle handles_[NUM_OUTLETS];
-
-  void substitute_both (Outlet_type to1,
-                        Outlet_type to2);
-  void kill_mmrest_in_inactive_outlets ();
-  /* parameter is really Outlet_type */
-  void kill_mmrest (int in);
+  void substitute_one (Music_iterator *iter, const char *voice_id);
+  void substitute_both (const char *part1_voice_id, const char *part2_voice_id);
+  bool is_active_outlet (const Context *c) const;
+  void kill_mmrest (Context *c);
   void chords_together ();
   void solo1 ();
   void solo2 ();
@@ -101,46 +83,34 @@ private:
   void unisono (bool silent, int newpart);
 };
 
+const size_t Part_combine_iterator::NUM_PARTS;
+
 void
 Part_combine_iterator::do_quit ()
 {
-  if (first_iter_)
-    first_iter_->quit ();
-  if (second_iter_)
-    second_iter_->quit ();
-
-  // Add listeners to all contexts except Devnull.
-  for (int i = 0; i < NUM_OUTLETS; i++)
-    {
-      Context *c = handles_[i].get_context ();
-      if (c->is_alias (ly_symbol2scm ("Voice")))
-        c->event_source ()->remove_listener (GET_LISTENER (Part_combine_iterator, set_busy), ly_symbol2scm ("music-event"));
-      handles_[i].set_context (0);
-    }
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    if (iterators_[i])
+      iterators_[i]->quit ();
 }
 
 Part_combine_iterator::Part_combine_iterator ()
 {
   mmrest_event_ = 0;
 
-  first_iter_ = 0;
-  second_iter_ = 0;
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    iterators_[i] = 0;
   split_list_ = SCM_EOL;
-  state_ = APART;
+  state_ = INITIAL;
   chosen_part_ = 1;
-  last_playing_ = 0;
-
-  busy_ = false;
-  notice_busy_ = false;
 }
 
 void
 Part_combine_iterator::derived_mark () const
 {
-  if (first_iter_)
-    scm_gc_mark (first_iter_->self_scm ());
-  if (second_iter_)
-    scm_gc_mark (second_iter_->self_scm ());
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    if (iterators_[i])
+      scm_gc_mark (iterators_[i]->self_scm ());
+
   if (mmrest_event_)
     scm_gc_mark (mmrest_event_->self_scm ());
 }
@@ -149,8 +119,9 @@ void
 Part_combine_iterator::derived_substitute (Context *f,
                                            Context *t)
 {
-  if (first_iter_)
-    first_iter_->substitute_outlet (f, t);
+  // (Explain why just iterators_[0].)
+  if (iterators_[0])
+    iterators_[0]->substitute_outlet (f, t);
 }
 
 Moment
@@ -158,48 +129,74 @@ Part_combine_iterator::pending_moment () const
 {
   Moment p;
   p.set_infinite (1);
-  if (first_iter_->ok ())
-    p = min (p, first_iter_->pending_moment ());
 
-  if (second_iter_->ok ())
-    p = min (p, second_iter_->pending_moment ());
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    if (iterators_[i]->ok ())
+      p = min (p, iterators_[i]->pending_moment ());
+
   return p;
 }
 
 bool
 Part_combine_iterator::ok () const
 {
-  return first_iter_->ok () || second_iter_->ok ();
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    if (iterators_[i]->ok ())
+      return true;
+
+  return false;
 }
 
 void
-Part_combine_iterator::substitute_both (Outlet_type to1,
-                                        Outlet_type to2)
+Part_combine_iterator::substitute_one (Music_iterator *iter,
+                                       const char *voice_id)
 {
-  first_iter_->substitute_outlet (first_iter_->get_outlet (),
-                                  handles_[to1].get_context ());
-  second_iter_->substitute_outlet (second_iter_->get_outlet (),
-                                   handles_[to2].get_context ());
+  Context *c = iter->get_outlet ();
+  if (!c)
+    {
+      programming_error ("no context");
+      return;
+    }
+  c = c->get_parent_context ();
+  if (!c)
+    {
+      programming_error ("no parent context");
+      return;
+    }
+  c = find_context_below (c, ly_symbol2scm("Voice"), voice_id);
+  if (!c)
+    {
+      string s = "can not find Voice context: ";
+      s += voice_id;
+      programming_error (s);
+      return;
+    }
+  iter->substitute_outlet (iter->get_outlet (), c);
 }
 
-void Part_combine_iterator::kill_mmrest_in_inactive_outlets ()
+void
+Part_combine_iterator::substitute_both (const char *part1_voice_id,
+                                        const char *part2_voice_id)
 {
-  for (int j = 0; j < NUM_OUTLETS; j++)
-    {
-      Context *c = handles_[j].get_context ();
-
-      if (first_iter_->get_outlet () == c)
-        continue;
+  // TODO: There is no good reason to tie the parts together here.
+  // Factor out per-part stuff into a new class of iterator which
+  // reads a part-specific list similar to the existing combined
+  // "split-list".
+  substitute_one(iterators_[0], part1_voice_id);
+  substitute_one(iterators_[1], part2_voice_id);
+}
 
-      if (second_iter_->get_outlet () == c)
-        continue;
+bool Part_combine_iterator::is_active_outlet (const Context *c) const
+{
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    if (iterators_[i] && (iterators_[i]->get_outlet () == c))
+      return true;
 
-      kill_mmrest (j);
-    }
+  return false;
 }
 
 void
-Part_combine_iterator::kill_mmrest (int in)
+Part_combine_iterator::kill_mmrest (Context *c)
 {
 
   if (!mmrest_event_)
@@ -211,7 +208,7 @@ Part_combine_iterator::kill_mmrest (int in)
       mmrest_event_->unprotect ();
     }
 
-  handles_[in].get_context ()->event_source ()->broadcast (mmrest_event_);
+  c->event_source ()->broadcast (mmrest_event_);
 }
 
 void
@@ -223,8 +220,8 @@ Part_combine_iterator::unisono (bool silent, int newpart)
     return;
   else
     {
-      Outlet_type c1 = (newpart == 2) ? CONTEXT_NULL : CONTEXT_SHARED;
-      Outlet_type c2 = (newpart == 2) ? CONTEXT_SHARED : CONTEXT_NULL;
+      const char *c1 = (newpart == 2) ? CONTEXT_NULL : CONTEXT_SHARED;
+      const char *c2 = (newpart == 2) ? CONTEXT_SHARED : CONTEXT_NULL;
       substitute_both (c1, c2);
 
       state_ = newstate;
@@ -289,55 +286,9 @@ Part_combine_iterator::construct_children ()
   start_moment_ = get_outlet ()->now_mom ();
   split_list_ = get_music ()->get_property ("split-list");
 
-  Context *c = get_outlet ();
-
-  for (int i = 0; i < NUM_OUTLETS; i++)
-    {
-      SCM type = (i == CONTEXT_NULL) ? ly_symbol2scm ("Devnull") : ly_symbol2scm ("Voice");
-      /* find context below c: otherwise we may create new staff for each voice */
-      c = c->find_create_context (type, outlet_names_[i], SCM_EOL);
-      handles_[i].set_context (c);
-      if (c->is_alias (ly_symbol2scm ("Voice")))
-        c->event_source ()->add_listener (GET_LISTENER (Part_combine_iterator, set_busy), ly_symbol2scm ("music-event"));
-    }
-
   SCM lst = get_music ()->get_property ("elements");
-  Context *one = handles_[CONTEXT_ONE].get_context ();
-  set_context (one);
-  first_iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_car (lst))));
-  Context *two = handles_[CONTEXT_TWO].get_context ();
-  set_context (two);
-  second_iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_cadr (lst))));
-  Context *shared = handles_[CONTEXT_SHARED].get_context ();
-  set_context (shared);
-}
-
-void
-Part_combine_iterator::set_busy (SCM se)
-{
-  if (!notice_busy_)
-    return;
-
-  Stream_event *e = Stream_event::unsmob (se);
-
-  if (e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
-    busy_ = true;
-}
-
-/*
-  Processes a moment in an iterator, and returns whether any new music
-  was reported.
-*/
-bool
-Part_combine_iterator::try_process (Music_iterator *i, Moment m)
-{
-  busy_ = false;
-  notice_busy_ = true;
-
-  i->process (m);
-
-  notice_busy_ = false;
-  return busy_;
+  iterators_[0] = unsmob<Music_iterator> (get_iterator (unsmob<Music> (scm_car (lst))));
+  iterators_[1] = unsmob<Music_iterator> (get_iterator (unsmob<Music> (scm_cadr (lst))));
 }
 
 void
@@ -351,17 +302,18 @@ Part_combine_iterator::process (Moment m)
   if (start_moment_.main_part_.is_infinity () && start_moment_ < 0)
     start_moment_ = now;
 
+  Context *prev_active_outlets[NUM_PARTS];
+  for (size_t i = 0; i < NUM_PARTS; i++)
+    prev_active_outlets[i] = iterators_[i]->get_outlet ();
+
   for (; scm_is_pair (split_list_); split_list_ = scm_cdr (split_list_))
     {
-      splitm = Moment::unsmob (scm_caar (split_list_));
+      splitm = unsmob<Moment> (scm_caar (split_list_));
       if (splitm && *splitm + start_moment_ > now)
         break;
 
       SCM tag = scm_cdar (split_list_);
 
-      Context *outletsBefore[] = { first_iter_->get_outlet (),
-                                   second_iter_->get_outlet () };
-
       if (scm_is_eq (tag, ly_symbol2scm ("chords")))
         chords_together ();
       else if (scm_is_eq (tag, ly_symbol2scm ("apart"))
@@ -372,12 +324,12 @@ Part_combine_iterator::process (Moment m)
         {
           // Continue to use the most recently used part because we might have
           // killed mmrests in the other part.
-          unisono (false, (last_playing_ == 2) ? 2 : 1);
+          unisono (false, (chosen_part_ == 2) ? 2 : 1);
         }
       else if (scm_is_eq (tag, ly_symbol2scm ("unisilence")))
         {
           // as for unisono
-          unisono (true, (last_playing_ == 2) ? 2 : 1);
+          unisono (true, (chosen_part_ == 2) ? 2 : 1);
         }
       else if (scm_is_eq (tag, ly_symbol2scm ("silence1")))
         unisono (true, 1);
@@ -393,22 +345,28 @@ Part_combine_iterator::process (Moment m)
                      + (scm_is_symbol (tag) ? ly_symbol2string (tag) : string ("not a symbol"));
           programming_error (s);
         }
-
-      if ((first_iter_->get_outlet () != outletsBefore[0])
-          || (second_iter_->get_outlet () != outletsBefore[1]))
-        kill_mmrest_in_inactive_outlets ();
     }
 
-  if (first_iter_->ok ())
+  bool any_outlet_changed = false;
+  for (size_t i = 0; i < NUM_PARTS; i++)
     {
-      if (try_process (first_iter_, m))
-        last_playing_ = 1;
+      if (iterators_[i]->ok ())
+        iterators_[i]->process (m);
+
+      if (prev_active_outlets[i] != iterators_[i]->get_outlet ())
+          any_outlet_changed = true;
     }
 
-  if (second_iter_->ok ())
+  if (any_outlet_changed)
     {
-      if (try_process (second_iter_, m))
-        last_playing_ = 2;
+      // Kill multi-measure rests in outlets that were previously active and
+      // are no longer active.
+      for (size_t i = 0; i < NUM_PARTS; i++)
+        {
+          Context *c = prev_active_outlets[i];
+          if (c && !is_active_outlet (c))
+              kill_mmrest (c);
+        }
     }
 }
 
index 7d1c44fcac88527de11123f128c6320b3a046190..798dd3f069017a313911a937643e4cd7bb1dae15 100644 (file)
@@ -38,7 +38,7 @@ void
 Partial_iterator::process (Moment m)
 {
   if (Duration * dur
-      = Duration::unsmob (get_music ()->get_property ("duration")))
+      = unsmob<Duration> (get_music ()->get_property ("duration")))
     {
       Moment length = Moment (dur->get_length ());
 
@@ -52,7 +52,7 @@ Partial_iterator::process (Moment m)
       // work since the Timing_translator does not set
       // measurePosition when initializing.
 
-      Context *timing = Context::unsmob
+      Context *timing = unsmob<Context>
                         (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
                                      get_outlet ()->self_scm (),
                                      ly_symbol2scm ("Timing")));
@@ -91,7 +91,7 @@ Partial_iterator::finalization (SCM ctx, SCM length)
 {
   LY_ASSERT_SMOB (Context, ctx, 1);
   LY_ASSERT_SMOB (Moment, length, 2);
-  Context *timing = Context::unsmob
+  Context *timing = unsmob<Context>
     (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
                  ctx,
                  ly_symbol2scm ("Timing")));
@@ -103,7 +103,7 @@ Partial_iterator::finalization (SCM ctx, SCM length)
                                  Rational (0));
   mp.main_part_ = measure_length (timing);
   timing->set_property ("measurePosition",
-                        (mp - *Moment::unsmob (length)).smobbed_copy ());
+                        (mp - *unsmob<Moment> (length)).smobbed_copy ());
   timing->unset_property (ly_symbol2scm ("partialBusy"));
 
   return SCM_UNSPECIFIED;
index 03bd86b9cf705a3553baa9fed787dc8b9430d1be..895e06981ec6483c1cfcdb7f1b460f41a625c52e 100644 (file)
@@ -73,7 +73,7 @@ Percent_repeat_engraver::start_translation_timestep ()
   if (now_mom ().main_part_ != command_moment_.main_part_)
     {
       first_command_column_
-        = Grob::unsmob (get_property ("currentCommandColumn"));
+        = unsmob<Grob> (get_property ("currentCommandColumn"));
       command_moment_ = now_mom ();
     }
 
index 0b88a8cb45832c6b44619e13425f6ae130d3bf04..6799abc9ca18f253f31be362cc455553f253df59 100644 (file)
@@ -69,7 +69,7 @@ MAKE_SCHEME_CALLBACK (Percent_repeat_item_interface, double_percent, 1);
 SCM
 Percent_repeat_item_interface::double_percent (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Stencil m = x_percent (me, 2);
   m.translate_axis (-m.extent (X_AXIS).center (), X_AXIS);
   return m.smobbed_copy ();
@@ -79,8 +79,8 @@ MAKE_SCHEME_CALLBACK (Percent_repeat_item_interface, beat_slash, 1);
 SCM
 Percent_repeat_item_interface::beat_slash (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
-  Stream_event *cause = Stream_event::unsmob (me->get_property ("cause"));
+  Grob *me = unsmob<Grob> (grob);
+  Stream_event *cause = unsmob<Stream_event> (me->get_property ("cause"));
   int count = robust_scm2int (cause->get_property ("slash-count"), 1);
 
   Stencil m;
index ed42635756b76e6325f3ad2d7dd16de487eb556a..9ab087a2c3bf22e14682c59d46481a6cf0e442b6 100644 (file)
@@ -26,7 +26,7 @@ LY_DEFINE (ly_performance_write, "ly:performance-write",
   LY_ASSERT_SMOB (Performance, performance, 1);
   LY_ASSERT_TYPE (scm_is_string, filename, 2);
 
-  Performance::unsmob (performance)->write_output (ly_scm2string (filename));
+  unsmob<Performance> (performance)->write_output (ly_scm2string (filename));
   return SCM_UNSPECIFIED;
 }
 
index 794fdaf48f528eaeeec839f121d035a2a2debf0c..5502bf0958ea2dea6237fb178c4c56352f603eee 100644 (file)
@@ -58,7 +58,7 @@ Performer_group::acknowledge_audio_elements ()
 
       for (SCM p = get_simple_trans_list (); scm_is_pair (p); p = scm_cdr (p))
         {
-          Translator *t = Translator::unsmob (scm_car (p));
+          Translator *t = unsmob<Translator> (scm_car (p));
           Performer *eng = dynamic_cast<Performer *> (t);
           if (eng && eng != info.origin_trans_)
             eng->acknowledge_audio_element (info);
@@ -71,7 +71,7 @@ performer_each (SCM list, Performer_method method)
 {
   for (SCM p = list; scm_is_pair (p); p = scm_cdr (p))
     {
-      Performer *e = Performer::unsmob (scm_car (p));
+      Performer *e = unsmob<Performer> (scm_car (p));
       if (e)
         (e->*method) ();
     }
@@ -83,7 +83,7 @@ Performer_group::do_announces ()
   for (SCM s = context ()->children_contexts ();
        scm_is_pair (s); s = scm_cdr (s))
     {
-      Context *c = Context::unsmob (scm_car (s));
+      Context *c = unsmob<Context> (scm_car (s));
       Performer_group *group
         = dynamic_cast<Performer_group *> (c->implementation ());
       if (group)
index 5b98c34205480c598a3a5756b4fff48c4308828a..0be5ff4b17d85f421a3bb0203b6c6587dcd5fc4c 100644 (file)
@@ -238,7 +238,7 @@ Piano_pedal_align_engraver::finalize ()
       if (pedal_info_[i].line_spanner_)
         {
           SCM cc = get_property ("currentCommandColumn");
-          Item *c = Item::unsmob (cc);
+          Item *c = unsmob<Item> (cc);
           pedal_info_[i].line_spanner_->set_bound (RIGHT, c);
 
           pedal_info_[i].clear ();
index 3eecc6fa831b6a7d20801af48ad3b762b01164cc..f58a130f75dad10698c728ece0c5ba491dbb8d57 100644 (file)
@@ -33,7 +33,7 @@ MAKE_SCHEME_CALLBACK (Piano_pedal_bracket, print, 1);
 SCM
 Piano_pedal_bracket::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Spanner *orig = dynamic_cast<Spanner *> (me->original ());
 
   Drul_array<bool> broken (false, false);
@@ -46,7 +46,7 @@ Piano_pedal_bracket::print (SCM smob)
 
   Grob *common = me->get_bound (LEFT)
                  ->common_refpoint (me->get_bound (RIGHT), X_AXIS);
-  Grob *textbit = Grob::unsmob (me->get_object ("pedal-text"));
+  Grob *textbit = unsmob<Grob> (me->get_object ("pedal-text"));
 
   if (textbit)
     common = common->common_refpoint (textbit, X_AXIS);
index 1cad3323be1c871181b9a391282081adb29c84af..2fb99407d50c7c9a7061fb832d89d662ce38b27d 100644 (file)
@@ -346,7 +346,7 @@ Piano_pedal_engraver::create_bracket_grobs (Pedal_info *p, bool mixed)
     {
       assert (!p->finished_bracket_);
 
-      Grob *cmc = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *cmc = unsmob<Grob> (get_property ("currentMusicalColumn"));
       p->bracket_->set_bound (RIGHT, cmc);
 
       /*
@@ -424,7 +424,7 @@ Piano_pedal_engraver::finalize ()
       if (p->bracket_)
         {
           SCM cc = get_property ("currentCommandColumn");
-          Item *c = Item::unsmob (cc);
+          Item *c = unsmob<Item> (cc);
           p->bracket_->set_bound (RIGHT, c);
 
           p->finished_bracket_ = p->bracket_;
@@ -444,7 +444,7 @@ Piano_pedal_engraver::stop_translation_timestep ()
       typeset_all (p);
       if (p->bracket_ && !p->bracket_->get_bound (LEFT))
         {
-          Grob *cmc = Grob::unsmob (get_property ("currentMusicalColumn"));
+          Grob *cmc = unsmob<Grob> (get_property ("currentMusicalColumn"));
           p->bracket_->set_bound (LEFT, cmc);
         }
     }
@@ -473,7 +473,7 @@ Piano_pedal_engraver::typeset_all (Pedal_info *p)
     {
       Grob *r = p->finished_bracket_->get_bound (RIGHT);
       if (!r)
-        p->finished_bracket_->set_bound (RIGHT, Grob::unsmob (get_property ("currentMusicalColumn")));
+        p->finished_bracket_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentMusicalColumn")));
 
       p->finished_bracket_ = 0;
     }
index 16f11c983e9b12aa238d0fffcadcbbc0fef9d940..7b4d1e39296572210efc4cf65738e2f5780b18c2 100644 (file)
@@ -27,8 +27,8 @@ LY_DEFINE (ly_pitch_transpose, "ly:pitch-transpose",
   LY_ASSERT_SMOB (Pitch, p, 1);
   LY_ASSERT_SMOB (Pitch, delta, 2);
 
-  Pitch *t = Pitch::unsmob (p);
-  Pitch *d = Pitch::unsmob (delta);
+  Pitch *t = unsmob<Pitch> (p);
+  Pitch *d = unsmob<Pitch> (delta);
   return t->transposed (*d).smobbed_copy ();
 }
 
@@ -59,7 +59,7 @@ LY_DEFINE (ly_pitch_negate, "ly:pitch-negate", 1, 0, 0,
            "Negate @var{p}.")
 {
   LY_ASSERT_SMOB (Pitch, p, 1);
-  Pitch *pp = Pitch::unsmob (p);
+  Pitch *pp = unsmob<Pitch> (p);
   return pp->negated ().smobbed_copy ();
 }
 
@@ -69,7 +69,7 @@ LY_DEFINE (ly_pitch_steps, "ly:pitch-steps", 1, 0, 0,
            " pitch@tie{}@var{p}.")
 {
   LY_ASSERT_SMOB (Pitch, p, 1);
-  Pitch *pp = Pitch::unsmob (p);
+  Pitch *pp = unsmob<Pitch> (p);
   return scm_from_int (pp->steps ());
 }
 
@@ -78,7 +78,7 @@ LY_DEFINE (ly_pitch_octave, "ly:pitch-octave",
            "Extract the octave from pitch@tie{}@var{pp}.")
 {
   LY_ASSERT_SMOB (Pitch, pp, 1);
-  Pitch *p = Pitch::unsmob (pp);
+  Pitch *p = unsmob<Pitch> (pp);
   int q = p->get_octave ();
   return scm_from_int (q);
 }
@@ -88,7 +88,7 @@ LY_DEFINE (ly_pitch_alteration, "ly:pitch-alteration",
            "Extract the alteration from pitch@tie{}@var{pp}.")
 {
   LY_ASSERT_SMOB (Pitch, pp, 1);
-  Pitch *p = Pitch::unsmob (pp);
+  Pitch *p = unsmob<Pitch> (pp);
   Rational q = p->get_alteration ();
 
   return ly_rational2scm (q);
@@ -99,7 +99,7 @@ LY_DEFINE (ly_pitch_notename, "ly:pitch-notename",
            "Extract the note name from pitch @var{pp}.")
 {
   LY_ASSERT_SMOB (Pitch, pp, 1);
-  Pitch *p = Pitch::unsmob (pp);
+  Pitch *p = unsmob<Pitch> (pp);
   int q = p->get_notename ();
   return scm_from_int (q);
 }
@@ -110,7 +110,7 @@ LY_DEFINE (ly_pitch_tones, "ly:pitch-tones",
            " middle@tie{}C as a rational number.")
 {
   LY_ASSERT_SMOB (Pitch, pp, 1);
-  return ly_rational2scm (Pitch::unsmob (pp)->tone_pitch ());
+  return ly_rational2scm (unsmob<Pitch> (pp)->tone_pitch ());
 }
 
 LY_DEFINE (ly_pitch_quartertones, "ly:pitch-quartertones",
@@ -119,7 +119,7 @@ LY_DEFINE (ly_pitch_quartertones, "ly:pitch-quartertones",
            " middle@tie{}C.")
 {
   LY_ASSERT_SMOB (Pitch, pp, 1);
-  Pitch *p = Pitch::unsmob (pp);
+  Pitch *p = unsmob<Pitch> (pp);
   int q = p->rounded_quartertone_pitch ();
   return scm_from_int (q);
 }
@@ -130,7 +130,7 @@ LY_DEFINE (ly_pitch_semitones, "ly:pitch-semitones",
            " middle@tie{}C.")
 {
   LY_ASSERT_SMOB (Pitch, pp, 1);
-  Pitch *p = Pitch::unsmob (pp);
+  Pitch *p = unsmob<Pitch> (pp);
   int q = p->rounded_semitone_pitch ();
   return scm_from_int (q);
 }
@@ -142,8 +142,8 @@ LY_DEFINE (ly_pitch_less_p, "ly:pitch<?",
   LY_ASSERT_SMOB (Pitch, p1, 1);
   LY_ASSERT_SMOB (Pitch, p2, 2);
 
-  Pitch *a = Pitch::unsmob (p1);
-  Pitch *b = Pitch::unsmob (p2);
+  Pitch *a = unsmob<Pitch> (p1);
+  Pitch *b = unsmob<Pitch> (p2);
 
   if (Pitch::compare (*a, *b) < 0)
     return SCM_BOOL_T;
@@ -160,8 +160,8 @@ LY_DEFINE (ly_pitch_diff, "ly:pitch-diff",
   LY_ASSERT_SMOB (Pitch, pitch, 1);
   LY_ASSERT_SMOB (Pitch, root, 2);
 
-  Pitch *p = Pitch::unsmob (pitch);
-  Pitch *r = Pitch::unsmob (root);
+  Pitch *p = unsmob<Pitch> (pitch);
+  Pitch *r = unsmob<Pitch> (root);
 
   return pitch_interval (*r, *p).smobbed_copy ();
 }
@@ -176,7 +176,7 @@ LY_DEFINE (ly_set_middle_C_x, "ly:set-middle-C!",
 {
   LY_ASSERT_SMOB (Context, context, 1);
 
-  Context *c = Context::unsmob (context);
+  Context *c = unsmob<Context> (context);
   int clef_pos = robust_scm2int (c->get_property ("middleCClefPosition"), 0);
   int offset = robust_scm2int (c->get_property ("middleCOffset"), 0);
   /* middleCCuePosition overrides the clef! */
index 0fd75129476a7a1d889d751c504e290f22c30843..14151783725519e4c8170f4bb51e712ca78c648a 100644 (file)
@@ -252,8 +252,8 @@ MAKE_SCHEME_CALLBACK (Pitch, less_p, 2);
 SCM
 Pitch::less_p (SCM p1, SCM p2)
 {
-  Pitch *a = Pitch::unsmob (p1);
-  Pitch *b = Pitch::unsmob (p2);
+  Pitch *a = unsmob<Pitch> (p1);
+  Pitch *b = unsmob<Pitch> (p2);
 
   if (compare (*a, *b) < 0)
     return SCM_BOOL_T;
index 4f4fad23254966520f1fd325126d11c0c56211b2..ac9e4dfd4d7f5be52aa9aa3e3b68aed6f0336026 100644 (file)
@@ -88,7 +88,7 @@ Pitched_trill_engraver::acknowledge_trill_spanner (Grob_info info)
   if (ev
       && ev->in_event_class ("trill-span-event")
       && to_dir (ev->get_property ("span-direction")) == START
-      && Pitch::is_smob (ev->get_property ("pitch")))
+      && unsmob<Pitch> (ev->get_property ("pitch")))
     make_trill (ev);
 }
 
@@ -96,7 +96,7 @@ void
 Pitched_trill_engraver::make_trill (Stream_event *ev)
 {
   SCM scm_pitch = ev->get_property ("pitch");
-  Pitch *p = Pitch::unsmob (scm_pitch);
+  Pitch *p = unsmob<Pitch> (scm_pitch);
 
   SCM keysig = get_property ("localAlterations");
 
@@ -132,7 +132,7 @@ Pitched_trill_engraver::make_trill (Stream_event *ev)
   int c0 = scm_is_number (c0scm) ? scm_to_int (c0scm) : 0;
 
   trill_head_->set_property ("staff-position",
-                             scm_from_int (Pitch::unsmob (scm_pitch)->steps ()
+                             scm_from_int (unsmob<Pitch> (scm_pitch)->steps ()
                                            + c0));
 
   trill_group_ = make_item ("TrillPitchGroup", ev->self_scm ());
index 02be37d814e9cf4d3af9e6b97b0e6f803cc89969..a111aad58c1d89cfb3fe81b779cb390a1699fe78 100644 (file)
@@ -28,9 +28,9 @@ LY_DEFINE (ly_pointer_group_interface__add_grob, "ly:pointer-group-interface::ad
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
   LY_ASSERT_SMOB (Grob, grob_element, 3);
 
-  Pointer_group_interface::add_grob (Grob::unsmob (grob),
+  Pointer_group_interface::add_grob (unsmob<Grob> (grob),
                                      sym,
-                                     Grob::unsmob (grob_element));
+                                     unsmob<Grob> (grob_element));
   return SCM_UNSPECIFIED;
 }
 
index 73cf9fd6a91af44430c47b279bff46fbf9e9d39c..2720fcf91ae473ca9857b728f0d8dc53211f9686 100644 (file)
 int
 Pointer_group_interface::count (Grob *me, SCM sym)
 {
-  Grob_array *arr = Grob_array::unsmob (me->internal_get_object (sym));
+  Grob_array *arr = unsmob<Grob_array> (me->internal_get_object (sym));
   return arr ? arr->size () : 0;
 }
 
 void
 Pointer_group_interface::add_grob (Grob *me, SCM sym, SCM p)
 {
-  add_grob (me, sym, Grob::unsmob (p));
+  add_grob (me, sym, unsmob<Grob> (p));
 }
 
 void
@@ -46,11 +46,11 @@ Grob_array *
 Pointer_group_interface::get_grob_array (Grob *me, SCM sym)
 {
   SCM scm_arr = me->internal_get_object (sym);
-  Grob_array *arr = Grob_array::unsmob (scm_arr);
+  Grob_array *arr = unsmob<Grob_array> (scm_arr);
   if (!arr)
     {
       scm_arr = Grob_array::make_array ();
-      arr = Grob_array::unsmob (scm_arr);
+      arr = unsmob<Grob_array> (scm_arr);
       me->set_object (sym, scm_arr);
     }
   return arr;
@@ -88,7 +88,7 @@ static vector<Grob *> empty_array;
 vector<Grob *> const &
 ly_scm2link_array (SCM x)
 {
-  Grob_array *arr = Grob_array::unsmob (x);
+  Grob_array *arr = unsmob<Grob_array> (x);
   return arr ? arr->array () : empty_array;
 }
 
@@ -103,7 +103,7 @@ internal_extract_grob_array (Grob const *elt, SCM symbol)
 vector<Item *>
 internal_extract_item_array (Grob const *elt, SCM symbol)
 {
-  Grob_array *arr = Grob_array::unsmob (elt->internal_get_object (symbol));
+  Grob_array *arr = unsmob<Grob_array> (elt->internal_get_object (symbol));
   vector<Item *> items;
   for (vsize i = 0; arr && i < arr->size (); i++)
     items.push_back (arr->item (i));
index 82e4fbdca3a7f9b87c618b071ade67a369522bd8..03c84eca4d081a943add1ce4d014514d8de6c4d0 100644 (file)
@@ -24,7 +24,7 @@ LY_DEFINE (ly_prob_set_property_x, "ly:prob-set-property!",
            "Set property @var{sym} of @var{obj} to @var{value}.")
 {
   LY_ASSERT_SMOB (Prob, obj, 1);
-  Prob *ps = Prob::unsmob (obj);
+  Prob *ps = unsmob<Prob> (obj);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
 
   ps->set_property (sym, value);
@@ -48,7 +48,7 @@ LY_DEFINE (ly_prob_property, "ly:prob-property",
            " @code{'()} if @var{val} is not specified.")
 {
   LY_ASSERT_SMOB (Prob, prob, 1);
-  Prob *ps = Prob::unsmob (prob);
+  Prob *ps = unsmob<Prob> (prob);
   LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
 
   if (SCM_UNBNDP (val))
@@ -66,7 +66,7 @@ LY_DEFINE (ly_prob_type_p, "ly:prob-type?",
            (SCM obj, SCM type),
            "Is @var{obj} the specified prob-type?")
 {
-  Prob *prob = Prob::unsmob (obj);
+  Prob *prob = unsmob<Prob> (obj);
   return scm_from_bool (prob && prob->type () == type);
 }
 
@@ -95,7 +95,7 @@ LY_DEFINE (ly_prob_mutable_properties, "ly:prob-mutable-properties",
            "Retrieve an alist of mutable properties.")
 {
   LY_ASSERT_SMOB (Prob, prob, 1);
-  Prob *ps = Prob::unsmob (prob);
+  Prob *ps = unsmob<Prob> (prob);
   return ps->get_property_alist (true);
 }
 
@@ -105,7 +105,7 @@ LY_DEFINE (ly_prob_immutable_properties, "ly:prob-immutable-properties",
            "Retrieve an alist of immutable properties.")
 {
   LY_ASSERT_SMOB (Prob, prob, 1);
-  Prob *ps = Prob::unsmob (prob);
+  Prob *ps = unsmob<Prob> (prob);
   return ps->get_property_alist (false);
 }
 
index 37dad6246b34a00b2e0d3019ef0322849168ce85..24ce604db90109fa24ac9fd01058b37cceef5ed2 100644 (file)
@@ -36,7 +36,7 @@ Prob::equal_p (SCM sa, SCM sb)
      equality; e.g., that two probs are equal iff they can be
      distinguished by calls to ly:prob-property.
   */
-  Prob *probs[2] = {Prob::unsmob (sa), Prob::unsmob (sb)};
+  Prob *probs[2] = {unsmob<Prob> (sa), unsmob<Prob> (sb)};
   SCM props[2][2];
   int i;
 
@@ -62,7 +62,7 @@ Prob::equal_p (SCM sa, SCM sb)
           SCM aval = scm_cdar (aprop);
           SCM bval = scm_cdar (bprop);
           if (!scm_is_eq (scm_caar (aprop), scm_caar (bprop))
-              || (!(Input::is_smob (aval) && Input::is_smob (bval))
+              || (!(unsmob<Input> (aval) && unsmob<Input> (bval))
                   && !ly_is_equal (aval, bval)))
             return SCM_BOOL_F;
         }
@@ -141,7 +141,7 @@ Prob::print_smob (SCM port, scm_print_state *)
 SCM
 Prob::internal_get_property (SCM sym) const
 {
-#ifndef NDEBUG
+#ifdef DEBUG
   if (profile_property_accesses)
     note_property_access (&prob_property_lookup_table, sym);
 #endif
index bb1d3b4c1853748a1bbc02df4c573865fc71228d..bf95ee21eb12182be6b3fec91fa5a6aeb3d15b52 100644 (file)
@@ -89,8 +89,8 @@ MAKE_SCHEME_CALLBACK (Property_iterator, once_finalization, 3);
 SCM
 Property_iterator::once_finalization (SCM ctx, SCM music, SCM previous_value)
 {
-  Music *m = Music::unsmob (music);
-  Context *c = Context::unsmob (ctx);
+  Music *m = unsmob<Music> (music);
+  Context *c = unsmob<Context> (ctx);
 
   // Do not use UnsetProperty, which sets the default, but rather
   // cache the value before the \once \set command and restore it now
@@ -159,8 +159,8 @@ MAKE_SCHEME_CALLBACK (Push_property_iterator, once_finalization, 2);
 SCM
 Push_property_iterator::once_finalization (SCM ctx, SCM music)
 {
-  Music *mus = Music::unsmob (music);
-  Context *c = Context::unsmob (ctx);
+  Music *mus = unsmob<Music> (music);
+  Context *c = unsmob<Context> (ctx);
 
   SCM sym = mus->get_property ("symbol");
   if (check_grob (mus, sym))
index c0eb374bafc70c8e762774a5ada363735f46a505..225c64dc60fc220bf03910f25575a539a3ecbdfd 100644 (file)
@@ -46,13 +46,25 @@ Protected_scm::~Protected_scm ()
   object_ = SCM_UNDEFINED;
 }
 
+SCM Protected_scm::list_ = SCM_EOL;
+SCM Protected_scm::last_ = SCM_EOL;
+
 Protected_scm &
 Protected_scm::operator = (SCM s)
 {
   if (SCM_CONSP (object_))
     SCM_SETCAR (object_, s);
+  else if (SCM_IMP (s))
+    object_ = s;
   else
-    object_ = SCM_NIMP (s) ? scm_permanent_object (scm_list_1 (s)) : s;
+    {
+      s = scm_list_1 (s);
+      if (SCM_CONSP (last_))
+        SCM_SETCDR (last_, s);
+      else
+        list_ = scm_permanent_object (s);
+      last_ = object_ = s;
+    }
 
   return *this;
 }
index e4be5c4db10f13510c2fce627e1922e024040374..d78d8d619c1edd78504f2d21339dc9585f6b8c58 100644 (file)
@@ -31,7 +31,7 @@ MAKE_SCHEME_CALLBACK (Pure_from_neighbor_interface, calc_pure_relevant_grobs, 1)
 SCM
 Pure_from_neighbor_interface::calc_pure_relevant_grobs (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set ((me->original () && me->original ()->is_live ()
                      ? me->original ()
                      : me),
@@ -42,10 +42,10 @@ Pure_from_neighbor_interface::calc_pure_relevant_grobs (SCM smob)
   new_elts.insert (new_elts.end (), elts.begin (), elts.end ());
 
   SCM neighbors_scm = me->get_object ("neighbors");
-  if (Grob_array::is_smob (neighbors_scm))
+  if (unsmob<Grob_array> (neighbors_scm))
     {
       vector<Grob *> &arr
-        = Grob_array::unsmob (neighbors_scm)->array_reference ();
+        = unsmob<Grob_array> (neighbors_scm)->array_reference ();
       arr = new_elts;
     }
 
index c68e22345612dd1ebd4472d287656d3269c907d4..c4336250111170df3e40d0d58085cb645403ef37 100644 (file)
@@ -194,7 +194,7 @@ Moment
 Quote_iterator::vector_moment (int idx) const
 {
   SCM entry = scm_c_vector_ref (event_vector_, idx);
-  return *Moment::unsmob (scm_caar (entry));
+  return *unsmob<Moment> (scm_caar (entry));
 }
 
 void
@@ -235,15 +235,15 @@ Quote_iterator::process (Moment m)
   if (quote_ok ())
     {
       SCM entry = scm_c_vector_ref (event_vector_, event_idx_);
-      Pitch *quote_pitch = Pitch::unsmob (scm_cdar (entry));
+      Pitch *quote_pitch = unsmob<Pitch> (scm_cdar (entry));
 
       /*
         The pitch that sounds when written central C is played.
       */
       Pitch temp_pitch;
-      Pitch *me_pitch = Pitch::unsmob (get_music ()->get_property ("quoted-transposition"));
+      Pitch *me_pitch = unsmob<Pitch> (get_music ()->get_property ("quoted-transposition"));
       if (!me_pitch)
-        me_pitch = Pitch::unsmob (get_outlet ()->get_property ("instrumentTransposition"));
+        me_pitch = unsmob<Pitch> (get_outlet ()->get_property ("instrumentTransposition"));
       else
         {
           // We are not going to win a beauty contest with this one,
@@ -260,7 +260,7 @@ Quote_iterator::process (Moment m)
         {
           SCM ev_acc = scm_car (s);
 
-          Stream_event *ev = Stream_event::unsmob (scm_car (ev_acc));
+          Stream_event *ev = unsmob<Stream_event> (scm_car (ev_acc));
           if (!ev)
             programming_error ("no music found in quote");
           else if (accept_music_type (ev, is_cue))
index a68c5b8e4aac63ace9dd5fcc4ddf88748e32bbc5..12abf812541a94fc31e94eb740a313205b6a9f90 100644 (file)
@@ -31,9 +31,9 @@ MAKE_SCHEME_CALLBACK (Relative_octave_check, relative_callback, 2)
 SCM
 Relative_octave_check::relative_callback (SCM music, SCM last_pitch)
 {
-  Pitch p = *Pitch::unsmob (last_pitch);
-  Music *m = Music::unsmob (music);
-  Pitch *check_p = Pitch::unsmob (m->get_property ("pitch"));
+  Pitch p = *unsmob<Pitch> (last_pitch);
+  Music *m = unsmob<Music> (music);
+  Pitch *check_p = unsmob<Pitch> (m->get_property ("pitch"));
 
   int delta_oct = 0;
   if (check_p)
index 9c59ac01c9a85131360b31e84da92676dc1df4e1..d61c52c5d8bc5f5f06b516d7bd005d327254cc18 100644 (file)
@@ -80,9 +80,9 @@ Repeat_tie_engraver::acknowledge_note_head (Grob_info inf)
   semi_tie->set_parent (semi_tie_column_, Y_AXIS);
   semi_ties_.push_back (semi_tie);
 
-  if (is_direction (Stream_event::unsmob (cause)->get_property ("direction")))
+  if (is_direction (unsmob<Stream_event> (cause)->get_property ("direction")))
     {
-      Direction d = to_dir (Stream_event::unsmob (cause)->get_property ("direction"));
+      Direction d = to_dir (unsmob<Stream_event> (cause)->get_property ("direction"));
       semi_tie->set_property ("direction", scm_from_int (d));
     }
 
index f7eb5d99647cb25180ed6201a2f9247b19fe6087..001eb0e5e40b183edf56e1ea21bab24b0fd01f84 100644 (file)
@@ -26,7 +26,7 @@
 Music *
 Repeated_music::body (Music *me)
 {
-  return Music::unsmob (me->get_property ("element"));
+  return unsmob<Music> (me->get_property ("element"));
 }
 
 SCM
@@ -53,7 +53,7 @@ Repeated_music::alternatives_get_length (Music *me, bool fold)
   SCM p = alternative_list;
   while (scm_is_pair (p) && done < count)
     {
-      m = m + Music::unsmob (scm_car (p))->get_length ();
+      m = m + unsmob<Music> (scm_car (p))->get_length ();
       done++;
       if (count - done < len)
         p = scm_cdr (p);
@@ -78,7 +78,7 @@ Moment
 Repeated_music::body_get_length (Music *me)
 {
   Moment m = 0;
-  if (Music *body = Music::unsmob (me->get_property ("element")))
+  if (Music *body = unsmob<Music> (me->get_property ("element")))
     m = body->get_length ();
   return m;
 }
@@ -88,7 +88,7 @@ MAKE_SCHEME_CALLBACK (Repeated_music, unfolded_music_length, 1);
 SCM
 Repeated_music::unfolded_music_length (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
 
   Moment l = Moment (repeat_count (me)) * body_get_length (me) + alternatives_get_length (me, false);
   return l.smobbed_copy ();
@@ -98,7 +98,7 @@ MAKE_SCHEME_CALLBACK (Repeated_music, folded_music_length, 1);
 SCM
 Repeated_music::folded_music_length (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
 
   Moment l = body_get_length (me) + alternatives_get_length (me, true);
   return l.smobbed_copy ();
@@ -114,7 +114,7 @@ MAKE_SCHEME_CALLBACK (Repeated_music, volta_music_length, 1);
 SCM
 Repeated_music::volta_music_length (SCM m)
 {
-  Music *me = Music::unsmob (m);
+  Music *me = unsmob<Music> (m);
   Moment l = body_get_length (me) + alternatives_volta_get_length (me);
   return l.smobbed_copy ();
 }
@@ -123,8 +123,8 @@ MAKE_SCHEME_CALLBACK (Repeated_music, minimum_start, 1);
 SCM
 Repeated_music::minimum_start (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Music *body = Music::unsmob (me->get_property ("element"));
+  Music *me = unsmob<Music> (m);
+  Music *body = unsmob<Music> (me->get_property ("element"));
 
   if (body)
     return body->start_mom ().smobbed_copy ();
@@ -136,8 +136,8 @@ MAKE_SCHEME_CALLBACK (Repeated_music, first_start, 1);
 SCM
 Repeated_music::first_start (SCM m)
 {
-  Music *me = Music::unsmob (m);
-  Music *body = Music::unsmob (me->get_property ("element"));
+  Music *me = unsmob<Music> (m);
+  Music *body = unsmob<Music> (me->get_property ("element"));
 
   Moment rv = (body) ? body->start_mom ()
               : Music_sequence::first_start (me->get_property ("elements"));
index 47e2d71f11d00b0c2c978807c61af21dead1582b..20e7eb9fc784940fe610bec1d6348d5382616250 100644 (file)
@@ -57,8 +57,8 @@ Rest_collision_engraver::process_acknowledged ()
 
   for (SCM s = get_property ("busyGrobs"); scm_is_pair (s); s = scm_cdr (s))
     {
-      Grob *g = Grob::unsmob (scm_cdar (s));
-      Moment *m = Moment::unsmob (scm_caar (s));
+      Grob *g = unsmob<Grob> (scm_cdar (s));
+      Moment *m = unsmob<Moment> (scm_caar (s));
       if (!g || !m)
         continue;
 
index 7648f6d9a09825109e54f879442e3b3d1c2f2fca..86de7a9c3d7f2588880a64a0d1862ebf4a81f3ad 100644 (file)
@@ -41,7 +41,7 @@ MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Rest_collision, force_shift_callback_rest, 2,
 SCM
 Rest_collision::force_shift_callback_rest (SCM rest, SCM offset)
 {
-  Grob *rest_grob = Grob::unsmob (rest);
+  Grob *rest_grob = unsmob<Grob> (rest);
   Grob *parent = rest_grob->get_parent (X_AXIS);
 
   /*
@@ -53,7 +53,7 @@ Rest_collision::force_shift_callback_rest (SCM rest, SCM offset)
 
   if (Note_column::has_interface (parent) && Note_column::has_rests (parent))
     {
-      Grob *collision = Grob::unsmob (parent->get_object ("rest-collision"));
+      Grob *collision = unsmob<Grob> (parent->get_object ("rest-collision"));
 
       if (collision)
         (void) collision->get_property ("positioning-done");
@@ -69,7 +69,7 @@ Rest_collision::add_column (Grob *me, Grob *p)
 
   p->set_object ("rest-collision", me->self_scm ());
 
-  Grob *rest = Grob::unsmob (p->get_object ("rest"));
+  Grob *rest = unsmob<Grob> (p->get_object ("rest"));
   if (rest)
     {
       chain_offset_callback (rest,
@@ -96,7 +96,7 @@ MAKE_SCHEME_CALLBACK (Rest_collision, calc_positioning_done, 1);
 SCM
 Rest_collision::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   me->set_property ("positioning-done", SCM_BOOL_T);
 
@@ -110,7 +110,7 @@ Rest_collision::calc_positioning_done (SCM smob)
       Grob *e = elts[i];
       if (Note_column::has_interface (e))
         {
-          if (Grob::unsmob (e->get_object ("rest")))
+          if (unsmob<Grob> (e->get_object ("rest")))
             rests.push_back (e);
           else
             notes.push_back (e);
index 928e4d7d95bc6833e8b61c0e7b4809a01071d6aa..b40aeee8a3738e0b43c7080d60e2f715d932b662 100644 (file)
@@ -66,7 +66,7 @@ Rest_engraver::process_music ()
   if (rest_event_ && !rest_)
     {
       rest_ = make_item ("Rest", rest_event_->self_scm ());
-      Pitch *p = Pitch::unsmob (rest_event_->get_property ("pitch"));
+      Pitch *p = unsmob<Pitch> (rest_event_->get_property ("pitch"));
 
       if (p)
         {
index 4f05764296c4faf61df85f892c9327293ca4d2fb..f562f69534a1689d648efabb5d90051c9b0a42d3 100644 (file)
@@ -35,7 +35,7 @@ MAKE_SCHEME_CALLBACK (Rest, y_offset_callback, 1);
 SCM
 Rest::y_offset_callback (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   int duration_log = scm_to_int (me->get_property ("duration-log"));
   Real ss = Staff_symbol_referencer::staff_space (me);
 
@@ -146,8 +146,8 @@ MAKE_SCHEME_CALLBACK (Rest, calc_cross_staff, 1);
 SCM
 Rest::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
 
   if (!stem)
     return SCM_BOOL_F;
@@ -259,7 +259,7 @@ Rest::translate (Grob *me, int dy)
 SCM
 Rest::print (SCM smob)
 {
-  return brew_internal_stencil (Grob::unsmob (smob), true);
+  return brew_internal_stencil (unsmob<Grob> (smob), true);
 }
 
 MAKE_SCHEME_CALLBACK (Rest, width, 1);
@@ -269,14 +269,14 @@ MAKE_SCHEME_CALLBACK (Rest, width, 1);
 SCM
 Rest::width (SCM smob)
 {
-  return generic_extent_callback (Grob::unsmob (smob), X_AXIS);
+  return generic_extent_callback (unsmob<Grob> (smob), X_AXIS);
 }
 
 MAKE_SCHEME_CALLBACK (Rest, height, 1);
 SCM
 Rest::height (SCM smob)
 {
-  return generic_extent_callback (Grob::unsmob (smob), Y_AXIS);
+  return generic_extent_callback (unsmob<Grob> (smob), Y_AXIS);
 }
 
 /*
@@ -294,7 +294,7 @@ Rest::generic_extent_callback (Grob *me, Axis a)
     with ledgered rests.
   */
   SCM m = brew_internal_stencil (me, a != X_AXIS);
-  return ly_interval2scm (Stencil::unsmob (m)->extent (a));
+  return ly_interval2scm (unsmob<Stencil> (m)->extent (a));
 }
 
 MAKE_SCHEME_CALLBACK (Rest, pure_height, 3);
@@ -303,9 +303,9 @@ Rest::pure_height (SCM smob,
                    SCM /* start */,
                    SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM m = brew_internal_stencil (me, false);
-  return ly_interval2scm (Stencil::unsmob (m)->extent (Y_AXIS));
+  return ly_interval2scm (unsmob<Stencil> (m)->extent (Y_AXIS));
 }
 
 ADD_INTERFACE (Rest,
index 1030f5e13bba3fa46988966a4499791b3b5732fe..8628b0508865eac3325e2974362e0730d4d698c1 100644 (file)
@@ -29,14 +29,14 @@ Item *
 Rhythmic_head::get_dots (Grob *me)
 {
   SCM s = me->get_object ("dot");
-  return Item::unsmob (s);
+  return unsmob<Item> (s);
 }
 
 Item *
 Rhythmic_head::get_stem (Grob *me)
 {
   SCM s = me->get_object ("stem");
-  return Item::unsmob (s);
+  return unsmob<Item> (s);
 }
 
 int
index 011d32cd01f1be25cdc9e71d6f7b84ea4fb928ee..cff4353f40d235cc81ea1d3ed2f7b76739b5f2a7 100644 (file)
@@ -62,7 +62,7 @@ Rhythmic_music_iterator::process (Moment m)
               SCM art = scm_car (arts);
 
               if (c->event_source ()->is_listened_class
-                  (Stream_event::unsmob (art)->get_property ("class")))
+                  (unsmob<Stream_event> (art)->get_property ("class")))
                 listened = scm_cons (art, listened);
               else
                 unlistened = scm_cons (art, unlistened);
@@ -71,7 +71,7 @@ Rhythmic_music_iterator::process (Moment m)
           c->event_source ()->broadcast (ev);
           arts = scm_reverse_x (listened, SCM_EOL);
           for (; scm_is_pair (arts); arts = scm_cdr (arts))
-            c->event_source ()->broadcast (Stream_event::unsmob (scm_car (arts)));
+            c->event_source ()->broadcast (unsmob<Stream_event> (scm_car (arts)));
         }
       else
         c->event_source ()->broadcast (ev);
index a5afd41daee5f86fd466e4ac0af98c52fa641e95..02c1dc5f8e2daca09b480ac977049c66e70d68e3 100644 (file)
@@ -20,6 +20,7 @@
 */
 
 #include "scale.hh"
+#include "protected-scm.hh"
 
 
 /*
@@ -53,25 +54,25 @@ LY_DEFINE (ly_make_scale, "ly:make-scale",
 
   SCM_ASSERT_TYPE (type_ok, steps, SCM_ARG1, __FUNCTION__, "vector of rational");
 
-  Scale *s = new Scale (tones);
+  return (new Scale (tones))->unprotect ();
+}
 
-  SCM retval = s->self_scm ();
-  s->unprotect ();
+Scale *default_global_scale = 0;
+Protected_scm default_global_scale_scm (SCM_BOOL_F);
 
-  return retval;
-}
+// TODO: This is somewhat fishy: pitches protect their scale via a
+// mark_smob hook.  But since pitches are of Simple_smob variety, they
+// are unknown to GUILE unless a smobbed_copy has been created.  So
+// changing the default scale might cause some existing pitches to
+// lose their scale's protection.
 
 LY_DEFINE (ly_default_scale, "ly:default-scale",
            0, 0, 0, (),
            "Get the global default scale.")
 {
-  return default_global_scale
-         ? default_global_scale->self_scm ()
-         : SCM_BOOL_F;
+  return default_global_scale_scm;
 }
 
-Scale *default_global_scale = 0;
-
 LY_DEFINE (ly_set_default_scale, "ly:set-default-scale",
            1, 0, 0, (SCM scale),
            "Set the global default scale.  This determines the tuning of"
@@ -83,11 +84,8 @@ LY_DEFINE (ly_set_default_scale, "ly:set-default-scale",
 {
   LY_ASSERT_SMOB (Scale, scale, 1);
 
-  Scale *s = Scale::unsmob (scale);
-  if (default_global_scale)
-    default_global_scale->unprotect ();
-  default_global_scale = s;
-  s->protect ();
+  default_global_scale_scm = scale;
+  default_global_scale = unsmob<Scale> (scale);
 
   return SCM_UNSPECIFIED;
 }
index 0d0aa457a7e9b837138ba9f880b9ca8b70acbf30..11618d0f47fc7abac90185498552dd3596817258 100644 (file)
@@ -105,9 +105,9 @@ Score_performer::disconnect_from_context ()
 void
 Score_performer::prepare (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
   SCM sm = ev->get_property ("moment");
-  Moment *m = Moment::unsmob (sm);
+  Moment *m = unsmob<Moment> (sm);
   audio_column_ = new Audio_column (*m);
   announce_element (Audio_element_info (audio_column_, 0));
   precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, UP);
index c8262dc7df236b89d2023853275a1cd14c81d308..1d3e55bc6e31873047eae282ac033a6fe865fcf5 100644 (file)
@@ -44,7 +44,7 @@ LY_DEFINE (ly_score_output_defs, "ly:score-output-defs",
            "All output definitions in a score.")
 {
   LY_ASSERT_SMOB (Score, score, 1);
-  Score *sc = Score::unsmob (score);
+  Score *sc = unsmob<Score> (score);
 
   SCM l = SCM_EOL;
   for (vsize i = 0; i < sc->defs_.size (); i++)
@@ -58,8 +58,8 @@ LY_DEFINE (ly_score_add_output_def_x, "ly:score-add-output-def!",
 {
   LY_ASSERT_SMOB (Score, score, 1);
   LY_ASSERT_SMOB (Output_def, def, 2);
-  Score *sc = Score::unsmob (score);
-  Output_def *output_def = Output_def::unsmob (def);
+  Score *sc = unsmob<Score> (score);
+  Output_def *output_def = unsmob<Output_def> (def);
   sc->add_output_def (output_def);
   return SCM_UNSPECIFIED;
 }
@@ -69,7 +69,7 @@ LY_DEFINE (ly_score_header, "ly:score-header",
            "Return score header.")
 {
   LY_ASSERT_SMOB (Score, score, 1);
-  Score *sc = Score::unsmob (score);
+  Score *sc = unsmob<Score> (score);
   return sc->get_header ();
 }
 
@@ -81,7 +81,7 @@ LY_DEFINE (ly_score_set_header_x, "ly:score-set-header!",
   SCM_ASSERT_TYPE (ly_is_module (module), module, SCM_ARG2, __FUNCTION__,
                    "module");
 
-  Score *sc = Score::unsmob (score);
+  Score *sc = unsmob<Score> (score);
   sc->set_header (module);
   return SCM_UNSPECIFIED;
 }
@@ -91,7 +91,7 @@ LY_DEFINE (ly_score_music, "ly:score-music",
            "Return score music.")
 {
   LY_ASSERT_SMOB (Score, score, 1);
-  Score *sc = Score::unsmob (score);
+  Score *sc = unsmob<Score> (score);
   return sc->get_music ();
 }
 
@@ -100,7 +100,7 @@ LY_DEFINE (ly_score_error_p, "ly:score-error?",
            "Was there an error in the score?")
 {
   LY_ASSERT_SMOB (Score, score, 1);
-  Score *sc = Score::unsmob (score);
+  Score *sc = unsmob<Score> (score);
   return scm_from_bool (sc->error_found_);
 }
 
@@ -113,8 +113,8 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
   LY_ASSERT_SMOB (Score, score, 1);
   LY_ASSERT_SMOB (Output_def, layout, 2);
 
-  Score *sc = Score::unsmob (score);
-  Output_def *od = Output_def::unsmob (layout);
+  Score *sc = unsmob<Score> (score);
+  Output_def *od = unsmob<Output_def> (layout);
 
   if (sc->error_found_)
     return SCM_EOL;
index 2388ba7cf2df308cb44dfb5b13c65d6f3400428a..fe0f761fb7bad81ebf8dcdb2077b9d007a1f7097 100644 (file)
@@ -40,7 +40,7 @@ using namespace std;
 Input *
 Score::origin () const
 {
-  return Input::unsmob (input_location_);
+  return unsmob<Input> (input_location_);
 }
 
 Score::Score ()
@@ -83,7 +83,7 @@ Score::Score (Score const &s)
   smobify_self ();
   input_location_ = s.origin ()->smobbed_copy ();
 
-  Music *m = Music::unsmob (s.music_);
+  Music *m = unsmob<Music> (s.music_);
   if (m)
     {
       Music *mclone = m->clone ();
@@ -139,7 +139,7 @@ Score::book_rendering (Output_def *layoutbook,
 
       /* TODO: fix or junk --no-layout.  */
       SCM context = ly_run_translator (music_, scaled);
-      if (Global_context::unsmob (context))
+      if (unsmob<Global_context> (context))
         {
           SCM s = ly_format_output (context);
 
@@ -155,12 +155,12 @@ Score::book_rendering (Output_def *layoutbook,
 void
 Score::set_music (SCM music)
 {
-  if (Music::is_smob (music_))
+  if (unsmob<Music> (music_))
     {
-      Music::unsmob (music)->origin ()->error (_ ("already have music in score"));
-      Music::unsmob (music_)->origin ()->error (_ ("this is the previous music"));
+      unsmob<Music> (music)->origin ()->error (_ ("already have music in score"));
+      unsmob<Music> (music_)->origin ()->error (_ ("this is the previous music"));
     }
-  Music *m = Music::unsmob (music);
+  Music *m = unsmob<Music> (music);
   if (m && to_boolean (m->get_property ("error-found")))
     {
       m->origin ()->error (_ ("errors found, ignoring music expression"));
index 2456f8b00b05d5c13e9969fce2bb5ea77fe408b5..3a288dac72fed44d4d617de36671398b357a2a40 100644 (file)
@@ -46,8 +46,8 @@ LY_DEFINE (ly_grob_script_priority_less, "ly:grob-script-priority-less",
            2, 0, 0, (SCM a, SCM b),
            "Compare two grobs by script priority.  For internal use.")
 {
-  Grob *i1 = Grob::unsmob (a);
-  Grob *i2 = Grob::unsmob (b);
+  Grob *i1 = unsmob<Grob> (a);
+  Grob *i2 = unsmob<Grob> (b);
 
   SCM p1 = i1->get_property ("script-priority");
   SCM p2 = i2->get_property ("script-priority");
@@ -59,7 +59,7 @@ MAKE_SCHEME_CALLBACK (Script_column, row_before_line_breaking, 1);
 SCM
 Script_column::row_before_line_breaking (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   vector<Grob *> horizontal_grobs;
   extract_grob_set (me, "scripts", scripts);
 
@@ -102,7 +102,7 @@ MAKE_SCHEME_CALLBACK (Script_column, before_line_breaking, 1);
 SCM
 Script_column::before_line_breaking (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   vector<Grob *> staff_sided;
 
   extract_grob_set (me, "scripts", scripts);
@@ -147,7 +147,7 @@ Script_column::order_grobs (vector<Grob *> grobs)
       for (SCM s = ss; scm_is_pair (s);
            s = scm_cdr (s), last = g, last_initial_outside_staff = initial_outside_staff)
         {
-          g = Grob::unsmob (scm_car (s));
+          g = unsmob<Grob> (scm_car (s));
           initial_outside_staff = g->get_property ("outside-staff-priority");
           if (last)    //not the first grob in the list
             {
@@ -158,7 +158,7 @@ Script_column::order_grobs (vector<Grob *> grobs)
               */
               if (!scm_is_number (last_outside_staff))
                 for (SCM t = ss; !scm_is_eq (t, s); t = scm_cdr (t))
-                  Side_position_interface::add_support (g, Grob::unsmob (scm_car (t)));
+                  Side_position_interface::add_support (g, unsmob<Grob> (scm_car (t)));
               /*
                 if outside_staff_priority is missing or is equal to original
                 outside_staff_priority of previous grob, set new
index c9442fe9aefe9033696651291e2836f6333c0f97..eaba157f34b27196a7d074aa410654fa5f11e15b 100644 (file)
@@ -54,7 +54,7 @@ MAKE_SCHEME_CALLBACK (Script_interface, calc_positioning_done, 1);
 SCM
 Script_interface::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (Grob *par = me->get_parent (X_AXIS))
     {
       Grob *stem = Note_column::get_stem (par);
@@ -73,7 +73,7 @@ Script_interface::get_direction (Grob *me)
     relative_dir = to_dir (reldir);
 
   SCM other_elt = me->get_object ("direction-source");
-  Grob *e = Grob::unsmob (other_elt);
+  Grob *e = unsmob<Grob> (other_elt);
   if (e)
     return (Direction) (relative_dir * get_grob_direction (e));
 
@@ -84,7 +84,7 @@ MAKE_SCHEME_CALLBACK (Script_interface, calc_direction, 1);
 SCM
 Script_interface::calc_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Direction d = Script_interface::get_direction (me);
 
   if (!d)
@@ -101,13 +101,13 @@ MAKE_SCHEME_CALLBACK (Script_interface, calc_cross_staff, 1);
 SCM
 Script_interface::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *stem = Note_column::get_stem (me->get_parent (X_AXIS));
 
   if (stem && to_boolean (stem->get_property ("cross-staff")))
     return SCM_BOOL_T;
 
-  Grob *slur = Grob::unsmob (me->get_object ("slur"));
+  Grob *slur = unsmob<Grob> (me->get_object ("slur"));
   SCM avoid_slur = me->get_property ("avoid-slur");
   if (slur && to_boolean (slur->get_property ("cross-staff"))
       && (scm_is_eq (avoid_slur, ly_symbol2scm ("outside"))
@@ -122,7 +122,7 @@ MAKE_SCHEME_CALLBACK (Script_interface, print, 1);
 SCM
 Script_interface::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Direction dir = get_grob_direction (me);
 
index 81a21075eef44f23d891287b2e6b7a2bf68d2e67..49b4125364fa9ad1a0b23e1d91b9d244b3426f37 100644 (file)
@@ -29,21 +29,21 @@ MAKE_SCHEME_CALLBACK (Self_alignment_interface, y_aligned_on_self, 1);
 SCM
 Self_alignment_interface::y_aligned_on_self (SCM element)
 {
-  return aligned_on_self (Grob::unsmob (element), Y_AXIS, false, 0, 0);
+  return aligned_on_self (unsmob<Grob> (element), Y_AXIS, false, 0, 0);
 }
 
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1);
 SCM
 Self_alignment_interface::x_aligned_on_self (SCM element)
 {
-  return aligned_on_self (Grob::unsmob (element), X_AXIS, false, 0, 0);
+  return aligned_on_self (unsmob<Grob> (element), X_AXIS, false, 0, 0);
 }
 
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, pure_y_aligned_on_self, 3);
 SCM
 Self_alignment_interface::pure_y_aligned_on_self (SCM smob, SCM start, SCM end)
 {
-  return aligned_on_self (Grob::unsmob (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
+  return aligned_on_self (unsmob<Grob> (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
 }
 
 SCM
@@ -75,28 +75,28 @@ MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_x_parent, 1);
 SCM
 Self_alignment_interface::centered_on_x_parent (SCM smob)
 {
-  return centered_on_object (Grob::unsmob (smob)->get_parent (X_AXIS), X_AXIS);
+  return centered_on_object (unsmob<Grob> (smob)->get_parent (X_AXIS), X_AXIS);
 }
 
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1);
 SCM
 Self_alignment_interface::centered_on_y_parent (SCM smob)
 {
-  return centered_on_object (Grob::unsmob (smob)->get_parent (Y_AXIS), Y_AXIS);
+  return centered_on_object (unsmob<Grob> (smob)->get_parent (Y_AXIS), Y_AXIS);
 }
 
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent, 1);
 SCM
 Self_alignment_interface::aligned_on_x_parent (SCM smob)
 {
-  return aligned_on_parent (Grob::unsmob (smob), X_AXIS);
+  return aligned_on_parent (unsmob<Grob> (smob), X_AXIS);
 }
 
 MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_y_parent, 1);
 SCM
 Self_alignment_interface::aligned_on_y_parent (SCM smob)
 {
-  return aligned_on_parent (Grob::unsmob (smob), Y_AXIS);
+  return aligned_on_parent (unsmob<Grob> (smob), Y_AXIS);
 }
 
 SCM
index 9af746cf4c9c2a2eada9a6f9227524dcdecd93f3..8980a8cf1cd9d87731e7ac8a1c10eeb7d95d8d67 100644 (file)
@@ -47,7 +47,7 @@ MAKE_SCHEME_CALLBACK (Semi_tie_column, calc_positioning_done, 1);
 SCM
 Semi_tie_column::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   me->set_property ("positioning-done", SCM_BOOL_T);
 
@@ -84,7 +84,7 @@ MAKE_SCHEME_CALLBACK (Semi_tie_column, calc_head_direction, 1);
 SCM
 Semi_tie_column::calc_head_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "ties", ties);
   Direction d = LEFT;
index d9209098dd54ab6bf44d23340baebd77af83a5e6..4e997aa78f4a4235fd69d350ec13a7b946f72842 100644 (file)
@@ -54,7 +54,7 @@ MAKE_SCHEME_CALLBACK (Semi_tie, calc_control_points, 1)
 SCM
 Semi_tie::calc_control_points (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   (void) me->get_property ("direction");
 
   if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
@@ -73,7 +73,7 @@ Semi_tie::calc_control_points (SCM smob)
 int
 Semi_tie::get_position (Grob *me)
 {
-  Grob *h = Grob::unsmob (me->get_object ("note-head"));
+  Grob *h = unsmob<Grob> (me->get_object ("note-head"));
   return (int) rint (Staff_symbol_referencer::get_position (h));
 }
 
index 07f2681c4cda519f827931336ff22d885a74a4e3..5355f5cc43d9b29f8deac66c9324a687db499b1b 100644 (file)
@@ -88,7 +88,7 @@ Separating_line_group_engraver::acknowledge_item (Grob_info i)
       && !current_spacings_.staff_spacing_
       && to_boolean (get_property ("createSpacing")))
     {
-      Grob *col = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *col = unsmob<Grob> (get_property ("currentCommandColumn"));
 
       current_spacings_.staff_spacing_ = make_item ("StaffSpacing", SCM_EOL);
       context ()->set_property ("hasStaffSpacing", SCM_BOOL_T);
@@ -101,12 +101,12 @@ Separating_line_group_engraver::acknowledge_item (Grob_info i)
           && last_spacings_.staff_spacing_)
         {
           SCM ri = last_spacings_.staff_spacing_->get_object ("right-items");
-          Grob_array *ga = Grob_array::unsmob (ri);
+          Grob_array *ga = unsmob<Grob_array> (ri);
           if (!ga)
             {
               SCM ga_scm = Grob_array::make_array ();
               last_spacings_.staff_spacing_->set_object ("right-items", ga_scm);
-              ga = Grob_array::unsmob (ga_scm);
+              ga = unsmob<Grob_array> (ga_scm);
             }
 
           ga->clear ();
@@ -146,7 +146,7 @@ Separating_line_group_engraver::stop_translation_timestep ()
     last_spacings_ = current_spacings_;
 
   if (Item *sp = current_spacings_.staff_spacing_)
-    if (Grob *col = Grob::unsmob (get_property ("currentMusicalColumn")))
+    if (Grob *col = unsmob<Grob> (get_property ("currentMusicalColumn")))
       Pointer_group_interface::add_grob (sp, ly_symbol2scm ("right-items"), col);
 
   current_spacings_.clear ();
index 5e93a13e4c73b00e7928594757526be42175686a..d0cad83d8ec49bbbf8c7265414ea502edd8a9158 100644 (file)
@@ -46,8 +46,8 @@ Separation_item::add_conditional_item (Grob *me, Grob *e)
 Real
 Separation_item::set_distance (Item *l, Item *r, Real padding)
 {
-  Drul_array<Skyline_pair *> lines (Skyline_pair::unsmob (l->get_property ("horizontal-skylines")),
-                                    Skyline_pair::unsmob (r->get_property ("horizontal-skylines")));
+  Drul_array<Skyline_pair *> lines (unsmob<Skyline_pair> (l->get_property ("horizontal-skylines")),
+                                    unsmob<Skyline_pair> (r->get_property ("horizontal-skylines")));
   Skyline right = conditional_skyline (r, l);
   right.merge ((*lines[RIGHT])[LEFT]);
 
@@ -68,7 +68,7 @@ Separation_item::set_distance (Item *l, Item *r, Real padding)
 bool
 Separation_item::is_empty (Grob *me)
 {
-  Skyline_pair *sky = Skyline_pair::unsmob (me->get_property ("horizontal-skylines"));
+  Skyline_pair *sky = unsmob<Skyline_pair> (me->get_property ("horizontal-skylines"));
   return (!sky || sky->is_empty ());
 }
 
@@ -87,7 +87,7 @@ MAKE_SCHEME_CALLBACK (Separation_item, calc_skylines, 1);
 SCM
 Separation_item::calc_skylines (SCM smob)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
   vector<Box> bs = boxes (me, 0);
   Skyline_pair sp (bs, Y_AXIS);
   /*
@@ -201,9 +201,9 @@ Separation_item::print (SCM smob)
   if (!debug_skylines)
     return SCM_BOOL_F;
 
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Stencil ret;
-  if (Skyline_pair *s = Skyline_pair::unsmob (me->get_property ("horizontal-skylines")))
+  if (Skyline_pair *s = unsmob<Skyline_pair> (me->get_property ("horizontal-skylines")))
     {
       ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[LEFT].to_points (Y_AXIS)).in_color (255, 255, 0));
       ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[RIGHT].to_points (Y_AXIS)).in_color (0, 255, 255));
index 0ff37e8a02430dc6656c0aedfe3fa4258c63eea4..b02e58c62d0c57ab8dd3f00a9fecad1002ede9b1 100644 (file)
@@ -33,7 +33,7 @@
 
 
   if (scm_is_pair (cursor_))
-  iter_->music_ == Music::unsmob (scm_car (cursor_))
+  iter_->music_ == unsmob<Music> (scm_car (cursor_))
   else
   iter_ == 0;
 
@@ -96,7 +96,7 @@ create_grace_fixup_list (SCM cursor)
 
   for (; scm_is_pair (cursor); cursor = scm_cdr (cursor))
     {
-      Music *mus = Music::unsmob (scm_car (cursor));
+      Music *mus = unsmob<Music> (scm_car (cursor));
       Moment s = mus->start_mom ();
       Moment l = mus->get_length () - s;
 
@@ -134,8 +134,8 @@ Sequential_iterator::construct_children ()
   iter_ = 0;
   if (scm_is_pair (cursor_))
     {
-      Music *m = Music::unsmob (scm_car (cursor_));
-      iter_ = Music_iterator::unsmob (get_iterator (m));
+      Music *m = unsmob<Music> (scm_car (cursor_));
+      iter_ = unsmob<Music_iterator> (get_iterator (m));
     }
 
   while (iter_ && !iter_->ok ())
@@ -195,7 +195,7 @@ Sequential_iterator::next_element (bool)
 
   iter_->quit ();
   if (scm_is_pair (cursor_))
-    iter_ = Music_iterator::unsmob (get_iterator (Music::unsmob (scm_car (cursor_))));
+    iter_ = unsmob<Music_iterator> (get_iterator (unsmob<Music> (scm_car (cursor_))));
   else
     iter_ = 0;
 }
index 95eba005ee92f5173d1493068f4009a147fc7ed9..08ac17285d4b9b1c6fa5bf7805a3a9609e4b1ba8 100644 (file)
@@ -72,7 +72,7 @@ get_support_set (Grob *me)
                acs = scm_cdr (acs))
             for (SCM s = scm_cdar (acs); scm_is_pair (s); s = scm_cdr (s))
               {
-                Grob *a = Grob::unsmob (scm_car (s));
+                Grob *a = unsmob<Grob> (scm_car (s));
                 support.insert (a);
               }
         }
@@ -96,7 +96,7 @@ axis_aligned_side_helper (SCM smob, Axis a, bool pure, int start, int end, SCM c
       current_off_ptr = &r;
     }
 
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   // We will only ever want widths of spanners after line breaking
   // so we can set pure to false
   if (dynamic_cast<Spanner *> (me) && a == X_AXIS)
@@ -138,7 +138,7 @@ MAKE_SCHEME_CALLBACK (Side_position_interface, calc_cross_staff, 1)
 SCM
 Side_position_interface::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "side-support-elements", elts);
 
   Direction my_dir = get_grob_direction (me) ;
@@ -212,7 +212,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
                                           pure,
                                           start,
                                           end);
-  if (Skyline_pair::is_smob (skyp))
+  if (unsmob<Skyline_pair> (skyp))
     {
       // for spanner pure heights, we don't know horizontal spacing,
       // so a spanner can never have a meaningful x coordiante
@@ -228,7 +228,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
       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);
+      Skyline_pair copy = *unsmob<Skyline_pair> (skyp);
       copy.shift (a == X_AXIS ? yc : xc);
       copy.raise (a == X_AXIS ? xc : yc);
       my_dim = copy[-dir];
@@ -271,7 +271,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
                                                 start,
                                                 end);
 
-           if (Skyline_pair::is_smob (sp))
+           if (unsmob<Skyline_pair> (sp))
              {
                Real xc = pure && dynamic_cast<Spanner *> (e)
                          ? e->get_parent (X_AXIS)->relative_coordinate (common[X_AXIS], X_AXIS)
@@ -281,7 +281,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
                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);
+               Skyline_pair copy = *unsmob<Skyline_pair> (sp);
                if (a == Y_AXIS
                    && Stem::has_interface (e)
                    && to_boolean (me->get_maybe_pure_property ("add-stem-support", pure, start, end)))
@@ -439,7 +439,7 @@ MAKE_SCHEME_CALLBACK (Side_position_interface, move_to_extremal_staff, 1);
 SCM
 Side_position_interface::move_to_extremal_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   System *sys = dynamic_cast<System *> (me->get_system ());
   Direction dir = get_grob_direction (me);
   if (dir != DOWN)
@@ -464,7 +464,7 @@ Side_position_interface::move_to_extremal_staff (SCM smob)
   Axis_group_interface::add_element (top_staff, me);
 
   // Remove any cross-staff side-support dependencies
-  Grob_array *ga = Grob_array::unsmob (me->get_object ("side-support-elements"));
+  Grob_array *ga = unsmob<Grob_array> (me->get_object ("side-support-elements"));
   if (ga)
     {
       vector<Grob *> const &elts = ga->array ();
index b62649f06d52b28c88bfd40081ac917d771f8dce..37759ebfabeaff1ca0d5e0a8a5ab27708ec04027 100644 (file)
@@ -47,11 +47,11 @@ evaluate_with_simple_closure (SCM delayed_argument,
                               int start,
                               int end)
 {
-  if (Simple_closure *sc = Simple_closure::unsmob (expr))
+  if (Simple_closure *sc = unsmob<Simple_closure> (expr))
     {
       SCM inside = sc->expression ();
-      SCM proc = !pure && Unpure_pure_container::is_smob (scm_car (inside))
-        ? Unpure_pure_container::unsmob (scm_car (inside))->unpure_part ()
+      SCM proc = !pure && unsmob<Unpure_pure_container> (scm_car (inside))
+        ? unsmob<Unpure_pure_container> (scm_car (inside))->unpure_part ()
         : scm_car (inside);
       SCM args = scm_cons (delayed_argument,
                            evaluate_args (delayed_argument, scm_cdr (inside),
@@ -66,11 +66,11 @@ evaluate_with_simple_closure (SCM delayed_argument,
     return expr;
   else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("quote")))
     return scm_cadr (expr);
-  else if (Unpure_pure_container::is_smob (scm_car (expr))
+  else if (unsmob<Unpure_pure_container> (scm_car (expr))
            || ly_is_procedure (scm_car (expr)))
     {
-      SCM proc = !pure && Unpure_pure_container::is_smob (scm_car (expr))
-        ? Unpure_pure_container::unsmob (scm_car (expr))->unpure_part ()
+      SCM proc = !pure && unsmob<Unpure_pure_container> (scm_car (expr))
+        ? unsmob<Unpure_pure_container> (scm_car (expr))->unpure_part ()
         : scm_car (expr);
       SCM args = evaluate_args (delayed_argument, scm_cdr (expr), pure, start, end);
       if (scm_is_eq (args, SCM_UNSPECIFIED))
@@ -109,7 +109,7 @@ LY_DEFINE (ly_eval_simple_closure, "ly:eval-simple-closure",
   bool pure = (scm_is_number (scm_start) && scm_is_number (scm_end));
   int start = robust_scm2int (scm_start, 0);
   int end = robust_scm2int (scm_end, 0);
-  SCM expr = Simple_closure::unsmob (closure)->expression ();
+  SCM expr = unsmob<Simple_closure> (closure)->expression ();
   return evaluate_with_simple_closure (delayed, expr, pure, start, end);
 }
 
index ada16593aa7e6b1441360413f714cc58d2a1afc5..271c1521c5e7d667fd55e950bffd4c68bfffce46 100644 (file)
@@ -380,7 +380,7 @@ get_column_description (vector<Grob *> const &cols, vsize col_index, bool line_s
   for (SCM s = Spaceable_grob::get_minimum_distances (col);
        scm_is_pair (s); s = scm_cdr (s))
     {
-      Grob *other = Grob::unsmob (scm_caar (s));
+      Grob *other = unsmob<Grob> (scm_caar (s));
       vsize j = binary_search (cols, other, Paper_column::less_than, col_index);
       if (j != VPOS)
         {
index 1ce849077233686a24350c7bbcf1672588f4827f..74f2d6dc9abbb2b14f182bbeeab5db6368f26a60 100644 (file)
@@ -39,7 +39,7 @@ void
 Simultaneous_music_iterator::derived_substitute (Context *f, Context *t)
 {
   for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
-    Music_iterator::unsmob (scm_car (s))->substitute_outlet (f, t);
+    unsmob<Music_iterator> (scm_car (s))->substitute_outlet (f, t);
 }
 
 void
@@ -53,10 +53,10 @@ Simultaneous_music_iterator::construct_children ()
   SCM *tail = &children_list_;
   for (; scm_is_pair (i); i = scm_cdr (i), j++)
     {
-      Music *mus = Music::unsmob (scm_car (i));
+      Music *mus = unsmob<Music> (scm_car (i));
 
       SCM scm_iter = get_static_get_iterator (mus);
-      Music_iterator *mi = Music_iterator::unsmob (scm_iter);
+      Music_iterator *mi = unsmob<Music_iterator> (scm_iter);
 
       /* if create_separate_contexts_ is set, create a new context with the
          number number as name */
@@ -92,7 +92,7 @@ Simultaneous_music_iterator::process (Moment until)
   SCM *proc = &children_list_;
   while (scm_is_pair (*proc))
     {
-      Music_iterator *i = Music_iterator::unsmob (scm_car (*proc));
+      Music_iterator *i = unsmob<Music_iterator> (scm_car (*proc));
       bool run_always = i->run_always ();
       if (run_always || i->pending_moment () == until)
         i->process (until);
@@ -124,7 +124,7 @@ Simultaneous_music_iterator::process (Moment until)
   if (had_bad && !had_good)
     {
       for (SCM p = children_list_; scm_is_pair (p); p = scm_cdr (p))
-        Music_iterator::unsmob (scm_car (p))->quit ();
+        unsmob<Music_iterator> (scm_car (p))->quit ();
       children_list_ = SCM_EOL;
     }
 }
@@ -137,7 +137,7 @@ Simultaneous_music_iterator::pending_moment () const
 
   for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
     {
-      Music_iterator *it = Music_iterator::unsmob (scm_car (s));
+      Music_iterator *it = unsmob<Music_iterator> (scm_car (s));
       next = min (next, it->pending_moment ());
     }
 
@@ -150,7 +150,7 @@ Simultaneous_music_iterator::ok () const
   bool run_always_ok = false;
   for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
     {
-      Music_iterator *it = Music_iterator::unsmob (scm_car (s));
+      Music_iterator *it = unsmob<Music_iterator> (scm_car (s));
       if (!it->run_always ())
         return true;
       else
@@ -164,7 +164,7 @@ Simultaneous_music_iterator::run_always () const
 {
   for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
     {
-      Music_iterator *it = Music_iterator::unsmob (scm_car (s));
+      Music_iterator *it = unsmob<Music_iterator> (scm_car (s));
       if (it->run_always ())
         return true;
     }
@@ -175,7 +175,7 @@ void
 Simultaneous_music_iterator::do_quit ()
 {
   for (SCM s = children_list_; scm_is_pair (s); s = scm_cdr (s))
-    Music_iterator::unsmob (scm_car (s))->quit ();
+    unsmob<Music_iterator> (scm_car (s))->quit ();
 }
 
 IMPLEMENT_CTOR_CALLBACK (Simultaneous_music_iterator);
index 92ae97a342e0961571b066c0ad4b30775ea050b0..b3c2b96df4ad9d4e34eb4641a8eef63a91a58db8 100644 (file)
@@ -127,7 +127,7 @@ MAKE_SCHEME_CALLBACK (Skyline_pair, skyline, 2);
 SCM
 Skyline_pair::skyline (SCM smob, SCM dir_scm)
 {
-  Skyline_pair *sp = Skyline_pair::unsmob (smob);
+  Skyline_pair *sp = unsmob<Skyline_pair> (smob);
   Direction dir = robust_scm2dir (dir_scm, UP);
 
   if (dir == CENTER)
index 42a028fe0a59271d4626c939f69091e35b65f8a6..f46b2f3e84c401437e6136fbb7808b63a51c398d 100644 (file)
@@ -817,8 +817,8 @@ Skyline::get_touching_point (SCM skyline_scm, SCM other_skyline_scm, SCM horizon
       horizon_padding = scm_to_double (horizon_padding_scm);
     }
 
-  Skyline *skyline = Skyline::unsmob (skyline_scm);
-  Skyline *other_skyline = Skyline::unsmob (other_skyline_scm);
+  Skyline *skyline = unsmob<Skyline> (skyline_scm);
+  Skyline *other_skyline = unsmob<Skyline> (other_skyline_scm);
   return scm_from_double (skyline->touching_point (*other_skyline, horizon_padding));
 }
 
@@ -835,8 +835,8 @@ Skyline::get_distance (SCM skyline_scm, SCM other_skyline_scm, SCM horizon_paddi
       horizon_padding = scm_to_double (horizon_padding_scm);
     }
 
-  Skyline *skyline = Skyline::unsmob (skyline_scm);
-  Skyline *other_skyline = Skyline::unsmob (other_skyline_scm);
+  Skyline *skyline = unsmob<Skyline> (skyline_scm);
+  Skyline *other_skyline = unsmob<Skyline> (other_skyline_scm);
   return scm_from_double (skyline->distance (*other_skyline, horizon_padding));
 }
 
@@ -844,14 +844,14 @@ MAKE_SCHEME_CALLBACK (Skyline, get_max_height, 1)
 SCM
 Skyline::get_max_height (SCM skyline_scm)
 {
-  return scm_from_double (Skyline::unsmob (skyline_scm)->max_height ());
+  return scm_from_double (unsmob<Skyline> (skyline_scm)->max_height ());
 }
 
 MAKE_SCHEME_CALLBACK (Skyline, get_max_height_position, 1)
 SCM
 Skyline::get_max_height_position (SCM skyline_scm)
 {
-  return scm_from_double (Skyline::unsmob (skyline_scm)->max_height_position ());
+  return scm_from_double (unsmob<Skyline> (skyline_scm)->max_height_position ());
 }
 
 MAKE_SCHEME_CALLBACK (Skyline, get_height, 2)
@@ -859,14 +859,14 @@ SCM
 Skyline::get_height (SCM skyline_scm, SCM x_scm)
 {
   Real x = robust_scm2double (x_scm, 0.0);
-  return scm_from_double (Skyline::unsmob (skyline_scm)->height (x));
+  return scm_from_double (unsmob<Skyline> (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);
+  Skyline *s = unsmob<Skyline> (sky);
   LY_ASSERT_SMOB (Skyline, sky, 1);
   return scm_from_bool (s->is_empty ());
 }
index 9d6d1349589cb47087a7f403fdc32a8930d21055..215fcfd7a3deed937f0da012e7252190b5c6d29f 100644 (file)
@@ -125,7 +125,7 @@ Slur_proto_engraver::finalize ()
 void
 Slur_proto_engraver::create_slur (const string &spanner_id, Stream_event *ev_cause, Grob *g_cause, Direction dir, bool left_broken)
 {
-  Grob *ccc = Grob::unsmob (get_property ("currentCommandColumn"));
+  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));
@@ -176,7 +176,7 @@ Slur_proto_engraver::can_create_slur (const string &id, vsize old_slurs, vsize *
           if (!updown)
             return false;
 
-          Stream_event *c = Stream_event::unsmob (slur->get_property ("cause"));
+          Stream_event *c = unsmob<Stream_event> (slur->get_property ("cause"));
 
           if (!c)
             {
@@ -266,7 +266,7 @@ Slur_proto_engraver::set_melisma (bool)
 void
 Slur_proto_engraver::stop_translation_timestep ()
 {
-  if (Grob *g = Grob::unsmob (get_property ("currentCommandColumn")))
+  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);
@@ -280,7 +280,7 @@ Slur_proto_engraver::stop_translation_timestep ()
     {
       Spanner *s = dynamic_cast<Spanner *> (end_slurs_[i]);
       if (!s->get_bound (RIGHT))
-        s->set_bound (RIGHT, Grob::unsmob (get_property ("currentMusicalColumn")));
+        s->set_bound (RIGHT, unsmob<Grob> (get_property ("currentMusicalColumn")));
       announce_end_grob (s, SCM_EOL);
     }
 
index 85e917f96fe34a77e53d4cd84e911021f6029f92..cca56781aa92eaaa18579fb611f75161e9338d96 100644 (file)
@@ -106,7 +106,7 @@ Slur_score_state::slur_direction () const
 Encompass_info
 Slur_score_state::get_encompass_info (Grob *col) const
 {
-  Grob *stem = Grob::unsmob (col->get_object ("stem"));
+  Grob *stem = unsmob<Grob> (col->get_object ("stem"));
   Encompass_info ei;
 
   if (!stem)
@@ -331,7 +331,7 @@ MAKE_SCHEME_CALLBACK (Slur, calc_control_points, 1)
 SCM
 Slur::calc_control_points (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   Slur_score_state state;
   state.fill (me);
index 0f3f7162a732f99781f2d3c335eb6c1675778974..93f5492b66f85c7a3d67ce31b7548b049f7e3d09 100644 (file)
@@ -47,7 +47,7 @@ MAKE_SCHEME_CALLBACK (Slur, calc_direction, 1)
 SCM
 Slur::calc_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "note-columns", encompasses);
 
   if (encompasses.empty ())
@@ -81,7 +81,7 @@ Slur::pure_height (SCM smob, SCM start_scm, SCM end_scm)
     -- adding extra height for scripts that avoid slurs on the inside
     -- adding extra height for the "bulge" in a slur above a note head
   */
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   int start = scm_to_int (start_scm);
   int end = scm_to_int (end_scm);
   Direction dir = get_grob_direction (me);
@@ -133,7 +133,7 @@ MAKE_SCHEME_CALLBACK (Slur, height, 1);
 SCM
 Slur::height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   // FIXME uncached
   Stencil *m = me->get_stencil ();
@@ -145,7 +145,7 @@ MAKE_SCHEME_CALLBACK (Slur, print, 1);
 SCM
 Slur::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "note-columns", encompasses);
   if (encompasses.empty ())
     {
@@ -179,7 +179,7 @@ Slur::print (SCM smob)
         properties = scm_cons (scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-6), SCM_EOL),
                                properties);
 
-      Stencil tm = *Stencil::unsmob (Text_interface::interpret_markup
+      Stencil tm = *unsmob<Stencil> (Text_interface::interpret_markup
                                     (me->layout ()->self_scm (), properties,
                                      annotation));
       a.add_at_edge (Y_AXIS, get_grob_direction (me), tm, 1.0);
@@ -220,10 +220,10 @@ Slur::replace_breakable_encompass_objects (Grob *me)
     }
 
   SCM encompass_scm = me->get_object ("encompass-objects");
-  if (Grob_array::is_smob (encompass_scm))
+  if (unsmob<Grob_array> (encompass_scm))
     {
       vector<Grob *> &arr
-        = Grob_array::unsmob (encompass_scm)->array_reference ();
+        = unsmob<Grob_array> (encompass_scm)->array_reference ();
       arr = new_encompasses;
     }
 }
@@ -259,8 +259,8 @@ Slur::pure_outside_slur_callback (SCM grob, SCM start_scm, SCM end_scm, SCM offs
 {
   int start = robust_scm2int (start_scm, 0);
   int end = robust_scm2int (end_scm, 0);
-  Grob *script = Grob::unsmob (grob);
-  Grob *slur = Grob::unsmob (script->get_object ("slur"));
+  Grob *script = unsmob<Grob> (grob);
+  Grob *slur = unsmob<Grob> (script->get_object ("slur"));
   if (!slur)
     return offset_scm;
 
@@ -278,8 +278,8 @@ MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Slur, outside_slur_callback, 2, 1, "");
 SCM
 Slur::outside_slur_callback (SCM grob, SCM offset_scm)
 {
-  Grob *script = Grob::unsmob (grob);
-  Grob *slur = Grob::unsmob (script->get_object ("slur"));
+  Grob *script = unsmob<Grob> (grob);
+  Grob *slur = unsmob<Grob> (script->get_object ("slur"));
 
   if (!slur)
     return offset_scm;
@@ -371,7 +371,7 @@ MAKE_SCHEME_CALLBACK (Slur, vertical_skylines, 1);
 SCM
 Slur::vertical_skylines (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   vector<Box> boxes;
 
   if (!me)
@@ -450,8 +450,8 @@ Slur::outside_slur_cross_staff (SCM smob, SCM previous)
   if (to_boolean (previous))
     return previous;
 
-  Grob *me = Grob::unsmob (smob);
-  Grob *slur = Grob::unsmob (me->get_object ("slur"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *slur = unsmob<Grob> (me->get_object ("slur"));
 
   if (!slur)
     return SCM_BOOL_F;
@@ -462,7 +462,7 @@ MAKE_SCHEME_CALLBACK (Slur, calc_cross_staff, 1)
 SCM
 Slur::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "note-columns", cols);
   extract_grob_set (me, "encompass-objects", extras);
index 6a9183486d181e4a2acb75da2c6f530b2911e070..c6ed9120396c3e9550edc8b4088f7bc081606aa3 100644 (file)
@@ -85,9 +85,9 @@ Spaceable_grob::get_spring (Grob *this_col, Grob *next_col)
        s = scm_cdr (s))
     {
       if (scm_is_pair (scm_car (s))
-          && Grob::unsmob (scm_cdar (s)) == next_col
-          && Spring::is_smob (scm_caar (s)))
-        spring = Spring::unsmob (scm_caar (s));
+          && unsmob<Grob> (scm_cdar (s)) == next_col
+          && unsmob<Spring> (scm_caar (s)))
+        spring = unsmob<Spring> (scm_caar (s));
     }
 
   if (!spring)
index 20f76dfda072aa924932d5c1136f9c18ca96ffa4..ff245aa30fdd438b17efced4c3fa1ebc64eb28d2 100644 (file)
@@ -44,7 +44,7 @@ Spacing_spanner::standard_breakable_column_spacing (Grob *me, Item *l, Item *r,
 
   if (Paper_column::is_breakable (l) && Paper_column::is_breakable (r))
     {
-      Moment *dt = Moment::unsmob (l->get_property ("measure-length"));
+      Moment *dt = unsmob<Moment> (l->get_property ("measure-length"));
       Moment mlen (1);
       if (dt)
         mlen = *dt;
@@ -91,7 +91,7 @@ get_measure_length (Grob *column)
 
   do
     {
-      if (Moment *len = Moment::unsmob (cols[col_idx]->get_property ("measure-length")))
+      if (Moment *len = unsmob<Moment> (cols[col_idx]->get_property ("measure-length")))
         {
           return len;
         }
@@ -111,8 +111,8 @@ Spacing_spanner::note_spacing (Grob * /* me */,
   Moment shortest_playing_len = 0;
   SCM s = lc->get_property ("shortest-playing-duration");
 
-  if (Moment::is_smob (s))
-    shortest_playing_len = *Moment::unsmob (s);
+  if (unsmob<Moment> (s))
+    shortest_playing_len = *unsmob<Moment> (s);
 
   if (! shortest_playing_len.to_bool ())
     {
@@ -161,7 +161,7 @@ Spacing_spanner::note_spacing (Grob * /* me */,
     }
   else if (delta_t.grace_part_)
     {
-      Grob *grace_spacing = Grob::unsmob (lc->get_object ("grace-spacing"));
+      Grob *grace_spacing = unsmob<Grob> (lc->get_object ("grace-spacing"));
       if (grace_spacing)
         {
           Spacing_options grace_opts;
index 87dd3ff197bd337c9d375ad4aef1fc2a8d3352fe..c7990558dd5d633700d412bfc100d06926c33c61 100644 (file)
@@ -80,8 +80,8 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
 
   */
 
-  Item *r_neighbor = Item::unsmob (col->get_object ("right-neighbor"));
-  Item *l_neighbor = Item::unsmob (col->get_object ("left-neighbor"));
+  Item *r_neighbor = unsmob<Item> (col->get_object ("right-neighbor"));
+  Item *l_neighbor = unsmob<Item> (col->get_object ("left-neighbor"));
 
   if (!l_neighbor || !r_neighbor)
     return false;
@@ -220,8 +220,8 @@ Spacing_spanner::prune_loose_columns (Grob *me,
 
       if (loose)
         {
-          Grob *right_neighbor = Grob::unsmob (c->get_object ("right-neighbor"));
-          Grob *left_neighbor = Grob::unsmob (c->get_object ("left-neighbor"));
+          Grob *right_neighbor = unsmob<Grob> (c->get_object ("right-neighbor"));
+          Grob *left_neighbor = unsmob<Grob> (c->get_object ("left-neighbor"));
 
           /*
             Either object can be non existent, if the score ends
@@ -283,7 +283,7 @@ Spacing_spanner::set_explicit_neighbor_columns (vector<Grob *> const &cols)
                   min_right_rank = right_rank;
                 }
 
-              Grob *old_left_neighbor = Grob::unsmob (right_col->get_object ("left-neighbor"));
+              Grob *old_left_neighbor = unsmob<Grob> (right_col->get_object ("left-neighbor"));
               if (!old_left_neighbor || left_rank > Paper_column::get_rank (old_left_neighbor))
                 right_col->set_object ("left-neighbor", left_col->self_scm ());
             }
@@ -305,9 +305,9 @@ Spacing_spanner::set_implicit_neighbor_columns (vector<Grob *> const &cols)
       if (!Paper_column::is_breakable (it) && !Paper_column::is_musical (it))
         continue;
 
-      if (i && !Grob::is_smob (cols[i]->get_object ("left-neighbor")))
+      if (i && !unsmob<Grob> (cols[i]->get_object ("left-neighbor")))
         cols[i]->set_object ("left-neighbor", cols[i - 1]->self_scm ());
-      if (i + 1 < cols.size () && !Grob::is_smob (cols[i]->get_object ("right-neighbor")))
+      if (i + 1 < cols.size () && !unsmob<Grob> (cols[i]->get_object ("right-neighbor")))
         cols[i]->set_object ("right-neighbor", cols[i + 1]->self_scm ());
     }
 }
index a8e21253e6ec6667af647a213069ce30e1a45ff3..cc5b1e31d1c2f6c92365933702744c385bfcf0c0 100644 (file)
@@ -123,7 +123,7 @@ Spacing_engraver::start_spanner ()
 
   spacing_ = make_spanner ("SpacingSpanner", SCM_EOL);
   spacing_->set_bound (LEFT,
-                       Grob::unsmob (get_property ("currentCommandColumn")));
+                       unsmob<Grob> (get_property ("currentCommandColumn")));
 }
 
 void
@@ -137,7 +137,7 @@ Spacing_engraver::stop_spanner ()
 {
   if (spacing_)
     {
-      Grob *p = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *p = unsmob<Grob> (get_property ("currentCommandColumn"));
 
       spacing_->set_bound (RIGHT, p);
       spacing_ = 0;
@@ -194,17 +194,17 @@ void
 Spacing_engraver::stop_translation_timestep ()
 {
   Paper_column *musical_column
-    = derived_unsmob<Paper_column> (get_property ("currentMusicalColumn"));
+    = unsmob<Paper_column> (get_property ("currentMusicalColumn"));
 
   if (!spacing_)
     start_spanner ();
 
   musical_column->set_object ("spacing", spacing_->self_scm ());
-  Grob::unsmob (get_property ("currentCommandColumn"))
+  unsmob<Grob> (get_property ("currentCommandColumn"))
   ->set_object ("spacing", spacing_->self_scm ());
 
   SCM proportional = get_property ("proportionalNotationDuration");
-  if (Moment::is_smob (proportional))
+  if (unsmob<Moment> (proportional))
     {
       musical_column->set_property ("shortest-playing-duration", proportional);
       musical_column->set_property ("shortest-starter-duration", proportional);
index b8b3cf0711a96922b35ed987f52ae25df18dc2bd..1ade62b0e53224ffd2568d794bf18b43de578b79 100644 (file)
@@ -67,7 +67,7 @@ Spacing_interface::skylines (Grob *me, Grob *right_col)
           if (g && Separation_item::has_interface (g) && g->get_column () == columns[d])
             {
               SCM sky_scm = g->get_property ("horizontal-skylines");
-              Skyline_pair *sky = Skyline_pair::unsmob (sky_scm);
+              Skyline_pair *sky = unsmob<Skyline_pair> (sky_scm);
 
               extract_grob_set (g, "elements", elts);
               Grob *ycommon = common_refpoint_of_array (elts, g, Y_AXIS);
@@ -108,7 +108,7 @@ Spacing_interface::right_column (Grob *me)
   if (!me->is_live ())
     return 0;
 
-  Grob_array *a = Grob_array::unsmob (me->get_object ("right-items"));
+  Grob_array *a = unsmob<Grob_array> (me->get_object ("right-items"));
   Item *mincol = 0;
   int min_rank = INT_MAX;
   for (vsize i = 0; a && i < a->size (); i++)
index aad9dd0db7d089b36161838ebf2bb65bbe5dad0b..c3846e694ddd6ffe4b31c6618da5f7ae378c7b86 100644 (file)
@@ -60,8 +60,8 @@ set_loose_columns (System *which, Column_x_positions const *posns)
           if (!loose->get_system ())
             break;
 
-          Paper_column *le = derived_unsmob<Paper_column> (scm_car (between));
-          Paper_column *re = derived_unsmob<Paper_column> (scm_cdr (between));
+          Paper_column *le = unsmob<Paper_column> (scm_car (between));
+          Paper_column *re = unsmob<Paper_column> (scm_cdr (between));
 
           if (! (le && re))
             break;
@@ -135,8 +135,8 @@ set_loose_columns (System *which, Column_x_positions const *posns)
           Paper_column *loose_col = dynamic_cast<Paper_column *> (clique[j]);
           Paper_column *next_col = dynamic_cast<Paper_column *> (clique[j + 1]);
 
-          Grob *spacing = Grob::unsmob (clique_col->get_object ("spacing"));
-          if (Grob *grace_spacing = Grob::unsmob (clique_col->get_object ("grace-spacing")))
+          Grob *spacing = unsmob<Grob> (clique_col->get_object ("spacing"));
+          if (Grob *grace_spacing = unsmob<Grob> (clique_col->get_object ("grace-spacing")))
             {
               spacing = grace_spacing;
             }
index ee4904999f372fbf5b7cda819052a556ad0c4119..f6f532125afa31cf9720e2cd92b0e3c700e5b98e 100644 (file)
@@ -58,7 +58,7 @@ MAKE_SCHEME_CALLBACK (Spacing_spanner, set_springs, 1);
 SCM
 Spacing_spanner::set_springs (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   /*
     can't use get_system () ? --hwn.
@@ -89,7 +89,7 @@ MAKE_SCHEME_CALLBACK (Spacing_spanner, calc_common_shortest_duration, 1);
 SCM
 Spacing_spanner::calc_common_shortest_duration (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
 
   vector<Grob *> cols (get_columns (me));
 
@@ -106,7 +106,7 @@ Spacing_spanner::calc_common_shortest_duration (SCM grob)
     {
       if (Paper_column::is_musical (cols[i]))
         {
-          Moment *when = Moment::unsmob (cols[i]->get_property ("when"));
+          Moment *when = unsmob<Moment> (cols[i]->get_property ("when"));
 
           /*
             ignore grace notes for shortest notes.
@@ -115,7 +115,7 @@ Spacing_spanner::calc_common_shortest_duration (SCM grob)
             continue;
 
           SCM st = cols[i]->get_property ("shortest-starter-duration");
-          Moment this_shortest = *Moment::unsmob (st);
+          Moment this_shortest = *unsmob<Moment> (st);
           assert (this_shortest.to_bool ());
           shortest_in_measure = min (shortest_in_measure, this_shortest.main_part_);
         }
@@ -161,7 +161,7 @@ Spacing_spanner::calc_common_shortest_duration (SCM grob)
 
   SCM bsd = me->get_property ("base-shortest-duration");
   Rational d = Rational (1, 8);
-  if (Moment *m = Moment::unsmob (bsd))
+  if (Moment *m = unsmob<Moment> (bsd))
     d = m->main_part_;
 
   if (max_idx != VPOS)
@@ -237,7 +237,7 @@ set_column_rods (vector<Grob *> const &cols, Real padding)
       if (Separation_item::is_empty (r) && (!rb || Separation_item::is_empty (rb)))
         continue;
 
-      Skyline_pair *skys = Skyline_pair::unsmob (r->get_property ("horizontal-skylines"));
+      Skyline_pair *skys = unsmob<Skyline_pair> (r->get_property ("horizontal-skylines"));
       overhangs[i] = skys ? (*skys)[RIGHT].max_height () : 0.0;
 
       if (0 == i) continue;
@@ -354,7 +354,7 @@ Spacing_spanner::musical_column_spacing (Grob *me,
           if (found_matching_column && Note_spacing::has_interface (wish))
             {
               Real inc = options->increment_;
-              Grob *gsp = Grob::unsmob (left_col->get_object ("grace-spacing"));
+              Grob *gsp = unsmob<Grob> (left_col->get_object ("grace-spacing"));
               if (gsp && Paper_column::when_mom (left_col).grace_part_)
                 {
                   Spacing_options grace_opts;
@@ -447,7 +447,7 @@ Spacing_spanner::fills_measure (Grob *me, Item *left, Item *col)
   Moment dt
     = Paper_column::when_mom (next) - Paper_column::when_mom (col);
 
-  Moment *len = Moment::unsmob (left->get_property ("measure-length"));
+  Moment *len = unsmob<Moment> (left->get_property ("measure-length"));
   if (!len)
     return false;
 
index 9e1927db945f34b06a19a10d0783a96bb001136d..0f1df50b6e3b3c027b3ea9f024e35ecbd65562e3 100644 (file)
@@ -94,7 +94,7 @@ Span_bar_stub_engraver::process_acknowledged ()
       programming_error ("At least one vertical axis group needs to be created in the first time step.");
       return;
     }
-  Grob *vertical_alignment = Grob::get_root_vertical_alignment (Grob::unsmob (scm_caar (axis_groups_)));
+  Grob *vertical_alignment = Grob::get_root_vertical_alignment (unsmob<Grob> (scm_caar (axis_groups_)));
   if (!vertical_alignment) // we are at the beginning of a score, so no need for stubs
     return;
 
@@ -113,8 +113,8 @@ Span_bar_stub_engraver::process_acknowledged ()
       vector<bool> keep_extent;
       for (SCM s = axis_groups_; scm_is_pair (s); s = scm_cdr (s))
         {
-          Context *c = Context::unsmob (scm_cdar (s));
-          Grob *g = Grob::unsmob (scm_caar (s));
+          Context *c = unsmob<Context> (scm_cdar (s));
+          Grob *g = unsmob<Grob> (scm_caar (s));
           if (!c || !g)
             continue;
           if (c->is_removable ())
@@ -163,8 +163,8 @@ Span_bar_stub_engraver::stop_translation_timestep ()
   SCM axis_groups = SCM_EOL;
   for (SCM s = axis_groups_; scm_is_pair (s); s = scm_cdr (s))
     {
-      Context *c = Context::unsmob (scm_cdar (s));
-      Grob *g = Grob::unsmob (scm_caar (s));
+      Context *c = unsmob<Context> (scm_cdar (s));
+      Grob *g = unsmob<Grob> (scm_caar (s));
       if (!c || !g)
         continue;
       if (c->is_removable ())
index 7ace84024cbf2f3543ebedf628162874078a34a4..1d413439b455822828419d8a8ae11fefb314633e 100644 (file)
@@ -28,7 +28,7 @@ LY_DEFINE (ly_spanner_bound, "ly:spanner-bound",
 {
   LY_ASSERT_SMOB (Spanner, spanner, 1);
   LY_ASSERT_TYPE (is_direction, dir, 2);
-  Item *bound = Spanner::unsmob (spanner)->get_bound (to_dir (dir));
+  Item *bound = unsmob<Spanner> (spanner)->get_bound (to_dir (dir));
   return bound ? bound->self_scm () : SCM_EOL;
 }
 
@@ -41,7 +41,7 @@ LY_DEFINE (ly_spanner_set_bound_x, "ly:spanner-set-bound!",
   LY_ASSERT_TYPE (is_direction, dir, 2);
   LY_ASSERT_SMOB (Item, item, 3);
 
-  Spanner::unsmob (spanner)->set_bound (to_dir (dir), Item::unsmob (item));
+  unsmob<Spanner> (spanner)->set_bound (to_dir (dir), unsmob<Item> (item));
   return SCM_UNSPECIFIED;
 }
 
@@ -51,8 +51,8 @@ LY_DEFINE (ly_spanner_broken_into, "ly:spanner-broken-into",
            1, 0, 0, (SCM spanner),
            "Return broken-into list for @var{spanner}.")
 {
-  LY_ASSERT_TYPE (Spanner::unsmob, spanner, 1);
-  Spanner *me = Spanner::unsmob (spanner);
+  LY_ASSERT_TYPE (unsmob<Spanner>, spanner, 1);
+  Spanner *me = unsmob<Spanner> (spanner);
 
   SCM s = SCM_EOL;
   for (vsize i = me->broken_intos_.size (); i--;)
@@ -64,7 +64,7 @@ LY_DEFINE (ly_spanner_p, "ly:spanner?",
            1, 0, 0, (SCM g),
            "Is @var{g} a spanner object?")
 {
-  Grob *me = Grob::unsmob (g);
+  Grob *me = unsmob<Grob> (g);
   bool b = dynamic_cast<Spanner *> (me);
 
   return ly_bool2scm (b);
index 6232b8e7d3cddf15d1554b4bdb25b02f30c96707..087331ab9ffabae48dfd45883b8226b204b67228 100644 (file)
@@ -364,7 +364,7 @@ MAKE_SCHEME_CALLBACK (Spanner, set_spacing_rods, 1);
 SCM
 Spanner::set_spacing_rods (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM num_length = me->get_property ("minimum-length");
   SCM broken_length = me->get_property ("minimum-length-after-break");
   if (scm_is_number (num_length)
@@ -437,7 +437,7 @@ MAKE_SCHEME_CALLBACK (Spanner, calc_normalized_endpoints, 1);
 SCM
 Spanner::calc_normalized_endpoints (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   SCM result = SCM_EOL;
 
   Spanner *orig = dynamic_cast<Spanner *> (me->original ());
@@ -484,7 +484,7 @@ MAKE_SCHEME_CALLBACK (Spanner, bounds_width, 1);
 SCM
 Spanner::bounds_width (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
 
   Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
 
@@ -500,7 +500,7 @@ MAKE_SCHEME_CALLBACK (Spanner, kill_zero_spanned_time, 1);
 SCM
 Spanner::kill_zero_spanned_time (SCM grob)
 {
-  Spanner *me = Spanner::unsmob (grob);
+  Spanner *me = unsmob<Spanner> (grob);
   /*
     Remove the line or hairpin at the start of the line.  For
     piano voice indicators, it makes no sense to have them at
index 4f6a787e37aabcae91b128f6e20c33afa2a81677..77b01bb158d56152e6c8dd027a788ba7788c7636 100644 (file)
@@ -49,7 +49,7 @@ LY_DEFINE (ly_spring_set_inverse_compress_strength_x, "ly:spring-set-inverse-com
   LY_ASSERT_SMOB (Spring, spring, 1);
   LY_ASSERT_TYPE (scm_is_number, strength, 2);
 
-  Spring *s = Spring::unsmob (spring);
+  Spring *s = unsmob<Spring> (spring);
   s->set_inverse_compress_strength (scm_to_double (strength));
   return s->smobbed_copy ();
 }
@@ -61,7 +61,7 @@ LY_DEFINE (ly_spring_set_inverse_stretch_strength_x, "ly:spring-set-inverse-stre
   LY_ASSERT_SMOB (Spring, spring, 1);
   LY_ASSERT_TYPE (scm_is_number, strength, 2);
 
-  Spring *s = Spring::unsmob (spring);
+  Spring *s = unsmob<Spring> (spring);
   s->set_inverse_stretch_strength (scm_to_double (strength));
   return s->smobbed_copy ();
 }
index 6e496ca03ca13e0aad4eb492aa494ed34ab77f5b..55162c2bc7cc0cc13a7000351c2f46e879452b0a 100644 (file)
@@ -41,7 +41,7 @@ Staff_grouper_interface::maybe_pure_within_group (Grob *me, Grob *child, bool pu
     if (Page_layout_problem::is_spaceable (*i)
         && ((pure && !Hara_kiri_group_spanner::request_suicide (*i, start, end))
             || (!pure && (*i)->is_live ())))
-      return me == Grob::unsmob ((*i)->get_object ("staff-grouper"));
+      return me == unsmob<Grob> ((*i)->get_object ("staff-grouper"));
 
   // If there was no spaceable, living child after me, I don't
   // count as within the group.
index f9994d69541f0e3386c805ee107a2592415a12f1..cad91e76c3e958d318ff50305432b536549a41dc 100644 (file)
@@ -110,7 +110,7 @@ Staff_symbol_engraver::start_spanner ()
     {
       span_ = make_spanner ("StaffSymbol", SCM_EOL);
       span_->set_bound (LEFT,
-                        Grob::unsmob (get_property ("currentCommandColumn")));
+                        unsmob<Grob> (get_property ("currentCommandColumn")));
     }
 }
 
@@ -121,7 +121,7 @@ Staff_symbol_engraver::stop_spanner ()
     return;
 
   if (!finished_span_->get_bound (RIGHT))
-    finished_span_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+    finished_span_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
 
   announce_end_grob (finished_span_,
                      span_events_[STOP]
index be282fa4b62270b86eb247c49d63b184b0067ac4..5fbd8c080be9d514b8377c392c26159b2bb42ca5 100644 (file)
@@ -27,7 +27,7 @@ LY_DEFINE (ly_grob_staff_position, "ly:grob-staff-position",
            "Return the Y-position of @var{sg} relative to the staff.")
 {
   LY_ASSERT_SMOB (Grob, sg, 1);
-  Grob *g = Grob::unsmob (sg);
+  Grob *g = unsmob<Grob> (sg);
   Real pos = Staff_symbol_referencer::get_position (g);
 
   if (fabs (rint (pos) - pos) < 1e-6) // ugh.
@@ -43,7 +43,7 @@ LY_DEFINE (ly_position_on_line_p, "ly:position-on-line?",
 {
   LY_ASSERT_SMOB (Grob, sg, 1);
   LY_ASSERT_TYPE (scm_is_number, spos, 2);
-  Grob *g = Grob::unsmob (sg);
+  Grob *g = unsmob<Grob> (sg);
   Grob *st = Staff_symbol_referencer::get_staff_symbol (g);
   int pos = scm_to_int (spos);
   bool on_line = st ? Staff_symbol::on_line (g, pos) : false;
@@ -57,7 +57,7 @@ LY_DEFINE (ly_staff_symbol_line_thickness, "ly:staff-symbol-line-thickness",
            " current staff-space height.")
 {
   LY_ASSERT_SMOB (Grob, grob, 1);
-  Grob *g = Grob::unsmob (grob);
+  Grob *g = unsmob<Grob> (grob);
   Real thickness = Staff_symbol_referencer::line_thickness (g);
   return scm_from_double (thickness);
 }
@@ -70,7 +70,7 @@ LY_DEFINE (ly_staff_symbol_staff_space, "ly:staff-symbol-staff-space",
            " five-line staff.")
 {
   LY_ASSERT_SMOB (Grob, grob, 1);
-  Grob *g = Grob::unsmob (grob);
+  Grob *g = unsmob<Grob> (grob);
   Real staff_space = Staff_symbol_referencer::staff_space (g);
   return scm_from_double (staff_space);
 }
@@ -81,7 +81,7 @@ LY_DEFINE (ly_staff_symbol_staff_radius, "ly:staff-symbol-staff-radius",
            " @var{grob}.")
 {
   LY_ASSERT_SMOB (Grob, grob, 1);
-  Grob *g = Grob::unsmob (grob);
+  Grob *g = unsmob<Grob> (grob);
   Real staff_radius = Staff_symbol_referencer::staff_radius (g);
   return scm_from_double (staff_radius);
 }
index 89863d0e43b647df80e945f8dce3856e825980ad..2f245fda9be2c8fcbebd23a80a825530462141c2 100644 (file)
@@ -52,7 +52,7 @@ Staff_symbol_referencer::get_staff_symbol (Grob *me)
     return me;
 
   SCM st = me->get_object ("staff-symbol");
-  return Grob::unsmob (st);
+  return unsmob<Grob> (st);
 }
 
 Real
@@ -138,7 +138,7 @@ MAKE_SCHEME_CALLBACK (Staff_symbol_referencer, callback, 1);
 SCM
 Staff_symbol_referencer::callback (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   SCM pos = me->get_property ("staff-position");
   Real off = 0.0;
index f4b18dfd78ad67e5e2c067332f36b0c130cd5605..de88102d1420d140152786692eeeb72b0ce8bb5a 100644 (file)
@@ -33,7 +33,7 @@ MAKE_SCHEME_CALLBACK (Staff_symbol, print, 1);
 SCM
 Staff_symbol::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Spanner *sp = dynamic_cast<Spanner *> (me);
   Grob *common
     = sp->get_bound (LEFT)->common_refpoint (sp->get_bound (RIGHT), X_AXIS);
@@ -289,7 +289,7 @@ MAKE_SCHEME_CALLBACK (Staff_symbol, height, 1);
 SCM
 Staff_symbol::height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real t = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
   t *= robust_scm2double (me->get_property ("thickness"), 1.0);
 
index 45c777fb04091e61574ba5ccd444cea96c1c658b..a84dd701bdd33a241d0df33e34969bb1139a8de0 100644 (file)
@@ -91,7 +91,7 @@ Stem_engraver::make_stem (Grob_info gi, bool tuplet_start)
         for a note head is always <= 2.
       */
       Stream_event *ev = gi.event_cause ();
-      Duration *dur = Duration::unsmob (ev->get_property ("duration"));
+      Duration *dur = unsmob<Duration> (ev->get_property ("duration"));
 
       int tremolo_flags = intlog2 (requested_type) - 2
                           - (dur->duration_log () > 2 ? dur->duration_log () - 2 : 0);
@@ -124,7 +124,7 @@ Stem_engraver::acknowledge_rhythmic_head (Grob_info gi)
   Stream_event *cause = gi.event_cause ();
   if (!cause)
     return;
-  Duration *d = Duration::unsmob (cause->get_property ("duration"));
+  Duration *d = unsmob<Duration> (cause->get_property ("duration"));
   if (!d)
     return;
 
@@ -173,7 +173,7 @@ void
 Stem_engraver::kill_unused_flags ()
 {
   for (vsize i = 0; i < maybe_flags_.size (); i++)
-    if (Grob::is_smob (maybe_flags_[i]->get_parent (X_AXIS)->get_object ("beam")))
+    if (unsmob<Grob> (maybe_flags_[i]->get_parent (X_AXIS)->get_object ("beam")))
       maybe_flags_[i]->suicide ();
 }
 
index f2c716d2ec91767bb43225702aad4f99db2a5684..8cb60db0787d8a3e75b9b9dc0840a0d67e4bc993 100644 (file)
@@ -35,8 +35,8 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_slope, 1)
 SCM
 Stem_tremolo::calc_slope (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Spanner *beam = Stem::get_beam (stem);
 
   SCM style = me->get_property ("style");
@@ -69,8 +69,8 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_width, 1)
 SCM
 Stem_tremolo::calc_width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Direction dir = get_grob_direction (me);
   bool beam = Stem::get_beam (stem);
   bool flag = Stem::duration_log (stem) >= 3 && !beam;
@@ -83,8 +83,8 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_shape, 1)
 SCM
 Stem_tremolo::calc_shape (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *me = unsmob<Grob> (smob);
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Direction dir = get_grob_direction (me);
   bool beam = Stem::get_beam (stem);
   bool flag = Stem::duration_log (stem) >= 3 && !beam;
@@ -98,7 +98,7 @@ Stem_tremolo::calc_shape (SCM smob)
 Real
 Stem_tremolo::get_beam_translation (Grob *me)
 {
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   Spanner *beam = Stem::get_beam (stem);
 
   return (beam && beam->is_live ())
@@ -155,13 +155,13 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, pure_height, 3);
 SCM
 Stem_tremolo::pure_height (SCM smob, SCM, SCM)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
 
   /*
     Cannot use the real slope, since it looks at the Beam.
    */
   Stencil s1 (untranslated_stencil (me, 0.35));
-  Item *stem = Item::unsmob (me->get_object ("stem"));
+  Item *stem = unsmob<Item> (me->get_object ("stem"));
   if (!stem)
     return ly_interval2scm (s1.extent (Y_AXIS));
 
@@ -188,7 +188,7 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, width, 1);
 SCM
 Stem_tremolo::width (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   /*
     Cannot use the real slope, since it looks at the Beam.
@@ -207,7 +207,7 @@ Stem_tremolo::vertical_length (Grob *me)
 Stencil
 Stem_tremolo::untranslated_stencil (Grob *me, Real slope)
 {
-  Grob *stem = Grob::unsmob (me->get_object ("stem"));
+  Grob *stem = unsmob<Grob> (me->get_object ("stem"));
   if (!stem)
     {
       programming_error ("no stem for stem-tremolo");
@@ -228,7 +228,7 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_y_offset, 1);
 SCM
 Stem_tremolo::calc_y_offset (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (y_offset (me, false));
 }
 
@@ -238,7 +238,7 @@ Stem_tremolo::pure_calc_y_offset (SCM smob,
                                   SCM, /* start */
                                   SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (y_offset (me, true));
 }
 
@@ -246,9 +246,9 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_direction, 1);
 SCM
 Stem_tremolo::calc_direction (SCM smob)
 {
-  Item *me = Item::unsmob (smob);
+  Item *me = unsmob<Item> (smob);
 
-  Item *stem = Item::unsmob (me->get_object ("stem"));
+  Item *stem = unsmob<Item> (me->get_object ("stem"));
   if (!stem)
     return scm_from_int (CENTER);
 
@@ -285,7 +285,7 @@ Stem_tremolo::calc_direction (SCM smob)
 Real
 Stem_tremolo::y_offset (Grob *me, bool pure)
 {
-  Item *stem = Item::unsmob (me->get_object ("stem"));
+  Item *stem = unsmob<Item> (me->get_object ("stem"));
   if (!stem)
     return 0.0;
 
@@ -337,7 +337,7 @@ MAKE_SCHEME_CALLBACK (Stem_tremolo, print, 1);
 SCM
 Stem_tremolo::print (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   Stencil s = untranslated_stencil (me, robust_scm2double (me->get_property ("slope"), 0.25));
   return s.smobbed_copy ();
index 0c2625b9e4c454b9bd108001801b6d3e3b63098d..1ddd32986791a35041024f8ee7348a83acffed8e 100644 (file)
@@ -123,7 +123,7 @@ Stem::set_stem_positions (Grob *me, Real se)
   // todo: margins
   Direction d = get_grob_direction (me);
 
-  Grob *beam = Grob::unsmob (me->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (me->get_object ("beam"));
   if (d && d * head_positions (me)[get_grob_direction (me)] >= se * d)
     me->warning (_ ("weird stem size, check for narrow beams"));
 
@@ -298,7 +298,7 @@ Stem::pure_height (SCM smob,
                    SCM /* start */,
                    SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return ly_interval2scm (internal_pure_height (me, true));
 }
 
@@ -308,7 +308,7 @@ Stem::internal_pure_height (Grob *me, bool calc_beam)
   if (!is_normal_stem (me))
     return Interval (0.0, 0.0);
 
-  Grob *beam = Grob::unsmob (me->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (me->get_object ("beam"));
 
   Interval iv = internal_height (me, false);
 
@@ -378,7 +378,7 @@ MAKE_SCHEME_CALLBACK (Stem, calc_stem_end_position, 1)
 SCM
 Stem::calc_stem_end_position (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (internal_calc_stem_end_position (me, true));
 }
 
@@ -388,7 +388,7 @@ Stem::pure_calc_stem_end_position (SCM smob,
                                    SCM, /* start */
                                    SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (internal_calc_stem_end_position (me, false));
 }
 
@@ -455,8 +455,8 @@ Stem::internal_calc_stem_end_position (Grob *me, bool calc_beam)
   length *= robust_scm2double (me->get_property ("length-fraction"), 1.0);
 
   /* Tremolo stuff.  */
-  Grob *t_flag = Grob::unsmob (me->get_object ("tremolo-flag"));
-  if (t_flag && (!Grob::is_smob (me->get_object ("beam")) || !calc_beam))
+  Grob *t_flag = unsmob<Grob> (me->get_object ("tremolo-flag"));
+  if (t_flag && (!unsmob<Grob> (me->get_object ("beam")) || !calc_beam))
     {
       /* Crude hack: add extra space if tremolo flag is there.
 
@@ -506,7 +506,7 @@ MAKE_SCHEME_CALLBACK (Stem, calc_positioning_done, 1);
 SCM
 Stem::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (!head_count (me))
     return SCM_BOOL_T;
 
@@ -632,9 +632,9 @@ MAKE_SCHEME_CALLBACK (Stem, calc_direction, 1);
 SCM
 Stem::calc_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Direction dir = CENTER;
-  if (Grob *beam = Grob::unsmob (me->get_object ("beam")))
+  if (Grob *beam = unsmob<Grob> (me->get_object ("beam")))
     {
       SCM ignore_me = beam->get_property ("direction");
       (void) ignore_me;
@@ -655,7 +655,7 @@ MAKE_SCHEME_CALLBACK (Stem, calc_default_direction, 1);
 SCM
 Stem::calc_default_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Direction dir = CENTER;
   int staff_center = 0;
@@ -677,7 +677,7 @@ MAKE_SCHEME_CALLBACK (Stem, height, 1);
 SCM
 Stem::height (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return ly_interval2scm (internal_height (me, true));
 }
 
@@ -692,7 +692,7 @@ Stem::get_reference_head (Grob *me)
 Real
 Stem::beam_end_corrective (Grob *me)
 {
-  Grob *beam = Grob::unsmob (me->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (me->get_object ("beam"));
   Direction dir = get_grob_direction (me);
   if (beam)
     {
@@ -725,7 +725,7 @@ Stem::internal_height (Grob *me, bool calc_beam)
     If there is a beam but no stem, slope calculations depend on this
     routine to return where the stem end /would/ be.
   */
-  if (calc_beam && !beam && !Stencil::is_smob (me->get_property ("stencil")))
+  if (calc_beam && !beam && !unsmob<Stencil> (me->get_property ("stencil")))
     return Interval ();
 
   Real y1 = robust_scm2double ((calc_beam
@@ -750,7 +750,7 @@ MAKE_SCHEME_CALLBACK (Stem, width, 1);
 SCM
 Stem::width (SCM e)
 {
-  Grob *me = Grob::unsmob (e);
+  Grob *me = unsmob<Grob> (e);
 
   Interval r;
 
@@ -776,7 +776,7 @@ MAKE_SCHEME_CALLBACK (Stem, calc_stem_begin_position, 1);
 SCM
 Stem::calc_stem_begin_position (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (internal_calc_stem_begin_position (me, true));
 }
 
@@ -786,7 +786,7 @@ Stem::pure_calc_stem_begin_position (SCM smob,
                                      SCM, /* start */
                                      SCM /* end */)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return scm_from_double (internal_calc_stem_begin_position (me, false));
 }
 
@@ -827,7 +827,7 @@ MAKE_SCHEME_CALLBACK (Stem, pure_calc_length, 3);
 SCM
 Stem::pure_calc_length (SCM smob, SCM /*start*/, SCM /*end*/)
 {
-  Grob *me = Grob::unsmob (smob);
+  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);
@@ -837,8 +837,8 @@ MAKE_SCHEME_CALLBACK (Stem, calc_length, 1);
 SCM
 Stem::calc_length (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  if (Grob::is_smob (me->get_object ("beam")))
+  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);
@@ -857,7 +857,7 @@ Stem::is_valid_stem (Grob *me)
   if (!me)
     return false;
   Grob *lh = get_reference_head (me);
-  Grob *beam = Grob::unsmob (me->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (me->get_object ("beam"));
 
   if (!lh && !beam)
     return false;
@@ -872,7 +872,7 @@ MAKE_SCHEME_CALLBACK (Stem, print, 1);
 SCM
 Stem::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   if (!is_valid_stem (me))
     return SCM_EOL;
 
@@ -908,7 +908,7 @@ MAKE_SCHEME_CALLBACK (Stem, offset_callback, 1);
 SCM
 Stem::offset_callback (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "rests", rests);
   if (rests.size ())
@@ -952,7 +952,7 @@ Spanner *
 Stem::get_beam (Grob *me)
 {
   SCM b = me->get_object ("beam");
-  return Spanner::unsmob (b);
+  return unsmob<Spanner> (b);
 }
 
 Stem_info
@@ -971,7 +971,7 @@ MAKE_SCHEME_CALLBACK (Stem, calc_stem_info, 1);
 SCM
 Stem::calc_stem_info (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Direction my_dir = get_grob_direction (me);
 
   if (!my_dir)
@@ -1021,7 +1021,7 @@ Stem::calc_stem_info (SCM smob)
        : 0.0);
 
   Real height_of_my_trem = 0.0;
-  Grob *trem = Grob::unsmob (me->get_object ("tremolo-flag"));
+  Grob *trem = unsmob<Grob> (me->get_object ("tremolo-flag"));
   if (trem)
     {
       height_of_my_trem
@@ -1120,7 +1120,7 @@ Stem::beam_multiplicity (Grob *stem)
 bool
 Stem::is_cross_staff (Grob *stem)
 {
-  Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+  Grob *beam = unsmob<Grob> (stem->get_object ("beam"));
   return beam && Beam::is_cross_staff (beam);
 }
 
@@ -1128,13 +1128,13 @@ MAKE_SCHEME_CALLBACK (Stem, calc_cross_staff, 1)
 SCM
 Stem::calc_cross_staff (SCM smob)
 {
-  return scm_from_bool (is_cross_staff (Grob::unsmob (smob)));
+  return scm_from_bool (is_cross_staff (unsmob<Grob> (smob)));
 }
 
 Grob *
 Stem::flag (Grob *me)
 {
-  return Grob::unsmob (me->get_object ("flag"));
+  return unsmob<Grob> (me->get_object ("flag"));
 }
 
 /* FIXME:  Too many properties  */
index 0bdb00a8edd054b5df18157af46c22324646ae83..e72517e4eadbcb28ce916ce325325a984b24874d 100644 (file)
@@ -691,7 +691,7 @@ void
 make_named_glyph_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
 {
   SCM fm_scm = scm_car (expr);
-  Font_metric *fm = Font_metric::unsmob (fm_scm);
+  Font_metric *fm = unsmob<Font_metric> (fm_scm);
   expr = scm_cdr (expr);
   SCM glyph = scm_car (expr);
   string glyph_s = ly_scm2string (glyph);
@@ -730,7 +730,7 @@ void
 make_glyph_string_boxes (vector<Box> &boxes, vector<Drul_array<Offset> > &buildings, PangoMatrix trans, SCM expr)
 {
   SCM fm_scm = scm_car (expr);
-  Font_metric *fm = Font_metric::unsmob (fm_scm);
+  Font_metric *fm = unsmob<Font_metric> (fm_scm);
   expr = scm_cdr (expr);
   expr = scm_cdr (expr); // font-name
   expr = scm_cdr (expr); // size
@@ -994,7 +994,7 @@ 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 = Grob::unsmob (smob);
+  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,
@@ -1006,7 +1006,7 @@ MAKE_SCHEME_CALLBACK (Grob, simple_vertical_skylines_from_extents, 1);
 SCM
 Grob::simple_vertical_skylines_from_extents (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, false, 0, 0, false, false);
 }
 
@@ -1014,7 +1014,7 @@ 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 = Grob::unsmob (smob);
+  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
@@ -1027,7 +1027,7 @@ MAKE_SCHEME_CALLBACK (Grob, simple_horizontal_skylines_from_extents, 1);
 SCM
 Grob::simple_horizontal_skylines_from_extents (SCM smob)
 {
-  Grob *me = Grob::unsmob (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")));
 }
@@ -1035,7 +1035,7 @@ Grob::simple_horizontal_skylines_from_extents (SCM smob)
 SCM
 Stencil::skylines_from_stencil (SCM sten, Real pad, Axis a)
 {
-  Stencil *s = Stencil::unsmob (sten);
+  Stencil *s = unsmob<Stencil> (sten);
   if (!s)
     return Skyline_pair ().smobbed_copy ();
 
@@ -1064,7 +1064,7 @@ MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_stencil, 1);
 SCM
 Grob::vertical_skylines_from_stencil (SCM smob)
 {
-  Grob *me = Grob::unsmob (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);
@@ -1076,7 +1076,7 @@ MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_stencil, 1);
 SCM
 Grob::horizontal_skylines_from_stencil (SCM smob)
 {
-  Grob *me = Grob::unsmob (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);
@@ -1104,7 +1104,7 @@ Grob::internal_skylines_from_element_stencils (Grob *me, Axis a, bool pure, int
   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));
+      Skyline_pair *skyp = unsmob<Skyline_pair> (elts[i]->get_maybe_pure_property (a == X_AXIS ? "vertical-skylines" : "horizontal-skylines", pure, beg, end));
       if (skyp)
         {
           /*
@@ -1138,7 +1138,7 @@ MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_element_stencils, 1);
 SCM
 Grob::vertical_skylines_from_element_stencils (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return internal_skylines_from_element_stencils (me, X_AXIS, false, 0, INT_MAX);
 }
 
@@ -1146,7 +1146,7 @@ MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_element_stencils, 1);
 SCM
 Grob::horizontal_skylines_from_element_stencils (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   return internal_skylines_from_element_stencils (me, Y_AXIS, false, 0, INT_MAX);
 }
 
@@ -1154,7 +1154,7 @@ 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 = Grob::unsmob (smob);
+  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);
@@ -1164,7 +1164,7 @@ 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 = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   int beg = robust_scm2int (beg_scm, 0);
   int end = robust_scm2int (end_scm, 0);
   return internal_skylines_from_element_stencils (me, Y_AXIS, true, beg, end);
index ab4ebd3a7c4a53dd919dca7948a4e3890852104e..e79dda1873d15e458168d65666a4f9cccfb8d670 100644 (file)
@@ -31,7 +31,7 @@ LY_DEFINE (ly_stencil_translate_axis, "ly:stencil-translate-axis",
            "Return a copy of @var{stil} but translated by @var{amount}"
            " in @var{axis} direction.")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (scm_is_number, amount, 2);
 
@@ -42,7 +42,7 @@ LY_DEFINE (ly_stencil_translate_axis, "ly:stencil-translate-axis",
   SCM new_s = s->smobbed_copy ();
   scm_remember_upto_here_1 (stil);
 
-  Stencil *q = Stencil::unsmob (new_s);
+  Stencil *q = unsmob<Stencil> (new_s);
   q->translate_axis (real_amount, Axis (scm_to_int (axis)));
   return new_s;
 }
@@ -52,7 +52,7 @@ LY_DEFINE (ly_stencil_translate, "ly:stencil-translate",
            "Return a @var{stil}, but translated by @var{offset}"
            " (a pair of numbers).")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (is_number_pair, offset, 2);
   Offset o = ly_scm2offset (offset);
@@ -60,7 +60,7 @@ LY_DEFINE (ly_stencil_translate, "ly:stencil-translate",
   SCM new_s = s->smobbed_copy ();
   scm_remember_upto_here_1 (stil);
 
-  Stencil *q = Stencil::unsmob (new_s);
+  Stencil *q = unsmob<Stencil> (new_s);
   q->translate (o);
   return new_s;
 }
@@ -69,7 +69,7 @@ LY_DEFINE (ly_stencil_expr, "ly:stencil-expr",
            1, 0, 0, (SCM stil),
            "Return the expression of @var{stil}.")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   return s->expr ();
 }
@@ -80,7 +80,7 @@ LY_DEFINE (ly_stencil_extent, "ly:stencil-extent",
            " @var{axis} direction (@code{0} or @code{1} for x and"
            " y@tie{}axis, respectively).")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (is_axis, axis, 2);
 
@@ -93,7 +93,7 @@ LY_DEFINE (ly_stencil_empty_p, "ly:stencil-empty?",
            " @var{axis} is supplied, the emptiness check is"
            " restricted to that axis.")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   if (SCM_UNBNDP (axis))
     return scm_from_bool (s->is_empty ());
@@ -112,8 +112,8 @@ LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge",
            " space.  @var{first} and @var{second} may also be @code{'()} or"
            " @code{#f}.")
 {
-  Stencil *s1 = Stencil::unsmob (first);
-  Stencil *s2 = Stencil::unsmob (second);
+  Stencil *s1 = unsmob<Stencil> (first);
+  Stencil *s2 = unsmob<Stencil> (second);
   Stencil result;
 
   SCM_ASSERT_TYPE (s1 || scm_is_false (first) || scm_is_null (first),
@@ -159,8 +159,8 @@ LY_DEFINE (ly_stencil_stack, "ly:stencil-stack",
            " apart at least by this distance.  If either of the stencils"
            " is spacing, @var{padding} and @var{mindist} do not apply.")
 {
-  Stencil *s1 = Stencil::unsmob (first);
-  Stencil *s2 = Stencil::unsmob (second);
+  Stencil *s1 = unsmob<Stencil> (first);
+  Stencil *s2 = unsmob<Stencil> (second);
   Stencil result;
 
   SCM_ASSERT_TYPE (s1 || scm_is_false (first) || scm_is_null (first),
@@ -210,7 +210,7 @@ LY_DEFINE (ly_stencil_add, "ly:stencil-add",
 
   while (!SCM_NULLP (args))
     {
-      Stencil *s = Stencil::unsmob (scm_car (args));
+      Stencil *s = unsmob<Stencil> (scm_car (args));
       if (!s)
         SCM_ASSERT_TYPE (s, scm_car (args), SCM_ARGn, __FUNCTION__, "Stencil");
 
@@ -280,7 +280,7 @@ LY_DEFINE (ly_stencil_aligned_to, "ly:stencil-aligned-to",
   LY_ASSERT_TYPE (is_axis, axis, 2);
   LY_ASSERT_TYPE (scm_is_number, dir, 3);
 
-  Stencil target = *Stencil::unsmob (stil);
+  Stencil target = *unsmob<Stencil> (stil);
 
   target.align_to ((Axis)scm_to_int (axis),
                    scm_to_double (dir));
@@ -293,7 +293,7 @@ LY_DEFINE (ly_stencil_fonts, "ly:stencil-fonts",
            " in@tie{}@var{s}.")
 {
   LY_ASSERT_SMOB (Stencil, s, 1);
-  Stencil *stil = Stencil::unsmob (s);
+  Stencil *stil = unsmob<Stencil> (s);
   return find_expression_fonts (stil->expr ());
 }
 
@@ -302,7 +302,7 @@ LY_DEFINE (ly_stencil_in_color, "ly:stencil-in-color",
            "Put @var{stc} in a different color.")
 {
   LY_ASSERT_SMOB (Stencil, stc, 1);
-  Stencil *stil = Stencil::unsmob (stc);
+  Stencil *stil = unsmob<Stencil> (stc);
   return Stencil (stil->extent_box (),
                   scm_list_3 (ly_symbol2scm ("color"),
                               scm_list_3 (r, g, b),
@@ -363,7 +363,7 @@ LY_DEFINE (ly_stencil_rotate, "ly:stencil-rotate",
            " the relative offset (@var{x}, @var{y}).  E.g., an offset of"
            " (-1, 1) will rotate the stencil around the left upper corner.")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (scm_is_number, angle, 2);
   LY_ASSERT_TYPE (scm_is_number, x, 3);
@@ -373,7 +373,7 @@ LY_DEFINE (ly_stencil_rotate, "ly:stencil-rotate",
   Real y_off = scm_to_double (y);
 
   SCM new_s = s->smobbed_copy ();
-  Stencil *q = Stencil::unsmob (new_s);
+  Stencil *q = unsmob<Stencil> (new_s);
   q->rotate_degrees (a, Offset (x_off, y_off));
   return new_s;
 }
@@ -383,7 +383,7 @@ LY_DEFINE (ly_stencil_rotate_absolute, "ly:stencil-rotate-absolute",
            "Return a stencil @var{stil} rotated @var{angle} degrees around"
            " point (@var{x}, @var{y}), given in absolute coordinates.")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (scm_is_number, angle, 2);
   LY_ASSERT_TYPE (scm_is_number, x, 3);
@@ -393,7 +393,7 @@ LY_DEFINE (ly_stencil_rotate_absolute, "ly:stencil-rotate-absolute",
   Real y_off = scm_to_double (y);
 
   SCM new_s = s->smobbed_copy ();
-  Stencil *q = Stencil::unsmob (new_s);
+  Stencil *q = unsmob<Stencil> (new_s);
   q->rotate_degrees_absolute (a, Offset (x_off, y_off));
   return new_s;
 }
@@ -462,13 +462,13 @@ LY_DEFINE (ly_stencil_scale, "ly:stencil-scale",
            " flip or mirror @var{stil} without changing its origin;"
            " this may result in collisions unless it is repositioned.")
 {
-  Stencil *s = Stencil::unsmob (stil);
+  Stencil *s = unsmob<Stencil> (stil);
   LY_ASSERT_SMOB (Stencil, stil, 1);
   LY_ASSERT_TYPE (scm_is_number, x, 2);
   LY_ASSERT_TYPE (scm_is_number, y, 3);
 
   SCM new_s = s->smobbed_copy ();
-  Stencil *q = Stencil::unsmob (new_s);
+  Stencil *q = unsmob<Stencil> (new_s);
 
   q->scale (scm_to_double (x), scm_to_double (y));
   return new_s;
index bf8056e16aa88eb56c8087869ef37afc6bbb7594..ccc37e0110d599717a439aac311d76549841bd30 100644 (file)
@@ -23,7 +23,7 @@ LY_DEFINE (ly_stream_event_p, "ly:stream-event?",
            1, 0, 0, (SCM obj),
            "Is @code{@var{obj}} a @code{Stream_event} object?")
 {
-  return scm_from_bool (Stream_event::is_smob (obj));
+  return scm_from_bool (unsmob<Stream_event> (obj));
 }
 
 LY_DEFINE (ly_make_stream_event, "ly:make-stream-event",
@@ -49,7 +49,7 @@ LY_DEFINE (ly_event_property, "ly:event-property",
            "  If @var{sym} is undefined, return @var{val} or"
            " @code{'()} if @var{val} is not specified.")
 {
-  LY_ASSERT_SMOB (Stream_event, sev, 1)
+  LY_ASSERT_SMOB (Stream_event, sev, 1);
   return ly_prob_property (sev, sym, val);
 }
 
@@ -68,7 +68,7 @@ LY_DEFINE (ly_event_deep_copy, "ly:event-deep-copy",
            "Copy @var{m} and all sub expressions of@tie{}@var{m}.")
 {
   SCM copy = m;
-  if (Stream_event *ev = Stream_event::unsmob (m))
+  if (Stream_event *ev = unsmob<Stream_event> (m))
     {
       ev = ev->clone ();
       copy = ev->unprotect ();
index 7fb596c26475c7a088797601c14f978ce1bf19b6..82bcfd8db8c5b126785fa73b0ce4729e90da7abc 100644 (file)
@@ -54,7 +54,7 @@ Stream_event::copy_mutable_properties () const
 Input *
 Stream_event::origin () const
 {
-  Input *i = Input::unsmob (get_property ("origin"));
+  Input *i = unsmob<Input> (get_property ("origin"));
   return i ? i : &dummy_input_global;
 }
 
@@ -86,8 +86,8 @@ Stream_event::make_transposable ()
       SCM prop = scm_car (entry);
       SCM val = scm_cdr (entry);
 
-      if ((Pitch::is_smob (val)
-           || (scm_is_eq (prop, ly_symbol2scm ("element")) && Music::is_smob (val))
+      if ((unsmob<Pitch> (val)
+           || (scm_is_eq (prop, ly_symbol2scm ("element")) && unsmob<Music> (val))
            || (scm_is_eq (prop, ly_symbol2scm ("elements")) && scm_is_pair (val))
            || (scm_is_eq (prop, ly_symbol2scm ("pitch-alist")) && scm_is_pair (val)))
           && scm_is_false (scm_assq (prop, mutable_property_alist_)))
@@ -99,7 +99,7 @@ Stream_event::make_transposable ()
 SCM
 Stream_event::dump (SCM self)
 {
-  Stream_event *ev = Stream_event::unsmob (self);
+  Stream_event *ev = unsmob<Stream_event> (self);
   // Reversed alists look prettier.
   return scm_cons (scm_reverse (ev->immutable_property_alist_),
                    scm_reverse (ev->mutable_property_alist_));
index e020bc522eb939c5fb03afd939496d57c929f424..724059742d7b31e3d2f3f3d89fe2fa54fc57bdb2 100644 (file)
@@ -48,7 +48,7 @@ MAKE_SCHEME_CALLBACK (Sustain_pedal, print, 1);
 SCM
 Sustain_pedal::print (SCM smob)
 {
-  Grob *e = Grob::unsmob (smob);
+  Grob *e = unsmob<Grob> (smob);
 
   Stencil mol;
   SCM glyph = e->get_property ("text");
index 73a3c8ccc75cb9cdb99674f6809c75c36f0bb1d1..a37c520dfc9cc82e4b9969f20d0e2d71c910b6bd 100644 (file)
@@ -191,7 +191,7 @@ System_start_delimiter_engraver::process_music ()
       nesting_->from_list (hierarchy);
       nesting_->create_grobs (this, delimiter_name);
       nesting_->set_bound (LEFT,
-                           Grob::unsmob (get_property ("currentCommandColumn")));
+                           unsmob<Grob> (get_property ("currentCommandColumn")));
     }
 }
 
@@ -201,7 +201,7 @@ System_start_delimiter_engraver::finalize ()
   if (nesting_)
     {
       nesting_->set_bound (RIGHT,
-                           Grob::unsmob (get_property ("currentCommandColumn")));
+                           unsmob<Grob> (get_property ("currentCommandColumn")));
       nesting_->set_nesting_support (0);
 
       delete nesting_;
index 563a035acc6f97f1b9ad3d099680af20a7ed19a0..e5460a0f0485521356c5f5a1dfeecc60379b5084 100644 (file)
@@ -93,7 +93,7 @@ MAKE_SCHEME_CALLBACK (System_start_delimiter, print, 1);
 SCM
 System_start_delimiter::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   extract_grob_set (me, "elements", elts);
   Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
 
index 4f98412745ac87b10803b501266c6fc112075075..d30a5f342909fedf384769e446c7a471b1acbf73 100644 (file)
@@ -62,7 +62,7 @@ void
 System::init_elements ()
 {
   SCM scm_arr = Grob_array::make_array ();
-  all_elements_ = Grob_array::unsmob (scm_arr);
+  all_elements_ = unsmob<Grob_array> (scm_arr);
   all_elements_->set_ordered (false);
   set_object ("all-elements", scm_arr);
 }
@@ -333,7 +333,7 @@ System::internal_get_note_heights_in_range (vsize start, vsize end, bool foot)
       SCM footnote_stl = Text_interface::interpret_markup (pscore_->layout ()->self_scm (),
                                                            props, footnote_markup);
 
-      Stencil *footnote_stencil = Stencil::unsmob (footnote_stl);
+      Stencil *footnote_stencil = unsmob<Stencil> (footnote_stl);
       out.push_back (footnote_stencil->extent (Y_AXIS).length ());
     }
 
@@ -378,7 +378,7 @@ MAKE_SCHEME_CALLBACK (System, footnotes_before_line_breaking, 1);
 SCM
 System::footnotes_before_line_breaking (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   vector<Grob *> footnotes;
   SCM grobs_scm = Grob_array::make_array ();
   extract_grob_set (me, "all-elements", elts);
@@ -386,7 +386,7 @@ System::footnotes_before_line_breaking (SCM smob)
     if (elts[i]->internal_has_interface (ly_symbol2scm ("footnote-interface")))
       footnotes.push_back (elts[i]);
 
-  Grob_array::unsmob (grobs_scm)->set_array (footnotes);
+  unsmob<Grob_array> (grobs_scm)->set_array (footnotes);
   return grobs_scm;
 }
 
@@ -394,14 +394,14 @@ MAKE_SCHEME_CALLBACK (System, footnotes_after_line_breaking, 1);
 SCM
 System::footnotes_after_line_breaking (SCM smob)
 {
-  Spanner *sys_span = Spanner::unsmob (smob);
+  Spanner *sys_span = unsmob<Spanner> (smob);
   System *sys = dynamic_cast<System *> (sys_span);
   Interval_t<int> sri = sys->spanned_rank_interval ();
   vector<Grob *> footnote_grobs = sys->get_footnote_grobs_in_range (sri[LEFT], sri[RIGHT]);
   vector_sort (footnote_grobs, grob_2D_less);
 
   SCM grobs_scm = Grob_array::make_array ();
-  Grob_array::unsmob (grobs_scm)->set_array (footnote_grobs);
+  unsmob<Grob_array> (grobs_scm)->set_array (footnote_grobs);
   return grobs_scm;
 }
 
@@ -409,7 +409,7 @@ MAKE_SCHEME_CALLBACK (System, vertical_skyline_elements, 1);
 SCM
 System::vertical_skyline_elements (SCM smob)
 {
-  Grob *me_grob = Grob::unsmob (smob);
+  Grob *me_grob = unsmob<Grob> (smob);
   vector<Grob *> vertical_skyline_grobs;
   extract_grob_set (me_grob, "elements", my_elts);
   for (vsize i = 0; i < my_elts.size (); i++)
@@ -417,11 +417,11 @@ System::vertical_skyline_elements (SCM smob)
       vertical_skyline_grobs.push_back (my_elts[i]);
 
   System *me = dynamic_cast<System *> (me_grob);
-  Grob *align = Grob::unsmob (me->get_object ("vertical-alignment"));
+  Grob *align = unsmob<Grob> (me->get_object ("vertical-alignment"));
   if (!align)
     {
       SCM grobs_scm = Grob_array::make_array ();
-      Grob_array::unsmob (grobs_scm)->set_array (vertical_skyline_grobs);
+      unsmob<Grob_array> (grobs_scm)->set_array (vertical_skyline_grobs);
       return grobs_scm;
     }
 
@@ -432,7 +432,7 @@ System::vertical_skyline_elements (SCM smob)
       vertical_skyline_grobs.push_back (elts[i]);
 
   SCM grobs_scm = Grob_array::make_array ();
-  Grob_array::unsmob (grobs_scm)->set_array (vertical_skyline_grobs);
+  unsmob<Grob_array> (grobs_scm)->set_array (vertical_skyline_grobs);
   return grobs_scm;
 }
 
@@ -489,12 +489,12 @@ void
 System::add_column (Paper_column *p)
 {
   Grob *me = this;
-  Grob_array *ga = Grob_array::unsmob (me->get_object ("columns"));
+  Grob_array *ga = unsmob<Grob_array> (me->get_object ("columns"));
   if (!ga)
     {
       SCM scm_ga = Grob_array::make_array ();
       me->set_object ("columns", scm_ga);
-      ga = Grob_array::unsmob (scm_ga);
+      ga = unsmob<Grob_array> (scm_ga);
     }
 
   p->set_rank (ga->size ());
@@ -624,7 +624,7 @@ System::get_paper_system ()
                                  exprs));
   if (debug_skylines)
     {
-      Skyline_pair *skylines = Skyline_pair::unsmob (get_property ("vertical-skylines"));
+      Skyline_pair *skylines = unsmob<Skyline_pair> (get_property ("vertical-skylines"));
       if (skylines)
         {
           Stencil up
@@ -653,7 +653,7 @@ System::get_paper_system ()
     pl->set_property ("last-in-score", SCM_BOOL_T);
 
   Interval staff_refpoints;
-  if (Grob *align = Grob::unsmob (get_object ("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++)
@@ -758,7 +758,7 @@ MAKE_SCHEME_CALLBACK (System, get_vertical_alignment, 1);
 SCM
 System::get_vertical_alignment (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "elements", elts);
   Grob *ret = 0;
   for (vsize i = 0; i < elts.size (); i++)
@@ -782,7 +782,7 @@ System::get_vertical_alignment (SCM smob)
 Grob *
 System::get_extremal_staff (Direction dir, Interval const &iv)
 {
-  Grob *align = Grob::unsmob (get_object ("vertical-alignment"));
+  Grob *align = unsmob<Grob> (get_object ("vertical-alignment"));
   if (!align)
     return 0;
 
@@ -806,7 +806,7 @@ System::get_extremal_staff (Direction dir, Interval const &iv)
 Grob *
 System::get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interval_t<int> bounds)
 {
-  Grob *align = Grob::unsmob (get_object ("vertical-alignment"));
+  Grob *align = unsmob<Grob> (get_object ("vertical-alignment"));
   if (!align)
     return 0;
 
@@ -836,7 +836,7 @@ Interval
 System::pure_refpoint_extent (vsize start, vsize end)
 {
   Interval ret;
-  Grob *alignment = Grob::unsmob (get_object ("vertical-alignment"));
+  Grob *alignment = unsmob<Grob> (get_object ("vertical-alignment"));
   if (!alignment)
     return Interval ();
 
@@ -863,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 = Grob::unsmob (get_object ("vertical-alignment"));
+  Grob *alignment = unsmob<Grob> (get_object ("vertical-alignment"));
   if (!alignment)
     return Interval ();
 
@@ -909,7 +909,7 @@ MAKE_SCHEME_CALLBACK (System, calc_pure_relevant_grobs, 1);
 SCM
 System::calc_pure_relevant_grobs (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   extract_grob_set (me, "elements", elts);
   vector<Grob *> relevant_grobs;
@@ -934,7 +934,7 @@ System::calc_pure_relevant_grobs (SCM smob)
 
   SCM grobs_scm = Grob_array::make_array ();
 
-  Grob_array::unsmob (grobs_scm)->set_array (relevant_grobs);
+  unsmob<Grob_array> (grobs_scm)->set_array (relevant_grobs);
   return grobs_scm;
 }
 
@@ -949,7 +949,7 @@ MAKE_SCHEME_CALLBACK (System, calc_pure_height, 3);
 SCM
 System::calc_pure_height (SCM smob, SCM start_scm, SCM end_scm)
 {
-  System *me = derived_unsmob<System> (smob);
+  System *me = unsmob<System> (smob);
   int start = scm_to_int (start_scm);
   int end = scm_to_int (end_scm);
 
@@ -993,8 +993,8 @@ enum
 static SCM
 get_maybe_spaceable_staves (SCM smob, int filter)
 {
-  System *me = derived_unsmob<System> (smob);
-  Grob *align = Grob::unsmob (me->get_object ("vertical_alignment"));
+  System *me = unsmob<System> (smob);
+  Grob *align = unsmob<Grob> (me->get_object ("vertical_alignment"));
   SCM ret = SCM_EOL;
 
   if (align)
index 16da8853a189b98f531414c58c9dd3bd928a78ad..b26bf0f6f6a9a45f52d30e8c9927c6f0750fdcc0 100644 (file)
@@ -85,7 +85,7 @@ Tab_tie_follow_engraver::stop_translation_timestep ()
           if (left_item)
             {
               SCM left_cause = left_item->get_property ("cause");
-              Item *slur_cause = Item::unsmob (left_cause);
+              Item *slur_cause = unsmob<Item> (left_cause);
               if (slur_cause == note_heads_[k])
                 {
                   note_heads_[k]->set_property ("span-start", SCM_BOOL_T);
index f69166e9c51987fb24d0dbfae7ad384d33d77661..b17e9202cbab8097392ec1a53cb5b440315f35ac 100644 (file)
@@ -61,10 +61,10 @@ void
 Tempo_performer::process_music ()
 {
   SCM w = get_property ("tempoWholesPerMinute");
-  if (Moment::is_smob (w)
+  if (unsmob<Moment> (w)
       && !ly_is_equal (w, last_tempo_))
     {
-      Rational r = Moment::unsmob (w)->main_part_;
+      Rational r = unsmob<Moment> (w)->main_part_;
       r *= Rational (4, 1);
 
       audio_ = new Audio_tempo (r.to_int ());
index f242fa4db2a9f4412d2630c6a2c593a957036d38..2a12e75a7aa90937235ab1577574daffe11141f6 100644 (file)
@@ -88,7 +88,7 @@ Text_engraver::acknowledge_note_column (Grob_info info)
   extract_grob_set (info.grob (), "note-heads", heads);
   Grob *x_parent = (heads.size ()
                     ? info.grob ()
-                    : Grob::unsmob (info.grob ()->get_object ("rest")));
+                    : unsmob<Grob> (info.grob ()->get_object ("rest")));
 
   for (vsize i = 0; i < scripts_.size (); i++)
     {
index 012718d6215cc94855dd25536df4485673a470e9..138ede129ebbec443bd9942b300d259c8ab2fd28 100644 (file)
@@ -76,7 +76,7 @@ Text_interface::interpret_string (SCM layout_smob,
   LY_ASSERT_TYPE (scm_is_string, markup, 3);
 
   string str = ly_scm2string (markup);
-  Output_def *layout = Output_def::unsmob (layout_smob);
+  Output_def *layout = unsmob<Output_def> (layout_smob);
   Font_metric *fm = select_encoded_font (layout, props);
 
   replace_special_characters (str, props);
@@ -159,7 +159,7 @@ MAKE_SCHEME_CALLBACK (Text_interface, print, 1);
 SCM
 Text_interface::print (SCM grob)
 {
-  Grob *me = Grob::unsmob (grob);
+  Grob *me = unsmob<Grob> (grob);
 
   SCM t = me->get_property ("text");
   SCM chain = Font_interface::text_font_alist_chain (me);
index 8b0e72265d41bdd401fd31606fdb7c0556e05a3c..f34f494301345329cad032a90c5f6bb39b0db6cd 100644 (file)
@@ -101,7 +101,7 @@ Text_spanner_engraver::typeset_all ()
     {
       if (!finished_->get_bound (RIGHT))
         {
-          Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+          Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
           finished_->set_bound (RIGHT, e);
         }
       finished_ = 0;
@@ -113,7 +113,7 @@ Text_spanner_engraver::stop_translation_timestep ()
 {
   if (span_ && !span_->get_bound (LEFT))
     {
-      Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
       span_->set_bound (LEFT, e);
     }
 
index ca3d320e9eb108260d8d78590de1c8930b572d59..6241a4c246799ef93ba50cf7c5b722c3882a07a1 100644 (file)
@@ -62,10 +62,10 @@ MAKE_SCHEME_CALLBACK (Tie_column, before_line_breaking, 1);
 SCM
 Tie_column::before_line_breaking (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   for (SCM s = me->get_property ("ties"); scm_is_pair (s); s = scm_cdr (s))
     {
-      Spanner *tie = Spanner::unsmob (scm_car (s));
+      Spanner *tie = unsmob<Spanner> (scm_car (s));
       for (LEFT_and_RIGHT (dir))
         {
           if (dir * tie->get_bound (dir)->get_column ()->get_rank ()
@@ -81,7 +81,7 @@ MAKE_SCHEME_CALLBACK (Tie_column, calc_positioning_done, 1)
 SCM
 Tie_column::calc_positioning_done (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "ties", ro_ties);
   vector<Grob *> ties (ro_ties);
   if (!ties.size ())
index 5ca994873f17c64e00782843b8e931ebb312e787..ef03f87bd632626ae6a740ac6bf456464f0d1ed7 100644 (file)
@@ -155,8 +155,8 @@ Tie_engraver::tie_notehead (Grob *h, bool enharmonic)
   for (vsize i = 0; i < heads_to_tie_.size (); i++)
     {
       Grob *th = heads_to_tie_[i].head_;
-      Stream_event *right_ev = Stream_event::unsmob (h->get_property ("cause"));
-      Stream_event *left_ev = Stream_event::unsmob (th->get_property ("cause"));
+      Stream_event *right_ev = unsmob<Stream_event> (h->get_property ("cause"));
+      Stream_event *left_ev = unsmob<Stream_event> (th->get_property ("cause"));
 
       /*
         maybe should check positions too.
@@ -171,8 +171,8 @@ Tie_engraver::tie_notehead (Grob *h, bool enharmonic)
       SCM p1 = left_ev->get_property ("pitch");
       SCM p2 = right_ev->get_property ("pitch");
       if ((enharmonic
-           ? (Pitch::is_smob (p1) && Pitch::is_smob (p2) &&
-              Pitch::unsmob (p1)->tone_pitch () == Pitch::unsmob (p2)->tone_pitch ())
+           ? (unsmob<Pitch> (p1) && unsmob<Pitch> (p2) &&
+              unsmob<Pitch> (p1)->tone_pitch () == unsmob<Pitch> (p2)->tone_pitch ())
            : ly_is_equal (p1, p2))
           && (!Tie_engraver::has_autosplit_end (left_ev)))
         {
@@ -281,7 +281,7 @@ Tie_engraver::process_acknowledged ()
     {
       Grob *head = now_heads_[i];
       Stream_event *left_ev
-        = Stream_event::unsmob (head->get_property ("cause"));
+        = unsmob<Stream_event> (head->get_property ("cause"));
 
       if (!left_ev)
         {
@@ -301,7 +301,7 @@ Tie_engraver::process_acknowledged ()
            !tie_event && !tie_stream_event && scm_is_pair (s);
            s = scm_cdr (s))
         {
-          Stream_event *ev = Stream_event::unsmob (scm_car (s));
+          Stream_event *ev = unsmob<Stream_event> (scm_car (s));
           if (!ev)
             continue;
 
index 1faa3d94454c4c59ed12ae7e8393c05cae0129dd..83e5d25464a2ca4c57e05a1da121fb0a130bc471 100644 (file)
@@ -102,7 +102,7 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item *> bounds,
         continue;
 
       if (!stem)
-        stem = Grob::unsmob (head->get_object ("stem"));
+        stem = unsmob<Grob> (head->get_object ("stem"));
 
       Real p = Staff_symbol_referencer::get_position (head);
       Interval y ((p - 1) * 0.5 * staff_space,
@@ -211,7 +211,7 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item *> bounds,
               boxes.push_back (Box (x, y));
             }
 
-          Grob *acc = Grob::unsmob (heads[i]->get_object ("accidental-grob"));
+          Grob *acc = unsmob<Grob> (heads[i]->get_object ("accidental-grob"));
           if (acc)
             acc->get_property ("after-line-breaking"); /* trigger tie-related suicide */
 
@@ -380,7 +380,7 @@ Tie_formatting_problem::from_semi_ties (vector<Grob *> const &semi_ties, Directi
   for (vsize i = 0; i < semi_ties.size (); i++)
     {
       Tie_specification spec;
-      Item *head = Item::unsmob (semi_ties[i]->get_object ("note-head"));
+      Item *head = unsmob<Item> (semi_ties[i]->get_object ("note-head"));
 
       if (!head)
         programming_error ("LV tie without head?!");
@@ -655,7 +655,7 @@ Tie_formatting_problem::score_aptitude (Tie_configuration *conf,
           if (!spec.note_head_drul_[d])
             continue;
 
-          Grob *stem = Grob::unsmob (spec.note_head_drul_[d]->get_object ("stem"));
+          Grob *stem = unsmob<Grob> (spec.note_head_drul_[d]->get_object ("stem"));
           if (stem
               && Stem::is_normal_stem (stem))
             stems[d] = stem;
index ba7954e995724678d1cf62e55053bc7aac9dead0..b1aa15ffeb645451287259cbbf0dc41ad29568e2 100644 (file)
@@ -128,8 +128,8 @@ Tie_performer::acknowledge_audio_element (Audio_element_info inf)
 
           SCM p1 = left_mus->get_property ("pitch");
           SCM p2 = right_mus->get_property ("pitch");
-          if (Pitch::is_smob (p1) && Pitch::is_smob (p2)
-              && Pitch::unsmob (p1)->tone_pitch () == Pitch::unsmob (p2)->tone_pitch ())
+          if (unsmob<Pitch> (p1) && unsmob<Pitch> (p2)
+              && unsmob<Pitch> (p1)->tone_pitch () == unsmob<Pitch> (p2)->tone_pitch ())
             {
               found = true;
               // (*it).moment_ already stores the end of the tied note!
index 9bffbb3ce18fc2db80adb198c8d74730a929de14..631ec18428be57d66b5fc0f6df9120f780bd555c 100644 (file)
@@ -60,7 +60,7 @@ Tie::head (Grob *me, Direction d)
       Direction hd = to_dir (me->get_property ("head-direction"));
 
       return (hd == d)
-             ? Grob::unsmob (me->get_object ("note-head"))
+             ? unsmob<Grob> (me->get_object ("note-head"))
              : 0;
     }
 
@@ -157,12 +157,12 @@ MAKE_SCHEME_CALLBACK (Tie, calc_direction, 1);
 SCM
 Tie::calc_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Grob *yparent = me->get_parent (Y_AXIS);
   if ((Tie_column::has_interface (yparent)
        || Semi_tie_column::has_interface (yparent))
-      && Grob_array::is_smob (yparent->get_object ("ties"))
-      //      && Grob_array::unsmob (yparent->get_object ("ties"))->size () > 1
+      && unsmob<Grob_array> (yparent->get_object ("ties"))
+      //      && unsmob<Grob_array> (yparent->get_object ("ties"))->size () > 1
      )
     {
       /* trigger positioning. */
@@ -218,12 +218,12 @@ MAKE_SCHEME_CALLBACK (Tie, calc_control_points, 1);
 SCM
 Tie::calc_control_points (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   Grob *yparent = me->get_parent (Y_AXIS);
   if ((Tie_column::has_interface (yparent)
        || Semi_tie_column::has_interface (yparent))
-      && Grob_array::is_smob (yparent->get_object ("ties")))
+      && unsmob<Grob_array> (yparent->get_object ("ties")))
     {
       extract_grob_set (yparent, "ties", ties);
       if (me->original () && ties.size () == 1
@@ -250,7 +250,7 @@ MAKE_SCHEME_CALLBACK (Tie, print, 1);
 SCM
 Tie::print (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
 
   SCM cp = me->get_property ("control-points");
 
@@ -281,7 +281,7 @@ Tie::print (SCM smob)
       string str;
       SCM properties = Font_interface::text_font_alist_chain (me);
 
-      Stencil tm = *Stencil::unsmob (Text_interface::interpret_markup
+      Stencil tm = *unsmob<Stencil> (Text_interface::interpret_markup
                                     (me->layout ()->self_scm (), properties,
                                      annotation));
       tm.translate (Offset (b.control_[3][X_AXIS] + 0.5,
index 46e42679aa104fecf90fc88a0dacbf9927d0a23a..521d3ca2d9fd2aac5905724a8e0ba4ef74180d2d 100644 (file)
@@ -106,7 +106,7 @@ Time_signature_engraver::stop_translation_timestep ()
 {
   if (time_signature_ && !scm_is_null (time_cause_))
     {
-      Moment *mp = Moment::unsmob (get_property ("measurePosition"));
+      Moment *mp = unsmob<Moment> (get_property ("measurePosition"));
       if (mp && (mp->main_part_ > Rational (0))
           && !to_boolean (get_property ("partialBusy")))
         time_signature_->warning ("mid-measure time signature without \\partial");
index 6c3a5c88c233343a2fad6fba9450cb58e72c6472..a041bfff843c444344aa2ac3522d80dcd7e394a0 100644 (file)
@@ -47,7 +47,7 @@ Timing_translator::stop_translation_timestep ()
 void
 Timing_translator::initialize ()
 {
-  Context *timing = Context::unsmob (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
+  Context *timing = unsmob<Context> (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
                                                 context ()->self_scm (),
                                                 ly_symbol2scm ("Timing")));
   if (timing != context ())
@@ -78,7 +78,7 @@ Timing_translator::initialize ()
 
   SCM measureLength = timing->get_property ("measureLength");
 
-  if (!Moment::is_smob (measureLength))
+  if (!unsmob<Moment> (measureLength))
     {
       measureLength =
         Moment (ly_scm2rational
@@ -115,7 +115,7 @@ Timing_translator::initialize ()
   context ()->set_property ("beamExceptions", beamExceptions);
 
   SCM baseMoment = timing->get_property ("baseMoment");
-  if (!Moment::is_smob (baseMoment))
+  if (!unsmob<Moment> (baseMoment))
     {
       baseMoment =
         Moment (ly_scm2rational
@@ -130,7 +130,7 @@ Timing_translator::initialize ()
     {
       beatStructure =
         scm_call_3 (ly_lily_module_constant ("beat-structure"),
-                    ly_rational2scm (Moment::unsmob (baseMoment)->main_part_),
+                    ly_rational2scm (unsmob<Moment> (baseMoment)->main_part_),
                     timeSignatureFraction,
                     timeSignatureSettings);
     }
@@ -147,8 +147,8 @@ Rational
 Timing_translator::measure_length () const
 {
   SCM l = get_property ("measureLength");
-  if (Moment::is_smob (l))
-    return Moment::unsmob (l)->main_part_;
+  if (unsmob<Moment> (l))
+    return unsmob<Moment> (l)->main_part_;
   else
     return Rational (1);
 }
@@ -181,8 +181,8 @@ Timing_translator::start_translation_timestep ()
   Moment measposp;
 
   SCM s = get_property ("measurePosition");
-  if (Moment::is_smob (s))
-    measposp = *Moment::unsmob (s);
+  if (unsmob<Moment> (s))
+    measposp = *unsmob<Moment> (s);
   else
     {
       measposp = now;
index 168f1ad6de676f38d96f84fe8782b8c0e39c4924..15edd7df4ab67a39ed9b7ddaff1d8bf6d0f9139a 100644 (file)
 #include "international.hh"
 #include "scm-hash.hh"
 #include "warn.hh"
+#include "protected-scm.hh"
 
 /*
   should delete these after exit.
 */
 
 Scheme_hash_table *global_translator_dict = 0;
+Protected_scm global_translator_dict_scm;
 
 LY_DEFINE (get_all_translators, "ly:get-all-translators", 0, 0, 0, (),
            "Return a list of all translator objects that may be"
@@ -45,12 +47,13 @@ void
 add_translator (Translator *t)
 {
   if (!global_translator_dict)
-    global_translator_dict = new Scheme_hash_table;
+    {
+      global_translator_dict = new Scheme_hash_table;
+      global_translator_dict_scm = global_translator_dict->unprotect ();
+    }
 
   SCM k = ly_symbol2scm (t->class_name ());
-  global_translator_dict->set (k, t->self_scm ());
-
-  t->unprotect ();
+  global_translator_dict->set (k, t->unprotect ());
 }
 
 Translator *
@@ -66,6 +69,6 @@ get_translator (SCM sym)
       return 0;
     }
 
-  return Translator::unsmob (v);
+  return unsmob<Translator> (v);
 }
 
index 79647bc7837f02aa63303d4986afdb091e3d71db..10bf06407598f452fffffd5b034caa42f7a2f7dc 100644 (file)
@@ -40,14 +40,14 @@ Engraver_dispatch_list::create (SCM trans_list,
                                 SCM iface_list, Direction start_end)
 {
   SCM retval = Engraver_dispatch_list ().smobbed_copy ();
-  Engraver_dispatch_list *list = Engraver_dispatch_list::unsmob (retval);
+  Engraver_dispatch_list *list = unsmob<Engraver_dispatch_list> (retval);
 
   Engraver_dispatch_entry entry;
   bool found = false;
   for (SCM s = trans_list; scm_is_pair (s); s = scm_cdr (s))
     {
       Engraver *eng
-        = Engraver::unsmob (scm_car (s));
+        = unsmob<Engraver> (scm_car (s));
 
       if (!eng)
         continue;
index 24f1efaae94ed35758ef85ab36c96d6591ce04d8..73a9c602e031ebd3b17bf332b8001ac18d58c163 100644 (file)
@@ -39,7 +39,7 @@ void
 translator_each (SCM list, Translator_method method)
 {
   for (SCM p = list; scm_is_pair (p); p = scm_cdr (p))
-    (Translator::unsmob (scm_car (p))->*method) ();
+    (unsmob<Translator> (scm_car (p))->*method) ();
 }
 
 void
@@ -62,7 +62,7 @@ Translator_group::connect_to_context (Context *c)
                                     ly_symbol2scm ("AnnounceNewContext"));
   for (SCM tr_list = simple_trans_list_; scm_is_pair (tr_list); tr_list = scm_cdr (tr_list))
     {
-      Translator *tr = Translator::unsmob (scm_car (tr_list));
+      Translator *tr = unsmob<Translator> (scm_car (tr_list));
       tr->connect_to_context (c);
     }
 }
@@ -72,7 +72,7 @@ Translator_group::disconnect_from_context ()
 {
   for (SCM tr_list = simple_trans_list_; scm_is_pair (tr_list); tr_list = scm_cdr (tr_list))
     {
-      Translator *tr = Translator::unsmob (scm_car (tr_list));
+      Translator *tr = unsmob<Translator> (scm_car (tr_list));
       tr->disconnect_from_context (context_);
     }
   context_->event_source ()->remove_listener (GET_LISTENER (Translator_group, create_child_translator),
@@ -90,7 +90,7 @@ Translator_group::finalize ()
   Both filter_performers and filter_engravers used to use a direct dynamic_cast
   on the unsmobbed translator to be filtered, i.e.,
 
-  if (Performer::unsmob (scm_car (*tail)))
+  if (unsmob<Performer> (scm_car (*tail)))
 
   but this caused mysterious optimisation issues in several GUB builds.  See
   issue #818 for the background to this change.
@@ -101,7 +101,7 @@ filter_performers (SCM ell)
   SCM *tail = &ell;
   for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
     {
-      if (Performer::is_smob (scm_car (*tail)))
+      if (unsmob<Performer> (scm_car (*tail)))
         *tail = scm_cdr (*tail);
       else
         tail = SCM_CDRLOC (*tail);
@@ -115,7 +115,7 @@ filter_engravers (SCM ell)
   SCM *tail = &ell;
   for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
     {
-      if (Engraver::is_smob (scm_car (*tail)))
+      if (unsmob<Engraver> (scm_car (*tail)))
         *tail = scm_cdr (*tail);
       else
         tail = SCM_CDRLOC (*tail);
@@ -148,11 +148,11 @@ Translator_group::protect_event (SCM ev)
 void
 Translator_group::create_child_translator (SCM sev)
 {
-  Stream_event *ev = Stream_event::unsmob (sev);
+  Stream_event *ev = unsmob<Stream_event> (sev);
   // get from AnnounceNewContext
   SCM cs = ev->get_property ("context");
-  Context *new_context = Context::unsmob (cs);
-  Context_def *def = Context_def::unsmob (new_context->get_definition ());
+  Context *new_context = unsmob<Context> (cs);
+  Context_def *def = unsmob<Context_def> (new_context->get_definition ());
   SCM ops = new_context->get_definition_mods ();
 
   SCM trans_names = def->get_translator_names (ops);
@@ -248,7 +248,7 @@ precomputed_recurse_over_translators (Context *c, Translator_precompute_index id
 
   for (SCM s = c->children_contexts (); scm_is_pair (s);
        s = scm_cdr (s))
-    precomputed_recurse_over_translators (Context::unsmob (scm_car (s)), idx, dir);
+    precomputed_recurse_over_translators (unsmob<Context> (scm_car (s)), idx, dir);
 
   if (tg && dir == UP)
     {
@@ -272,7 +272,7 @@ recurse_over_translators (Context *c, Translator_method ptr,
 
   for (SCM s = c->children_contexts (); scm_is_pair (s);
        s = scm_cdr (s))
-    recurse_over_translators (Context::unsmob (scm_car (s)), ptr, tg_ptr, dir);
+    recurse_over_translators (unsmob<Context> (scm_car (s)), ptr, tg_ptr, dir);
 
   if (tg && dir == UP)
     {
@@ -301,7 +301,7 @@ Translator_group::precompute_method_bindings ()
 {
   for (SCM s = simple_trans_list_; scm_is_pair (s); s = scm_cdr (s))
     {
-      Translator *tr = Translator::unsmob (scm_car (s));
+      Translator *tr = unsmob<Translator> (scm_car (s));
       Translator::Callback ptrs[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
       tr->fetch_precomputable_methods (ptrs);
 
index 1be52621b34c92d3efbddd1dc6509523522d1401..3aaf92fc3d70dad84ac2aa44694b6e668bbad8d7 100644 (file)
@@ -28,7 +28,7 @@ LY_DEFINE (ly_translator_name, "ly:translator-name",
            "  The name is a symbol.")
 {
   LY_ASSERT_SMOB (Translator, trans, 1);
-  Translator *tr = Translator::unsmob (trans);
+  Translator *tr = unsmob<Translator> (trans);
   char const *nm = tr->class_name ();
   return ly_symbol2scm (nm);
 }
@@ -38,7 +38,7 @@ LY_DEFINE (ly_translator_description, "ly:translator-description",
            "Return an alist of properties of translator @var{me}.")
 {
   LY_ASSERT_SMOB (Translator, me, 1);
-  Translator *tr = Translator::unsmob (me);
+  Translator *tr = unsmob<Translator> (me);
   return tr->translator_description ();
 }
 
@@ -47,7 +47,7 @@ LY_DEFINE (ly_translator_context, "ly:translator-context",
            "Return the context of the translator object @var{trans}.")
 {
   LY_ASSERT_SMOB (Translator, trans, 1);
-  Translator *tr = Translator::unsmob (trans);
+  Translator *tr = unsmob<Translator> (trans);
 
   Context *c = tr->context ();
   return c ? c->self_scm () : SCM_BOOL_F;
index 87fc0a15a471104e482395b358b9049640c448a1..b20e2aa4edbb7821964412213dd0f8507e999222 100644 (file)
@@ -263,7 +263,7 @@ generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_ar
 Moment
 get_event_length (Stream_event *e)
 {
-  Moment *m = Moment::unsmob (e->get_property ("length"));
+  Moment *m = unsmob<Moment> (e->get_property ("length"));
   if (m)
     return *m;
   else
index d71743fbce04c44514111e84ad62a75647f8dab0..eb36aff7e6d465c6040f0ad9f2fea6f1fd8a1004 100644 (file)
@@ -121,7 +121,7 @@ Trill_spanner_engraver::typeset_all ()
     {
       if (!finished_->get_bound (RIGHT))
         {
-          Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+          Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
           finished_->set_bound (RIGHT, e);
         }
       finished_ = 0;
@@ -133,7 +133,7 @@ Trill_spanner_engraver::stop_translation_timestep ()
 {
   if (span_ && !span_->get_bound (LEFT))
     {
-      Grob *e = Grob::unsmob (get_property ("currentMusicalColumn"));
+      Grob *e = unsmob<Grob> (get_property ("currentMusicalColumn"));
       span_->set_bound (LEFT, e);
     }
 
@@ -147,7 +147,7 @@ Trill_spanner_engraver::finalize ()
   typeset_all ();
   if (span_)
     {
-      Grob *e = Grob::unsmob (get_property ("currentCommandColumn"));
+      Grob *e = unsmob<Grob> (get_property ("currentCommandColumn"));
       span_->set_bound (RIGHT, e);
     }
 }
index 28803d5bf6c3d1c9e0c0b26164da90e456d3dbaf..a1886620be8d59a135d154a372b4a556e95e9742 100644 (file)
@@ -133,7 +133,7 @@ MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_connect_to_neighbors, 1);
 SCM
 Tuplet_bracket::calc_connect_to_neighbors (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   Direction dir = get_grob_direction (me);
   Drul_array<Item *> bounds (get_x_bound_item (me, LEFT, dir),
@@ -184,7 +184,7 @@ MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_x_positions, 1)
 SCM
 Tuplet_bracket::calc_x_positions (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   extract_grob_set (me, "note-columns", columns);
 
   Grob *commonx = get_common_x (me);
@@ -255,7 +255,7 @@ MAKE_SCHEME_CALLBACK (Tuplet_bracket, print, 1);
 SCM
 Tuplet_bracket::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Stencil mol;
 
   extract_grob_set (me, "note-columns", columns);
@@ -303,7 +303,7 @@ Tuplet_bracket::print (SCM smob)
 
   Output_def *pap = me->layout ();
 
-  Grob *number_grob = Grob::unsmob (me->get_object ("tuplet-number"));
+  Grob *number_grob = unsmob<Grob> (me->get_object ("tuplet-number"));
 
   /*
     Don't print the bracket when it would be smaller than the number.
@@ -364,7 +364,7 @@ Tuplet_bracket::print (SCM smob)
                         = Text_interface::interpret_markup (pap->self_scm (),
                                                             properties, text);
 
-                      Stencil *edge_text = Stencil::unsmob (t);
+                      Stencil *edge_text = unsmob<Stencil> (t);
                       edge_text->translate_axis (x_span[d] - x_span[LEFT],
                                                  X_AXIS);
                       edge_stencils[d] = *edge_text;
@@ -632,7 +632,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy)
         }
 
       // Check for number-on-bracket collisions
-      Grob *number = Grob::unsmob (tuplets[i]->get_object ("tuplet-number"));
+      Grob *number = unsmob<Grob> (tuplets[i]->get_object ("tuplet-number"));
       if (number)
         points.push_back (Offset (number->extent (commonx, X_AXIS).center () - x0,
                                   number->extent (commony, Y_AXIS)[dir]));
@@ -651,7 +651,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy)
 
           // assume that if a script is avoiding slurs, it should not get placed
           // under a tuplet bracket
-          if (Grob::is_smob (scripts[i]->get_object ("slur")))
+          if (unsmob<Grob> (scripts[i]->get_object ("slur")))
             continue;
 
           Interval script_x (scripts[i]->extent (commonx, X_AXIS));
@@ -701,7 +701,7 @@ MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_direction, 1);
 SCM
 Tuplet_bracket::calc_direction (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Direction dir = Tuplet_bracket::get_default_dir (me);
   return scm_from_int (dir);
 }
@@ -710,7 +710,7 @@ MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_positions, 1);
 SCM
 Tuplet_bracket::calc_positions (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   Real dy = 0.0;
   Real offset = 0.0;
@@ -787,7 +787,7 @@ MAKE_SCHEME_CALLBACK (Tuplet_bracket, calc_cross_staff, 1);
 SCM
 Tuplet_bracket::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   extract_grob_set (me, "note-columns", cols);
   extract_grob_set (me, "tuplets", tuplets);
 
@@ -806,7 +806,7 @@ Tuplet_bracket::calc_cross_staff (SCM smob)
 
   for (vsize i = 0; i < cols.size (); i++)
     {
-      Grob *stem = Grob::unsmob (cols[i]->get_object ("stem"));
+      Grob *stem = unsmob<Grob> (cols[i]->get_object ("stem"));
       if (stem && to_boolean (stem->get_property ("cross-staff")))
         return SCM_BOOL_T;
     }
index b9c35fb482cafe73c3c54de9e7b19eb539f1698f..369389200fe95e4e8dd97dea1b1c44dc2f273430 100644 (file)
@@ -138,7 +138,7 @@ Tuplet_engraver::process_music ()
           if (stopped_tuplets_[i].full_length_)
             {
               Item *col
-                = Item::unsmob (stopped_tuplets_[i].full_length_note_
+                = unsmob<Item> (stopped_tuplets_[i].full_length_note_
                                ? get_property ("currentMusicalColumn")
                                : get_property ("currentCommandColumn"));
 
@@ -263,7 +263,7 @@ Tuplet_engraver::finalize ()
   if (to_boolean (get_property ("tupletFullLength")))
     for (vsize i = 0; i < last_tuplets_.size (); i++)
       {
-        Item *col = Item::unsmob (get_property ("currentCommandColumn"));
+        Item *col = unsmob<Item> (get_property ("currentCommandColumn"));
         last_tuplets_[i]->set_bound (RIGHT, col);
       }
 }
index 80a75a9beb7ad2d8c64f14c66d12158b7e3e0089..79ee9241b4b9974251b60ba4dd8497669b1f9ac6 100644 (file)
@@ -68,7 +68,7 @@ Tuplet_iterator::create_event (Direction d)
 
   Music *mus = get_music ();
 
-  Music *ev = Music::unsmob (ev_scm);
+  Music *ev = unsmob<Music> (ev_scm);
   ev->set_spot (*mus->origin ());
   if (d == START)
     {
@@ -128,10 +128,10 @@ Tuplet_iterator::process (Moment m)
 void
 Tuplet_iterator::construct_children ()
 {
-  if (Duration *d = Duration::unsmob (get_music ()->get_property ("duration")))
+  if (Duration *d = unsmob<Duration> (get_music ()->get_property ("duration")))
     spanner_duration_ = d->get_length ();
   else if (Moment *mp
-           = Moment::unsmob (get_outlet ()->get_property ("tupletSpannerDuration")))
+           = unsmob<Moment> (get_outlet ()->get_property ("tupletSpannerDuration")))
     spanner_duration_ = mp->main_part_;
   else
     spanner_duration_.set_infinite (1);
index 381aa994f38cbb567bf36ad630de61f0a2441963..c8781ca14d0d2b7d9dcae542b4fa2c597a3b30b1 100644 (file)
@@ -109,7 +109,7 @@ Drul_array<Grob *>
 Tuplet_number::adjacent_note_columns (Grob *me_grob, Grob *ref_stem)
 {
   Spanner *me = dynamic_cast<Spanner *> (me_grob);
-  Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+  Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
 
   extract_grob_set (tuplet, "note-columns", columns);
   Grob *ref_col = ref_stem->get_parent (X_AXIS); // X-parent of Stem = NoteColumn
@@ -156,7 +156,7 @@ bool
 Tuplet_number::knee_position_against_beam (Grob *me_grob, Grob *ref_stem)
 {
   Spanner *me = dynamic_cast<Spanner *> (me_grob);
-  Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+  Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
 
   bool bracket_visible = to_boolean (me->get_property ("bracket-visibility"))
                          || !tuplet->extent (tuplet, Y_AXIS).is_empty ();
@@ -213,8 +213,8 @@ MAKE_SCHEME_CALLBACK (Tuplet_number, print, 1);
 SCM
 Tuplet_number::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
-  Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+  Spanner *me = unsmob<Spanner> (smob);
+  Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
 
   if (!tuplet || !tuplet->is_live ())
     {
@@ -223,7 +223,7 @@ Tuplet_number::print (SCM smob)
     }
 
   SCM stc_scm = Text_interface::print (smob);
-  Stencil *stc = Stencil::unsmob (stc_scm);
+  Stencil *stc = unsmob<Stencil> (stc_scm);
 
   stc->align_to (X_AXIS, CENTER);
   stc->align_to (Y_AXIS, CENTER);
@@ -257,13 +257,13 @@ MAKE_SCHEME_CALLBACK (Tuplet_number, calc_x_offset, 1);
 SCM
 Tuplet_number::calc_x_offset (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
 
   Item *left_bound = me->get_bound (LEFT);
   Item *right_bound = me->get_bound (RIGHT);
   Drul_array<Item *> bounds (left_bound, right_bound);
 
-  Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+  Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
 
   Grob *commonx = Tuplet_bracket::get_common_x (tuplet);
   commonx = commonx->common_refpoint (me, X_AXIS);
@@ -347,8 +347,8 @@ MAKE_SCHEME_CALLBACK (Tuplet_number, calc_y_offset, 1);
 SCM
 Tuplet_number::calc_y_offset (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
-  Spanner *tuplet = Spanner::unsmob (me->get_object ("bracket"));
+  Spanner *me = unsmob<Spanner> (smob);
+  Spanner *tuplet = unsmob<Spanner> (me->get_object ("bracket"));
   Drul_array<Real> positions = robust_scm2drul (tuplet->get_property ("positions"),
                                                 Drul_array<Real> (0.0, 0.0));
   SCM to_bracket = scm_from_double ((positions[LEFT] + positions[RIGHT]) / 2.0);
@@ -450,7 +450,7 @@ Tuplet_number::calc_y_offset (SCM smob)
   Interval colliding_acc_ext_y;
 
   for (vsize i = 0; i < heads.size (); i++)
-    if (Grob *acc = Grob::unsmob (heads[i]->get_object ("accidental-grob")))
+    if (Grob *acc = unsmob<Grob> (heads[i]->get_object ("accidental-grob")))
       {
         commony = commony->common_refpoint (acc, Y_AXIS);
         Interval acc_ext_y = acc->extent (commony, Y_AXIS);
@@ -484,8 +484,8 @@ MAKE_SCHEME_CALLBACK (Tuplet_number, calc_cross_staff, 1)
 SCM
 Tuplet_number::calc_cross_staff (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
-  return Grob::unsmob (me->get_object ("bracket"))->get_property ("cross-staff");
+  Grob *me = unsmob<Grob> (smob);
+  return unsmob<Grob> (me->get_object ("bracket"))->get_property ("cross-staff");
 }
 
 ADD_INTERFACE (Tuplet_number,
index d6e3d550d1b47a9ca9a410024252c28c7b0e3dd2..40d831615755dc73560903b8390d81fe0bfb2b3c 100644 (file)
@@ -67,7 +67,7 @@ LY_DEFINE (ly_get_undead, "ly:get-undead",
            "Get back object from @var{undead}.")
 {
   LY_ASSERT_SMOB (Undead, undead, 1);
-  return Undead::unsmob (undead)->object ();
+  return unsmob<Undead> (undead)->object ();
 }
 
 // '
index ede75022c6d0c148857e19f01f22f1c2687138c5..d5962bd028d29f9014e0ca612fa28bb5a44f67ab 100644 (file)
 */
 #include "unpure-pure-container.hh"
 
-#include "grob.hh"
-
 // Reroutes a call to the contained function after dropping last two
 // arguments.  Used for applying an "unpure" function in a "pure"
 // context.
 class Unpure_pure_call : public Smob1<Unpure_pure_call>
 {
 public:
-  LY_DECLARE_SMOB_PROC (2, 0, 1, (SCM self, SCM arg1, SCM arg2, SCM rest))
+  LY_DECLARE_SMOB_PROC (&Unpure_pure_call::call, 2, 0, 1)
+  SCM call (SCM arg1, SCM arg2, SCM rest)
   {
-    return scm_apply_0 (Unpure_pure_call::unsmob (self)->scm1 (),
+    return scm_apply_0 (scm1 (),
                         scm_call_2 (ly_lily_module_constant ("drop-right"),
                                     scm_cons2 (arg1, arg2, rest),
                                     scm_from_int (2)));
@@ -62,7 +61,7 @@ LY_DEFINE (ly_unpure_pure_container_unpure_part, "ly:unpure-pure-container-unpur
            "Return the unpure part of @var{pc}.")
 {
   LY_ASSERT_SMOB (Unpure_pure_container, pc, 1);
-  return Unpure_pure_container::unsmob (pc)->unpure_part ();
+  return unsmob<Unpure_pure_container> (pc)->unpure_part ();
 }
 
 LY_DEFINE (ly_unpure_pure_container_pure_part, "ly:unpure-pure-container-pure-part",
@@ -70,7 +69,7 @@ LY_DEFINE (ly_unpure_pure_container_pure_part, "ly:unpure-pure-container-pure-pa
            "Return the pure part of @var{pc}.")
 {
   LY_ASSERT_SMOB (Unpure_pure_container, pc, 1);
-  return Unpure_pure_container::unsmob (pc)->pure_part ();
+  return unsmob<Unpure_pure_container> (pc)->pure_part ();
 }
 
 int
index a39e0cef59b2fac100b07f0680524008c117cddc..2d94c03892238855068ac6a8e735c7b4acf7bb2f 100644 (file)
@@ -455,11 +455,11 @@ Vaticana_ligature_engraver::check_for_ambiguous_dot_pitch (Grob_info primitive)
   // bitmask based O (1) test); where n=<number of primitives in the
   // ligature> (which is typically small (n<10), though).
   Stream_event *new_cause = primitive.event_cause ();
-  int new_pitch = Pitch::unsmob (new_cause->get_property ("pitch"))->steps ();
+  int new_pitch = unsmob<Pitch> (new_cause->get_property ("pitch"))->steps ();
   for (vsize i = 0; i < augmented_primitives_.size (); i++)
     {
       Stream_event *cause = augmented_primitives_[i].event_cause ();
-      int pitch = Pitch::unsmob (cause->get_property ("pitch"))->steps ();
+      int pitch = unsmob<Pitch> (cause->get_property ("pitch"))->steps ();
       if (pitch == new_pitch)
         {
           primitive.grob ()->
index 2066716b802738b705fed27b35207fa78e5400dd..ddbe0d86bd2ffa12f3054c5b005cb21c73754d6c 100644 (file)
@@ -290,7 +290,7 @@ MAKE_SCHEME_CALLBACK (Vaticana_ligature, brew_ligature_primitive, 1);
 SCM
 Vaticana_ligature::brew_ligature_primitive (SCM smob)
 {
-  Grob *me = Grob::unsmob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM primitive = vaticana_brew_primitive (me).smobbed_copy ();
   return primitive;
 }
index 472b1a080a0c9ce20b09f9d144ac99eab3225f1f..d28d0d74a3b121e2c27828d92732920b36f12333 100644 (file)
@@ -100,7 +100,7 @@ Vertical_align_engraver::process_music ()
       top_level_ = to_boolean (get_property ("topLevelAlignment"));
 
       valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL);
-      valign_->set_bound (LEFT, Grob::unsmob (get_property ("currentCommandColumn")));
+      valign_->set_bound (LEFT, unsmob<Grob> (get_property ("currentCommandColumn")));
       Align_interface::set_ordered (valign_);
     }
 }
@@ -110,7 +110,7 @@ Vertical_align_engraver::finalize ()
 {
   if (valign_)
     {
-      valign_->set_bound (RIGHT, Grob::unsmob (get_property ("currentCommandColumn")));
+      valign_->set_bound (RIGHT, unsmob<Grob> (get_property ("currentCommandColumn")));
       valign_ = 0;
     }
 }
@@ -145,14 +145,14 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
       SCM before = scm_hash_ref (id_to_group_hashtab_, before_id, SCM_BOOL_F);
       SCM after = scm_hash_ref (id_to_group_hashtab_, after_id, SCM_BOOL_F);
 
-      Grob *before_grob = Grob::unsmob (before);
-      Grob *after_grob = Grob::unsmob (after);
+      Grob *before_grob = unsmob<Grob> (before);
+      Grob *after_grob = unsmob<Grob> (after);
 
       Align_interface::add_element (valign_, i.grob ());
 
       if (before_grob || after_grob)
         {
-          Grob_array *ga = Grob_array::unsmob (valign_->get_object ("elements"));
+          Grob_array *ga = unsmob<Grob_array> (valign_->get_object ("elements"));
           vector<Grob *> &arr = ga->array_reference ();
 
           Grob *added = arr.back ();
@@ -182,7 +182,7 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
   else if (qualifies (i))
     {
       Pointer_group_interface::add_grob (valign_, ly_symbol2scm ("elements"), i.grob ());
-      if (!Grob::is_smob (i.grob ()->get_object ("staff-grouper")))
+      if (!unsmob<Grob> (i.grob ()->get_object ("staff-grouper")))
         i.grob ()->set_object ("staff-grouper", valign_->self_scm ());
     }
 }
index d4a4e0b41e24f5cebc1bf3f02dca93567d715a2d..08a578de75e0bd04d7e2a878f181e621a9a62c86 100644 (file)
@@ -46,7 +46,7 @@ MAKE_SCHEME_CALLBACK (Volta_bracket_interface, print, 1);
 SCM
 Volta_bracket_interface::print (SCM smob)
 {
-  Spanner *me = Spanner::unsmob (smob);
+  Spanner *me = unsmob<Spanner> (smob);
   Spanner *orig_span = dynamic_cast<Spanner *> (me->original ());
   bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0]
                                             == (Spanner *)me);
@@ -106,7 +106,7 @@ Volta_bracket_interface::print (SCM smob)
       SCM properties = me->get_property_alist_chain (SCM_EOL);
       SCM snum = Text_interface::interpret_markup (layout->self_scm (),
                                                    properties, text);
-      Stencil num = *Stencil::unsmob (snum);
+      Stencil num = *unsmob<Stencil> (snum);
       num.align_to (Y_AXIS, UP);
       num.translate_axis (-0.5, Y_AXIS);
       total.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length ()
index 60c8987b3eecd09dafb2551b474627273efc8778..bd198cbb67faad5c395bd1567133d6413019c938 100644 (file)
@@ -99,8 +99,8 @@ Volta_engraver::process_music ()
       SCM l (get_property ("voltaSpannerDuration"));
       Moment now = now_mom ();
 
-      bool early_stop = Moment::is_smob (l)
-                        && *Moment::unsmob (l) <= now - started_mom_;
+      bool early_stop = unsmob<Moment> (l)
+                        && *unsmob<Moment> (l) <= now - started_mom_;
 
       end = end || early_stop;
     }
@@ -161,7 +161,7 @@ Volta_engraver::acknowledge_bar_line (Grob_info i)
 void
 Volta_engraver::stop_translation_timestep ()
 {
-  Grob *cc = Grob::unsmob (get_property ("currentCommandColumn"));
+  Grob *cc = unsmob<Grob> (get_property ("currentCommandColumn"));
   Item *ci = dynamic_cast<Item *> (cc);
 
   if (end_volta_bracket_ && !end_volta_bracket_->get_bound (RIGHT))
@@ -173,7 +173,7 @@ Volta_engraver::stop_translation_timestep ()
   if (end_volta_bracket_ && !volta_bracket_)
     {
       for (SCM s = get_property ("stavesFound"); scm_is_pair (s); s = scm_cdr (s))
-        Side_position_interface::add_support (volta_spanner_, Grob::unsmob (scm_car (s)));
+        Side_position_interface::add_support (volta_spanner_, unsmob<Grob> (scm_car (s)));
       volta_spanner_ = 0;
     }
 
index ecfa8f38a7303c5804a4a02e8e7b33d89b6286b9..5b7ab7234f3c2671c8b3721c64e87e21a5cc039d 100644 (file)
 %  * Add Mordents (reported by Patrick Karl)
 %
 
-\version "2.17.11"
+\version "2.19.22"
 
 #(use-modules (srfi srfi-1))
 #(use-modules (srfi srfi-11))
 
 % At last ... here's the music function that applies all the above to a
 % score.
-articulate = #(define-music-function (parser location music)
+articulate = #(define-music-function (music)
                (ly:music?)
                "Adjust times of note to add tenuto, staccato and
                 normal articulations.
@@ -878,7 +878,7 @@ articulate = #(define-music-function (parser location music)
                 (lambda ()
                  (music-map
                   ac:articulate-chord
-                  (ac:unfoldMusic (event-chord-wrap! music parser))))
+                  (ac:unfoldMusic (event-chord-wrap! music (*parser*)))))
                 (lambda ()
                  (or (= ac:stealForward 0)
                   (begin
@@ -891,11 +891,11 @@ articulate = #(define-music-function (parser location music)
 % Special handling for a gruppetto after a trill.
 afterGrace =
 #(define-music-function
-  (parser location main grace)
+  (main grace)
   (ly:music? ly:music?)
 
-  (set! main (event-chord-wrap! main parser))
-  (set! grace (event-chord-wrap! grace parser))
+  (set! main (event-chord-wrap! main (*parser*)))
+  (set! grace (event-chord-wrap! grace (*parser*)))
   (let*
    ((main-length (ly:music-length main))
     (grace-orig-length (ly:music-length grace))
@@ -918,10 +918,10 @@ afterGrace =
 % Somewhere around the end of the 19th, start of 20th century the rules
 % changed, but my main interest is early music.
 appoggiatura =
-#(define-music-function (parser location grace main)
+#(define-music-function (grace main)
   (ly:music? ly:music?)
-  (set! grace (event-chord-wrap! grace parser))
-  (set! main (event-chord-wrap! main parser))
+  (set! grace (event-chord-wrap! grace (*parser*)))
+  (set! main (event-chord-wrap! main (*parser*)))
   (let* ((maindur (ly:music-length main))
          (grace-orig-len (ly:music-length grace))
          (main-orig-len (ly:music-length main))
index c1c7f41e03a4eb5a32bb102a0116a972db0783f3..1c239246a0d1cbd3f9170d0a710dbf00a7022aee 100644 (file)
@@ -9,7 +9,7 @@
   $Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
 %}
 
-\version "2.19.16"
+\version "2.19.22"
 
 % Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
 % Flat notes used mainly in some modern music.
@@ -20,12 +20,15 @@ pitchnamesBagpipe = #`(
   (b . ,(ly:make-pitch 0 6 NATURAL))
   (c . ,(ly:make-pitch 1 0 SHARP))
   (c-flat . ,(ly:make-pitch 1 0 FLAT))
+  (cflat . ,(ly:make-pitch 1 0 FLAT))
   (d . ,(ly:make-pitch 1 1 NATURAL))
   (e . ,(ly:make-pitch 1 2 NATURAL))
   (f . ,(ly:make-pitch 1 3 SHARP))
   (f-flat . ,(ly:make-pitch 1 3 FLAT))
+  (fflat . ,(ly:make-pitch 1 3 FLAT))
   (g . ,(ly:make-pitch 1 4 NATURAL))
   (g-flat . ,(ly:make-pitch 1 4 FLAT))
+  (gflat . ,(ly:make-pitch 1 4 FLAT))
   (A . ,(ly:make-pitch 1 5 NATURAL))
   (B . ,(ly:make-pitch 1 6 NATURAL))
   (C . ,(ly:make-pitch 2 0 SHARP))
@@ -89,10 +92,10 @@ marchTime = {
 }
 
 % Add appropriate tweaks needed for piping grace notes to look great.
-stemspace = #(define-music-function (parser location extent) (pair?) #{
+stemspace = #(define-music-function (extent) (pair?) #{
   \once \override Staff.Stem.X-extent = #extent
 #})
-pgrace = #(define-music-function (parser location notes) (ly:music?) #{
+pgrace = #(define-music-function (notes) (ly:music?) #{
   \override Score.GraceSpacing.spacing-increment = #0
   \override Score.Stem.beamlet-max-length-proportion = #'(0.5 . 0.5)
   \small \grace $notes \normalsize
index 70d7b6c26d32260695de3d93720cefec3643a78f..72c561a7e6605a2a28dc8d5e415fa2fe231d7604 100644 (file)
@@ -1,5 +1,5 @@
 %%% -*- Mode: Scheme -*-
-\version "2.16.0"
+\version "2.19.22"
 %{
   Chord repetition behavior is not customizable in the parser.  That
   is due to it usually being done by the toplevel music handler
@@ -15,7 +15,7 @@
 %}
 
 chordRepeats =
-#(define-music-function (parser location event-types music)
+#(define-music-function (event-types music)
    ((list? '()) ly:music?)
    "Walk through @var{music} putting the notes of the previous chord
 into repeat chords, as well as an optional list of @var{event-types}
@@ -23,7 +23,7 @@ such as @code{#'(string-number-event)}."
    (expand-repeat-chords! (cons 'rhythmic-event event-types) music))
 
 tabChordRepeats =
-#(define-music-function (parser location event-types music)
+#(define-music-function (event-types music)
    ((list? '()) ly:music?)
    "Walk through @var{music} putting the notes, fingerings and string
 numbers of the previous chord into repeat chords, as well as an
@@ -34,8 +34,8 @@ optional list of @var{event-types} such as @code{#'(articulation-event)}."
    #})
 
 tabChordRepetition =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
    (_i "Include the string and fingering information in a chord repetition.
 This function is deprecated; try using @code{\\tabChordRepeats} instead.")
-   (ly:parser-define! parser '$chord-repeat-events
+   (ly:parser-define! (*parser*) '$chord-repeat-events
                       '(string-number-event fingering-event)))
index 8363525e9aecff1512a2d5b46d9788f0a617e2b3..ad3541ce98fc64d9eaed84059feaa2a97ef1bd22 100644 (file)
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.19.22"
 
 #(use-modules (scm song))
 #(use-modules (srfi srfi-39))
 
 % \festival #"filename" { \tempo N = X } { music }
 festival =
-#(define-music-function (parser location filename tempo music)
+#(define-music-function (filename tempo music)
    (string? ly:music? ly:music?)
    (output-file music tempo filename)
    music)
 
 % \festivalsyl #"filename" { \tempo N = X } { music }
 festivalsyl =
-#(define-music-function (parser location filename tempo music)
+#(define-music-function (filename tempo music)
    (string? ly:music? ly:music?)
    (parameterize ((*syllabify* #t))
      (output-file music tempo filename))
index ca2b27033158e97353ffeddb91167a9829b2a0da..e4d34f6e4c9bb37f1b02e7ccb444279f2623ba23 100644 (file)
@@ -3,7 +3,7 @@
   $Id$
 %}
 
-\version "2.17.30"
+\version "2.19.22"
 
 %
 % Declare memorable shortcuts for special unicode characters
@@ -37,12 +37,12 @@ iij = \lyricmode { iij }
 
 % Add unicode 2123 (versicle) as prefix to lyrics.
 versus =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (add-prefix-to-lyrics "℣" music))
 
 % Add unicode 211F (response) as prefix to lyrics.
 responsum =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (add-prefix-to-lyrics "℟" music))
 
 %
@@ -151,7 +151,7 @@ circulus = #(make-articulation "circulus")
 % it is applied by one.
 %
 augmentum =
-#(define-music-function (parser location expr) (ly:music?)
+#(define-music-function (expr) (ly:music?)
    (shift-duration-log expr 0 1))
 
 %
index d014a401ab506a11213cd1d127108f78e5ef9693..5075d716f556d24a08284ef7a96dabec0dcb3897 100644 (file)
    ;; 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)
+   (ly:parser-parse-string (ly:parser-clone (*parser*))
     "\\include \"declarations-init.ly\"")))
 
-#(note-names-language parser default-language)
+#(note-names-language (*parser*) default-language)
 
-#(define location #f)
 #(define toplevel-scores (list))
 #(define toplevel-bookparts (list))
 #(define $defaultheader #f)
@@ -38,7 +37,7 @@
 #(use-modules (ice-9 pretty-print))
 
 $(if (ly:get-option 'include-settings)
-  (ly:parser-include-string parser
+  (ly:parser-include-string (*parser*)
     (format #f "\\include \"~a\"" (ly:get-option 'include-settings))))
 
 \maininput
@@ -69,14 +68,14 @@ $(if (ly:get-option 'include-settings)
                             (ly:book-add-score! book score))
                           (reverse! toplevel-scores)))
             (set! toplevel-scores (list))
-            (book-handler parser book)))
+            (book-handler (*parser*) book)))
          ((or (pair? toplevel-scores) output-empty-score-list)
           (let ((book (apply ly:make-book $defaultpaper
                              $defaultheader toplevel-scores)))
             (set! toplevel-scores (list))
-            (book-handler parser book)))))
+            (book-handler (*parser*) book)))))
 
-#(if (eq? expect-error (ly:parser-has-error? parser))
-  (ly:parser-clear-error parser)
+#(if (eq? expect-error (ly:parser-has-error? (*parser*)))
+  (ly:parser-clear-error (*parser*))
   (if expect-error
-   (ly:parser-error parser (_ "expected error, but none found"))))
+   (ly:parser-error (*parser*) (_ "expected error, but none found"))))
index 91a19cd8841646cd0e084493823edfde5b9c0bbe..0f6a0a7febb010b5efb6a778d9194495d63fb9c2 100644 (file)
@@ -1,4 +1,4 @@
-%\version "2.19.19"
+%\version "2.19.22"
 
 %%% The function used by the built-in templates to
 %   build a lyrics context and associate it with a voice.
@@ -7,7 +7,7 @@
 
 make-one-stanza =
 #(define-music-function
-  (parser location pos staffPrefix voicePrefix altVoicePrefix lyrics)
+  (pos staffPrefix voicePrefix altVoicePrefix lyrics)
   ((above-or-below? #f)
    voice-prefix?
    voice-prefix?
index beb8bd10e497a20937066c8372f691a264928487..0dfb92a1c03bf3a867517ea4548b13e7fe9b614b 100644 (file)
@@ -18,7 +18,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.17.11"
+\version "2.19.22"
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% TODO: using define-music-function in a .scm causes crash.
 
 absolute =
-#(define-music-function (parser location music)
+#(define-music-function (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.")
+and @code{\\fixed} commands.")
    (make-music 'RelativeOctaveMusic 'element music))
 
 acciaccatura =
@@ -47,23 +47,23 @@ acciaccatura =
 instrument-definitions = #'()
 addInstrumentDefinition =
 #(define-void-function
-   (parser location name lst) (string? list?)
+   (name lst) (string? list?)
    (_i "Create instrument @var{name} with properties @var{list}.")
    (set! instrument-definitions (acons name lst instrument-definitions)))
 
 addQuote =
-#(define-void-function (parser location name music) (string? ly:music?)
+#(define-void-function (name music) (string? ly:music?)
    (_i "Define @var{music} as a quotable music expression named
 @var{name}")
-   (add-quotable parser name music))
+   (add-quotable (*parser*) name music))
 
 %% keep these two together
 afterGraceFraction = #(cons 6 8)
 afterGrace =
-#(define-music-function (parser location main grace) (ly:music? ly:music?)
+#(define-music-function (main grace) (ly:music? ly:music?)
    (_i "Create @var{grace} note(s) after a @var{main} music expression.")
    (let ((main-length (ly:music-length main))
-         (fraction  (ly:parser-lookup parser 'afterGraceFraction)))
+         (fraction  (ly:parser-lookup (*parser*) 'afterGraceFraction)))
      (make-simultaneous-music
       (list
        main
@@ -84,7 +84,7 @@ afterGrace =
 %% music identifiers not allowed at top-level,
 %% so this is a music-function instead.
 allowPageTurn =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
    (_i "Allow a page turn. May be used at toplevel (ie between scores or
 markups), or inside a score.")
    (make-music 'EventChord
@@ -94,7 +94,7 @@ markups), or inside a score.")
                                            'break-permission 'allow))))
 
 alterBroken =
-#(define-music-function (parser location property arg item)
+#(define-music-function (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
@@ -108,7 +108,7 @@ form of a spanner event, @var{property} may also have the form
           (begin
             (ly:music-warning item (_ "not a spanner"))
             item))
-      (let* ((p (check-grob-path item parser location
+      (let* ((p (check-grob-path item (*parser*) (*location*)
                                  #:default 'Bottom
                                  #:min 2
                                  #:max 2))
@@ -124,11 +124,11 @@ form of a spanner event, @var{property} may also have the form
               #(value-for-spanner-piece arg)
             #}
             (begin
-              (ly:input-warning location (_ "not a spanner name, `~a'") name)
+              (ly:input-warning (*location*) (_ "not a spanner name, `~a'") name)
               (make-music 'Music))))))
 
 appendToTag =
-#(define-music-function (parser location tag more music)
+#(define-music-function (tag more music)
    (symbol? ly:music? ly:music?)
    (_i "Append @var{more} to the @code{elements} of all music
 expressions in @var{music} that are tagged with @var{tag}.")
@@ -141,18 +141,18 @@ expressions in @var{music} that are tagged with @var{tag}.")
               music))
 
 applyContext =
-#(define-music-function (parser location proc) (procedure?)
+#(define-music-function (proc) (procedure?)
    (_i "Modify context properties with Scheme procedure @var{proc}.")
    (make-music 'ApplyContext
                'procedure proc))
 
 applyMusic =
-#(define-music-function (parser location func music) (procedure? ly:music?)
+#(define-music-function (func music) (procedure? ly:music?)
    (_i"Apply procedure @var{func} to @var{music}.")
    (func music))
 
 applyOutput =
-#(define-music-function (parser location ctx proc) (symbol? procedure?)
+#(define-music-function (ctx proc) (symbol? procedure?)
    (_i "Apply function @code{proc} to every layout object in context @code{ctx}")
    (make-music 'ApplyOutputEvent
                'procedure proc
@@ -164,25 +164,25 @@ appoggiatura =
 
 % for regression testing purposes.
 assertBeamQuant =
-#(define-music-function (parser location l r) (pair? pair?)
+#(define-music-function (l r) (pair? pair?)
    (_i "Testing function: check whether the beam quants @var{l} and @var{r} are correct")
    (make-grob-property-override 'Beam 'positions (check-quant-callbacks l r)))
 
 % for regression testing purposes.
 assertBeamSlope =
-#(define-music-function (parser location comp) (procedure?)
+#(define-music-function (comp) (procedure?)
    (_i "Testing function: check whether the slope of the beam is the same as @code{comp}")
    (make-grob-property-override 'Beam 'positions (check-slope-callbacks comp)))
 
 autochange =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (_i "Make voices that switch between staves automatically")
-   (make-autochange-music parser music))
+   (make-autochange-music (*parser*) music))
 
 
 
 balloonGrobText =
-#(define-music-function (parser location grob-name offset text)
+#(define-music-function (grob-name offset text)
    (symbol? number-pair? markup?)
    (_i "Attach @var{text} to @var{grob-name} at offset @var{offset}
  (use like @code{\\once})")
@@ -195,7 +195,7 @@ balloonGrobText =
                  'text text))))
 
 balloonText =
-#(define-event-function (parser location offset text) (number-pair? markup?)
+#(define-event-function (offset text) (number-pair? markup?)
    (_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})")
    (make-music 'AnnotateOutputEvent
                'X-offset (car offset)
@@ -203,26 +203,26 @@ balloonText =
                'text text))
 
 bar =
-#(define-music-function (parser location type) (string?)
+#(define-music-function (type) (string?)
    (_i "Insert a bar line of type @var{type}")
    (context-spec-music
     (make-property-set 'whichBar type)
     'Timing))
 
 barNumberCheck =
-#(define-music-function (parser location n) (integer?)
+#(define-music-function (n) (integer?)
    (_i "Print a warning if the current bar number is not @var{n}.")
    (make-music 'ApplyContext
                'procedure
                (lambda (c)
                  (let ((cbn (ly:context-property c 'currentBarNumber)))
                    (if (and  (number? cbn) (not (= cbn n)))
-                       (ly:input-warning location
+                       (ly:input-warning (*location*)
                                          "Barcheck failed got ~a expect ~a"
                                          cbn n))))))
 
 beamExceptions =
-#(define-scheme-function (parser location music) (ly:music?)
+#(define-scheme-function (music) (ly:music?)
    (_i "Extract a value suitable for setting
 @code{Timing.beamExceptions} from the given pattern with explicit
 beams in @var{music}.  A bar check @code{|} has to be used between
@@ -230,39 +230,39 @@ bars of patterns in order to reset the timing.")
    (extract-beam-exceptions music))
 
 bendAfter =
-#(define-event-function (parser location delta) (real?)
+#(define-event-function (delta) (real?)
    (_i "Create a fall or doit of pitch interval @var{delta}.")
    (make-music 'BendAfterEvent
                'delta-step delta))
 
 bookOutputName =
-#(define-void-function (parser location newfilename) (string?)
+#(define-void-function (newfilename) (string?)
    (_i "Direct output for the current book block to @var{newfilename}.")
-   (set! (paper-variable parser #f 'output-filename) newfilename))
+   (set! (paper-variable (*parser*) #f 'output-filename) newfilename))
 
 bookOutputSuffix =
-#(define-void-function (parser location newsuffix) (string?)
+#(define-void-function (newsuffix) (string?)
    (_i "Set the output filename suffix for the current book block to
 @var{newsuffix}.")
-   (set! (paper-variable parser #f 'output-suffix) newsuffix))
+   (set! (paper-variable (*parser*) #f 'output-suffix) newsuffix))
 
 %% \breathe is defined as a music function rather than an event identifier to
 %% ensure it gets useful input location information: as an event identifier,
 %% it would have to be wrapped in an EventChord to prevent it from being
 %% treated as a post_event by the parser
 breathe =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
    (_i "Insert a breath mark.")
    (make-music 'BreathingEvent))
 
 clef =
-#(define-music-function (parser location type) (string?)
+#(define-music-function (type) (string?)
    (_i "Set the current clef to @var{type}.")
    (make-clef-set type))
 
 
 compoundMeter =
-#(define-music-function (parser location args) (pair?)
+#(define-music-function (args) (pair?)
   (_i "Create compound time signatures. The argument is a Scheme list of
 lists. Each list describes one fraction, with the last entry being the
 denominator, while the first entries describe the summands in the
@@ -288,7 +288,7 @@ as @code{\\compoundMeter #'((3 2 8))} or shorter
   #} ))
 
 compressMMRests =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
   (_i "Remove the empty bars created by multi-measure rests,
 leaving just the first bar containing the MM rest itself.")
    (music-map
@@ -299,7 +299,7 @@ leaving just the first bar containing the MM rest itself.")
     music))
 
 crossStaff =
-#(define-music-function (parser location notes) (ly:music?)
+#(define-music-function (notes) (ly:music?)
   (_i "Create cross-staff stems")
   #{
   \temporary \override Stem.cross-staff = #cross-staff-connect
@@ -310,18 +310,18 @@ crossStaff =
 #})
 
 cueClef =
-#(define-music-function (parser location type) (string?)
+#(define-music-function (type) (string?)
   (_i "Set the current cue clef to @var{type}.")
   (make-cue-clef-set type))
 
 cueClefUnset =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
   (_i "Unset the current cue clef.")
   (make-cue-clef-unset))
 
 cueDuring =
 #(define-music-function
-   (parser location what dir main-music) (string? ly:dir? ly:music?)
+   (what dir main-music) (string? ly:dir? ly:music?)
    (_i "Insert contents of quote @var{what} corresponding to @var{main-music},
 in a CueVoice oriented by @var{dir}.")
    (make-music 'QuoteMusic
@@ -333,7 +333,7 @@ in a CueVoice oriented by @var{dir}.")
 
 cueDuringWithClef =
 #(define-music-function
-   (parser location what dir clef main-music) (string? ly:dir? string? ly:music?)
+   (what dir clef main-music) (string? ly:dir? string? ly:music?)
    (_i "Insert contents of quote @var{what} corresponding to @var{main-music},
 in a CueVoice oriented by @var{dir}.")
    (make-music 'QuoteMusic
@@ -347,16 +347,16 @@ in a CueVoice oriented by @var{dir}.")
 
 
 displayLilyMusic =
-#(define-music-function (parser location port music) ((output-port?) ly:music?)
+#(define-music-function (port music) ((output-port?) ly:music?)
    (_i "Display the LilyPond input representation of @var{music}
 to @var{port}, defaulting to the console.")
    (let ((port (or port (current-output-port))))
      (newline port)
-     (display-lily-music music parser port))
+     (display-lily-music music (*parser*) port))
    music)
 
 displayMusic =
-#(define-music-function (parser location port music) ((output-port?) ly:music?)
+#(define-music-function (port music) ((output-port?) ly:music?)
    (_i "Display the internal representation of @var{music} to
 @var{port}, default to the console.")
    (let ((port (or port (current-output-port))))
@@ -365,7 +365,7 @@ displayMusic =
    music)
 
 displayScheme =
-#(define-scheme-function (parser location port expr) ((output-port?) scheme?)
+#(define-scheme-function (port expr) ((output-port?) scheme?)
    (_i "Display the internal representation of @var{expr} to
 @var{port}, default to the console.")
    (let ((port (or port (current-output-port))))
@@ -376,7 +376,7 @@ displayScheme =
 
 
 endSpanners =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (_i "Terminate the next spanner prematurely after exactly one note
 without the need of a specific end spanner.")
    (let* ((start-span-evs (filter (lambda (ev)
@@ -395,14 +395,14 @@ without the need of a specific end spanner.")
      total))
 
 eventChords =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (_i "Compatibility function wrapping @code{EventChord} around
 isolated rhythmic events occuring since version 2.15.28, after
 expanding repeat chords @samp{q}.")
-   (event-chord-wrap! music parser))
+   (event-chord-wrap! music (*parser*)))
 
 featherDurations=
-#(define-music-function (parser location factor argument) (ly:moment? ly:music?)
+#(define-music-function (factor argument) (ly:moment? ly:music?)
    (_i "Adjust durations of music in @var{argument} by rational @var{factor}.")
    (let ((orig-duration (ly:music-length argument))
          (multiplier (ly:make-moment 1 1)))
@@ -421,7 +421,7 @@ featherDurations=
      argument))
 
 finger =
-#(define-event-function (parser location finger) (number-or-markup?)
+#(define-event-function (finger) (number-or-markup?)
    (_i "Apply @var{finger} as a fingering indication.")
 
    (make-music
@@ -429,8 +429,22 @@ finger =
             (if (number? finger) 'digit 'text)
             finger))
 
+fixed =
+#(define-music-function (pitch music)
+   (ly:pitch? ly:music?)
+   (_i "Use the octave of @var{pitch} as the default octave for @var{music}.")
+   (let ((octave-marks (1+ (ly:pitch-octave pitch))))
+     (cond ((not (= 0 octave-marks))
+            (ly:music-transpose music (ly:make-pitch octave-marks 0 0))
+            ;;In order to leave unchanged the notes in any enclosed
+            ;; \absolute or \fixed or \relative, make a cancelling shift
+            (map (lambda (m)
+                   (ly:music-transpose m (ly:make-pitch (- octave-marks) 0 0)))
+                 (extract-named-music music 'RelativeOctaveMusic)))))
+   (make-music 'RelativeOctaveMusic 'element music))
+
 footnote =
-#(define-music-function (parser location mark offset footnote item)
+#(define-music-function (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
@@ -465,7 +479,7 @@ grace =
    (_i "Insert @var{music} as grace notes."))
 
 grobdescriptions =
-#(define-scheme-function (parser location descriptions) (list?)
+#(define-scheme-function (descriptions) (list?)
    (_i "Create a context modification from @var{descriptions}, a list
 in the format of @code{all-grob-descriptions}.")
    (ly:make-context-mod
@@ -473,7 +487,7 @@ in the format of @code{all-grob-descriptions}.")
            (list 'assign (car p) (ly:make-grob-properties (cdr p))))
          descriptions)))
 
-harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
+harmonicByFret = #(define-music-function (fret music) (number? ly:music?)
   (_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
 harmonics played on a fretted instrument by touching the strings at @var{fret}.")
   #{
@@ -490,16 +504,14 @@ harmonics played on a fretted instrument by touching the strings at @var{fret}."
     \revert NoteHead.stencil
   #})
 
-harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
+harmonicByRatio = #(define-music-function (ratio music) (number? ly:music?)
     (_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
 harmonics played on a fretted instrument by touching the strings at the point
 given through @var{ratio}.")
   #{
     \set harmonicDots = ##t
     \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)))
+    \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height)
     \temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
                                             (ly:note-head::print grob))
     #(make-harmonic
@@ -511,7 +523,7 @@ given through @var{ratio}.")
   #})
 
 hide =
-#(define-music-function (parser location item) (symbol-list-or-music?)
+#(define-music-function (item) (symbol-list-or-music?)
    (_i "Set @var{item}'s @samp{transparent} property to @code{#t},
 making it invisible while still retaining its dimensions.
 
@@ -522,7 +534,7 @@ the same music expression with an appropriate tweak applied to it.")
    #{ \tweak transparent ##t #item #})
 
 inStaffSegno =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
    (_i "Put the segno variant 'varsegno' at this position into the staff,
 compatible with the repeat command.")
    (make-music 'ApplyContext
@@ -536,14 +548,14 @@ compatible with the repeat command.")
 
 instrumentSwitch =
 #(define-music-function
-   (parser location name) (string?)
+   (name) (string?)
    (_i "Switch instrument to @var{name}, which must be predefined with
 @code{\\addInstrumentDefinition}.")
    (let* ((handle (assoc name instrument-definitions))
           (instrument-def (if handle (cdr handle) '())))
 
      (if (not handle)
-         (ly:input-warning location "No such instrument: ~a" name))
+         (ly:input-warning (*location*) "No such instrument: ~a" name))
      (context-spec-music
       (make-music 'SimultaneousMusic
                   'elements
@@ -557,7 +569,7 @@ instrumentSwitch =
 
 
 keepWithTag =
-#(define-music-function (parser location tags music)
+#(define-music-function (tags music)
    (symbol-list-or-symbol? ly:music?)
    (_i "Include only elements of @var{music} that are tagged with one
 of the tags in @var{tags}.  @var{tags} may be either a single symbol
@@ -572,14 +584,14 @@ retained.")
     music))
 
 key =
-#(define-music-function (parser location tonic pitch-alist)
+#(define-music-function (tonic pitch-alist)
    ((ly:pitch? '()) (list? '()))
    (_i "Set key to @var{tonic} and scale @var{pitch-alist}.
 If both are null, just generate @code{KeyChangeEvent}.")
    (cond ((null? tonic) (make-music 'KeyChangeEvent))
          ((null? pitch-alist)
-          (ly:parser-error parser (_ "second argument must be pitch list")
-                           location)
+          (ly:parser-error (*parser*) (_ "second argument must be pitch list")
+                           (*location*))
           (make-music 'SequentialMusic 'void #t))
          (else
           (ly:music-transpose
@@ -589,7 +601,7 @@ If both are null, just generate @code{KeyChangeEvent}.")
            tonic))))
 
 killCues =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (_i "Remove cue notes from @var{music}.")
    (music-map
     (lambda (mus)
@@ -602,7 +614,7 @@ killCues =
 
 
 label =
-#(define-music-function (parser location label) (symbol?)
+#(define-music-function (label) (symbol?)
    (_i "Create @var{label} as a bookmarking label.")
    (make-music 'EventChord
                'page-marker #t
@@ -612,28 +624,28 @@ label =
 
 
 language =
-#(define-void-function (parser location language) (string?)
+#(define-void-function (language) (string?)
    (_i "Set note names for language @var{language}.")
-   (note-names-language parser language))
+   (note-names-language (*parser*) language))
 
 languageSaveAndChange =
-#(define-void-function (parser location language) (string?)
+#(define-void-function (language) (string?)
   (_i "Store the previous pitchnames alist, and set a new one.")
   (set! previous-pitchnames pitchnames)
-  (note-names-language parser language))
+  (note-names-language (*parser*) language))
 
 languageRestore =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
    (_i "Restore a previously-saved pitchnames alist.")
    (if previous-pitchnames
        (begin
         (set! pitchnames previous-pitchnames)
-        (ly:parser-set-note-names parser pitchnames))
-      (ly:input-warning location (_ "No other language was defined previously. Ignoring."))))
+        (ly:parser-set-note-names (*parser*) pitchnames))
+      (ly:input-warning (*location*) (_ "No other language was defined previously. Ignoring."))))
 
 
 magnifyMusic =
-#(define-music-function (parser location mag music) (positive? ly:music?)
+#(define-music-function (mag music) (positive? ly:music?)
    (_i "Magnify the notation of @var{music} without changing the
 staff-size, using @var{mag} as a size factor.  Stems, beams,
 slurs, ties, and horizontal spacing are adjusted automatically.")
@@ -707,7 +719,7 @@ slurs, ties, and horizontal spacing are adjusted automatically.")
    #})
 
 magnifyStaff =
-#(define-music-function (parser location mag) (positive?)
+#(define-music-function (mag) (positive?)
    (_i "Change the size of the staff, adjusting notation size and
 horizontal spacing automatically, using @var{mag} as a size factor.")
 
@@ -765,12 +777,12 @@ horizontal spacing automatically, using @var{mag} as a size factor.")
    #})
 
 makeClusters =
-#(define-music-function (parser location arg) (ly:music?)
+#(define-music-function (arg) (ly:music?)
    (_i "Display chords in @var{arg} as clusters.")
    (music-map note-to-cluster arg))
 
 modalInversion =
-#(define-music-function (parser location around to scale music)
+#(define-music-function (around to scale music)
     (ly:pitch? ly:pitch? ly:music? ly:music?)
     (_i "Invert @var{music} about @var{around} using @var{scale} and
 transpose from @var{around} to @var{to}.")
@@ -779,7 +791,7 @@ transpose from @var{around} to @var{to}.")
       music))
 
 modalTranspose =
-#(define-music-function (parser location from to scale music)
+#(define-music-function (from to scale music)
     (ly:pitch? ly:pitch? ly:music? ly:music?)
     (_i "Transpose @var{music} from pitch @var{from} to pitch @var{to}
 using @var{scale}.")
@@ -789,20 +801,20 @@ using @var{scale}.")
 
 inversion =
 #(define-music-function
-   (parser location around to music) (ly:pitch? ly:pitch? ly:music?)
+   (around to music) (ly:pitch? ly:pitch? ly:music?)
    (_i "Invert @var{music} about @var{around} and
 transpose from @var{around} to @var{to}.")
    (music-invert around to music))
 
 mark =
 #(define-music-function
-   (parser location label) ((scheme? '()))
+   (label) ((scheme? '()))
   "Make the music for the \\mark command."
   (let* ((set (and (integer? label)
                    (context-spec-music (make-property-set 'rehearsalMark label)
                                       'Score)))
          (ev (make-music 'MarkEvent
-                         'origin location)))
+                         'origin (*location*))))
 
     (if set
         (make-sequential-music (list set ev))
@@ -811,14 +823,14 @@ mark =
           ev))))
 
 musicMap =
-#(define-music-function (parser location proc mus) (procedure? ly:music?)
+#(define-music-function (proc mus) (procedure? ly:music?)
    (_i "Apply @var{proc} to @var{mus} and all of the music it contains.")
    (music-map proc mus))
 
 %% noPageBreak and noPageTurn are music functions (not music indentifiers),
 %% because music identifiers are not allowed at top-level.
 noPageBreak =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
    (_i "Forbid a page break.  May be used at toplevel (i.e., between scores or
 markups), or inside a score.")
    (make-music 'EventChord
@@ -828,7 +840,7 @@ markups), or inside a score.")
                                            'break-permission '()))))
 
 noPageTurn =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
    (_i "Forbid a page turn.  May be used at toplevel (i.e., between scores or
 markups), or inside a score.")
    (make-music 'EventChord
@@ -840,13 +852,13 @@ markups), or inside a score.")
 
 
 octaveCheck =
-#(define-music-function (parser location pitch) (ly:pitch?)
+#(define-music-function (pitch) (ly:pitch?)
    (_i "Octave check.")
    (make-music 'RelativeOctaveCheck
                'pitch pitch))
 
 offset =
-#(define-music-function (parser location property offsets item)
+#(define-music-function (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
@@ -859,7 +871,7 @@ appropriate tweak applied.")
                          (if (symbol? property)
                              (list property)
                              property)
-                         parser location
+                         (*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.,
@@ -879,7 +891,7 @@ appropriate tweak applied.")
                                  (if (symbol? property)
                                      (list property)
                                      property))
-                         parser location
+                         (*parser*) (*location*)
                          #:default 'Bottom #:min 3 #:max 3)))
         (if prop-path
             #{
@@ -888,7 +900,7 @@ appropriate tweak applied.")
             (make-music 'Music)))))
 
 omit =
-#(define-music-function (parser location item) (symbol-list-or-music?)
+#(define-music-function (item) (symbol-list-or-music?)
    (_i "Set @var{item}'s @samp{stencil} property to @code{#f},
 effectively omitting it without taking up space.
 
@@ -899,7 +911,7 @@ the same music expression with an appropriate tweak applied to it.")
    #{ \tweak stencil ##f #item #})
 
 once =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly: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
@@ -920,14 +932,14 @@ tweak.")
    music)
 
 ottava =
-#(define-music-function (parser location octave) (integer?)
+#(define-music-function (octave) (integer?)
    (_i "Set the octavation.")
    (make-music 'OttavaMusic
                'ottava-number octave))
 
 overrideTimeSignatureSettings =
 #(define-music-function
-   (parser location time-signature base-moment beat-structure beam-exceptions)
+   (time-signature base-moment beat-structure beam-exceptions)
    (fraction? fraction? list? list?)
 
    (_i "Override @code{timeSignatureSettings}
@@ -940,14 +952,14 @@ of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
     (override-time-signature-setting time-signature setting)))
 
 overrideProperty =
-#(define-music-function (parser location grob-property-path value)
+#(define-music-function (grob-property-path value)
    (symbol-list? scheme?)
 
    (_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
+   (let ((p (check-grob-path grob-property-path (*parser*) (*location*)
                              #:default 'Bottom
                              #:min 3)))
      (if p
@@ -970,7 +982,7 @@ with subproperties given as well.")
 %% pageBreak and pageTurn are music functions (iso music indentifiers),
 %% because music identifiers are not allowed at top-level.
 pageBreak =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
    (_i "Force a page break.  May be used at toplevel (i.e., between scores or
 markups), or inside a score.")
    (make-music 'EventChord
@@ -983,7 +995,7 @@ markups), or inside a score.")
                                            'break-permission 'force))))
 
 pageTurn =
-#(define-music-function (location parser) ()
+#(define-music-function () ()
    (_i "Force a page turn between two scores or top-level markups.")
    (make-music 'EventChord
                'page-marker #t
@@ -998,7 +1010,7 @@ pageTurn =
                                            'break-permission 'force))))
 
 parallelMusic =
-#(define-void-function (parser location voice-ids music) (list? ly:music?)
+#(define-void-function (voice-ids music) (list? ly:music?)
    (_i "Define parallel music sequences, separated by '|' (bar check signs),
 and assign them to the identifiers provided in @var{voice-ids}.
 
@@ -1112,13 +1124,13 @@ change to the following voice."
          ;;
          ;; bind voice identifiers to the voices
          (for-each (lambda (voice-id voice)
-                     (ly:parser-define! parser 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?)
+#(define-music-function (arg) (ly:music?)
    (_i "Tag @var{arg} to be parenthesized.")
 
    (if (memq 'event-chord (ly:music-property arg 'types))
@@ -1140,12 +1152,19 @@ parenthesize =
           two-context-settings
           shared-context-settings)
 
-   (let ((pc-music (make-part-combine-music
-                     parser (list part1 part2) direction chord-range)))
+   (let* ((pc-music (make-part-combine-music
+                     parser (list part1 part2) direction chord-range))
+          (L1 (ly:music-length part1))
+          (L2 (ly:music-length part2))
+          ;; keep the contexts alive for the full duration
+          (skip (make-skip-music (make-duration-of-length
+                                  (if (ly:moment<? L1 L2) L2 L1)))))
      #{ \context Staff <<
-          \context Voice = "one" \with #one-context-settings {}
-          \context Voice = "two" \with #two-context-settings {}
-          \context Voice = "shared" \with #shared-context-settings {}
+          \context Voice = "one" \with #one-context-settings { #skip }
+          \context Voice = "two" \with #two-context-settings { #skip }
+          \context Voice = "shared" \with #shared-context-settings { #skip }
+          \context Voice = "solo" { #skip }
+          \context NullVoice = "null" { #skip }
           #pc-music
           #(make-part-combine-marks
             default-part-combine-mark-state-machine
@@ -1153,40 +1172,40 @@ parenthesize =
         >> #} ))
 
 partcombine =
-#(define-music-function (parser location chord-range part1 part2)
+#(define-music-function (chord-range part1 part2)
    ((number-pair? '(0 . 8)) ly:music? ly:music?)
    (_i "Take the music in @var{part1} and @var{part2} and return
 a music expression containing simultaneous voices, where @var{part1}
 and @var{part2} are combined into one voice where appropriate.
 Optional @var{chord-range} sets the distance in steps between notes
 that may be combined into a chord or unison.")
-   (make-directed-part-combine-music parser #f chord-range part1 part2
+   (make-directed-part-combine-music (*parser*) #f chord-range part1 part2
     #{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #}
     #{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #}
     #{ #} ))
 
 partcombineUp =
-#(define-music-function (parser location chord-range part1 part2)
+#(define-music-function (chord-range part1 part2)
    ((number-pair? '(0 . 8)) ly:music? ly:music?)
    (_i "Take the music in @var{part1} and @var{part2} and typeset so
 that they share a staff with stems directed upward.")
-   (make-directed-part-combine-music parser UP chord-range part1 part2
+   (make-directed-part-combine-music (*parser*) UP chord-range part1 part2
     #{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #}
     #{ \with { \voiceThree \override DynamicLineSpanner.direction = #UP } #}
     #{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #} ))
 
 partcombineDown =
-#(define-music-function (parser location chord-range part1 part2)
+#(define-music-function (chord-range part1 part2)
    ((number-pair? '(0 . 8)) ly:music? ly:music?)
    (_i "Take the music in @var{part1} and @var{part2} and typeset so
 that they share a staff with stems directed downward.")
-   (make-directed-part-combine-music parser DOWN chord-range part1 part2
+   (make-directed-part-combine-music (*parser*) DOWN chord-range part1 part2
     #{ \with { \voiceFour \override DynamicLineSpanner.direction = #DOWN } #}
     #{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #}
     #{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #} ))
 
 partcombineForce =
-#(define-music-function (location parser type once) (boolean-or-symbol? boolean?)
+#(define-music-function (type once) (boolean-or-symbol? boolean?)
    (_i "Override the part-combiner.")
    (make-music 'EventChord
                'elements (list (make-music 'PartCombineForceEvent
@@ -1206,21 +1225,21 @@ partcombineAutomatic = \partcombineForce ##f ##f
 partcombineAutomaticOnce = \partcombineForce ##f ##t
 
 partial =
-#(define-music-function (parser location dur) (ly:duration?)
+#(define-music-function (dur) (ly:duration?)
   (_i "Make a partial measure.")
 
   ;; We use `descend-to-context' here instead of `context-spec-music' to
   ;; ensure \partial still works if the Timing_translator is moved
     (descend-to-context
      (context-spec-music (make-music 'PartialSet
-                                     'origin location
+                                     'origin (*location*)
                                      'duration dur)
                          'Timing)
      'Score))
 
 pitchedTrill =
 #(define-music-function
-   (parser location main-note secondary-note)
+   (main-note secondary-note)
    (ly:music? ly:music?)
    (_i "Print a trill with @var{main-note} as the main note of the trill and
 print @var{secondary-note} as a stemless note head in parentheses.")
@@ -1237,7 +1256,7 @@ print @var{secondary-note} as a stemless note head in parentheses.")
                  (for-each (lambda (m)
                              (ly:music-set-property! m 'pitch trill-pitch)) trill-events)
                  (begin
-                   (ly:input-warning location (_ "Second argument of \\pitchedTrill should be single note: "))
+                   (ly:input-warning (*location*) (_ "Second argument of \\pitchedTrill should be single note: "))
                    (display sec-note-events)))
 
              (if (eq? forced #t)
@@ -1247,7 +1266,7 @@ print @var{secondary-note} as a stemless note head in parentheses.")
      main-note))
 
 pushToTag =
-#(define-music-function (parser location tag more music)
+#(define-music-function (tag more music)
    (symbol? ly:music? ly:music?)
    (_i "Add @var{more} to the front of @code{elements} of all music
 expressions in @var{music} that are tagged with @var{tag}.")
@@ -1259,7 +1278,7 @@ expressions in @var{music} that are tagged with @var{tag}.")
               music))
 
 quoteDuring =
-#(define-music-function (parser location what main-music) (string? ly:music?)
+#(define-music-function (what main-music) (string? ly:music?)
    (_i "Indicate a section of music to be quoted.  @var{what} indicates the name
 of the quoted voice, as specified in an @code{\\addQuote} command.
 @var{main-music} is used to indicate the length of music to be quoted;
@@ -1269,7 +1288,7 @@ usually contains spacers or multi-measure rests.")
                'quoted-music-name what))
 
 relative =
-#(define-music-function (parser location pitch music)
+#(define-music-function (pitch music)
    ((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.")
@@ -1291,7 +1310,7 @@ omitted, the first note in @var{music} is given in absolute pitch.")
                'element music))
 
 removeWithTag =
-#(define-music-function (parser location tags music)
+#(define-music-function (tags music)
    (symbol-list-or-symbol? ly:music?)
    (_i "Remove elements of @var{music} that are tagged with one of the
 tags in @var{tags}.  @var{tags} may be either a single symbol or a list
@@ -1301,7 +1320,7 @@ of symbols.")
     music))
 
 resetRelativeOctave =
-#(define-music-function (parser location pitch) (ly:pitch?)
+#(define-music-function (pitch) (ly:pitch?)
    (_i "Set the octave inside a \\relative section.")
 
    (make-music 'SequentialMusic
@@ -1309,14 +1328,14 @@ resetRelativeOctave =
                (lambda (music last-pitch) pitch)))
 
 retrograde =
-#(define-music-function (parser location music)
+#(define-music-function (music)
     (ly:music?)
     (_i "Return @var{music} in reverse order.")
     (retrograde-music music))
 
 revertTimeSignatureSettings =
 #(define-music-function
-   (parser location time-signature)
+   (time-signature)
    (pair?)
 
    (_i "Revert @code{timeSignatureSettings}
@@ -1324,7 +1343,7 @@ for time signatures of @var{time-signature}.")
    (revert-time-signature-setting time-signature))
 
 rightHandFinger =
-#(define-event-function (parser location finger) (number-or-markup?)
+#(define-event-function (finger) (number-or-markup?)
    (_i "Apply @var{finger} as a fingering indication.")
 
    (make-music
@@ -1333,14 +1352,14 @@ rightHandFinger =
             finger))
 
 scaleDurations =
-#(define-music-function (parser location fraction music)
+#(define-music-function (fraction music)
    (fraction? ly:music?)
    (_i "Multiply the duration of events in @var{music} by @var{fraction}.")
    (ly:music-compress music
                       (ly:make-moment (car fraction) (cdr fraction))))
 
 settingsFrom =
-#(define-scheme-function (parser location ctx music)
+#(define-scheme-function (ctx music)
    ((symbol?) ly:music?)
    (_i "Take the layout instruction events from @var{music}, optionally
 restricted to those applying to context type @var{ctx}, and return
@@ -1390,7 +1409,7 @@ a context modification duplicating their effect.")
      mods))
 
 shape =
-#(define-music-function (parser location offsets item)
+#(define-music-function (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
@@ -1433,7 +1452,7 @@ appropriate tweak applied.")
    #{ \once \tweak control-points #shape-curve #item #})
 
 shiftDurations =
-#(define-music-function (parser location dur dots arg)
+#(define-music-function (dur dots arg)
    (integer? integer? ly:music?)
    (_i "Change the duration of @var{arg} by adding @var{dur} to the
 @code{durlog} of @var{arg} and @var{dots} to the @code{dots} of @var{arg}.")
@@ -1441,7 +1460,7 @@ shiftDurations =
    (shift-duration-log arg dur dots))
 
 single =
-#(define-music-function (parser location overrides music)
+#(define-music-function (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}.")
@@ -1465,7 +1484,7 @@ This does not convert @code{\\revert}, @code{\\set} or @code{\\unset}.")
    music)
 
 skip =
-#(define-music-function (parser location dur) (ly:duration?)
+#(define-music-function (dur) (ly:duration?)
   (_i "Skip forward by @var{dur}.")
   (make-music 'SkipMusic
               'duration dur))
@@ -1477,7 +1496,7 @@ slashedGrace =
 the following music expression"))
 
 spacingTweaks =
-#(define-music-function (parser location parameters) (list?)
+#(define-music-function (parameters) (list?)
    (_i "Set the system stretch, by reading the 'system-stretch property of
 the `parameters' assoc list.")
    #{
@@ -1487,13 +1506,13 @@ the `parameters' assoc list.")
    #})
 
 styledNoteHeads =
-#(define-music-function (parser location style heads music)
+#(define-music-function (style heads 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 tags music) (symbol-list-or-symbol? ly:music?)
+#(define-music-function (tags music) (symbol-list-or-symbol? ly:music?)
    (_i "Tag the following @var{music} with @var{tags} and return the
 result, by adding the single symbol or symbol list @var{tags} to the
 @code{tags} property of @var{music}.")
@@ -1506,14 +1525,14 @@ result, by adding the single symbol or symbol list @var{tags} to the
    music)
 
 tagGroup =
-#(define-void-function (parser location tags) (symbol-list?)
+#(define-void-function (tags) (symbol-list?)
    (_i "Define a tag group comprising the symbols in the symbol list
 @var{tags}.  Tag groups must not overlap.")
    (let ((err (define-tag-group tags)))
-     (if err (ly:parser-error parser err location))))
+     (if err (ly:parser-error (*parser*) err (*location*)))))
 
 temporary =
-#(define-music-function (parser location music)
+#(define-music-function (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
@@ -1546,7 +1565,7 @@ property-changing music that isn't an @code{\\override}.")
              (else
               (if (not warned)
                   (begin
-                    (ly:input-warning location (_ "Cannot make ~a revertible")
+                    (ly:input-warning (*location*) (_ "Cannot make ~a revertible")
                                       (ly:music-property m 'name))
                     (set! warned #t)))
               #t))))
@@ -1554,7 +1573,7 @@ property-changing music that isn't an @code{\\override}.")
    music)
 
 time =
-#(define-music-function (parser location beat-structure fraction)
+#(define-music-function (beat-structure fraction)
    ((number-list? '()) fraction?)
    (_i "Set @var{fraction} as time signature, with optional
 number list @var{beat-structure} before it.")
@@ -1564,7 +1583,7 @@ number list @var{beat-structure} before it.")
               'beat-structure beat-structure))
 
 times =
-#(define-music-function (parser location fraction music)
+#(define-music-function (fraction music)
    (fraction? ly:music?)
    (_i "Scale @var{music} in time by @var{fraction}.")
   (make-music 'TimeScaledMusic
@@ -1574,7 +1593,7 @@ times =
 
 transpose =
 #(define-music-function
-   (parser location from to music)
+   (from to music)
    (ly:pitch? ly:pitch? ly:music?)
 
    (_i "Transpose @var{music} from pitch @var{from} to pitch @var{to}.")
@@ -1583,7 +1602,7 @@ transpose =
 
 transposedCueDuring =
 #(define-music-function
-   (parser location what dir pitch main-music)
+   (what dir pitch main-music)
    (string? ly:dir? ly:pitch? ly:music?)
 
    (_i "Insert notes from the part @var{what} into a voice called @code{cue},
@@ -1603,7 +1622,7 @@ as a first or second voice.")
                'quoted-transposition pitch))
 
 transposition =
-#(define-music-function (parser location pitch) (ly:pitch?)
+#(define-music-function (pitch) (ly:pitch?)
    (_i "Set instrument transposition")
 
    (context-spec-music
@@ -1611,7 +1630,7 @@ transposition =
     'Staff))
 
 tuplet =
-#(define-music-function (parser location ratio tuplet-span music)
+#(define-music-function (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
@@ -1634,7 +1653,7 @@ quarter note.")
                'duration tuplet-span))
 
 tupletSpan =
-#(define-music-function (parser location tuplet-span)
+#(define-music-function (tuplet-span)
    ((ly:duration?))
    (_i "Set @code{tupletSpannerDuration}, the length into which
 @code{\\tuplet} without an explicit @samp{tuplet-span} argument of its
@@ -1650,7 +1669,7 @@ command without explicit @samp{tuplet-span}, use
        #{ \unset tupletSpannerDuration #}))
 
 tweak =
-#(define-music-function (parser location prop value item)
+#(define-music-function (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}
@@ -1674,7 +1693,7 @@ 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
+       (let ((p (check-grob-path prop (*parser*) (*location*)
                                  #:start 1
                                  #:default #t
                                  #:min 2)))
@@ -1692,14 +1711,14 @@ property (inside of an alist) is tweaked.")
        ;; diagnostics.
        (let ((p (check-grob-path
                  (append item (if (symbol? prop) (list prop) prop))
-                 parser location
+                 (*parser*) (*location*)
                  #:default 'Bottom #:min 3)))
          (if p
              #{ \override #p = #value #}
              (make-music 'Music)))))
 
 undo =
-#(define-music-function (parser location music)
+#(define-music-function (music)
    (ly:music?)
    (_i "Convert @code{\\override} and @code{\\set} in @var{music} to
 @code{\\revert} and @code{\\unset}, respectively.  Any reverts and
@@ -1740,7 +1759,7 @@ unsets already in @var{music} cause a warning.  Non-property-related music is ig
                 (else
                  (if (not warned)
                      (begin
-                       (ly:input-warning location (_ "Cannot revert ~a")
+                       (ly:input-warning (*location*) (_ "Cannot revert ~a")
                                          (ly:music-property m 'name))
                        (set! warned #t)))
                  overrides)))
@@ -1752,20 +1771,20 @@ unsets already in @var{music} cause a warning.  Non-property-related music is ig
         (else (make-sequential-music lst))))))
 
 unfoldRepeats =
-#(define-music-function (parser location music) (ly:music?)
+#(define-music-function (music) (ly:music?)
    (_i "Force any @code{\\repeat volta}, @code{\\repeat tremolo} or
 @code{\\repeat percent} commands in @var{music} to be interpreted
 as @code{\\repeat unfold}.")
    (unfold-repeats music))
 
 void =
-#(define-void-function (parser location arg) (scheme?)
+#(define-void-function (arg) (scheme?)
    (_i "Accept a scheme argument, return a void expression.
 Use this if you want to have a scheme expression evaluated
 because of its side-effects, but its value ignored."))
 
 withMusicProperty =
-#(define-music-function (parser location sym val music)
+#(define-music-function (sym val music)
    (symbol? scheme? ly:music?)
    (_i "Set @var{sym} to @var{val} in @var{music}.")
 
index e7d9744e6eed9ff848406d4359e427b4d8ceb6cb..73ccb6685ad899d5b7ed00e50cf6b3f681f11815 100644 (file)
@@ -1,9 +1,9 @@
-%\version "2.19.19"
+%\version "2.19.22"
 
 \include "staff-tkit.ly"
 
 make-pianostaff =
-#(define-music-function (parser location) ()
+#(define-music-function () ()
 
 (if (not PianoRHMidiInstrument)
        (set! PianoRHMidiInstrument
index 6a96f047e68536b6ffd0d32a0a014f44eacfe1da..acf116dd691b4069c15ce1158031742bee57422a 100644 (file)
@@ -15,7 +15,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.19.22"
 
 % chord-shape-table is a hash-table of chord shapes
 % in the form of diagram-descriptions that can be
@@ -30,7 +30,7 @@
 % chord-shape-table
 
 addChordShape =
-#(define-void-function (parser location key-symbol tuning shape-definition)
+#(define-void-function (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})}.")
@@ -62,7 +62,7 @@ table @code{rest}."
 
 storePredefinedDiagram =
 #(define-void-function
-   (parser location fretboard-table chord tuning diagram-definition)
+   (fretboard-table chord tuning diagram-definition)
    (hash-table? ly:music? pair? string-or-pair?)
   (_i "Add predefined fret diagram defined by @var{diagram-definition}
   for the chord pitches @var{chord} and the stringTuning @var{tuning}.")
index a50cf82635b857aad7f4327fc65fb5b7516c583c..7a06995ffebee55775de6c26f6295110fb4b3aac 100644 (file)
@@ -1,6 +1,6 @@
 % property-init.ly
 
-\version "2.17.24"
+\version "2.19.22"
 
 %% for dashed slurs, phrasing slurs, and ties
 #(define (make-simple-dash-definition dash-fraction dash-period)
@@ -9,13 +9,14 @@
 %% common definition for all note head styles reverting
 %% (palm mute, harmonics, dead notes, ...)
 defaultNoteHeads =
-#(define-music-function (parser location) ()
-   (_i "Revert to the default note head style.")
-   (revert-head-style '(NoteHead TabNoteHead)))
+#(define-music-function () ()
+  (_i "Revert to the default note head style.")
+  (context-spec-music
+   (revert-head-style '(NoteHead TabNoteHead)) 'Bottom))
 
 accidentalStyle =
 #(define-music-function
-   (parser location style) (symbol-list?)
+   (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
@@ -25,8 +26,8 @@ piano styles, which use @samp{GrandStaff} as a context." )
     ((1) (set-accidental-style (car style)))
     ((2) (set-accidental-style (cadr style) (car style)))
     (else
-     (ly:parser-error parser (_ "not an accidental style")
-      location)
+     (ly:parser-error (*parser*) (_ "not an accidental style")
+      (*location*))
      (make-music 'Music))))
 
 %% arpeggios
@@ -91,7 +92,7 @@ balloonLengthOff = {
 
 defineBarLine =
 #(define-void-function
-   (parser location bar glyph-list) (string? list?)
+   (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,
@@ -223,12 +224,13 @@ glissando = #(make-music 'GlissandoEvent)
 %% harmonics
 
 harmonicsOn =
-#(define-music-function (parser location) ()
-   (_i "Set the default note head style to a diamond-shaped style.")
-   (override-head-style '(NoteHead TabNoteHead) 'harmonic))
+#(define-music-function () ()
+  (_i "Set the default note head style to a diamond-shaped style.")
+  (context-spec-music
+   (override-head-style '(NoteHead TabNoteHead) 'harmonic) 'Bottom))
 harmonicsOff = \defaultNoteHeads
 harmonicNote =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
    (_i "Print @var{note} with a diamond-shaped note head.")
    (style-note-heads 'NoteHead 'harmonic note))
 
@@ -277,7 +279,7 @@ improvisationOff = {
 %% incipit
 
 incipit =
-#(define-music-function (parser location incipit-music) (ly:music?)
+#(define-music-function (incipit-music) (ly:music?)
   (_i "Output @var{incipit-music} before the main staff as an indication of
     its appearance in the original music.")
   #{
@@ -393,12 +395,13 @@ defaultTimeSignature = \revert Staff.TimeSignature.style
 %% palm mutes
 
 palmMuteOn =
-#(define-music-function (parser location) ()
-   (_i "Set the default note head style to a triangle-shaped style.")
-   (override-head-style 'NoteHead 'do))
+#(define-music-function () ()
+  (_i "Set the default note head style to a triangle-shaped style.")
+  (context-spec-music
+   (override-head-style 'NoteHead 'do) 'Bottom))
 palmMuteOff = \defaultNoteHeads
 palmMute =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
    (_i "Print @var{note} with a triangle-shaped note head.")
    (style-note-heads 'NoteHead 'do note))
 
@@ -412,7 +415,7 @@ phrasingSlurNeutral = \revert PhrasingSlur.direction
 
 % dash-patterns (make-simple-dash-definition defined at top of file)
 phrasingSlurDashPattern =
-#(define-music-function (parser location dash-fraction dash-period)
+#(define-music-function (dash-fraction dash-period)
    (number? number?)
    (_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.")
@@ -437,20 +440,20 @@ phrasingSlurSolid =
 %% point and click
 
 pointAndClickOn  =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
    (_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))
 
 pointAndClickOff =
-#(define-void-function (parser location) ()
+#(define-void-function () ()
    (_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))
 
 pointAndClickTypes =
-#(define-void-function (parser location types) (symbol-list-or-symbol?)
+#(define-void-function (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))
 
@@ -499,7 +502,7 @@ slurNeutral    = \revert Slur.direction
 
 % dash-patterns (make-simple-dash-definition defined at top of file)
 slurDashPattern =
-#(define-music-function (parser location dash-fraction dash-period)
+#(define-music-function (dash-fraction dash-period)
   (number? number?)
   (_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.")
@@ -654,7 +657,7 @@ tieNeutral = \revert Tie.direction
 
 % dash-patterns (make-simple-dash-definition defined at top of file)
 tieDashPattern =
-#(define-music-function (parser location dash-fraction dash-period)
+#(define-music-function (dash-fraction dash-period)
   (number? number?)
   (_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.")
@@ -725,18 +728,19 @@ voiceNeutralStyle = {
 %% volta brackets
 
 allowVoltaHook =
-#(define-void-function (parser location bar) (string?)
+#(define-void-function (bar) (string?)
                        (allow-volta-hook bar))
 
 %% x notes
 
 xNotesOn =
-#(define-music-function (parser location) ()
-   (_i "Set the default note head style to a cross-shaped style.")
-   (override-head-style '(TabNoteHead NoteHead) 'cross))
+#(define-music-function () ()
+  (_i "Set the default note head style to a cross-shaped style.")
+  (context-spec-music
+   (override-head-style '(TabNoteHead NoteHead) 'cross) 'Bottom))
 xNotesOff = \defaultNoteHeads
 xNote =
-#(define-music-function (parser location note) (ly:music?)
+#(define-music-function (note) (ly:music?)
    (_i "Print @var{note} with a cross-shaped note head.")
    (style-note-heads '(TabNoteHead NoteHead) 'cross note))
 
index df57811e4856a62d4fa0a0371ce9ccb7e6fd98ad..97f4384151ed4623837099f294e74766c96b8af2 100644 (file)
@@ -11,7 +11,8 @@
   context structure for a score arrangement consisting
   of the following staves:
 
-  Descant Staff
+  Solo Staff (outside Choir grouping)
+  Descant Staff (within Choir grouping)
   Women Staff (single voice on one staff)
   Soprano and Alto (optionally on two Staves or one Staff each)
   Multiple verses (up to 9)
@@ -33,6 +34,7 @@
   \header { ... }
   Key = { ... }
   Time = { ... }
+  SoloMusic = \relative { ... }
   DescantMusic = \relative { ... }
   DescantLyrics = \lyricmode { ... }
   WomenMusic = \relative { ... }
@@ -92,6 +94,7 @@
      "Piano"
      "PianoLH"
      "PianoRH"
+     "Solo"
      "Soprano"
      "Tenor"
      "Women"
   satb-lyrics-postfixes
   satb-lyrics-variable-names)
 
+%% override the usual default value
+#(if (not SoloShortInstrumentName)
+       (set! SoloShortInstrumentName ""))
 
 SATB =
-{
+<<
+  \make-one-voice-vocal-staff "Solo" "treble"
   \new ChoirStaff
   \with {
     \override VerticalAxisGroup.remove-empty = ##t
@@ -156,7 +163,7 @@ SATB =
       #} )
     \make-one-voice-vocal-staff "Men" "bass"
   >>
-}
+>>
 
 Piano = \make-pianostaff
 
index a0f827a5c4cfb5e1ee972a74ae6928ddcffd41fd..2902208bff8bad2f63e412a579e9a162cd0dba2c 100644 (file)
@@ -1,4 +1,4 @@
-%\version "2.19.19"
+%\version "2.19.22"
 
 \include "voice-tkit.ly"
 
@@ -18,7 +18,7 @@
 
 
 make-one-voice-staff =
-#(define-music-function (parser location show-instrName name clef dynamic-direction)
+#(define-music-function (show-instrName name clef dynamic-direction)
    ((boolean? #t) voice-prefix? string? (up-or-down? ""))
 
    "Make a staff with one voice (no lyrics)
@@ -73,7 +73,7 @@ make-one-voice-staff =
 
 
 make-two-voice-staff =
-#(define-music-function (parser location name clef v1name v2name)
+#(define-music-function (name clef v1name v2name)
    (voice-prefix? string? voice-prefix? voice-prefix?)
 
    "Make a vocal staff with two voices
index 3564df58d6ca17f6fe1628ada61900c2c7308d72..55034169660baf9d7c10f4b3d5f4aed1a058ae4d 100644 (file)
@@ -15,7 +15,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.16.0"
+\version "2.19.22"
 
 %%  A stringTuning is a list of pitches ordered by string number
 %%  from 1 to N.
@@ -27,7 +27,7 @@
 %% lowest string number
 
 stringTuning =
-#(define-scheme-function (parser location chord)
+#(define-scheme-function (chord)
    (ly:music?)
    (_i "Convert @var{chord} to a string tuning.
 @var{chord} must be in absolute pitches and should have the highest
@@ -38,11 +38,11 @@ string number (generally the lowest pitch) first.")
 defaultStringTunings = #'()
 
 makeDefaultStringTuning =
-#(define-void-function (parser location symbol pitches) (symbol? list?)
+#(define-void-function (symbol pitches) (symbol? list?)
    (_i "This defines a string tuning @var{symbol} via a list of @var{pitches}.
 The @var{symbol} also gets registered in @code{defaultStringTunings}
 for documentation purposes.")
-   (ly:parser-define! parser symbol pitches)
+   (ly:parser-define! (*parser*) symbol pitches)
    (set! defaultStringTunings (acons symbol pitches defaultStringTunings)))
 
 %% guitar tunings
index ef1f18fe8b2497dbaa9a0bb4fcc99e6e63920880..c3fd5ab57d0ab3c236728d03350c65035e316bd3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.19.22"
 
 %% defined later, in a closure
 #(define-public (add-toc-item! markup-symbol text)
@@ -58,7 +58,7 @@ Usage: @code{\\markuplist \\table-of-contents}" )
                          (toc-items)))))
 
 tocItem =
-#(define-music-function (parser location text) (markup?)
+#(define-music-function (text) (markup?)
    "Add a line to the table of content, using the @code{tocItemMarkup} paper
 variable markup"
    (add-toc-item! 'tocItemMarkup text))
index cad4ea4b53819ac983d2f92d46b190137a0e3940..b82f56919cac4211a71b01205767e3972edd4704 100644 (file)
@@ -1,10 +1,10 @@
-%\version "2.19.19"
+%\version "2.19.22"
 
 \include "lyrics-tkit.ly"
 \include "staff-tkit.ly"
 
 make-one-voice-vocal-staff =
-#(define-music-function (parser location name clef)
+#(define-music-function (name clef)
    (voice-prefix? string?)
 
    "Make a staff with one voice and lyrics beneath
@@ -25,7 +25,7 @@ make-one-voice-vocal-staff =
      (make-music 'SequentialMusic 'void #t)))
 
 make-two-voice-vocal-staff =
-#(define-music-function (parser location name clef v1name v2name)
+#(define-music-function (name clef v1name v2name)
    (voice-prefix? string? voice-prefix? voice-prefix?)
 
    "Make a vocal staff with two voices and lyrics above and below
@@ -58,8 +58,7 @@ make-two-voice-vocal-staff =
 
 make-two-vocal-staves-with-stanzas =
 #(define-music-function
-  (parser location
-    upperName upperClef lowerName lowerClef
+  (upperName upperClef lowerName lowerClef
     v1name v2name v3name v4name verses)
   (voice-prefix? string? voice-prefix? string?
     voice-prefix? voice-prefix? voice-prefix? voice-prefix? list?)
index daeaae4f6901c962f128e8d5203cbd38f9e45d7d..c240cd5f36c22bc241fa5cb5453e396f451840a9 100644 (file)
@@ -1,9 +1,9 @@
-%\version "2.19.19"
+%\version "2.19.22"
 
 \include "base-tkit.ly"
 
 make-voice =
-#(define-music-function (parser location name) (voice-prefix?)
+#(define-music-function (name) (voice-prefix?)
    (define music (make-id name "Music"))
    (if music
        #{
index 2959156896164bf2330e986397821517ca10eed1..27031bbd7c86196510f64304fae4f12baf5d9cf9 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.19.20\n"
+"Project-Id-Version: lilypond 2.19.21\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2015-05-10 13:24+0100\n"
+"POT-Creation-Date: 2015-05-24 13:11+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1682,7 +1682,7 @@ msgstr ""
 msgid "natural alteration glyph not found"
 msgstr ""
 
-#: all-font-metrics.cc:149
+#: all-font-metrics.cc:159
 #, c-format
 msgid "cannot find font: `%s'"
 msgstr ""
@@ -1825,12 +1825,12 @@ msgstr ""
 msgid "cannot find or create `%s' called `%s'"
 msgstr ""
 
-#: context.cc:419
+#: context.cc:415
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr ""
 
-#: context.cc:433
+#: context.cc:429
 #, c-format
 msgid "cannot find or create new Bottom = \"%s\""
 msgstr ""
@@ -1840,20 +1840,20 @@ msgstr ""
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:83
+#: dispatcher.cc:82
 msgid "Event class should be a list"
 msgstr ""
 
-#: dispatcher.cc:166
+#: dispatcher.cc:165
 #, c-format
 msgid "Junking event: %s"
 msgstr ""
 
-#: dispatcher.cc:271
+#: dispatcher.cc:279
 msgid "Attempting to remove nonexisting listener."
 msgstr ""
 
-#: dispatcher.cc:297
+#: dispatcher.cc:305
 msgid "Already listening to dispatcher, ignoring request"
 msgstr ""
 
@@ -2107,6 +2107,14 @@ msgstr ""
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
+#. Uh oh.  unsmob<T> delivered 0, yet
+#. unsmob<T> delivers true.  This means that unsmob<T> is a
+#. matching check from a base class of T, but var is of an
+#. incompatible derived type.
+#: lily-guile.cc:462
+msgid "Wrong kind of "
+msgstr ""
+
 #: lily-lexer.cc:249
 msgid "include files are not allowed in safe mode"
 msgstr ""
@@ -2162,11 +2170,11 @@ msgstr ""
 msgid "Not drawing a box with negative dimension, %.2f by %.2f."
 msgstr ""
 
-#: lyric-combine-music-iterator.cc:204
+#: lyric-combine-music-iterator.cc:203
 msgid "argument of \\lyricsto should contain Lyrics context"
 msgstr ""
 
-#: lyric-combine-music-iterator.cc:349
+#: lyric-combine-music-iterator.cc:347
 #, c-format
 msgid "cannot find %s `%s'"
 msgstr ""
@@ -2424,7 +2432,7 @@ msgstr ""
 msgid "unexpected case fall-through"
 msgstr ""
 
-#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#: midi-control-function-performer.cc:107 staff-performer.cc:152
 #, c-format
 msgid "ignoring out-of-range value change for MIDI property `%s'"
 msgstr ""
@@ -2846,21 +2854,21 @@ msgstr ""
 msgid "rest `%s' not found"
 msgstr ""
 
-#: score-engraver.cc:79
+#: score-engraver.cc:77
 #, c-format
 msgid "cannot find `%s'"
 msgstr ""
 
-#: score-engraver.cc:81
+#: score-engraver.cc:79
 msgid "Music font has not been installed properly."
 msgstr ""
 
-#: score-engraver.cc:83
+#: score-engraver.cc:81
 #, c-format
 msgid "Search path `%s'"
 msgstr ""
 
-#: score-engraver.cc:85
+#: score-engraver.cc:83
 msgid "Aborting"
 msgstr ""
 
@@ -2992,7 +3000,7 @@ msgstr ""
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
-#: translator-ctors.cc:65
+#: translator-ctors.cc:68
 #, c-format
 msgid "unknown translator: `%s'"
 msgstr ""
@@ -3002,17 +3010,17 @@ msgstr ""
 msgid "fatal error.  Couldn't find type: %s"
 msgstr ""
 
-#: translator-group.cc:188
+#: translator-group.cc:187
 #, c-format
 msgid "cannot find: `%s'"
 msgstr ""
 
-#: translator.cc:320
+#: translator.cc:310
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:321
+#: translator.cc:311
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
@@ -3301,24 +3309,34 @@ msgstr ""
 msgid "`~a' failed (~a)\n"
 msgstr ""
 
-#: backend-library.scm:94
+#: backend-library.scm:92
 #, 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:103
+#: backend-library.scm:102
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr ""
 
-#: backend-library.scm:141
+#: backend-library.scm:118
+#, scheme-format
+msgid "Copying to `~a'...\n"
+msgstr ""
+
+#: backend-library.scm:184
+#, scheme-format
+msgid "Deleting `~a'...\n"
+msgstr ""
+
+#: backend-library.scm:203
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
-#: backend-library.scm:190
+#: backend-library.scm:252
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr ""
@@ -3477,7 +3495,7 @@ msgstr ""
 msgid "flag stroke `~a' or `~a' not found"
 msgstr ""
 
-#: framework-eps.scm:108
+#: framework-eps.scm:112
 #, scheme-format
 msgid "Writing ~a..."
 msgstr ""
@@ -3502,7 +3520,7 @@ msgstr ""
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:729
+#: framework-ps.scm:723
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3678,67 +3696,67 @@ msgstr ""
 msgid "negative replication count; ignoring"
 msgstr ""
 
-#: music-functions.scm:310
+#: music-functions.scm:311
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
 msgstr ""
 
-#: music-functions.scm:339
+#: music-functions.scm:340
 #, scheme-format
 msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
 msgstr ""
 
-#: music-functions.scm:343
+#: music-functions.scm:344
 msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:479
+#: music-functions.scm:480
 #, scheme-format
 msgid "bad grob property path ~a"
 msgstr ""
 
-#: music-functions.scm:778
+#: music-functions.scm:779
 msgid "Bad chord repetition"
 msgstr ""
 
-#: music-functions.scm:883
+#: music-functions.scm:884
 #, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
-#: music-functions.scm:1225
+#: music-functions.scm:1226
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: music-functions.scm:1365
+#: music-functions.scm:1366
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1428
+#: music-functions.scm:1429
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr ""
 
-#: music-functions.scm:1429
+#: music-functions.scm:1430
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1821
+#: music-functions.scm:1822
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
-#: music-functions.scm:2039
+#: music-functions.scm:2040
 msgid "Missing duration"
 msgstr ""
 
-#: music-functions.scm:2548
+#: music-functions.scm:2549
 #, scheme-format
 msgid "not a symbol list: ~a"
 msgstr ""
 
-#: music-functions.scm:2551
+#: music-functions.scm:2552
 #, scheme-format
 msgid "conflicting tag group ~a"
 msgstr ""
@@ -3801,7 +3819,7 @@ msgstr ""
 msgid "error in #{ ... #}"
 msgstr ""
 
-#: part-combiner.scm:830
+#: part-combiner.scm:828
 #, scheme-format
 msgid "quoted music `~a' is empty"
 msgstr ""
index 8dc8e9160ab887078c30a01bba3b9916df74f682..7029c10619f170ea3b64438b6fc7d64f279bfe6a 100644 (file)
@@ -3298,12 +3298,15 @@ def brace_matcher (n):
     return r"[^{}]*?(?:{"*n+r"[^{}]*?"+r"}[^{}]*?)*?"*n
 
 matchstring = r'"(?:[^"\\]|\\.)*"'
-matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z]\S*|" + matchstring + r"|\("
-            + paren_matcher(20) + r"\))|" + matchstring + r"|\\[a-z_A-Z]+)")
-matchmarkup = (r'(?:\\markup\s*(?:{' + brace_matcher (20) +r'}|' +
+matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z][^ \t\n()\\]*|" + matchstring
+            + r"|#?\(" + paren_matcher(20) + r"\)|"
+            + r"-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)|"
+            + r"#(?:[tf]|\\.|@?\{" + brace_matcher (10) + r"#@?\}))|"
+            + matchstring + r"|\\[a-z_A-Z]+|[0-9]+(?:/[0-9]+)?|-[0-9]+)")
+matchmarkup = (r'(?:\\markup\s*(?:@?\{' + brace_matcher (20) +r'\}|' +
                matchstring + r'|(?:\\[a-z_A-Z][a-z_A-Z-]*(?:' + matcharg +
-               r')*?\s*)*(?:' + matchstring + "|{" + brace_matcher (20) +
-               "}))|" + matchstring + ")")
+               r')*?\s*)*(?:' + matchstring + r"|@?\{" + brace_matcher (20) +
+               r"\}))|" + matchstring + ")")
 
 @rule((2, 15, 25), r"\(auto)?Footnote(Grob)? -> \footnote")
 def conv (str):
@@ -3665,7 +3668,7 @@ def conv(str):
 
 @rule((2, 17, 27), r'''\stringTuning \notemode -> \stringTuning''')
 def conv(str):
-    str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
+    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")
@@ -3743,6 +3746,22 @@ def conv(str):
                   + after_id, r'\1-\2', str)
     return str
 
+@rule ((2, 19, 22), "(define-xxx-function (parser location ...) -> (define-xxx-function (...)")
+def conv(str):
+    def subst(m):
+        def subsub(m):
+            str = (m.group (1)
+                   + re.sub ('(?<=\s|["\\()])' + m.group (2) + r'(?=\s|["\\()])',
+                             r'(*location*)',
+                             re.sub (r'(?<=\s|["\\()])parser(?=\s|["\\()])',
+                                     r'(*parser*)', m.group (3))))
+            return str
+        return re.sub (r'(\([-a-z]+\s*\(+)parser\s+([-a-z]+)\s*((?:.|\n)*)$',
+                       subsub, m.group (0))
+    str = re.sub (r'\(define-(?:music|event|scheme|void)-function(?=\s|["(])'
+                  + paren_matcher (20) + r'\)', subst, str)
+    return str
+
 # Guidelines to write rules (please keep this at the end of this file)
 #
 # - keep at most one rule per version; if several conversions should be done,
index a777870f1ada99bf028072155f035844741f22af..6aea74c6613f1b55134d5d09dbc8006960d5e369 100644 (file)
@@ -55,7 +55,7 @@ for examples."
                                  (ly:assoc-get 'reedbanks register))))))))
 
      (define-public ,set-symbol
-       (define-music-function (parser position register)
+       (define-music-function (register)
          (string?)
          ,(format #f "Equivalent to @code{<>^\\markup \\~a@var{REGISTER}}."
                   set-symbol)
index cca78ffec267ed80fd610dbacb5f5fe382202e9b..2d2a178857ba97ccb414deef68b23fbb0c8227fd 100644 (file)
@@ -1047,6 +1047,12 @@ Otherwise, return #f."
                                          (music 'ContextSpeccedMusic
                                                 context-id "shared"
                                                 context-type 'Voice)
+                                         (music 'ContextSpeccedMusic
+                                                context-id "solo"
+                                                context-type 'Voice)
+                                         (music 'ContextSpeccedMusic
+                                                context-id "null"
+                                                context-type 'NullVoice)
                                          ?pc-music))))
    (with-music-match
     (?pc-music (music 'PartCombineMusic))
index 30903edb7b0fe867b6f6319e39c6aa8dc62d659c..cb6af4538b33daec3ad8b1d532c9b3a459d4987c 100644 (file)
@@ -478,7 +478,7 @@ Syntax: @code{\\unset @var{context}.@var{prop}}")
         ))
 
     (RelativeOctaveMusic
-     . ((description . "Music that was entered in relative octave notation.")
+     . ((description . "Music in which the assignment of octaves is complete.")
         (to-relative-callback . ,ly:relative-octave-music::relative-callback)
         (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
         (length-callback . ,ly:music-wrapper::length-callback)
index 74ab65fedd0788fb29e79e712a8d4afec45431f8..f8ccb59a111886ce250590d822c6f7bb9624aa6e 100644 (file)
@@ -109,11 +109,12 @@ to end-point."
                   (car this-list)
                 ;; fret
                   (- (second this-list) base-fret)
-                ;; finger
-                  (if (or (null? (cddr this-list))
-                        (not (number? (caddr this-list))))
-                      '()
-                      (third this-list))
+                ;; finger-number or markup
+                  (if (and (not (null? (cddr this-list)))
+                           (or (markup? (caddr this-list))
+                               (number? (caddr this-list))))
+                      (third this-list)
+                      '())
                 ;; inverted
                   (dot-is-inverted this-list)
                 ;; parenthesis
index 27ba76ab378e3d0b1670666bf323b0089f0dada6..b2283e548719975b74db44bfb8fc754dfa68c447 100644 (file)
    (string-downcase
     (car (string-tokenize (utsname:sysname (uname)) char-set:letter)))))
 
+;; We don't use (srfi srfi-39) (parameter objects) here because that
+;; does not give us a name/handle to the underlying fluids themselves.
+
+(define %parser (make-fluid))
+(define %location (make-fluid))
+;; No public setters: should not get overwritten in action
+(define-public (*parser*) (fluid-ref %parser))
+(define-public (*location*) (fluid-ref %location))
+
+;; It would be nice to convert occurences of parser/location to
+;; (*parser*)/(*location*) using the syncase module but it is utterly
+;; broken in GUILE 1 and would require changing a lot of unrelated
+;; innocuous constructs which just happen to fall apart with
+;; inscrutable error messages.
+
 ;;
 ;; Session-handling variables and procedures.
 ;;
index 2d243ab8abf1ae3daf1f8419b8eb0b86704dd89a..5d45ea523cfbce43aea3348564135d1c83f565f3 100644 (file)
@@ -53,8 +53,9 @@
   (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)))))
+         (m (and good (with-fluids ((%parser parser) (%location loc))
+                                   (apply (ly:music-function-extract fun)
+                                          (reverse! args rest))))))
     (if (and good (pred m))
         (begin
           (if (ly:music? m)
index 65f885bbf87e1a76921c7f3e8e98900e2b0c980c..2c44e33cb249c7e6752a31928471a7ca3a7fbbfd 100644 (file)
@@ -1040,10 +1040,9 @@ actually fully cloned."
 
 (defmacro-public def-grace-function (start stop . docstring)
   "Helper macro for defining grace music"
-  `(define-music-function (parser location music) (ly:music?)
+  `(define-music-function (music) (ly:music?)
      ,@docstring
      (make-music 'GraceMusic
-                 'origin location
                  'element (make-music 'SequentialMusic
                                       'elements (list (ly:music-deep-copy ,start)
                                                       music
@@ -1052,7 +1051,7 @@ actually fully cloned."
 (defmacro-public define-syntax-function (type args signature . body)
   "Helper macro for `ly:make-music-function'.
 Syntax:
-  (define-syntax-function result-type? (parser location arg1 arg2 ...) (arg1-type arg2-type ...)
+  (define-syntax-function result-type? (arg1 arg2 ...) (arg1-type arg2-type ...)
     ...function body...)
 
 argX-type can take one of the forms @code{predicate?} for mandatory
@@ -1067,21 +1066,28 @@ parameter of different type.
 predicates, to be used in case of a type error in arguments or
 result."
 
+  (define (has-parser/location? arg where)
+    (let loop ((arg arg))
+      (if (list? arg)
+          (any loop arg)
+          (memq arg where))))
   (define (currying-lambda args doc-string? body)
     (if (and (pair? args)
              (pair? (car args)))
         (currying-lambda (car args) doc-string?
                          `((lambda ,(cdr args) ,@body)))
-        `(lambda ,args
-           ,(format #f "~a\n~a" (cddr args) (or doc-string? ""))
-           ,@body)))
-
-  (set! signature (map (lambda (pred)
-                         (if (pair? pred)
-                             `(cons ,(car pred)
-                                    ,(and (pair? (cdr pred)) (cadr pred)))
-                             pred))
-                       (cons type signature)))
+        (let* ((compatibility? (if (list? args)
+                                   (= (length args) (+ 2 (length signature)))
+                                   (and (pair? args) (pair? (cdr args))
+                                        (eq? (car args) 'parser))))
+               (realargs (if compatibility? (cddr args) args)))
+          `(lambda ,realargs
+             ,(format #f "~a\n~a" realargs (or doc-string? ""))
+             ,@(if (and compatibility?
+                        (has-parser/location? body (take args 2)))
+                   `((let ((,(car args) (*parser*)) (,(cadr args) (*location*)))
+                       ,@body))
+                   body)))))
 
   (let ((docstring
          (and (pair? body) (pair? (cdr body))
@@ -1096,13 +1102,18 @@ result."
     ;; When the music function definition contains an i10n doc string,
     ;; (_i "doc string"), keep the literal string only
     `(ly:make-music-function
-      (list ,@signature)
+      (list ,@(map (lambda (pred)
+                     (if (pair? pred)
+                         `(cons ,(car pred)
+                                ,(and (pair? (cdr pred)) (cadr pred)))
+                         pred))
+                   (cons type signature)))
       ,(currying-lambda args docstring (if docstring (cdr body) body)))))
 
 (defmacro-public define-music-function rest
   "Defining macro returning music functions.
 Syntax:
-  (define-music-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
+  (define-music-function (arg1 arg2 ...) (arg1-type? arg2-type? ...)
     ...function body...)
 
 argX-type can take one of the forms @code{predicate?} for mandatory
@@ -1122,7 +1133,7 @@ set to the @code{location} parameter."
 (defmacro-public define-scheme-function rest
   "Defining macro returning Scheme functions.
 Syntax:
-  (define-scheme-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
+  (define-scheme-function (arg1 arg2 ...) (arg1-type? arg2-type? ...)
     ...function body...)
 
 argX-type can take one of the forms @code{predicate?} for mandatory
@@ -1150,7 +1161,7 @@ the return value."
 (defmacro-public define-event-function rest
   "Defining macro returning event functions.
 Syntax:
-  (define-event-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
+  (define-event-function (arg1 arg2 ...) (arg1-type? arg2-type? ...)
     ...function body...)
 
 argX-type can take one of the forms @code{predicate?} for mandatory
index dd3e698b9cbddba3271165f5fdddcecf20450630..7322d9bb16a666f1ad0ae17177c72ce4783b9ef1 100644 (file)
@@ -74,8 +74,8 @@ from @var{port} and return the corresponding Scheme music expression.
             (ly:parser-error parser (_ "error in #{ ... #}")))
         result))
     (list embedded-lilypond
-          'parser lily-string filename line
+          (list *parser*) lily-string filename line
           (cons 'list (reverse! closures))
-          'location)))
+          (list *location*))))
 
 (read-hash-extend #\{ read-lily-expression)
index a2ebda492cff8c30ce8e6360f1df56d16020e84d..20b7b05cc56d329ce9208db2419504a32a7302ee 100644 (file)
              (note-events vs))
         note<?))
 
-(define-method (rest-and-skip-events (vs <Voice-state>))
-  (define (f? x)
-    (or (ly:in-event-class? x 'rest-event)
-        (ly:in-event-class? x 'skip-event)))
-  (filter f? (events vs)))
+(define-method (rest-or-skip-events (vs <Voice-state>))
+  (define (filtered-events event-class)
+    (filter (lambda(x) (ly:in-event-class? x event-class))
+            (events vs)))
+  (let ((result (filtered-events 'rest-event)))
+    ;; There may be skips in the same part with rests for various
+    ;; reasons.  Regard the skips only if there are no rests.
+    (if (and (not (pair? result)) (not (any-mmrest-events vs)))
+        (set! result (filtered-events 'skip-event)))
+  result))
 
 (define-method (any-mmrest-events (vs <Voice-state>))
   (define (f? x)
@@ -477,8 +482,8 @@ Only set if not set previously.
                  (vs2 (cdr (voice-states now-state))))
 
             (define (analyse-synced-silence)
-              (let ((rests1 (if vs1 (rest-and-skip-events vs1) '()))
-                    (rests2 (if vs2 (rest-and-skip-events vs2) '())))
+              (let ((rests1 (if vs1 (rest-or-skip-events vs1) '()))
+                    (rests2 (if vs2 (rest-or-skip-events vs2) '())))
                 (cond
 
                  ;; multi-measure rests (probably), which the
@@ -616,8 +621,8 @@ the mark when there are no spanners active.
         (let* ((now-state (vector-ref result result-idx))
                (vs1 (current-voice-state now-state 1))
                (vs2 (current-voice-state now-state 2))
-               (rests1 (if vs1 (rest-and-skip-events vs1) '()))
-               (rests2 (if vs2 (rest-and-skip-events vs2) '()))
+               (rests1 (if vs1 (rest-or-skip-events vs1) '()))
+               (rests2 (if vs2 (rest-or-skip-events vs2) '()))
                (prev-state (if (> result-idx 0)
                                (vector-ref result (- result-idx 1))
                                #f))
index 3b6b6c2452c719aa9963685d30861944172af19c..93bce270edefde72ad5b3e76c2a707a1cd19ebcb 100644 (file)
 
 (define-public _ gettext)
 
-(define PLATFORM
-  (string->symbol
-   (string-downcase
-    (car (string-tokenize (utsname:sysname (uname)) char-set:letter)))))
-
 (define (re-sub re sub string)
   (regexp-substitute/global #f re string 'pre sub 'post))
 
-(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)))))
-
-  (let ((path (parse-path (getenv "PATH"))))
-    (helper path names)))
-
-(define (search-gs)
-  (search-executable '("gs-nox" "gs-8.15" "gs")))
-
-(define (gulp-port port max-length)
-  (let ((str (make-string max-length)))
-    (read-string!/partial str port 0 max-length)
-    str))
-
 (define-public (gulp-file file-name . max-size)
   (ly:gulp-file file-name (if (pair? max-size) (car max-size))))
 
         (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")))
-
-      (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))
-      (delete-file old)))
-
-  (with-pbm))
+(define (scale-down-image factor file)
+  (let* ((old (string-append file ".old"))
+         ;; Netpbm commands (pngtopnm, pnmscale, pnmtopng)
+         ;; outputs only standard output instead of a file.
+         ;; So we need pipe and redirection.
+         ;; However, ly:system can't handle them.
+         ;; Therefore, we use /bin/sh for handling them.
+         ;; FIXME: MinGW (except Cygwin) doesn't have /bin/sh.
+         (cmd
+          (list
+           "/bin/sh"
+           "-c"
+           (ly:format
+            "pngtopnm \"~a\" | pnmscale -reduce ~a | pnmtopng -compression 9 > \"~a\""
+            old factor file))))
+
+    (rename-file file old)
+    (ly:system cmd)
+    (delete-file old)))
 
 (define-public (ps-page-count ps-name)
   (let* ((byte-count 10240)
           (pngn (format #f "~a-page%d.~a" base-name extension))
           (page-count (ps-page-count tmp-name))
           (multi-page? (> page-count 1))
-          (output-file (if multi-page? pngn png1))
-
-          (gs-variable-options
-           (if is-eps
-               "-dEPSCrop"
-               (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
-                       page-width page-height)))
-          (cmd (ly:format "~a\
- ~a\
- ~a\
- -dGraphicsAlphaBits=4\
- -dTextAlphaBits=4\
- -dNOPAUSE\
- -sDEVICE=~a\
- -sOutputFile=~S\
- -r~a\
- ~S\
- -c quit"
-                          (search-gs)
-                          (if be-verbose "" "-q")
-                          gs-variable-options
-                          pixmap-format
-                          output-file
-                          (* anti-alias-factor resolution) tmp-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))))
+          ;; Escape `%' (except `page%d') for ghostscript
+          (base-name-gs (string-join
+                         (string-split base-name #\%)
+                         "%%"))
+          (png1-gs (format #f "~a.~a" base-name-gs extension))
+          (pngn-gs (format #f "~a-page%d.~a" base-name-gs extension))
+          (output-file (if multi-page? pngn-gs png1-gs))
+
+          (*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=~$" page-width))
+                    (if is-eps
+                        *unspecified*
+                        (ly:format "-dDEVICEHEIGHTPOINTS=~$" page-height))
+                    "-dGraphicsAlphaBits=4"
+                    "-dTextAlphaBits=4"
+                    "-dNOPAUSE"
+                    "-dBATCH"
+                    (ly:format "-sDEVICE=~a" pixmap-format)
+                    (string-append "-sOutputFile=" output-file)
+                    (ly:format "-r~a" (* anti-alias-factor resolution))
+                    (string-append "-f" tmp-name))))
+          (files '()))
 
-     (set! status (my-system be-verbose #f cmd))
+     (ly:system cmd)
 
      (set! files
            (if multi-page?
                 (iota page-count))
                (list (format #f "~a.png" base-name))))
 
-     (if (not (= 0 status))
-         (begin
-           (for-each delete-file files)
-           (exit 1)))
-
      (if (and rename-page-1 multi-page?)
          (begin
            (rename-file (re-sub "%d" "1" pngn) png1)
 
      (if (not (= 1 anti-alias-factor))
          (for-each
-          (lambda (f) (scale-down-image be-verbose anti-alias-factor f)) files))
+          (lambda (f) (scale-down-image anti-alias-factor f)) files))
      files)))
index d17fd53c71263e02bfd042f41bc4bbe6f854263d..71c8179f36721a047821e23cd25d9bf20fbe3618 100755 (executable)
@@ -251,6 +251,7 @@ def copy_ly (srcdir, name, tags):
     s = strip_white_spaces_re.sub ('', s)
     s = final_empty_lines_re.sub ('\n', s)
     s = escape_backslashes_in_header (s)
+    s = s.replace ("\r\n", "\n")
     sys.stderr.write ("makelsr.py: writing %s\n" % dest)
     open (dest, 'w').write (s)
 
index bb51d83e416b787ae2bbf7e44390f4d3dff6e5a6..978fab4f5520a2546a0227ad72aeb3cc8afdc255 100755 (executable)
@@ -20,10 +20,10 @@ cd $TOP_SRC_DIR
 ### update manuals
 find Documentation/ -path 'Documentation/snippets' -prune -o -name out -prune \
   -o -name 'out-*' -prune -o -name '*.itely' -print \
-  | xargs $BUILD_DIR/out/bin/convert-ly -e -d
+  | xargs $BUILD_DIR/out/bin/convert-ly -e -d "$@"
 
 ### update .ly files
 # don't look in . otherwise it'll find stuff in build/ !
 find Documentation/ input/ ly/ -name out -prune -o -name 'out-*' -prune \
   -o \( -name '*.ly' -o -name '*.ily' \) -print \
-  | xargs $BUILD_DIR/out/bin/convert-ly -e -d
+  | xargs $BUILD_DIR/out/bin/convert-ly -e -d "$@"
index 08a2a1032c3b176d7cbba686fd37fb213b5bb5e8..d473ec26f5f416ab7fb5472ffb878d7f8168455a 100644 (file)
@@ -262,15 +262,13 @@ def do_one_file (infile_name):
     else:
         input = sys.stdin.read ()
 
-    from_version = None
     to_version = None
-    if global_options.from_version:
-        from_version = global_options.from_version
-    else:
-        guess = guess_lilypond_version (input)
-        if not guess:
-            raise UnknownVersion ()
-        from_version = str_to_tuple (guess)
+    org_version = None
+    guess = guess_lilypond_version (input)
+    org_version = guess and str_to_tuple (guess)
+    from_version = global_options.from_version or org_version
+    if not from_version:
+        raise UnknownVersion ()
 
     if global_options.to_version:
         to_version = global_options.to_version
@@ -293,7 +291,7 @@ def do_one_file (infile_name):
             # the same if two conversion rules cancelled out
             if result == input:
                 # make no (actual) change to the version number
-                last = from_version
+                last = org_version or from_version
             else:
                 last = last_change
                 # If the last update was to an unstable version
index dead3220cdaa46c31a6f258435b10788b15940d6..a616aac5de51e96a20229b37b258d934e164e725 100644 (file)
@@ -8956,7 +8956,6 @@ directory should work if nowhere else does.}
       \catcode\count255=#1\relax
       \advance\count255 by 1
    \repeat
-
 }
 
 % @documentencoding sets the definition of non-ASCII characters