]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge with master
authorJoe Neeman <joeneeman@gmail.com>
Thu, 18 Jan 2007 20:28:05 +0000 (22:28 +0200)
committerJoe Neeman <joeneeman@gmail.com>
Thu, 18 Jan 2007 20:28:05 +0000 (22:28 +0200)
1014 files changed:
.gitignore
Documentation/GNUmakefile
Documentation/fr/user/advanced-notation.itely
Documentation/fr/user/basic-notation.itely
Documentation/fr/user/changing-defaults.itely
Documentation/fr/user/cheatsheet.itely
Documentation/fr/user/converters.itely
Documentation/fr/user/instrument-notation.itely
Documentation/fr/user/introduction.itely
Documentation/fr/user/lilypond-book.itely
Documentation/fr/user/lilypond.tely
Documentation/fr/user/literature.itely
Documentation/fr/user/non-music.itely
Documentation/fr/user/notation-appendices.itely
Documentation/fr/user/preface.itely
Documentation/fr/user/programming-interface.itely
Documentation/fr/user/putting.itely
Documentation/fr/user/running.itely
Documentation/fr/user/scheme-tutorial.itely
Documentation/fr/user/spacing.itely
Documentation/fr/user/templates.itely
Documentation/fr/user/tutorial.itely
Documentation/fr/user/tweaks.itely
Documentation/fr/user/working.itely
Documentation/index.html.in
Documentation/po/GNUmakefile
Documentation/po/fr.po
Documentation/po/lilypond-doc.pot
Documentation/topdocs/INSTALL.texi
Documentation/topdocs/NEWS.tely
Documentation/topdocs/README.texi
Documentation/user/README.txt
Documentation/user/advanced-notation.itely
Documentation/user/basic-notation.itely
Documentation/user/changing-defaults.itely
Documentation/user/cheatsheet.itely
Documentation/user/converters.itely
Documentation/user/dedication.itely
Documentation/user/fdl.itexi
Documentation/user/instrument-notation.itely
Documentation/user/introduction.itely
Documentation/user/lilypond-book.itely
Documentation/user/lilypond.tely
Documentation/user/literature.itely
Documentation/user/macros.itexi
Documentation/user/music-glossary.tely
Documentation/user/non-music.itely
Documentation/user/notation-appendices.itely
Documentation/user/point-and-click.itely [deleted file]
Documentation/user/preface.itely
Documentation/user/programming-interface.itely
Documentation/user/putting.itely
Documentation/user/running.itely
Documentation/user/scheme-tutorial.itely
Documentation/user/spacing.itely
Documentation/user/templates.itely
Documentation/user/tutorial.itely
Documentation/user/tweaks.itely
Documentation/user/working.itely
GNUmakefile.in
SConstruct
THANKS
VERSION
buildscripts/add_html_footer.py [new file with mode: 0644]
buildscripts/build-coverage.sh [new file with mode: 0755]
buildscripts/build-profile.sh [new file with mode: 0755]
buildscripts/check_translation.py [new file with mode: 0644]
buildscripts/coverage.py [new file with mode: 0644]
buildscripts/html-gettext.py
buildscripts/langdefs.py [new file with mode: 0644]
buildscripts/mf-to-table.py
buildscripts/mirrortree.py [new file with mode: 0644]
buildscripts/mutopia-index.py
buildscripts/output-distance.py
buildscripts/pfx2ttf.fontforge
buildscripts/texi-langutils.py
buildscripts/www_post.py [new file with mode: 0644]
configure.in
flower/GNUmakefile
flower/cpu-timer.cc
flower/file-name.cc
flower/file-path.cc
flower/getopt-long.cc
flower/include/arithmetic-operator.hh
flower/include/axis.hh
flower/include/compare.hh
flower/include/cpu-timer.hh
flower/include/direction.hh
flower/include/drul-array.hh
flower/include/file-name.hh
flower/include/file-path.hh
flower/include/flower-proto.hh
flower/include/guile-compatibility.hh
flower/include/international.hh
flower/include/interval.hh
flower/include/interval.tcc
flower/include/libc-extension.hh
flower/include/matrix.hh
flower/include/memory-stream.hh
flower/include/offset.hh
flower/include/parray.hh
flower/include/polynomial.hh
flower/include/pqueue.hh
flower/include/rational.hh
flower/include/real.hh
flower/include/std-string.hh
flower/include/std-vector.hh
flower/include/tuple.hh
flower/include/virtual-methods.hh
flower/include/warn.hh
flower/include/yaffut-parameters.hh [new file with mode: 0644]
flower/include/yaffut.hh [new file with mode: 0644]
flower/international.cc
flower/interval.cc
flower/libc-extension.cc
flower/memory-stream.cc
flower/offset.cc
flower/polynomial.cc
flower/rational.cc
flower/std-string.cc
flower/string-convert.cc
flower/test-file-name.cc [new file with mode: 0644]
flower/test-file-path.cc [new file with mode: 0644]
flower/test-file.cc [deleted file]
flower/test-std.cc
flower/warn.cc
input/GNUmakefile
input/cary-layout.ly [new file with mode: 0644]
input/cary.ly [new file with mode: 0644]
input/manual/bar-lines.ly
input/no-notation/GNUmakefile [deleted file]
input/no-notation/README [deleted file]
input/no-notation/bar-check.ly [deleted file]
input/no-notation/beam-warn.ly [deleted file]
input/no-notation/die-staff.ly [deleted file]
input/no-notation/display-lily-tests.ly [deleted file]
input/no-notation/dos-guile.ly [deleted file]
input/no-notation/dos-ps.ly [deleted file]
input/no-notation/dos-tex.ly [deleted file]
input/no-notation/dynamic-absolute-volume.ly [deleted file]
input/no-notation/embedded-scm.ly [deleted file]
input/no-notation/midi-drums.ly [deleted file]
input/no-notation/midi-grace.ly [deleted file]
input/no-notation/midi-lyric-barcheck.ly [deleted file]
input/no-notation/midi-scales.ly [deleted file]
input/no-notation/midi-transposing.ly [deleted file]
input/no-notation/midi-tuplets.ly [deleted file]
input/no-notation/midi-volume-equaliser.ly [deleted file]
input/no-notation/parse.ly [deleted file]
input/no-notation/parse2.ly [deleted file]
input/no-notation/parse3.ly [deleted file]
input/no-notation/parse4.ly [deleted file]
input/no-notation/parse5.ly [deleted file]
input/no-notation/recording.ly [deleted file]
input/no-notation/safe-guile.ly [deleted file]
input/no-notation/safe-include.ly [deleted file]
input/no-notation/safe-ps.ly [deleted file]
input/no-notation/safe-tex.ly [deleted file]
input/no-notation/textcresc.ly [deleted file]
input/no-notation/to-xml.ly [deleted file]
input/proportional.ly
input/regression/accidental-ancient.ly [new file with mode: 0644]
input/regression/accidental-cautionary.ly
input/regression/accidental-clef-change.ly
input/regression/accidental-suggestions.ly
input/regression/apply-context.ly
input/regression/bar-line-dotted.ly [new file with mode: 0644]
input/regression/beam-beamlet-grace.ly [new file with mode: 0644]
input/regression/beam-break.ly
input/regression/beam-flat-retain-direction.ly [new file with mode: 0644]
input/regression/beam-slope-stemlet.ly [new file with mode: 0644]
input/regression/bend-dot.ly
input/regression/break.ly
input/regression/chord-names-languages.ly [new file with mode: 0644]
input/regression/chord-tremolo-single.ly [new file with mode: 0644]
input/regression/cluster-break.ly [new file with mode: 0644]
input/regression/cluster-style.ly [new file with mode: 0644]
input/regression/cluster.ly
input/regression/collision-manual.ly [new file with mode: 0644]
input/regression/completion-heads-polyphony.ly
input/regression/context-die-staff.ly [new file with mode: 0644]
input/regression/display-lily-tests.ly [new file with mode: 0644]
input/regression/dynamics-broken-hairpin.ly
input/regression/figured-bass-alteration.ly [new file with mode: 0644]
input/regression/finger-chords-accidental.ly [new file with mode: 0644]
input/regression/general-scheme-bindings.ly [new file with mode: 0644]
input/regression/glissando-no-break.ly [new file with mode: 0644]
input/regression/glissando.ly
input/regression/grace-partial.ly [new file with mode: 0644]
input/regression/hairpin-to-rest.ly [new file with mode: 0644]
input/regression/hara-kiri-stanza-number.ly [new file with mode: 0644]
input/regression/identifiers.ly [new file with mode: 0644]
input/regression/instrument-name-dynamic.ly
input/regression/key-clefs.ly
input/regression/key-signature-cancellation-extra-natural.ly [new file with mode: 0644]
input/regression/key-signature-scordatura.ly
input/regression/keys.ly
input/regression/lyric-combine-switch-voice-2.ly [new file with mode: 0644]
input/regression/lyric-combine-switch-voice.ly [new file with mode: 0644]
input/regression/lyric-extender-broken.ly
input/regression/lyric-extender-no-heads.ly [new file with mode: 0644]
input/regression/lyric-hyphen-break.ly
input/regression/lyrics-no-notes.ly [new file with mode: 0644]
input/regression/markup-note-dot.ly [new file with mode: 0644]
input/regression/markup-scheme.ly
input/regression/measure-grouping.ly
input/regression/midi-drums.ly [new file with mode: 0644]
input/regression/midi-dynamics.ly [new file with mode: 0644]
input/regression/midi-grace.ly [new file with mode: 0644]
input/regression/midi-lyric-barcheck.ly [new file with mode: 0644]
input/regression/midi-microtone.ly [new file with mode: 0644]
input/regression/midi-pedal.ly [new file with mode: 0644]
input/regression/midi-scales.ly [new file with mode: 0644]
input/regression/midi-transposition.ly [new file with mode: 0644]
input/regression/midi-tuplets.ly [new file with mode: 0644]
input/regression/midi-volume-equaliser.ly [new file with mode: 0644]
input/regression/multi-measure-rest-usebreve.ly [new file with mode: 0644]
input/regression/multi-measure-rest.ly
input/regression/non-empty-text.ly
input/regression/note-line.ly
input/regression/option-help.ly [new file with mode: 0644]
input/regression/page-layout-twopass.ly
input/regression/page-turn-page-breaking-badturns.ly
input/regression/page-turn-page-breaking-repeats.ly [new file with mode: 0644]
input/regression/page-turn-page-breaking.ly
input/regression/part-combine-text.ly
input/regression/part-combine-tuplet-end.ly [new file with mode: 0644]
input/regression/part-combine-tuplet-single.ly [new file with mode: 0644]
input/regression/profile-property-access.ly [new file with mode: 0644]
input/regression/quote-cue-during.ly
input/regression/quote-cyclic.ly
input/regression/quote-during.ly
input/regression/quote-grace.ly
input/regression/quote-tie.ly
input/regression/quote-transposition.ly
input/regression/quote-tuplet-end.ly [new file with mode: 0644]
input/regression/quote-tuplet.ly
input/regression/quote.ly
input/regression/relative-repeat.ly [new file with mode: 0644]
input/regression/rest-collision-beam-note.ly [new file with mode: 0644]
input/regression/rest-collision-beam-quantized.ly [new file with mode: 0644]
input/regression/rest-collision-beam-restdir.ly [new file with mode: 0644]
input/regression/rest-collision-beam.ly
input/regression/safe.ly [new file with mode: 0644]
input/regression/semi-tie-manual-direction.ly [new file with mode: 0644]
input/regression/skiptypesetting-bar-check.ly [new file with mode: 0644]
input/regression/skyline-debug.ly [new file with mode: 0644]
input/regression/slur-clef.ly
input/regression/slur-nice.ly
input/regression/spacing-bar-accidental.ly [new file with mode: 0644]
input/regression/spacing-bar-arpeggio.ly [new file with mode: 0644]
input/regression/spacing-bar-stem.ly
input/regression/spacing-bar-whole-measure.ly [new file with mode: 0644]
input/regression/spacing-folded-clef-cross-staff.ly [new file with mode: 0644]
input/regression/spacing-loose-grace-error.ly [new file with mode: 0644]
input/regression/spacing-loose-grace-linebreak.ly [new file with mode: 0644]
input/regression/spacing-mark-width.ly [new file with mode: 0644]
input/regression/spacing-stem-bar.ly
input/regression/spanner-break-overshoot.ly
input/regression/staff-mixed-size.ly
input/regression/stem-shorten.ly
input/regression/stem-tremolo-forced-dir.ly [new file with mode: 0644]
input/regression/system-separator.ly
input/regression/tie-accidental.ly [new file with mode: 0644]
input/regression/tie-broken-minimum-length.ly
input/regression/tie-broken-other-staff.ly [new file with mode: 0644]
input/regression/tie-direction-manual.ly [new file with mode: 0644]
input/regression/tie-manual-vertical-tune.ly [new file with mode: 0644]
input/regression/tie-single-chord.ly [new file with mode: 0644]
input/regression/tie-single-manual.ly
input/regression/to-xml.ly [new file with mode: 0644]
input/regression/tuplet-full-length.ly
input/regression/tuplet-nest-beam.ly [new file with mode: 0644]
input/regression/utf-8.ly
input/regression/warn-conflicting-key-signatures.ly [new file with mode: 0644]
input/test/ancient-accidentals.ly [deleted file]
input/test/ancient-font.ly
input/test/compound-time.ly
input/test/engraver-one-by-one.ly
input/test/makam.ly [new file with mode: 0644]
lily/accidental-engraver.cc
lily/accidental-placement.cc
lily/accidental.cc
lily/align-interface.cc
lily/all-font-metrics.cc
lily/ambitus-engraver.cc
lily/ambitus.cc
lily/apply-context-iterator.cc
lily/arpeggio-engraver.cc
lily/arpeggio.cc
lily/audio-column.cc
lily/audio-element-info.cc
lily/audio-element.cc
lily/audio-item.cc
lily/audio-staff.cc
lily/auto-beam-engraver.cc
lily/auto-change-iterator.cc
lily/axis-group-engraver.cc
lily/axis-group-interface-scheme.cc
lily/axis-group-interface.cc
lily/balloon-engraver.cc
lily/balloon.cc
lily/bar-check-iterator.cc
lily/bar-engraver.cc
lily/bar-line.cc
lily/bar-number-engraver.cc
lily/beam-concave.cc
lily/beam-engraver.cc
lily/beam-performer.cc
lily/beam-quanting.cc
lily/beam.cc
lily/beaming-pattern.cc
lily/bend-engraver.cc [new file with mode: 0644]
lily/bezier-bow.cc
lily/bezier.cc
lily/book-scheme.cc
lily/book.cc
lily/box.cc
lily/break-align-engraver.cc
lily/break-alignment-interface.cc
lily/break-substitution.cc
lily/breathing-sign-engraver.cc
lily/breathing-sign.cc
lily/change-iterator.cc
lily/chord-name-engraver.cc
lily/chord-name.cc
lily/chord-tremolo-engraver.cc
lily/chord-tremolo-iterator.cc
lily/clef-engraver.cc
lily/clef.cc
lily/cluster-engraver.cc
lily/cluster.cc
lily/coherent-ligature-engraver.cc
lily/collision-engraver.cc
lily/column-x-positions.cc
lily/completion-note-heads-engraver.cc
lily/constrained-breaking.cc
lily/context-def.cc
lily/context-handle.cc
lily/context-key-manager.cc [deleted file]
lily/context-property.cc
lily/context-scheme.cc
lily/context-specced-music-iterator.cc
lily/context.cc
lily/custos-engraver.cc
lily/custos.cc
lily/default-bar-line-engraver.cc
lily/dimension-cache.cc
lily/dimensions-scheme.cc
lily/directional-element-interface.cc
lily/dispatcher-scheme.cc
lily/dot-column-engraver.cc
lily/dot-column.cc
lily/dots-engraver.cc
lily/dots.cc
lily/drum-note-engraver.cc
lily/drum-note-performer.cc
lily/duration-scheme.cc
lily/duration.cc
lily/dynamic-engraver.cc
lily/dynamic-performer.cc
lily/dynamic-text-spanner.cc
lily/easy-notation.cc
lily/enclosing-bracket.cc
lily/engraver-group.cc
lily/engraver.cc
lily/event-chord-iterator.cc
lily/event-iterator.cc
lily/extender-engraver.cc
lily/fall-engraver.cc
lily/figured-bass-continuation.cc
lily/figured-bass-engraver.cc
lily/figured-bass-position-engraver.cc
lily/file-name-map.cc
lily/fingering-engraver.cc
lily/folded-repeat-iterator.cc
lily/font-config-scheme.cc
lily/font-config.cc
lily/font-interface.cc
lily/font-metric-scheme.cc
lily/font-metric.cc
lily/font-select.cc
lily/font-size-engraver.cc
lily/freetype.cc
lily/function-documentation.cc
lily/general-scheme.cc
lily/glissando-engraver.cc
lily/global-context-scheme.cc
lily/global-context.cc
lily/global-ctor.cc
lily/grace-engraver.cc
lily/grace-iterator.cc
lily/grace-music.cc
lily/grace-spacing-engraver.cc
lily/gregorian-ligature-engraver.cc
lily/gregorian-ligature.cc
lily/grid-line-interface.cc
lily/grid-line-span-engraver.cc
lily/grid-point-engraver.cc
lily/grob-array-scheme.cc
lily/grob-array.cc
lily/grob-info.cc
lily/grob-interface-scheme.cc
lily/grob-interface.cc
lily/grob-pitch-tuple.cc [deleted file]
lily/grob-pq-engraver.cc
lily/grob-property.cc
lily/grob-scheme.cc
lily/grob-smob.cc
lily/grob.cc
lily/guile-init.cc [new file with mode: 0644]
lily/hairpin.cc
lily/hara-kiri-engraver.cc
lily/hara-kiri-group-spanner.cc
lily/horizontal-bracket-engraver.cc
lily/horizontal-bracket.cc
lily/hyphen-engraver.cc
lily/identifier-smob.cc
lily/includable-lexer.cc
lily/include/accidental-interface.hh
lily/include/accidental-placement.hh
lily/include/align-interface.hh
lily/include/all-font-metrics.hh
lily/include/ambitus.hh
lily/include/arpeggio.hh
lily/include/audio-column.hh
lily/include/audio-element-info.hh
lily/include/audio-element.hh
lily/include/audio-item.hh
lily/include/audio-staff.hh
lily/include/axis-group-engraver.hh
lily/include/axis-group-interface.hh
lily/include/bar-line.hh
lily/include/bar.hh
lily/include/beam.hh
lily/include/beaming-pattern.hh
lily/include/bezier.hh
lily/include/book-paper-def.hh
lily/include/book.hh
lily/include/break-align-interface.hh
lily/include/breathing-sign.hh
lily/include/chord-name.hh
lily/include/chord-tremolo-iterator.hh
lily/include/clef.hh
lily/include/cluster.hh
lily/include/coherent-ligature-engraver.hh
lily/include/column-x-positions.hh
lily/include/constrained-breaking.hh
lily/include/context-def.hh
lily/include/context-handle.hh
lily/include/context-key-manager.hh [deleted file]
lily/include/context.hh
lily/include/custos.hh
lily/include/dimension-cache-callback.hh
lily/include/dimension-cache.hh
lily/include/directional-element-interface.hh
lily/include/dot-column.hh
lily/include/dots.hh
lily/include/duration.hh
lily/include/engraver-group.hh
lily/include/engraver.hh
lily/include/event-chord-iterator.hh
lily/include/event-iterator.hh
lily/include/file-name-map.hh
lily/include/folded-repeat-iterator.hh
lily/include/font-interface.hh
lily/include/font-metric.hh
lily/include/freetype.hh
lily/include/global-context.hh
lily/include/global-ctor.hh
lily/include/grace-fixup.hh
lily/include/grace-iterator.hh
lily/include/gregorian-ligature-engraver.hh
lily/include/gregorian-ligature.hh
lily/include/grid-line-interface.hh
lily/include/grob-array.hh
lily/include/grob-info.hh
lily/include/grob-interface.hh
lily/include/grob-pitch-tuple.hh
lily/include/grob.hh
lily/include/group-interface.hh
lily/include/hairpin.hh
lily/include/hara-kiri-group-spanner.hh
lily/include/horizontal-bracket.hh
lily/include/identifier-smob.hh
lily/include/includable-lexer.hh
lily/include/input.hh
lily/include/item.hh
lily/include/keyword.hh
lily/include/kpath.hh
lily/include/least-squares.hh
lily/include/ligature-engraver.hh
lily/include/lily-guile-macros.hh
lily/include/lily-guile.hh
lily/include/lily-lexer.hh
lily/include/lily-parser.hh
lily/include/lily-proto.hh
lily/include/lily-version.hh
lily/include/lilypond-key.hh [deleted file]
lily/include/lilypond-version.hh
lily/include/line-interface.hh
lily/include/line-spanner.hh
lily/include/lookup.hh
lily/include/ly-module.hh
lily/include/ly-smobs.icc
lily/include/lyric-extender.hh
lily/include/lyric-hyphen.hh
lily/include/main.hh
lily/include/measure-grouping-spanner.hh
lily/include/melody-spanner.hh
lily/include/mensural-ligature.hh
lily/include/midi-item.hh
lily/include/midi-stream.hh
lily/include/midi-walker.hh
lily/include/mingw-compatibility.hh
lily/include/misc.hh
lily/include/modified-font-metric.hh
lily/include/moment.hh
lily/include/multi-measure-rest.hh
lily/include/music-function.hh
lily/include/music-iterator.hh
lily/include/music-output.hh
lily/include/music-sequence.hh
lily/include/music-wrapper-iterator.hh
lily/include/music-wrapper.hh
lily/include/music.hh
lily/include/note-collision.hh
lily/include/note-column.hh
lily/include/note-head.hh
lily/include/note-spacing.hh
lily/include/object-key-dumper.hh [deleted file]
lily/include/object-key-undumper.hh [deleted file]
lily/include/object-key.hh [deleted file]
lily/include/open-type-font.hh
lily/include/optimal-page-breaking.hh
lily/include/output-def.hh
lily/include/page-breaking.hh
lily/include/page-spacing.hh
lily/include/page-turn-page-breaking.hh
lily/include/pango-font.hh
lily/include/paper-book.hh
lily/include/paper-column-engraver.hh
lily/include/paper-column.hh
lily/include/paper-outputter.hh
lily/include/paper-score.hh
lily/include/paper-system.hh
lily/include/parse-scm.hh
lily/include/percent-repeat-item.hh
lily/include/performance.hh
lily/include/performer-group.hh
lily/include/performer.hh
lily/include/pitch-interval.hh
lily/include/pitch.hh
lily/include/pointer-group-interface.hh
lily/include/prob.hh
lily/include/profile.hh
lily/include/program-option.hh
lily/include/property-iterator.hh
lily/include/protected-scm.hh
lily/include/relocate.hh
lily/include/repeated-music.hh
lily/include/rest-collision.hh
lily/include/rest.hh
lily/include/rhythmic-head.hh
lily/include/rod.hh
lily/include/scale.hh [new file with mode: 0644]
lily/include/scheme-listener.hh
lily/include/scm-hash.hh
lily/include/score-engraver.hh
lily/include/score-performer.hh
lily/include/score.hh
lily/include/script-column.hh
lily/include/script-interface.hh
lily/include/self-alignment-interface.hh
lily/include/semi-tie-column.hh
lily/include/semi-tie.hh
lily/include/separating-group-spanner.hh
lily/include/separation-item.hh
lily/include/sequential-iterator.hh
lily/include/simple-closure.hh
lily/include/simple-music-iterator.hh
lily/include/simple-spacer.hh
lily/include/simultaneous-music-iterator.hh
lily/include/skyline.hh
lily/include/slur-configuration.hh
lily/include/slur-score-parameters.hh
lily/include/slur-scoring.hh
lily/include/slur.hh
lily/include/smobs.hh
lily/include/source-file.hh
lily/include/source.hh
lily/include/spaceable-grob.hh
lily/include/spacing-interface.hh
lily/include/spacing-options.hh
lily/include/spacing-spanner.hh
lily/include/span-bar.hh
lily/include/spanner.hh
lily/include/spring.hh
lily/include/staff-spacing.hh
lily/include/staff-symbol-referencer.hh
lily/include/staff-symbol.hh
lily/include/stem-info.hh
lily/include/stem-tremolo.hh
lily/include/stem.hh
lily/include/stencil.hh
lily/include/stream-event.hh
lily/include/stream.hh
lily/include/swallow-perf.hh
lily/include/system-start-delimiter.hh
lily/include/system.hh
lily/include/text-interface.hh
lily/include/text-metrics.hh
lily/include/text-spanner.hh
lily/include/tie-column-format.hh
lily/include/tie-column.hh
lily/include/tie-configuration.hh
lily/include/tie-details.hh
lily/include/tie-formatting-problem.hh
lily/include/tie-specification.hh [new file with mode: 0644]
lily/include/tie.hh
lily/include/time-scaled-music-iterator.hh
lily/include/time-signature.hh
lily/include/timing-translator.hh
lily/include/translator-dispatch-list.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/include/translator.icc
lily/include/tuplet-bracket.hh
lily/include/tweak-registration.hh [deleted file]
lily/include/type-swallow-translator.hh
lily/include/vaticana-ligature.hh
lily/include/volta-bracket.hh
lily/input-scheme.cc
lily/input-smob.cc
lily/input.cc
lily/instrument-name-engraver.cc
lily/instrument-switch-engraver.cc
lily/item-scheme.cc
lily/item.cc
lily/key-engraver.cc
lily/key-performer.cc
lily/key-signature-interface.cc
lily/laissez-vibrer-engraver.cc
lily/least-squares.cc
lily/ledger-line-engraver.cc
lily/ledger-line-spanner.cc
lily/lexer.ll
lily/ligature-bracket-engraver.cc
lily/ligature-engraver.cc
lily/lily-guile.cc
lily/lily-lexer-scheme.cc
lily/lily-lexer.cc
lily/lily-parser-scheme.cc
lily/lily-parser.cc
lily/lily-version.cc
lily/lilypond-key.cc
lily/lilypond-version.cc
lily/line-interface.cc
lily/line-spanner.cc
lily/lookup.cc
lily/ly-module.cc
lily/lyric-combine-music-iterator.cc
lily/lyric-combine-music.cc
lily/lyric-engraver.cc
lily/lyric-extender.cc
lily/lyric-hyphen.cc
lily/lyric-performer.cc
lily/main.cc
lily/mark-engraver.cc
lily/measure-grouping-engraver.cc
lily/measure-grouping-spanner.cc
lily/melisma-translator.cc [deleted file]
lily/melody-engraver.cc
lily/melody-spanner.cc
lily/mensural-ligature-engraver.cc
lily/mensural-ligature.cc
lily/metronome-engraver.cc
lily/midi-item.cc
lily/midi-stream.cc
lily/midi-walker.cc
lily/misc.cc
lily/modified-font-metric.cc
lily/module-scheme.cc
lily/moment-scheme.cc
lily/moment.cc
lily/multi-measure-rest-engraver.cc
lily/multi-measure-rest.cc
lily/music-function.cc
lily/music-iterator.cc
lily/music-output.cc
lily/music-scheme.cc
lily/music-sequence.cc
lily/music-wrapper-iterator.cc
lily/music-wrapper.cc
lily/music.cc
lily/new-fingering-engraver.cc
lily/note-collision.cc
lily/note-column.cc
lily/note-head-line-engraver.cc
lily/note-head-scheme.cc
lily/note-head.cc
lily/note-heads-engraver.cc
lily/note-name-engraver.cc
lily/note-performer.cc
lily/note-spacing-engraver.cc [new file with mode: 0644]
lily/note-spacing.cc
lily/object-key-dumper-scheme.cc [deleted file]
lily/object-key-dumper.cc [deleted file]
lily/object-key-undumper-scheme.cc [deleted file]
lily/object-key-undumper.cc [deleted file]
lily/object-key.cc
lily/open-type-font-scheme.cc
lily/open-type-font.cc
lily/optimal-page-breaking.cc
lily/ottava-bracket.cc
lily/ottava-engraver.cc
lily/output-def-scheme.cc
lily/output-def.cc
lily/output-property-engraver.cc
lily/page-breaking-scheme.cc
lily/page-breaking.cc
lily/page-spacing.cc
lily/page-turn-engraver.cc
lily/page-turn-page-breaking.cc
lily/pango-font-scheme.cc
lily/pango-font.cc
lily/pango-select-scheme.cc
lily/pango-select.cc
lily/paper-book-scheme.cc
lily/paper-book.cc
lily/paper-column-engraver.cc
lily/paper-column.cc
lily/paper-def.cc
lily/paper-outputter-scheme.cc
lily/paper-outputter.cc
lily/paper-score-scheme.cc
lily/paper-score.cc
lily/paper-system.cc
lily/parenthesis-engraver.cc
lily/parse-scm.cc
lily/parser.yy
lily/part-combine-engraver.cc
lily/part-combine-iterator.cc
lily/percent-repeat-engraver.cc
lily/percent-repeat-item.cc
lily/percent-repeat-iterator.cc
lily/performance-scheme.cc
lily/performance.cc
lily/performer-group.cc
lily/performer.cc
lily/pfb.cc
lily/phrasing-slur-engraver.cc
lily/piano-pedal-align-engraver.cc
lily/piano-pedal-bracket.cc
lily/piano-pedal-engraver.cc
lily/piano-pedal-performer.cc
lily/pitch-interval.cc
lily/pitch-scheme.cc
lily/pitch-squash-engraver.cc
lily/pitch.cc
lily/pitched-trill-engraver.cc
lily/pointer-group-interface.cc
lily/prob-scheme.cc
lily/prob.cc
lily/profile.cc
lily/program-option.cc
lily/property-iterator.cc
lily/protected-scm.cc
lily/quote-iterator.cc
lily/relative-octave-check.cc
lily/relative-octave-music.cc
lily/relocate.cc
lily/repeat-acknowledge-engraver.cc
lily/repeat-tie-engraver.cc
lily/repeated-music.cc
lily/rest-collision-engraver.cc
lily/rest-collision.cc
lily/rest-engraver.cc
lily/rest.cc
lily/rhythmic-column-engraver.cc
lily/rhythmic-head.cc
lily/rod.cc
lily/scale.cc
lily/scheme-listener-scheme.cc
lily/scheme-listener.cc
lily/scm-hash.cc
lily/score-engraver.cc
lily/score-performer.cc
lily/score-scheme.cc
lily/score.cc
lily/script-column-engraver.cc
lily/script-column.cc
lily/script-engraver.cc
lily/script-interface.cc
lily/script-row-engraver.cc
lily/self-aligment-interface.cc
lily/semi-tie-column.cc
lily/semi-tie.cc
lily/separating-group-spanner.cc
lily/separating-line-group-engraver.cc
lily/separation-item.cc
lily/sequential-iterator.cc
lily/side-position-interface.cc
lily/simple-closure.cc
lily/simple-music-iterator.cc
lily/simple-spacer-scheme.cc
lily/simple-spacer.cc
lily/simultaneous-music-iterator.cc
lily/skyline.cc
lily/slash-repeat-engraver.cc
lily/slur-configuration.cc
lily/slur-engraver.cc
lily/slur-performer.cc
lily/slur-score-parameters.cc
lily/slur-scoring.cc
lily/slur.cc
lily/smobs.cc
lily/source-file.cc
lily/source.cc
lily/spaceable-grob.cc
lily/spacing-basic.cc
lily/spacing-determine-loose-columns.cc
lily/spacing-engraver.cc
lily/spacing-loose-columns.cc
lily/spacing-options.cc
lily/spacing-spanner.cc
lily/span-arpeggio-engraver.cc
lily/span-bar-engraver.cc
lily/span-bar.cc
lily/span-dynamic-performer.cc [deleted file]
lily/spanner-break-forbid-engraver.cc [new file with mode: 0644]
lily/spanner-scheme.cc [new file with mode: 0644]
lily/spanner.cc
lily/spring-smob.cc
lily/staff-collecting-engraver.cc
lily/staff-performer.cc
lily/staff-spacing.cc
lily/staff-symbol-engraver.cc
lily/staff-symbol-referencer-scheme.cc
lily/staff-symbol-referencer.cc
lily/staff-symbol.cc
lily/stanza-number-align-engraver.cc
lily/stanza-number-engraver.cc
lily/stem-engraver.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/stencil-expression.cc
lily/stencil-interpret.cc
lily/stencil-scheme.cc
lily/stencil.cc
lily/stream-event-scheme.cc
lily/stream-event.cc
lily/string-number-engraver.cc
lily/sustain-pedal.cc
lily/swallow-engraver.cc
lily/swallow-perf.cc
lily/system-start-delimiter-engraver.cc
lily/system-start-delimiter.cc
lily/system-start-text.cc
lily/system.cc
lily/tab-harmonic-engraver.cc
lily/tab-note-heads-engraver.cc
lily/tab-staff-symbol-engraver.cc
lily/template5.cc
lily/tempo-performer.cc
lily/text-engraver.cc
lily/text-interface.cc
lily/text-metrics.cc
lily/text-spanner-engraver.cc
lily/text-spanner.cc
lily/tie-column.cc
lily/tie-configuration.cc
lily/tie-details.cc
lily/tie-engraver.cc
lily/tie-formatting-problem.cc
lily/tie-performer.cc
lily/tie-specification.cc [new file with mode: 0644]
lily/tie.cc
lily/time-scaled-music-iterator.cc
lily/time-signature-engraver.cc
lily/time-signature-performer.cc
lily/time-signature.cc
lily/timing-translator.cc
lily/translator-ctors.cc
lily/translator-dispatch-list.cc
lily/translator-group-ctors.cc
lily/translator-group.cc
lily/translator-scheme.cc
lily/translator.cc
lily/trill-spanner-engraver.cc
lily/ttf.cc
lily/tuplet-bracket.cc
lily/tuplet-engraver.cc
lily/tuplet-number.cc
lily/tweak-engraver.cc
lily/tweak-registration-scheme.cc [deleted file]
lily/tweak-registration.cc [deleted file]
lily/type-swallow-translator.cc
lily/unfolded-repeat-iterator.cc
lily/vaticana-ligature-engraver.cc
lily/vaticana-ligature.cc
lily/vertical-align-engraver.cc
lily/vertically-spaced-context-engraver.cc
lily/volta-bracket.cc
lily/volta-engraver.cc
lily/volta-repeat-iterator.cc
ly/declarations-init.ly
ly/engraver-init.ly
ly/init.ly
ly/lilypond-book-preamble.ly
ly/markup-init.ly [new file with mode: 0644]
ly/music-functions-init.ly
ly/paper-defaults.ly
ly/performer-init.ly
ly/property-init.ly
make/doclang-targets.make
make/lilypond-vars.make
make/ly-rules.make
make/ly-targets.make
make/lysdoc-targets.make
make/mutopia-rules.make
mf/GNUmakefile
mf/feta-test-generic.mf
mf/feta-toevallig.mf
mf/feta.tex [deleted file]
mf/parmesan-accidentals.mf
mf/parmesan-flags.mf
mf/parmesan-generic.mf
mf/parmesan-timesig.mf
po/cs.po
po/da.po
po/de.po
po/es.po
po/fi.po
po/fr.po
po/it.po
po/ja.po
po/lilypond.pot
po/nl.po
po/ru.po
po/rw.po
po/sv.po
po/tr.po
po/zh_TW.po
python/convertrules.py
python/lilylib.py
python/midi.c
scm/GNUmakefile
scm/backend-library.scm
scm/chord-entry.scm
scm/chord-name.scm
scm/define-context-properties.scm
scm/define-event-classes.scm
scm/define-grob-interfaces.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-markup-commands.scm
scm/define-music-display-methods.scm
scm/define-music-properties.scm
scm/define-music-types.scm
scm/document-backend.scm
scm/document-markup.scm
scm/documentation-lib.scm
scm/framework-eps.scm
scm/framework-gnome.scm
scm/framework-ps.scm
scm/fret-diagrams.scm
scm/layout-beam.scm
scm/layout-page-dump.scm
scm/layout-page-layout.scm
scm/lily-library.scm
scm/lily.scm
scm/markup.scm
scm/memory-trace.scm [new file with mode: 0644]
scm/midi.scm
scm/music-functions.scm
scm/output-gnome.scm
scm/output-lib.scm
scm/output-ps.scm
scm/output-svg.scm
scm/output-tex.scm
scm/page.scm
scm/paper.scm
scm/ps-to-png.scm
scm/safe-lily.scm
scm/script.scm
scm/standalone.scm
scm/stencil.scm
scm/to-xml.scm
scripts/abc2ly.py
scripts/convert-ly.py
scripts/etf2ly.py
scripts/lilypond-book.py
scripts/midi2ly.py
scripts/musicxml2ly.py
stepmake/CHANGES [deleted file]
stepmake/GNUmakefile
stepmake/TODO [deleted file]
stepmake/aclocal.m4
stepmake/bin/add-html-footer.py [deleted file]
stepmake/bin/install-dot-exe.sh [deleted file]
stepmake/bin/install-layout.sh [deleted file]
stepmake/bin/ls-latex.py [deleted file]
stepmake/bin/package-zet.sh [deleted file]
stepmake/bin/package-zip.sh [deleted file]
stepmake/bin/package-zip32.sh [deleted file]
stepmake/bin/packagepython.py [deleted file]
stepmake/bin/release.py [deleted file]
stepmake/bin/stepdirs.sh [deleted file]
stepmake/stepmake/generic-rules.make
stepmake/stepmake/metafont-rules.make
stepmake/stepmake/metafont-targets.make
stepmake/stepmake/metafont-vars.make
stepmake/stepmake/test-vars.make

index 2489b9e8d237bcd275fbeab48955c00807a30ece..f69a725cab37b78e65ea408c0564edacbbf3a071 100644 (file)
@@ -1,41 +1,61 @@
-config.hh
+*-
 *-midi.ly
 *-systems.tex
 *-systems.texi
+*.600pk
 *.afm
 *.aux
 *.eps
+*.gcda
+*.gcno
+*.gcov
 *.log
 *.midi
 *.orig
+*.patch
+*.pats
 *.pdf
 *.ps
 *.pyc
 *.rej
+*.signature
 *.svg
 *.tfm
 *~
+*~*
+.\#*
 .dotest
 .gdbinit
 .htaccess
+/*.html
+/*.ly
+/*.png
 /.sconf_temp
 /.sconsign.dblite
+/GNUmakefile
+/local.make
 /scons.cache
+/x
 ?.*
 AUTHORS.txt
-/GNUmakefile
 INSTALL.txt
 TAGS
 \#*
+\#.*
 a.out
 aclocal.m4
 autom4te.cache
+config.hh
 config.log
 config.make
 config.status
 config.status.lineno
 configure
 gcstat*.scm
-lily-[0-9][0-9][0-9]*
+lily-[0-9a-f][0-9a-f][0-9a-f]*
 out-scons
+out-cov
 tags
+test-output-distance
+config-*.hh
+config-*.make
index 55f08098858a0d0a92d48d4bc06c7a1b54d18afd..cd96e38b5b61630c6bf3404be337826b59136442 100644 (file)
@@ -1,7 +1,7 @@
 depth = ..
 
 NAME = documentation
-LANGS = fr # don't enable unpolished or broken translations
+LANGS = $(shell $(PYTHON) $(buildscript-dir)/langdefs.py)
 SUBDIRS=user bibliography pictures topdocs misc po $(LANGS)
 STEPMAKE_TEMPLATES=documentation texinfo tex
 LOCALSTEPMAKE_TEMPLATES=lilypond ly
@@ -39,8 +39,12 @@ new-lang:
        cp fr/GNUmakefile $(ISOLANG)
        cp fr/user/GNUmakefile $(ISOLANG)/user
        sed -i -e 's/ISOLANG *= *fr/ISOLANG = $(ISOLANG)/' $(ISOLANG)/GNUmakefile $(ISOLANG)/user/GNUmakefile
-       $(PYTHON) $(depth)/buildscripts/texi-langutils.py -d $(outdir) -b "UNTRANSLATED NODE: IGNORE ME" -o doc.pot --skeleton --gettext ../user/lilypond.tely
+       $(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -b "UNTRANSLATED NODE: IGNORE ME" -o doc.pot --skeleton --gettext ../user/lilypond.tely
        mv $(outdir)/*.*tely $(ISOLANG)/user
        msgmerge -U po/lilypond-doc.pot $(outdir)/doc.pot
        cp po/lilypond-doc.pot po/$(ISOLANG).po
-endif
\ No newline at end of file
+       @echo "***  Please add a language definition for $(ISOLANG) in buildscripts/langdefs.py  ***"
+
+check-translation:
+       find $(ISOLANG)/user/ -name '*.*tely' | xargs $(PYTHON) $(buildscript-dir)/check_translation.py $(buildscript-dir)
+endif
index e1f82f07483490a74ba1a0259966a3a01481ee56..8481a50e3f7678b3cb73abfe00f13738d5976623 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Advanced notation
 @chapter Advanced notation
 
@@ -226,6 +235,7 @@ UNTRANSLATED NODE: IGNORE ME
 * Analysis brackets::
 * Coloring objects::
 * Parentheses::
+* Grid lines::
 @end menu 
 @node Balloon help
 @subsection Balloon help
@@ -267,3 +277,8 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
+@node Grid lines
+@subsection Grid lines
+
+UNTRANSLATED NODE: IGNORE ME
+
index d7c1bccb577fe99e74258a63c1af5a7d4f23a94e..709eef6d529414274cc1c8c391882642afc7c0d1 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Basic notation
 @chapter Basic notation
 
index 69342deaffa76e001a568f7515aee5216bdc697a..15345c1a601edf2c714963b40c74259ec24afe53 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Changing defaults
 @chapter Changing defaults
 
@@ -40,7 +49,9 @@ UNTRANSLATED NODE: IGNORE ME
 * Layout tunings within contexts::
 * Changing context default settings::
 * Defining new contexts::
+* Aligning contexts::           
 @end menu 
+
 @node Contexts explained
 @subsection Contexts explained
 
@@ -76,6 +87,11 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
+@node Aligning contexts
+@subsection Aligning contexts
+
+UNTRANSLATED NODE: IGNORE ME
+
 @node The \override command
 @section The \override command
 
index 24a63dc7745967a565016818afd00c3b6355effc..0e1c151288bb2ee0a2929c0bd8b3243e284c6fcf 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Cheat sheet
 @appendix Cheat sheet
 
index 07b91238fdde1468db28e35ecf3862cc188fc87f..93a51dbe276322cc66b32f7220479a5aad291dd3 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: 0d9d3feea8ca1b22388bd1c67545a518987e72f1
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Converting from other formats
 @chapter Converting from other formats
 
index bf8742de5d59586df25ee4866c4b014f6ad71fbf..46ce66be5769e7d66aa74dee2bce7ccd2cc36656 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Instrument-specific notation
 @chapter Instrument-specific notation
 
index bfb50ccdef13e1e8a4ad36d5f6f400016d9bdb57..97a1a7aaf6e0aeb0f02ce719e41f1918823febd6 100644 (file)
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: 94e27fe2da58c91791e1cacb32c16a4acccf0638
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Introduction
 @chapter Introduction
 
-UNTRANSLATED NODE: IGNORE ME
 
-@menu 
-* Engraving::
+@menu
+* Engraving::         
 * Automated engraving::
-* What symbols to engrave?::
-* Music representation::
+* What symbols to engrave?::    
+* Music representation::      
 * Example applications::
 * About this manual::
-@end menu 
+@end menu
+
+
 @node Engraving
 @section Engraving
 
-UNTRANSLATED NODE: IGNORE ME
+L'art de la typographie musicale se nomme la @emph{gravure}.  Ce terme
+est issu du processus traditionnel d'impression musicale.  Il y a
+seulement quelques dizaines d'années, on faisait les partitions en
+coupant et en embossant une plaque de zinc ou d'étain en image miroir.
+Cette plaque était ensuite encrée, les dépressions créées par les
+creux et les bosses retenant l'encre.  Une image était formée en
+pressant du papier sur la plaque.  La découpe et l'embossage étaient
+entièrement faits à la main.  Il était pénible d'appliquer une
+correction, quand celle-ci n'était pas impossible, la gravure devait
+donc être parfaite du premier coup.  La gravure demandait une
+qualification hautement spécialisée : un artisan devait accomplir
+environ cinq ans de formation avant de mériter le titre de maître
+graveur, et il lui fallait cinq années d'expérience supplémentaires
+pour devenir vraiment habile.
+
+De nos jours, toutes les partitions récentes sont produites avec des
+ordinateurs.  Ceci a des avantages évidents : le coût des impressions
+a diminué, et le travail d'éditeur peut être envoyé par courriel.
+Malheureusement, l'utilisation dominante des ordinateurs a également
+diminué la qualité graphique des partitions.  L'impression
+informatisée leur donne un aspect fade et mécanique qui les rend
+désagréables à jouer.
+
+@c introduce illustrating aspects of engraving, font...
+Les images ci-dessous illustrent la différence entre la gravure
+traditionelle et l'impression typique par ordinateur, et la troisème
+image montre comment LilyPond mime l'aspect traditionnel.  L'image de
+gauche est une numérisation d'un symbole bémol d'une édition publiée
+en 2000.  Celle du centre montre un bémol d'une gravure à la main de
+l'édition Bärenreiter de la même musique.  L'image de gauche illustre
+des défauts typiques de l'impression informatique : les lignes de
+portée sont minces, l'épaisseur de trait du bémol est la même que les
+lignes fines, et il y a un aspect rigide avec des angles pointus.  Par
+contraste, le bémol Bärenreiter possède un aspect gras et arrondi,
+presque voluptueux.  Notre symbole bémol est créé, entre autres, à
+partir de celui-là.  Il est arrondi, et son épaisseur de trait
+s'harmonise avec nos lignes de portée, lesquelles sont également plus
+épaisses que celles de l'édition informatique.
+
+@multitable @columnfractions .125 .25 .25 .25 .125
+@item @tab
+@ifnotinfo
+@iftex
+@image{henle-flat-gray,,4cm}
+@end iftex
+@ifnottex
+@image{henle-flat-gray,,,png}
+@end ifnottex
+
+@tab
+@iftex
+@image{baer-flat-gray,,4cm}
+@end iftex
+@ifnottex
+@image{baer-flat-gray,,,png}
+@end ifnottex
+
+@tab
+@iftex
+@image{lily-flat-bw,,4cm}
+@end iftex
+@ifnottex
+@image{lily-flat-bw,,,png}
+@end ifnottex
+@end ifnotinfo
+@ifinfo
+@c workaround for makeinfo-4.6: line breaks and multi-column cookies
+@image{henle-flat-bw,,,png} @image{baer-flat-bw,,,png}
+@image{lily-flat-bw,,,png}
+@end ifinfo
+
+@item @tab
+Henle (2000)
+@tab
+Bärenreiter (1950)
+@tab
+Fonte Feta de LilyPond (2003)
+
+@end multitable
+
+
+@cindex musical symbols
+@cindex font
+@cindex blackness
+@cindex balance
+
+@c introduce illustrating aspects of engraving, spacing...
+En matière d'espacement, la répartition de l'espace devrait refléter
+les durées entre les notes.  Cependant, beaucoup de partitions
+modernes se contentent des durées avec une précision mathématique, ce
+qui mène à de mauvais résultats.  Dans l'exemple suivant, un motif est
+imprimé deux fois : une fois en utilisant un espacement mathématique
+exact, et une autre fois avec des corrections.  Pouvez-vous les
+repérer ?
+
+@cindex optical spacing
+@c file spacing-optical.
+@c need to include it here,  because we want two images.
+@lilypond
+\paper {
+  ragged-right = ##t
+  indent = #0.0
+}
+
+music = {
+   c'4 e''4 e'4 b'4 |
+   \stemDown
+   b'8[ e'' a' e'']
+   \stemNeutral
+   e'8[ e'8 e'8 e'8]
+}
+
+\score
+{
+  \music
+  \layout {
+    \context {
+      \Staff
+      \override NoteSpacing #'stem-spacing-correction = #0.6
+    }
+  }
+}
+@end lilypond
+
+@lilypond
+\paper {
+  ragged-right = ##t
+  indent = #0.0
+}
+
+music = {
+   c'4 e''4 e'4 b'4 |
+   \stemDown
+   b'8[ e'' a' e'']
+   \stemNeutral
+   e'8[ e'8 e'8 e'8]
+}
+\score
+{
+  \music
+  \layout {
+    \context {
+      \Staff
+      \override NoteSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing #'same-direction-correction = #0.0
+      \override StaffSpacing #'stem-spacing-correction = #0.0
+    }
+  }
+}
+@end lilypond
+
+@cindex regular rhythms
+@cindex regular spacing
+
+L'extrait n'utilise que des notes de même durée ; l'espacement devrait
+le refléter.  Malheureusement, notre oeil nous trompe quelque peu ; il
+ne se contente pas de remarquer la distance entre les têtes de notes,
+il prend en compte également la distance entre les hampes
+consécutives.  Ainsi, par compensation, les notes avec une combinaison
+« hampe vers le haut »/@/« hampe vers le bas » doivent être éloignées
+l'une de l'autre, et les notes avec une combinaison « hampe vers le
+bas »/@/« hampe vers le haut » rapprochées, le tout dépendant de la
+position verticale des notes.  Les deux premières mesures sont
+imprimées avec cette correction, les deux suivantes sans.  Les notes
+dans les deux dernières mesures forment des blocs de notes « hampe
+vers le bas »/@/« hampe vers le haut ».
+
+@cindex typography
+
+Les musiciens sont généralement plus absorbés par l'exécution que par
+l'étude de l'aspect graphique d'une partition, donc discutailler sur
+les détails typographiques peut paraître peu important.  Il n'en est
+rien.  Dans de longues pièces avec des rythmes monotones, les
+corrections d'espacement engendrent de subtiles variations dans la
+mise en forme de chaque ligne, donnant à chacune une signature
+visuelle distincte.  Sans cette signature, toutes les lignes auraient
+le même aspect, et ressembleraient à un labyrinthe.  Si un musicien
+regarde ailleurs un instant ou se déconcentre momentanement, il peut
+avoir du mal à se retrouver sur la page.
+
+De même, l'aspect robuste des symboles sur d'épaisses lignes de
+portées ressort mieux quand la partition est éloignée du lecteur,
+comme sur un pupitre par exemple.  Une organisation minutieuse des
+espaces vides permet de minimiser l'espace qu'occupe la musique, tout
+en évitant que les symboles s'amassent les uns contre les autres.  le
+résultat permet de réduire le nombre de pages à tourner, ce qui est un
+grand avantage.
+
+Ceci est une caractéristique commune à toute typographie.  La
+disposition doit être belle, non seulement pour des raisons
+esthétiques, mais également pour l'aide apportée au lecteur dans la
+tâche qu'il doit accomplir.  Pour du matériel d'exécution comme les
+partitions de musique, cela prend une double importance : les
+musiciens ont une quantité limitée d'attention.  Moins ils en ont
+besoin pour lire, plus ils peuvent se concentrer sur la musique
+elle-même.  Autrement dit, une meilleure typographie permet une
+meilleure interprétation.
+
+Ces exemples démontrent que la typographie musicale est un art subtil
+et complexe, et que la produire demande une expertise considérable,
+que les musiciens n'ont généralement pas.  LilyPond représente notre
+effort pour apporter l'excellence graphique de la gravure à la main à
+l'ère de l'ordinateur, et la rendre accessible à tous les musiciens.
+Nous avons conçu nos algorithmes, fontes et paramètres de programme
+pour retrouver la qualité d'édition des anciennes partitions que nous
+aimons tant lire et jouer.
+
+
 
 @node Automated engraving
 @section Automated engraving
 
-UNTRANSLATED NODE: IGNORE ME
+Comment pouvons-nous implémenter la typographie ? Si les artisans ont
+besoin de plus de dix ans pour devenir de vrais maîtres, comment nous,
+simples programmeurs, pourrions-nous jamais écrire un programme pour
+faire leur travail?
+
+La réponse est : nous ne le pouvons pas.  La typographie se base sur
+le jugement visuel humain, donc les humains ne peuvent pas être
+complètement remplacés.  Si LilyPond arrive à résoudre la plupart des
+situations correctement, ce sera déjà une grande avancée sur les
+logiciels existants.  Les autres situations peuvent être résolues à la
+main.  Au fil des ans, le logiciel peut être affiné pour faire de plus
+en plus de choses automatiquement, pour que les ajustements manuels
+soient de moins en moins nécessaires.
+
+Quand nous avons commencé, nous avons écrit le programme Lilypond
+entièrement dans le language de programmation C++ ; les fonctions du
+programme étaient figées par les développeurs.  Ceci s'est avéré
+insatisfaisant pour plusieurs raisons :
+
+@itemize @bullet
+@item Quand Lilypond fait des erreurs,
+les utilisateurs ont besoin de contredire les décisions de formatage.
+Les utilisateurs doivent donc avoir accès au moteur de formatage.  Par
+conséquent, les règles et les propriétés ne peuvent pas être fixées
+par nous au moment de la compilation, mais doivent être accessibles
+aux utilisateurs au moment de l'exécution.
+
+@item La gravure est une question de jugement visuel, et donc de goût.
+Aussi bien informés que nous le sommes, les utilisateurs peuvent être
+en désaccord avec nos décisions personnelles.  Par conséquent, les
+définitions du modèle typographique doivent également être accessibles
+à l'utilisateur.
+
+@item Enfin, nous affinons continuellement les algorithmes de formatage,
+donc nous avons besoin d'une approche souple des règles.  Le language
+C++ oblige à une certaine méthode de groupage des règles qui ne
+convient pas bien au fonctionnement de la notation musicale.
+@end itemize
+
+Ces problèmes ont été résolus en intégrant un interpréteur pour le
+language de programmation Scheme, et en réécrivant des parties de
+LilyPond en Scheme.  L'architecture actuelle de formatage est
+construite autour de la notion d'objets graphiques, décrits par des
+fonctions et des variables Scheme.  Cette architecture comprend les
+règles de formatage, le style typographique, et des décisions
+individuelles de formatage.  L'utilisateur a un accès direct à la
+plupart de ces contrôles.
+
+Les variables Scheme contrôlent les décisions de mise en page.  Par
+exemple, beaucoup d'objets graphiques ont une variable de direction
+qui encode le choix entre haut et bas (ou gauche et droite).  Vous
+pouvez voir ici deux accords, avec des accents, et des arpèges.  Dans
+le premier accord, les objets graphiques sont tous dirigés vers le bas
+(ou la gauche).  Dans le second accord ils sont tous dirigés vers le
+haut (droite).
+
+@lilypond[quote,ragged-right]
+\new Score \with {
+   \override SpacingSpanner #'spacing-increment = #3
+   \override TimeSignature #'transparent = ##t
+} \relative {
+   \stemDown <e g b>4_>-\arpeggio
+   \override Arpeggio #'direction = #RIGHT
+   \stemUp <e g b>4^>-\arpeggio
+}
+@end lilypond
+
+@noindent
+Le processus de formatage d'une partition consiste à lire et écrire
+les variables d'objets graphiques.  Certaines variables ont une valeur
+prédéfinie.  Par exemple, l'épaisseur d'un grand nombre de lignes --
+une caractéristique du style typographique -- est une variable avec
+une valeur prédéfinie.  Vous êtes libres d'altérer cette valeur, ce
+qui vous donne une partition avec une impression typographique
+différente.
+
+@lilypond[quote,ragged-right]
+fragment = {
+   \clef bass f8 as8
+   c'4-~ c'16 as g f e16 g bes c' des'4
+}
+<<
+   \new Staff \fragment
+   \new Staff \with {
+      \override Beam #'thickness = #0.3
+      \override Stem #'thickness = #0.5
+      \override Bar #'thickness = #3.6
+      \override Tie #'thickness = #2.2
+      \override StaffSymbol #'thickness = #3.0
+      \override Tie #'extra-offset = #'(0 .  0.3)
+      }
+      \fragment
+>>
+@end lilypond
+
+Les règles de formatage ont aussi des variables prédéfinies : chaque
+objet possède des variables contenant des procédures.  Ces procédures
+exécutent le formatage, et en les substituant par d'autres, nous
+pouvons changer l'apparence des objets.  Dans l'exemple suivant, la
+règle du choix de têtes de notes est changée au cours de l'extrait de
+musique.
+
+@lilypond[quote,ragged-right]
+#(set-global-staff-size 30)
+
+#(define (mc-squared grob orig current)
+  (let* ((interfaces (ly:grob-interfaces grob))
+         (pos (ly:grob-property grob 'staff-position)))
+    (if (memq 'note-head-interface interfaces)
+        (begin
+          (ly:grob-set-property! grob 'stencil ly:text-interface::print)
+          (ly:grob-set-property! grob 'font-family 'roman)
+          (ly:grob-set-property! grob 'text
+            (make-raise-markup -0.5
+              (case pos
+                ((-5) (make-simple-markup "m"))
+                ((-3) (make-simple-markup "c "))
+                ((-2) (make-smaller-markup (make-bold-markup "2")))
+                (else (make-simple-markup "bla")))))))))
+
+\new Voice \relative c' {
+   \stemUp
+   \set autoBeaming = ##f
+   \time 2/4
+   <d f g>4
+   \once \override NoteHead #'stencil = #ly:note-head::brew-ez-stencil
+   \once \override NoteHead #'font-size = #-7
+   \once \override NoteHead #'font-family = #'sans
+   \once \override NoteHead #'font-series = #'bold
+   <d f g>
+   \once \override NoteHead #'style = #'cross
+   <d f g>
+   \applyOutput #'Voice #mc-squared
+   <d f g>
+   <<
+      { d8[ es-( fis^^ g] fis2-) }
+      \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+   >>
+}
+@end lilypond
+
+
 
 @node What symbols to engrave?
 @section What symbols to engrave?
 
-UNTRANSLATED NODE: IGNORE ME
+@cindex engraving
+@cindex typography
+
+Le processus de formatage décide où placer les symboles.  Cependant,
+cela ne peut être fait qu'à partir du moment où il a été décidé
+@emph{quels} symbols doivent être imprimés, c'est-à-dire quelle
+notation utiliser.
+
+La notation musicale usuelle est un système d'écriture qui a évolué à
+travers les dix derniers siècles.  La forme qui est aujourd'hui
+communément utilisée date du début de la Renaissance.  Bien que la
+forme basique --- les têtes de notes sur une portée de cinq lignes ---
+n'a pas changé, les détails continuent d'évoluer pour exprimer les
+innovations de la notation contemporaine.  Par conséquent, elle
+comprend quelque 500 ans de musique, avec des applications allant des
+mélodies monodiques à de monstrueux contrepoints pour grand orchestre.
+
+Comment pouvons nous appréhender un tel monstre à plusieurs têtes, et
+le confiner dans l'espace réduit d'un programme informatique ?  Notre
+solution consiste à diviser le problème de la notation --- par
+opposition à la gravure, ou typographie --- en morceaux digestes et
+programmables : chaque type de symbole est géré par un module séparé,
+couramment appelé greffon@footnote{traduction de l'anglais
+@emph{plug-in}.}.  Chaque greffon est entièrement modulaire et
+indépendant, et donc peut être développé et amélioré séparément.  De
+tels greffons sont nommées @code{graveur}s@footnote{@code{engraver}s
+en anglais.}, par analogie avec les artisans qui traduisent les idées
+musicales en symboles graphiques.
+
+Dans l'exemple suivant, voyons comment nous commençons avec un greffon
+pour les têtes de notes, le graveur de têtes de note
+(@code{Note_heads_engraver}) :
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+
+\score {
+   \topVoice
+   \layout {
+   \context {
+      \Voice
+      \remove "Stem_engraver"
+      \remove "Phrasing_slur_engraver"
+      \remove "Slur_engraver"
+      \remove "Script_engraver"
+      \remove "Beam_engraver"
+      \remove "Auto_beam_engraver"
+   }
+   \context {
+      \Staff
+      \remove "Accidental_engraver"
+      \remove "Key_engraver"
+      \remove "Clef_engraver"
+      \remove "Bar_engraver"
+      \remove "Time_signature_engraver"
+      \remove "Staff_symbol_engraver"
+      \consists "Pitch_squash_engraver"
+   }
+}
+}
+@end lilypond
+
+@noindent
+Ensuite, le graveur du symbole de portée
+(@code{Staff_symbol_engraver}) ajoute la portée
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+
+\score {
+  \topVoice
+  \layout {
+    \context {
+      \Voice
+      \remove "Stem_engraver"
+      \remove "Phrasing_slur_engraver"
+      \remove "Slur_engraver"
+      \remove "Script_engraver"
+      \remove "Beam_engraver"
+      \remove "Auto_beam_engraver"
+    }
+    \context {
+      \Staff
+      \remove "Accidental_engraver"
+      \remove "Key_engraver"
+      \remove "Clef_engraver"
+      \remove "Bar_engraver"
+      \consists "Pitch_squash_engraver"
+      \remove "Time_signature_engraver"
+    }
+  }
+}
+@end lilypond
+
+@noindent
+le graveur de clef (@code{Clef_engraver}) définit un point de
+référence pour la portée
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+
+\score {
+  \topVoice
+  \layout {
+    \context {
+      \Voice
+      \remove "Stem_engraver"
+      \remove "Phrasing_slur_engraver"
+      \remove "Slur_engraver"
+      \remove "Script_engraver"
+      \remove "Beam_engraver"
+      \remove "Auto_beam_engraver"
+    }
+    \context {
+      \Staff
+      \remove "Accidental_engraver"
+      \remove "Key_engraver"
+      \remove "Bar_engraver"
+      \remove "Time_signature_engraver"
+    }
+  }
+}
+@end lilypond
+
+@noindent
+et le graveur de hampes (@code{Stem_engraver}) ajoute les hampes :
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+
+\score {
+  \topVoice
+  \layout {
+    \context {
+      \Voice
+      \remove "Phrasing_slur_engraver"
+      \remove "Slur_engraver"
+      \remove "Script_engraver"
+      \remove "Beam_engraver"
+      \remove "Auto_beam_engraver"
+    }
+    \context {
+      \Staff
+      \remove "Accidental_engraver"
+      \remove "Key_engraver"
+      \remove "Bar_engraver"
+      \remove "Time_signature_engraver"
+    }
+  }
+}
+@end lilypond
+
+Le graveur de hampe est notifié de chaque tête de note qui survient.
+Chaque fois qu'une tête de note --- plusieurs pour un accord --- est
+rencontrée, un objet hampe est créé et connecté à la tête de note.  En
+ajoutant des graveurs pour les barres de ligature, les liaisons, les
+accents, les altérations accidentelles, les barres de mesure, la
+métrique, et les armures, nous obtenons un jeu de notation complet.
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+\score { \topVoice }
+@end lilypond
+
+Ce système fonctionne bien pour de la musique monodique, mais qu'en
+est-il de la polyphonie ? En notation polyphonique, plusieurs voix
+peuvent partager une portée.
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+\new Staff << \topVoice \\ \botVoice >>
+@end lilypond
+
+Dans cette situation, la portée et les altérations accidentelles sont
+partagées, mais les hampes, liaisons etc., sont spécifiques à chaque
+voix.  Par conséquent, les graveurs doivent être groupés.  Les
+graveurs des têtes de notes, hampes, liaisons etc., vont dans un
+groupe appelé « contexte de Voix »@footnote{``Voice context'' en
+anglais, ``Voice'' commence par une majuscule comme tous les noms de
+contexte dans le programme LilyPond.}, alors que les graveurs des clés,
+altérations accidentelles, barres de mesure etc., vont dans un groupe
+appelé « contexte de Portée ». Dans le cas de la polyphonie, un seul
+contexte de Portée contient plusieurs contextes de Voix.  De même,
+plusieurs contextes de Portée peuvent être inclus dans un seul
+contexte de Partition.  Le contexte de Partition est le contexte de
+notation de plus haut niveau.
+
+@seealso
+
+Program reference: @internalsref{Contexts}.
+
+@lilypond[quote,ragged-right]
+\include "engraver-example.ily"
+\score {
+   <<
+      \new Staff << \topVoice \\ \botVoice >>
+      \new Staff << \pah \\ \hoom >>
+   >>
+}
+@end lilypond
 
 @node Music representation
 @section Music representation
 
-UNTRANSLATED NODE: IGNORE ME
+Idéalement, le format d'entrée pour n'importe quel système de
+formatage est une description abstraite du contenu.  Dans ce cas-ci,
+ce serait la musique elle-même.  Cela pose un formidable problème :
+comment pouvons-nous définir ce que la musique est réellement ? Plutôt
+que d'essayer de trouver une réponse, nous avons renversé la question.
+Nous écrivons un logiciel capable de produire de la musique écrite, et
+adaptons le format pour atteindre la plus grande concision possible.
+Quand le format ne peut plus être simplifé, il nous reste par
+définition le contenu lui-même.  Notre logiciel sert de définition
+formelle d'un document de musique.
+
+La syntaxe est également l'interface utilisateur pour LilyPond, par
+conséquent il est facile de saisir
+
+@example
+c'4 d'8
+@end example
+
+@noindent
+c'est-à-dire un do central noire et, juste au-dessus un ré croche
+
+@lilypond[quote,fragment]
+c'4 d'8
+@end lilypond
+
+Sur une échelle microscopique, une telle syntaxe est facile à
+utiliser.  A plus grande échelle, la syntaxe a besoin aussi de
+structure.  Comment serait-il possible autrement de rentrer des
+pièces complexes comme des symphonies ou des opéras? La structure
+est formée par le concept d'expression musicale : en combinant
+de petits fragments de musique pour en former de plus grands, on peut
+exprimer de la musique plus complexe.  Par exemple
+
+@lilypond[quote,verbatim,fragment,relative=1]
+c4
+@end lilypond
+
+@noindent
+Des accord peuvent être construits avec @code{<<} et @code{>>} autour
+des notes.
+
+@c < > is not a music expression,
+@c so we use <<>> iso. <> to drive home the point of
+@c expressions.  Don't change this back --hwn.
+@example
+<<c4 d4 e4>>
+@end example
+
+@lilypond[quote,fragment,relative=1]
+\new Voice { <<c4 d4 e>> }
+@end lilypond
+
+@noindent
+Cette expression est mise dans une séquence en l'encadrant avec des
+accolades @code{@{@tie{}@dots{}@tie{}@}}
+
+@example
+@{ f4 <<c4 d4 e4>> @}
+@end example
+
+@lilypond[quote,relative=1,fragment]
+{ f4 <<c d e4>> }
+@end lilypond
+
+@noindent
+Ceci est également une expression, et peut donc encore une fois
+être combinée avec d'autres expressions simultanées (une blanche)
+en utilisant <<, @code{\\}, et >>
+
+@example
+<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
+@end example
+
+@lilypond[quote,fragment,relative=2]
+\new Voice { << g2 \\ { f4 <<c d e>> } >> }
+@end lilypond
+
+De telles strucutres récursives peuvent être spécifiées formellement
+et de manière ordonnée dans une grammaire indépendante de tout
+contexte.  Le code d'analyse est aussi générée à partir de cette
+grammaire.  Autrement dit, la syntaxe de LilyPond est définie
+clairement et sans ambiguités.
+
+L'interface utilisateur et la syntaxe sont ce que les gens voient et
+manipulent le plus.  Elles sont e npartie une affaire de goût, et
+aussi sujettes à beaucoup de discussions.  Même si ces discussions sur
+les goûts ont leur mérite, elles ne sont pas très productives.  D'un
+point de vue plus large sur LilyPond, l'importance de la syntaxe est
+minime : il est facile d'inventer une syntaxe concise, alors qu'écrire
+un code de formatage décent est beaucoup plus difficile.  Ceci est
+également illustré par le nombre de lignes de codes pour les
+composants respectifs : l'analyse et la représentation représentent
+moins de 10% du code source.
 
 @node Example applications
 @section Example applications
 
-UNTRANSLATED NODE: IGNORE ME
+Nous avons conçu Lilypond comme une expérimentation visant à
+concentrer l'art de la gravure musicale dans un logiciel.  Grâce à
+tout ce dur labeur, le programme peut maintenant être utilisé pour
+accomplir des travaux utiles.  L'application la plus simple est
+d'imprimer des notes :
+
+@lilypond[quote,relative=1,fragment]
+\time 2/4 c4 c g'4 g a4 a g2
+@end lilypond
+
+@noindent
+En ajoutant des noms d'accords et des paroles, nous obtenons
+une partition de chanson :
+
+@lilypond[quote,ragged-right]
+<<
+   \chords { c2 c f2 c }
+   \new Staff \relative c' { \time 2/4 c4 c g'4 g a4 a g2 }
+   \new Lyrics \lyricmode { twin4 kle twin kle lit tle star2 }
+>>
+@end lilypond
+
+La notation polyphonique et la musique pour piano peuvent également
+être générées.  L'exemple suivant associe quelques constructions
+plus exotiques :
+
+@lilypondfile[quote,ragged-right]{screech-boink.ly}
+
+Les extraits exposés ici ont tous été écrits à la main, mais ce n'est
+pas une obligation.  Puisque le moteur de formatage est en grande
+partie automatique, il peut servir de sortie pour d'autres programmes
+qui manipulent la musique.  Par exemple, il peut être utilisé pour
+convertir des bases de données d'extraits musicaux en images pour des
+sites Internet et des présentations multimédias.
+
+Ce manuel montre également une application : le format d'entrée est du
+texte, et peut donc facilement être intégrés dans d'autres formats
+basés sur le texte comme @LaTex{}, HTML, ou dans le cas de ce manuel,
+Texinfo.  À l'aide d'un programme spécial, les extraits de code
+peuvent être remplacés par des images de musiques dans les fichiers de
+sortie PDF ou HTML.  Cela donne la possibilité de mélanger de la
+musique et du texte dans les documents.
+
+
 
 @node About this manual
 @section About this manual
 
-UNTRANSLATED NODE: IGNORE ME
+Le manuel est divisé en chapitres comme suit :
+@itemize @bullet
+
+@item
+@ifhtml
+Le
+@end ifhtml
+@emph{@ref{Tutorial}}
+propose une introduction en douceur à la typographie musicale.
+Les utilisateurs débutants sont invités à commencer ici.
+
+@item
+@emph{@ref{Putting it all together}}
+explique des concepts généraux du format de ficheir ly. Si vous n'êtes
+pas certain de l'endroit où placer une commande, lisez ce chapitre !
+
+@item
+@emph{@ref{Working on LilyPond projects}}
+montre des utilisations pratiques de LilyPond et donne des conseils
+afin d'éviter les problèmes les plus courants.
+
+@item
+@emph{@ref{Tweaking output}}
+est une introduction aux retouches de gravure avec LilyPond.
+
+@item
+@emph{@ref{Basic notation}}
+traite de sujets groupés par type de notation.  Cette section
+détaille la notation de base, qui sera utile dans la plupart des
+projets de partition.
+
+@item
+@emph{@ref{Instrument-specific notation}}
+traite de sujets groupés par type de notation.  Cette section détaille
+des notations spéciales qui ne seront utiles que pour des types
+particuliers d'instruments ou la voix.
+
+@item
+@emph{@ref{Advanced notation}}
+traite de sujets groupés par type de notation.  Cette section
+donne des précisions à propos de notations compliquées et
+inhabituelles
+
+@item
+@emph{@ref{Changing defaults}}
+explique comment ajuster finement la mise en page.
+
+@item
+@emph{@ref{Non-musical notation}}
+traite de sorties non musicales comme les titres, les mouvements
+multiples, et la sélection des instruments MIDI.
+
+@item
+@emph{@ref{Spacing issues}}
+traite de sujets affectant la sortie globale, comme sélectionner
+la taille de papier ou spécifier les sauts de page.
+
+@item
+@emph{@ref{Interfaces for programmers}}
+explique comment créer des fonctions de musique.
+
+@item
+@emph{@ref{Running LilyPond}}
+montre comment lancer LilyPond et ses programmes auxiliaires.  De
+plus, cette section explique comment mettre à jour des fichiers
+source écrits pour d'anciennes versions de LilyPond.
+
+@item
+@emph{@ref{LilyPond-book}} 
+explique comment créer des documents intégrant des exemples musicaux,
+comme ce manuel.
+
+@item
+@emph{@ref{Converting from other formats}}
+explique comment exécuter les programmes de conversion.  Ces programmes
+sont livrés avec le paquetage Lilypond, et convertissent une variété
+de formats musicaux vers le format @code{.ly}.
+
+@item
+@ifhtml
+La
+@end ifhtml
+@emph{@ref{Literature list}}
+contient un choix de livres de référence utiles pour ceux qui veulent
+en savoir plus sur la notation et la gravure.
+
+@item
+Le
+@emph{@ref{Scheme tutorial}}
+propose une courte introduction à Scheme, le langage de programmation
+utilisé par les fonctions de musique.
+
+@item
+@ifhtml
+Les
+@end ifhtml
+@emph{@ref{Notation manual tables}}
+sont un ensemble de tableaux montrant les noms d'accord, les
+instruments MIDI, les noms de couleur, et la police Feta.
+
+@item
+Les
+@emph{@ref{Example templates}}
+procurent des modèles de pièces LilyPond.  Copiez et collez un modèle
+dans un fichier, ajouter les notes, et c'est prêt!
+
+@item
+La
+@emph{@ref{Cheat sheet}}
+est une référence pratique des commandes LlyPond les plus courantes.
+
+@item
+L'
+@emph{@ref{LilyPond command index}}
+est un index de toutes les @code{\commandes} LilyPond.
+
+@item
+L'
+@emph{@ref{LilyPond index}}
+est un index complet.
+
+@end itemize
+
+Une fois que vous êtes un utilisateur expérimenté, vous pouvez
+utiliser le manuel comme référence : il y a un index
+exhaustif@footnote{Si vous cherchez quelque chose, et que vous ne le
+trouvez pas dans le manuel, ceci est considéré comme un bogue ; dans
+ce cas, envoyez un rapport de bogue s'il-vous-plaît.}, mais ce
+document est aussi disponible en
+@iftex
+une seule grande page HTML,
+@end iftex
+@ifhtml
+@uref{source/Documentation/user/lilypond.html, une seule grande page},
+@end ifhtml
+dans laquelle la fonction recherche d'un navigateur Web est très utile
+pour trouver quelque chose. 
+@cindex search in manual
+@cindex using the manual
+
+@c FIXME:
+@c add/integrate glossary, put in list above
+Si vous n'êtes pas familier avec la notation musicale ou la
+terminologie, il est conseillé de consulter le glossaire, notamment
+pour les parties non encore traduites de la documentation.
+@iftex
+Le glossaire de musique explique les termes musicaux, et inclut
+les traductions vers divers languages.  C'est un document séparé,
+disponible dans les formats HTML et PDF.
+@end iftex
+@ifnottex
+Le @ref{Top,Music glossary,,music-glossary} explique les termes
+musicaux et inclut les traductions vers divers languages.  Il est
+également disponible au format PDF. 
+@end ifnottex
+@cindex idiom
+@cindex jargon
+@cindex terminology
+@cindex foreign languages
+@cindex language
+
+
+Ce manuel ne serait pas complet sans un certain nombre d'autres
+documents.  Ils ne sont pas tous disponibles au format papier, mais
+devraient être inclus dans le paquetage de documentation pour votre
+plateforme.
+
+@itemize @bullet
+@item
+@iftex
+Référence du programme
+@end iftex
+@ifnottex
+@ref{Top,Program reference,,lilypond-internals}.
+@end ifnottex
+
+La référence du programme est un groupe de pages HTML étroitement
+liées entre elles, qui documente tous les petits détails de chaque
+classe, objet et fonction de LilyPond.  Elle est produite directement
+à partir des définitions de formatage utilisées.
+
+Presque toutes les fonctions de formatage utilisées en interne sont
+directement disponibles pour l'utilisateur.  Par exemple, toutes les
+variables qui contrôlent les épaisseurs, les distances etc., peuvent
+être modifiées dans les fichiers d'entrée.  Il y a un grand nombre
+d'options de formatage, et elles sont toutes décrites dans ce
+document.  Chaque section du manuel de notation a une section @b{Voir
+aussi} qui réfère à la documentation générée automatiquement.  Dans la
+documentation au format HTML, ces sous-sections ont des liens
+cliquables.
+
+@cindex snippets
+@item
+@ifnothtml
+Exemples de source divers.
+@end ifnothtml
+@ifhtml
+@c Works, but link name is not so nice; so write-out macro
+@c @inputfileref{input/test,Various input examples}.
+@uref{source/input/test/collated-files.html,Exemples de source divers}.
+@end ifhtml
+
+Cette ensemble de fichiers montre des trucs et astuces variés, sous
+la forme d'un large fichier HTML, avec des images et des textes
+explicatifs.
+
+@item
+@ifnothtml
+Les tests de régression.
+@end ifnothtml
+@ifhtml
+@c Works, but link name is not so nice; so write-out macro
+@c @inputfileref{input/regression,The regression tests}.
+@uref{source/input/regression/collated-files.html,Les tests de régression}.
+@end ifhtml
+
+Cet ensemble de fichiers teste chaque fonctionnalité de notation et de
+gravure de Lilypond en un seul fichier.  L'ensemble est surtout
+présent pour nous aider à deboguer les problèmes, mais peut également
+être instructif pour voir comment nous testons le logiciel.  Le format
+est identique au document de trucs et astuces.
+@end itemize
+
+
+Dans tous les documents HTML qui incluent des fragments musicaux,
+le code Lilypond utilisé pour produire l'image peut être vu en
+cliquant l'image.
+
+L'emplacement des fichiers de documentation mentionné ici peut varier
+d'un système à l'autre.  De temps en temps, ce manuel fait référence
+aux fichiers d'exemple et d'initialisation.  Tout au long de ce
+manuel, nous donnons les emplacements des fichiers d'entrée
+relativement au répértoire racine de l'archive source.  Par exemple,
+@file{input/@/test/@/bla@/.ly} peut référer au fichier
+@file{lilypond@/-2.8.0/@/input/@/test/@/bla@/.ly}.  Dans les paquets
+binaires pour les plateformes Unix, la documentation et les exemples
+se trouvent généralement sous @file{/usr/@/share/@/doc/@/lilypond/}.
+Les fichiers d'initialisation, par exemple @file{scm/@/lily@/.scm}, ou
+@file{ly/@/engraver@/-init@/.ly}, se trouvent généralement dans le
+répértoire @file{/usr/@/share/@/lilypond/}.
+
+@cindex adjusting output
+@cindex variables
+@cindex properties
+@cindex lilypond-internals
+@cindex internal documentation
+@cindex Scheme
+@cindex extending lilypond
+@cindex index
+
+Pour finir, ce manuel et les autres sont disponibles en ligne, à la
+fois aux formats PDF et HTML, à partir du site de LilyPond, accessible
+à l'adresse @uref{http://@/www@/.lilypond@/.org/}.
 
index a01caad7e5a543f67d3110da30dcb7c227598484..5f740da1ab0384d53ee84fe250cc302c62196ae8 100644 (file)
@@ -1,5 +1,14 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node LilyPond-book
-@chapter 
+@chapter @command{lilypond-book}: Integrating text and music
 
 UNTRANSLATED NODE: IGNORE ME
 
@@ -13,6 +22,7 @@ UNTRANSLATED NODE: IGNORE ME
 * Invoking lilypond-book::
 * Filename extensions::
 * Many quotes of a large score::
+* Inserting LilyPond output into OpenOffice.org::  
 * Inserting LilyPond output into other programs::
 @end menu 
 @node An example of a musicological document
@@ -64,6 +74,11 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
+@node Inserting LilyPond output into OpenOffice.org
+@section Inserting LilyPond output into OpenOffice.org
+
+UNTRANSLATED NODE: IGNORE ME
+
 @node Inserting LilyPond output into other programs
 @section Inserting LilyPond output into other programs
 
index 6b6525419196e17dcd24f76ff2ffbf91587ee5c4..b173f38eed6cba81f1e99fd61ae2aee80fbfad79 100644 (file)
@@ -1,4 +1,11 @@
-\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @setfilename lilypond.info
 @settitle GNU LilyPond
 @iftex
@@ -83,7 +90,7 @@ Free Documentation License''.
 @top GNU LilyPond --- The music typesetter
 @c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX.
 
-Ce document est le manuel de l'utilisateur pour GNU LilyPond 2.8.X.
+Ce document est le manuel de l'utilisateur pour GNU LilyPond 2.10.x.
 @ifhtml
 (Allez au bas de la page pour voir le numéro de version exact).
 @end ifhtml
@@ -112,7 +119,7 @@ Manuel d'apprentissage
 Manuel de référence
 
 * Basic notation::                 notation musicale standard.
-* Instrument-specific notation::
+* Instrument-specific notation::   notation spécifique à un instrument.
 * Advanced notation::              notation plus rarement utilisée.
 * Changing defaults::              retoucher la mise en forme.
 * Non-musical notation::           aspects autres que la notation musicale.
@@ -174,11 +181,15 @@ Annexes
 @node LilyPond command index
 @appendix LilyPond command index
 
+UNTRANSLATED NODE: IGNORE ME
+
 @printindex ky
 
 @node LilyPond index
 @appendix LilyPond index
 
+UNTRANSLATED NODE: IGNORE ME
+
 @printindex cp
 
 @bye
index 1400e5288afe83d7e08167c889a82ee18044e038..5a5a0434692ad8802eda974ffa8d4375caf8114c 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Literature list
 @appendix Literature list
 
index 38977cad047ae761b4f6a6e83c34aec63cdf954f..9e28ccf00fa9751ea1b74cc385f4d3999ae793e3 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Non-musical notation
 @chapter Non-musical notation
 
index 21642c5fe8045e9504d2e2030414fe13339891e4..e47578ee5417df6d29f06bdb18b7157017fcd7a5 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Notation manual tables
 @appendix Notation manual tables
 
index 91a0b4235b130db6ecb12ba588d15e4a9d44041f..d0bef0dbeffebfe3161e50ab608e5a8081623b6a 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Preface
 @unnumbered Preface
 
index 2417124af9ce2b50d1aa493d22c5a1c64293c1f3..27ae074aa0b431021117ce227f08ee3d545161f7 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Interfaces for programmers
 @chapter Interfaces for programmers
 
@@ -22,6 +31,7 @@ UNTRANSLATED NODE: IGNORE ME
 * Paired substitution functions::
 * Mathematics in functions::
 * Void functions::
+* Functions without arguments::
 @end menu 
 @node Overview of music functions
 @subsection Overview of music functions
@@ -48,6 +58,11 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
+@node Functions without arguments
+@subsection Functions without arguments
+
+UNTRANSLATED NODE: IGNORE ME
+
 @node Programmer interfaces
 @section Programmer interfaces
 
index 16d2054dfb1aa181df967e52eaf5742114c02c15..e7b309bed7c4beb7e8df9db2310647f07831a490 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Putting it all together
 @chapter Putting it all together
 
index 438c5bf07254ec50fc4adbef274bad9225262b21..f996d6152c40d1974ebd2c66820dc45fc4dfb5e7 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Running LilyPond
 @chapter Running LilyPond
 
index d89fb346fd4a9f94dbe277dc7140d57eaacf8ce7..08b5616aa5086858064d6982c7c9e2c2a8a6709c 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: 64f0d86a7c0987b311bfdfdfeddfa063e1f2d6e7
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Scheme tutorial
 @appendix Scheme tutorial
 
index bb9119890ea450e9e37fff4176a165ce4b429bd9..fa19990b91ef1e2b3bef699918019d7004790049 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Spacing issues
 @chapter Spacing issues
 
@@ -10,7 +19,8 @@ UNTRANSLATED NODE: IGNORE ME
 * Horizontal spacing::
 * Breaks::
 * Displaying spacing::
-@end menu 
+@end menu
+
 @node Paper and pages
 @section Paper and pages
 
@@ -19,7 +29,8 @@ UNTRANSLATED NODE: IGNORE ME
 @menu 
 * Paper size::
 * Page formatting::
-@end menu 
+@end menu
 @node Paper size
 @subsection Paper size
 
index bd3c4228a027b78389ec888de516e717bc6ade38..efe7bcec0bfa0cc81d2c51b69f3f3c75aaab9c6b 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: ac7d0e72b32b6a11470f598f2bee180b11402fe8
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Example templates
 @appendix Example templates
 
index b8869424a5eca992624f868327d3c4bdc8343018..e6a719979293f6c90cd9b0dda6ae4f1bc4fe153e 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: 64f0d86a7c0987b311bfdfdfeddfa063e1f2d6e7
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @c TODO:
 @c   * more details about running lilypond; error messages,
 @node Tutorial   
 @chapter Tutorial
 
-Ce tutoriel commence par une courte introduction au langage utilisé
-par LilyPond pour représenter la musique.  Après ce premier contact,
-nous verrons comment produire une partition à imprimer.  Vous serez
-alors capable de créer et d'imprimer vos propres partitions.
+Ce tutoriel commence par une introduction au langage musical utilisé
+par LilyPond, qui vous permettra de faire fonctionner le logiciel pour
+prosuire une partition.  Après ce premier contact, nous verrons comment
+créer des partitions utilisant une notation musicale courante.
 
 @ifhtml
 Beaucoup de gens apprennent à utiliser les programmes en les essayant
@@ -43,7 +49,7 @@ pour une consultation rapide.
 
 @menu
 * First steps::                 
-* Running LilyPond for the first time::  
+* Second steps::  
 * More about pitches::          
 * Entering ties::               
 * Automatic and manual beams::  
@@ -75,15 +81,17 @@ entrez
 
 @example
 @{
-c d e f g a b
+c' d' e' f' g' a' b' c''
 @}
 @end example
 
 @noindent
 le résultat ressemblera à 
 
-@lilypond[fragment,quote,notime,relative=1]
-c d e f g a b
+@lilypond[quote]
+{
+c' d' e' f' g' a' b' c''
+}
 @end lilypond
 
 @c DIV specific
@@ -92,10 +100,116 @@ re mi fa sol la si}, en insérant au début du fichier la ligne
 @samp{\include "catalan.ly"}
 @c END DIV
 
-Tout extrait de code LilyPond doit être entouré d'une @{paire
-d'accolades@}.  Bien que la plupart des exemples de ce manuel n'en
-comportent pas, ne les oubliez pas dans vos compositions !
+@emph{Attention :} tout extrait de code LilyPond doit être entouré
+d'une @{paire d'accolades@}.  De plus, pour éviter toute ambiguïté, il
+est préférable d'entourer les accolades par des espaces ou retours à
+la ligne.  Bien que certains exemples de ce manuel ne comportent pas
+d'accolades, ne les oubliez pas dans vos partitions !
+
+@cindex Case sensitive
+De plus, LilyPond est sensible à la casse.  @code{ @{ c d e @} } est
+un code valide ; @code{ @{ C D E @} } produira un message d'erreur.
+
+@unnumberedsubsec Entering music and viewing output
+
+Dans cette section nous expliquerons quelles commandes exécuter et
+comment voir ou imprimer le résultat de LilyPond.
+
+@unnumberedsubsubsec MacOS X
+
+Si vous double-cliquez sur LilyPond.app, un fichier d'exemple sera
+ouvert.  Sauvegardez-le, par exemple, sous @file{test.ly} sur votre
+bureau, et traitez-le ensuite avec la commande du menu @samp{Compile >
+Typeset File}.  Le fichier PDF résultant est alors affiché sur votre
+écran.
+
+Pour l'utilisation future de LilyPond, vous commencerez certainement
+en sélectionnant « Nouveau » ou « Ouvrir ».
+
+Notez que le premier démarrage peut prendre une minute ou deux, car
+toutes les polices systèmes doivent être d'abord analysées.
+
+@unnumberedsubsubsec Windows
+
+Sous Windows, démarrez un éditeur de texte @footnote{N'importe quel
+éditeur simple ou orienté programmation, qui prend en charge le codage
+de caractères UTF-8, fera l'affaire, par exemple Notepad.  N'utilisez
+pas de traitement de texte car ceux-ci insèrent des codes de formatage
+qui posent problème à LilyPond.} et saisissez
+
+@verbatim
+{ c' e' g' c'' }
+@end verbatim
+
+Enregistrez-le sur le bureau sous @file{test.ly} et vérifiez bien
+qu'il ne s'appelle pas @file{test.ly.TXT}.  Double-cliquez sur le
+fichier @file{test.ly} pour le traiter et afficher le fichier
+PDF résultant.
+
+
+@unnumberedsubsubsec Unix
+
+Commencez par ouvrir une fenêtre de terminal et un éditeur de
+texte.  Par exemple, vous pouvez ouvrir un xterm et exécuter
+@code{joe}.  @footnote{Des fichiers de macros pour les fans de VIM et un
+@code{LilyPond-mode} pour les fans d'Emacs existent.   S'ils ne sont pas
+encore installés, consultez le fichier @file{INSTALL.txt}.} Dans votre
+éditeur, entrez le texte suivant et sauvegardez le fichier sous
+@file{test.ly}
+
+@verbatim
+{ c' e' g' c'' }
+@end verbatim
+
+@noindent
+Pour traiter @file{test.ly}, procédez comme ceci : 
+
+@example
+lilypond test.ly
+@end example
+
+@noindent
+Vous verrez quelque chose ressemblant à :
+
+@example
+lilypond test.ly
+GNU LilyPond 2.10.0
+Processing `test.ly'
+Parsing...
+Interpreting music... [1]
+Preprocessing graphical objects...
+Calculating line breaks... [2]
+Layout output to `test.ps'...
+Converting to `test.pdf'...
+@end example
+
+@c DIV specific
+Suivant votre installation, les messages peuvent être traduits.
+@c END DIV
+
+@cindex PDF file
+@cindex Viewing music
+
+@noindent
+Le résultat est le fichier @file{test.pdf}, que vous pouvez imprimer
+ou visualiser avec les outils standards de votre système
+d'exploitation.  @footnote{Si votre système ne dispose pas des outils
+nécessaires, vous pouvez essayer
+@uref{http://@/www@/.cs@/.wisc@/.edu/@/~ghost/,Ghostscript}, un
+programme pour voir et imprimer les fichiers PDF et PostScript.}
+
+
+@node Second steps
+@section Second steps
+
+@emph{N'oubliez pas :} tout extrait de musique source LilyPond doit
+être entouré d'@{accolades@}.  Pour éviter toute ambiguïté, il
+est préférable d'entourer les accolades par des espaces ou retours à
+la ligne.  Bien que certains exemples de ce manuel ne comportent pas
+d'accolades, ne les oubliez pas dans vos partitions !
 
+@c will be removed once the tutorial either explains \relative or
+@c examples are fixed so they don't use it.  -gp
 De plus, de nombreux exemples utilisent le mode @code{relative}.  Ceci
 est expliqué à la section @ref{Octave entry} ; sachez dès à présent
 que certains exemples devraient être libellés sous la forme 
@@ -108,6 +222,10 @@ De nombreux exemples ont aussi été compressés horizontalement pour
 Enfin, LilyPond est sensible à la casse.  @code{ @{ c d e @} } est
 un code valide ; @code{ @{ C D E @} } produira un message d'erreur.
 
+@c  End of latest re-write.  Since I have no life, I may do more
+@c  work on this, but I'd really like to have a Doc Helper take
+@c  over this task.  -gp
+
 La durée (@rglos{duration}) d'une note est spécifiée par un nombre
 qui suit le nom de cette note : @samp{1} pour une ronde (@rglos{whole
 note}), @samp{2} pour une blanche (@rglos{half note}), @samp{4} pour
@@ -225,98 +343,6 @@ voir @ref{Time signature}.
 @end quotation
 
 
-@node Running LilyPond for the first time
-@section Running LilyPond for the first time
-
-@c cheesy title to avoid clash with chapter name.
-
-Dans la section précédente, nous avons vu quelles sortes d'éléments
-peut contenir un fichier LilyPond.  Dans cette section nous
-expliquerons quelles commandes exécuter et comment voir ou imprimer le
-résultat de LilyPond.  Si vous n'avez jamais utilisé
-LilyPond, voulez tester votre installation ou souhaitez compiler
-vous-même un fichier d'exemple, lisez cette section.
-
-@unnumberedsubsec MacOS X
-
-Si vous double-cliquez sur LilyPond.app, un fichier d'exemple sera
-ouvert.  Sauvegardez-le, par exemple, sous @file{test.ly} sur votre
-bureau, et traitez-le ensuite avec la commande du menu 
-@samp{Compile > Typeset File}.
-Le fichier PDF résultant est alors affiché sur votre écran.
-
-Prenez note que le premier démarrage prend une minute ou deux ,
-car toutes les polices systèmes doivent être d'abord analysées.
-
-@unnumberedsubsec Windows
-
-Sous Windows, démarrez un éditeur de texte @footnote{N'importe quel
-éditeur simple ou orienté programmation, qui prend en charge le
-codage de caractères UTF-8, fera l'affaire, par exemple
-Notepad.  N'utilisez pas de traitement de texte car ceux-ci insèrent
-des codes de formatage qui posent problème à LilyPond.} et saisissez
-
-@verbatim
-@{ c'4 e' g' @}
-@end verbatim
-
-Enregistrez le sur le bureau sous @file{test.ly} et vérifiez bien
-qu'il ne s'appelle pas @file{test.ly.TXT}.  Double-cliquez sur le
-fichier @file{test.ly} pour le traiter et afficher le fichier
-PDF résultant.
-
-
-@unnumberedsubsec Unix
-
-Commencez par ouvrir une fenêtre de terminal et un éditeur de
-texte.  Par exemple, vous pouvez ouvrir un xterm et exécuter
-@code{joe}.  @footnote{Des fichiers de macros pour les fans de VIM et un
-@code{LilyPond-mode} pour les fans d'Emacs existent.   S'ils ne sont pas
-encore installés, consultez le fichier @file{INSTALL.txt}.} Dans votre
-éditeur, entrez le texte suivant et sauvegardez le fichier sous
-@file{test.ly}
-
-@verbatim
-@{ c'4 e' g' @}
-@end verbatim
-
-@noindent
-Pour traiter @file{test.ly}, procédez comme ceci : 
-
-@example
-lilypond test.ly
-@end example
-
-@noindent
-Vous verrez quelque chose ressemblant à :
-
-@example
-lilypond test.ly
-GNU LilyPond 2.10.0
-Processing `test.ly'
-Parsing...
-Interpreting music... [1]
-Preprocessing graphical objects...
-Calculating line breaks... [2]
-Layout output to `test.ps'...
-Converting to `test.pdf'...
-@end example
-
-@c DIV specific
-Suivant votre installation, les messages peuvent être traduits.
-@c END DIV
-
-@cindex DVI file
-@cindex Viewing music
-@cindex xdvi
-@noindent
-Le résultat est le fichier @file{test.pdf} que vous pouvez imprimer ou
-visualiser avec les outils standards de votre système d'exploitation.
-@footnote{Si votre système ne dispose pas des outils nécessaires,
-vous pouvez essayer
-@uref{http://@/www@/.cs@/.wisc@/.edu/@/~ghost/,Ghostscript}, un
-programme pour voir et imprimer les fichiers PDF et PostScript.}
-
 @node More about pitches
 @section More about pitches 
 
index ca79cdefce1f3360585779db3d3192e6c8580fbf..032f76c453ead135bd3efc5a8831de3cbf536147 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: 64f0d86a7c0987b311bfdfdfeddfa063e1f2d6e7
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Tweaking output
 @chapter Tweaking output
 
@@ -10,6 +19,7 @@ UNTRANSLATED NODE: IGNORE ME
 * Default files::
 * Fitting music onto fewer pages::
 * Advanced tweaks with Scheme::
+* Avoiding tweaks with slower processing::
 @end menu 
 @node Moving objects
 @section Moving objects
@@ -41,3 +51,7 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
+@node Avoiding tweaks with slower processing
+@section Avoiding tweaks with slower processing
+
+UNTRANSLATED NODE: IGNORE ME
index a05a3bc4336798c7905d34c23425b62c8253c0d6..f3e00af868664006092e6c51182ba6d377fd902c 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: 64f0d86a7c0987b311bfdfdfeddfa063e1f2d6e7
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Working on LilyPond projects
 @chapter Working on LilyPond projects
 
index df2928ed946eb5e2498df476a60510a6e6b2a116..11c99de0565a20f421b80a593cb943b1351ac990 100644 (file)
            <li>
            <a class="title" href="user/lilypond/Tutorial.html">Tutorial</a>
              <br>(start here)
+
+           <li>
+           <a class="title" href="user/lilypond/Tutorial.fr.html">Tutoriel en français</a>
+             <br>(for French-speaking users)
          </ul>
          </td>
          <td class="right-column">
index 23939296d006e88188dc24fe75a4a8c4b172e3f4..925cb7e5a12612e550d771b1c82d4a9d22db0192 100644 (file)
@@ -14,7 +14,7 @@ messages: $(MO_FILES)
        done
 
 po-update:
-       $(PYTHON) $(depth)/buildscripts/texi-langutils.py -d $(outdir) -o doc.pot --gettext ../$(depth)/Documentation/user/lilypond.tely
+       $(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -o doc.pot --gettext ../$(depth)/Documentation/user/lilypond.tely
        msgmerge -U lilypond-doc.pot $(outdir)/doc.pot
        for i in $(CATALOGS); do \
          msgmerge -U $$i.po lilypond-doc.pot; \
index 990cb2a490e7c95fc462a81190ecff1d7487221b..56a829cb7c5b3519b981dedae20190595b11b161 100644 (file)
@@ -3,13 +3,13 @@
 # Copyright (C) 2006 Han-Wen Nienhuys, Jan Nieuwenhuizen
 # This file is distributed under the same license as the lilypond package.
 #
-# John Mandereau <john.mandereau@free.fr>, 2006.
+# John Mandereau <john.mandereau@free.fr>, 2006, 2007.
 msgid ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-19 10:23+0100\n"
-"PO-Revision-Date: 2006-11-25 16:47+0100\n"
+"POT-Creation-Date: 2007-01-07 16:10+0100\n"
+"PO-Revision-Date: 2007-01-07 16:33+0100\n"
 "Last-Translator: John Mandereau <john.mandereau@free.fr>\n"
 "Language-Team: Français <lilypond-user-fr@gnu.org>\n"
 "MIME-Version: 1.0\n"
@@ -21,7 +21,7 @@ msgid "Top"
 msgstr "Sommaire"
 
 msgid "GNU LilyPond --- The music typesetter"
-msgstr "GNU LilyPond -- le système de gravure musicale"
+msgstr "GNU LilyPond --- le système de gravure musicale"
 
 msgid "LilyPond command index"
 msgstr "Index des commandes LilyPond"
@@ -71,8 +71,8 @@ msgstr "Tutoriel"
 msgid "First steps"
 msgstr "Premiers pas"
 
-msgid "Running LilyPond for the first time"
-msgstr "Lancer LilyPond pour la première fois"
+msgid "Entering music and viewing output"
+msgstr "Saisir la musique et visualiser la partition produite"
 
 msgid "MacOS X"
 msgstr "MacOS X"
@@ -83,6 +83,9 @@ msgstr "Windows"
 msgid "Unix"
 msgstr "Unix"
 
+msgid "Second steps"
+msgstr "Initiation à la notation de base"
+
 msgid "More about pitches"
 msgstr "Les hauteurs en détail"
 
@@ -138,403 +141,407 @@ msgid "After the tutorial"
 msgstr "Après le tutoriel"
 
 msgid "Putting it all together"
-msgstr ""
+msgstr "Tout mettre en ordre"
 
 msgid "Extending the templates"
-msgstr ""
+msgstr "Étendre les modèles"
 
 msgid "How LilyPond files work"
-msgstr ""
+msgstr "Comment les fichiers LilyPond sont organisés"
 
 msgid "Score is a single musical expression"
-msgstr ""
+msgstr "La partition est une unique expression musicale"
 
 msgid "Working on LilyPond projects"
-msgstr ""
+msgstr "Travailler sur des projets LilyPond"
 
 msgid "Suggestions for writing LilyPond files"
-msgstr ""
+msgstr "Suggestions de saisie des fichiers LilyPond"
 
 msgid "General suggestions"
-msgstr ""
+msgstr "Suggestions générales"
 
 msgid "Typesetting existing music"
-msgstr ""
+msgstr "Graver de la musique existante"
 
 msgid "Large projects"
-msgstr ""
+msgstr "Vastes projets"
 
 msgid "Saving typing with identifiers and functions"
-msgstr ""
+msgstr "Économiser du temps grâce à des identificateurs et fonctions"
 
 msgid "Style sheets"
-msgstr ""
+msgstr "Feuilles de style"
 
 msgid "Updating old files"
-msgstr ""
+msgstr "Mettre à jour des anciens fichiers"
 
 msgid "Troubleshooting (taking it all apart)"
-msgstr ""
+msgstr "Résolution de problèmes --- tout remettre à plat"
 
 msgid "Tweaking output"
-msgstr ""
+msgstr "Retoucher les résultats"
 
 msgid "Moving objects"
-msgstr ""
+msgstr "Déplacer des objets"
 
 msgid "Fixing overlapping notation"
-msgstr ""
+msgstr "Corriger les collisions d'objets"
 
 msgid "Common tweaks"
-msgstr ""
+msgstr "Retouches courantes"
 
 msgid "Default files"
-msgstr ""
+msgstr "Fichiers fournis par LilyPond"
 
 msgid "Fitting music onto fewer pages"
-msgstr ""
+msgstr "Réduire le nombre de pages de la partition"
 
 msgid "Advanced tweaks with Scheme"
+msgstr "Retouches avancées avec Scheme"
+
+msgid "Avoiding tweaks with slower processing"
 msgstr ""
 
 msgid "Basic notation"
-msgstr ""
+msgstr "Notation de base"
 
 msgid "Pitches"
-msgstr ""
+msgstr "Hauteurs"
 
 msgid "Normal pitches"
-msgstr ""
+msgstr "Hauteurs naturelles"
 
 msgid "Accidentals"
-msgstr ""
+msgstr "Altérations"
 
 msgid "Cautionary accidentals"
-msgstr ""
+msgstr "Altérations de précaution"
 
 msgid "Micro tones"
-msgstr ""
+msgstr "Altérations microtonales"
 
 msgid "Notes names in other languages"
-msgstr ""
+msgstr "Noms de note dans d'autres langues"
 
 msgid "Relative octaves"
-msgstr ""
+msgstr "Octaves relatives"
 
 msgid "Octave check"
-msgstr ""
+msgstr "Vérification d'octave"
 
 msgid "Transpose"
-msgstr ""
+msgstr "Transposition"
 
 msgid "Rests"
-msgstr ""
+msgstr "Silences"
 
 msgid "Skips"
-msgstr ""
+msgstr "Silences invisibles"
 
 msgid "Rhythms"
-msgstr ""
+msgstr "Rythme"
 
 msgid "Durations"
-msgstr ""
+msgstr "Durées"
 
 msgid "Augmentation dots"
-msgstr ""
+msgstr "Points d'addition"
 
 msgid "Tuplets"
-msgstr ""
+msgstr "Nolets"
 
 msgid "Scaling durations"
-msgstr ""
+msgstr "Changement d'échelle des durées"
 
 msgid "Bar check"
-msgstr ""
+msgstr "Vérification des limites de mesure"
 
 msgid "Barnumber check"
-msgstr ""
+msgstr "Vérification du numéro de mesure"
 
 msgid "Automatic note splitting"
-msgstr ""
+msgstr "Découpage automatique des notes"
 
 msgid "Multiple notes at once"
-msgstr ""
+msgstr "Notes simultanées"
 
 msgid "Chords"
-msgstr ""
+msgstr "Accords"
 
 msgid "Stems"
-msgstr ""
+msgstr "Hampes"
 
 msgid "Basic polyphony"
-msgstr ""
+msgstr "Polyphonie basique"
 
 msgid "Explicitly instantiating voices"
-msgstr ""
+msgstr "Instantiation explicite des voix"
 
 msgid "Collision Resolution"
-msgstr ""
+msgstr "Résolution des collisions"
 
 msgid "Staff notation"
-msgstr ""
+msgstr "Notation sur la portée"
 
 msgid "Clef"
-msgstr ""
+msgstr "Clés"
 
 msgid "Key signature"
-msgstr ""
+msgstr "Armure"
 
 msgid "Time signature"
-msgstr ""
+msgstr "Métrique"
 
 msgid "Partial measures"
-msgstr ""
+msgstr "Mesures incomplètes"
 
 msgid "Bar lines"
-msgstr ""
+msgstr "Barres de mesures"
 
 msgid "Unmetered music"
-msgstr ""
+msgstr "Musique sans métrique"
 
 msgid "System start delimiters"
-msgstr ""
+msgstr "Groupements de systèmes"
 
 msgid "Staff symbol"
-msgstr ""
+msgstr "Symbole de la portée"
 
 msgid "Writing music in parallel"
-msgstr ""
+msgstr "Saisir la musique en parallèle"
 
 msgid "Connecting notes"
-msgstr ""
+msgstr "Notation couvrant plusieurs notes"
 
 msgid "Ties"
-msgstr ""
+msgstr "Liaisons de prolongation"
 
 msgid "Slurs"
-msgstr ""
+msgstr "Liaisons d'articulation"
 
 msgid "Phrasing slurs"
-msgstr ""
+msgstr "Liaisons de phrasé"
 
 msgid "Laissez vibrer ties"
-msgstr ""
+msgstr "Liaisons « laissez vibrer »"
 
 msgid "Automatic beams"
-msgstr ""
+msgstr "Barres de ligature automatiques"
 
 msgid "Manual beams"
-msgstr ""
+msgstr "Barres de ligature manuelles"
 
 msgid "Grace notes"
-msgstr ""
+msgstr "Notes d'agrément"
 
 msgid "Expressive marks"
-msgstr ""
+msgstr "Signes d'interprétation"
 
 msgid "Articulations"
-msgstr ""
+msgstr "Articulations"
 
 msgid "Fingering instructions"
-msgstr ""
+msgstr "Doigtés"
 
 msgid "Dynamics"
-msgstr ""
+msgstr "Nuances"
 
 msgid "Breath marks"
-msgstr ""
+msgstr "Signes de respiration"
 
 msgid "Trills"
-msgstr ""
+msgstr "Trilles"
 
 msgid "Glissando"
-msgstr ""
+msgstr "Glissando"
 
 msgid "Arpeggio"
-msgstr ""
+msgstr "Arpège"
 
+#, fuzzy
 msgid "Falls and doits"
-msgstr ""
+msgstr "Chutes et sauts"
 
 msgid "Repeats"
-msgstr ""
+msgstr "Répétitions"
 
 msgid "Repeat types"
-msgstr ""
+msgstr "Types de répétitions"
 
 msgid "Repeat syntax"
-msgstr ""
+msgstr "Syntaxe des répétitions"
 
 msgid "Repeats and MIDI"
-msgstr ""
+msgstr "Répétitions et MIDI"
 
 msgid "Manual repeat commands"
-msgstr ""
+msgstr "Commandes de reprise manuelles"
 
 msgid "Tremolo repeats"
-msgstr ""
+msgstr "Répétitions en trémolo"
 
 msgid "Tremolo subdivisions"
-msgstr ""
+msgstr "Subdivisions de trémolo"
 
 msgid "Measure repeats"
-msgstr ""
+msgstr "Répétitions de mesure"
 
 msgid "Instrument-specific notation"
-msgstr ""
+msgstr "Notation spécifique"
 
 msgid "Piano music"
-msgstr ""
+msgstr "Musique pour piano"
 
 msgid "Automatic staff changes"
-msgstr ""
+msgstr "Changements de portée automatiques"
 
 msgid "Manual staff switches"
-msgstr ""
+msgstr "Changements de portée manuels"
 
 msgid "Pedals"
-msgstr ""
+msgstr "Pédales"
 
 msgid "Staff switch lines"
-msgstr ""
+msgstr "Lignes de changement de portée"
 
 msgid "Cross staff stems"
-msgstr ""
+msgstr "Accords sur plusieurs portées"
 
 msgid "Chord names"
-msgstr ""
+msgstr "Accords nommés"
 
 msgid "Introducing chord names"
-msgstr ""
+msgstr "Introduction aux noms d'accords"
 
 msgid "Chords mode"
-msgstr ""
+msgstr "Mode accords"
 
 msgid "Printing chord names"
-msgstr ""
+msgstr "Imprimer des noms d'accords"
 
 msgid "Vocal music"
-msgstr ""
+msgstr "Musique vocale"
 
 msgid "Setting simple songs"
-msgstr ""
+msgstr "Écrire des chansons simples¿"
 
 msgid "Entering lyrics"
-msgstr ""
+msgstr "Saisie des paroles"
 
 msgid "Hyphens and extenders"
-msgstr ""
+msgstr "Traits d'union et de prolongation"
 
 msgid "The Lyrics context"
-msgstr ""
+msgstr "Le contexte de paroles (Lyrics)"
 
 msgid "Melismata"
-msgstr ""
+msgstr "Mélismes"
 
 msgid "Another way of entering lyrics"
-msgstr ""
+msgstr "Une autre manière de saisir des paroles"
 
 msgid "Flexibility in placement"
-msgstr ""
+msgstr "Flexibilité dans le placement"
 
 msgid "Lyrics to multiple notes of a melisma"
-msgstr ""
+msgstr "Paroles sur plusieurs notes d'un mélisme"
 
 msgid "Divisi lyrics"
-msgstr ""
+msgstr "Paroles alternatives"
 
 msgid "Switching the melody associated with a lyrics line"
-msgstr ""
+msgstr "Changer la voix associée à une ligne de paroles"
 
 msgid "Specifying melismata within the lyrics"
-msgstr ""
+msgstr "Indiquer les mélismes au sein des paroles"
 
 msgid "Lyrics independent of notes"
-msgstr ""
+msgstr "Paroles indépendantes des notes"
 
 msgid "Spacing lyrics"
-msgstr ""
+msgstr "Espacement des paroles"
 
 msgid "More about stanzas"
-msgstr ""
+msgstr "Plus à propos des strophes"
 
 msgid "Ambitus"
-msgstr ""
+msgstr "Ambitus"
 
 msgid "Other vocal issues"
-msgstr ""
+msgstr "Autres éléments relatifs à la voix"
 
 msgid "Rhythmic music"
-msgstr ""
+msgstr "Musique rythmique"
 
 msgid "Showing melody rhythms"
-msgstr ""
+msgstr "Graver des lignes rythmiques"
 
 msgid "Entering percussion"
-msgstr ""
+msgstr "Notation de percussions"
 
 msgid "Percussion staves"
-msgstr ""
+msgstr "Portée de percussions"
 
 msgid "Ghost notes"
-msgstr ""
+msgstr "Notes fantômes"
 
 msgid "Guitar"
-msgstr ""
+msgstr "Guitare"
 
 msgid "String number indications"
-msgstr ""
+msgstr "Indications de numéro de corde"
 
 msgid "Tablatures basic"
-msgstr ""
+msgstr "Base des tablatures"
 
 msgid "Non-guitar tablatures"
-msgstr ""
+msgstr "Tablatures autres que pour la guitare"
 
 msgid "Banjo tablatures"
-msgstr ""
+msgstr "Tablatures pour banjo"
 
 msgid "Fret diagrams"
-msgstr ""
+msgstr "Tablatures"
 
 msgid "Right hand fingerings"
-msgstr ""
+msgstr "Doigtés pour la main droite"
 
 msgid "Other guitar issues"
-msgstr ""
+msgstr "Autres éléments relatifs à la guitare"
 
 msgid "Bagpipe"
-msgstr ""
+msgstr "Cornemuse"
 
 msgid "Bagpipe definitions"
-msgstr ""
+msgstr "Définitions pour la cornemuse"
 
 msgid "Bagpipe example"
-msgstr ""
+msgstr "Exemple pour la cornemuse"
 
 msgid "Ancient notation"
-msgstr ""
+msgstr "Notations anciennes"
 
 msgid "Ancient note heads"
-msgstr ""
+msgstr "Têtes de note anciennes"
 
 msgid "Ancient accidentals"
-msgstr ""
+msgstr "Altérations anciennes"
 
 msgid "Ancient rests"
-msgstr ""
+msgstr "Silences anciens"
 
 msgid "Ancient clefs"
-msgstr ""
+msgstr "Clefs anciennes"
 
 msgid "Ancient flags"
-msgstr ""
+msgstr "Crochets anciens"
 
 msgid "Ancient time signatures"
-msgstr ""
+msgstr "Métriques anciennes"
 
 msgid "Ancient articulations"
-msgstr ""
+msgstr "Articulations anciennes"
 
 msgid "Custodes"
 msgstr ""
@@ -561,19 +568,19 @@ msgid "Musica ficta accidentals"
 msgstr ""
 
 msgid "Figured bass"
-msgstr ""
+msgstr "Basse chiffrée"
 
 msgid "Other instrument specific notation"
-msgstr ""
+msgstr "Autres notations spécifique à des instruments"
 
 msgid "Artificial harmonics (strings)"
-msgstr ""
+msgstr "Harmoniques artificiels (cordes)"
 
 msgid "Advanced notation"
-msgstr ""
+msgstr "Notation avancée"
 
 msgid "Text"
-msgstr ""
+msgstr "Texte"
 
 msgid "Text scripts"
 msgstr ""
@@ -698,9 +705,12 @@ msgstr ""
 msgid "Parentheses"
 msgstr ""
 
-msgid "Changing defaults"
+msgid "Grid lines"
 msgstr ""
 
+msgid "Changing defaults"
+msgstr "Changer les réglages prédéfinis"
+
 msgid "Automatic notation"
 msgstr ""
 
@@ -734,6 +744,9 @@ msgstr ""
 msgid "Defining new contexts"
 msgstr ""
 
+msgid "Aligning contexts"
+msgstr ""
+
 msgid "The \\override command"
 msgstr ""
 
@@ -759,7 +772,7 @@ msgid "Difficult tweaks"
 msgstr ""
 
 msgid "Non-musical notation"
-msgstr ""
+msgstr "Objets non musicaux"
 
 msgid "Input files"
 msgstr ""
@@ -813,7 +826,7 @@ msgid "Skipping corrected music"
 msgstr ""
 
 msgid "Spacing issues"
-msgstr ""
+msgstr "Questions d'espacement"
 
 msgid "Paper and pages"
 msgstr ""
@@ -827,7 +840,7 @@ msgstr ""
 msgid "Music layout"
 msgstr ""
 
-msgid "Setting global staff size"
+msgid "Setting the staff size"
 msgstr ""
 
 msgid "Score layout"
@@ -888,7 +901,7 @@ msgid "Displaying spacing"
 msgstr ""
 
 msgid "Interfaces for programmers"
-msgstr ""
+msgstr "Interfaces pour les programmeurs"
 
 msgid "Music functions"
 msgstr ""
@@ -908,6 +921,9 @@ msgstr ""
 msgid "Void functions"
 msgstr ""
 
+msgid "Functions without arguments"
+msgstr ""
+
 msgid "Programmer interfaces"
 msgstr ""
 
@@ -957,7 +973,7 @@ msgid "Scheme procedures as properties"
 msgstr ""
 
 msgid "Running LilyPond"
-msgstr ""
+msgstr "Lancer LilyPond"
 
 msgid "Invoking lilypond"
 msgstr ""
@@ -974,7 +990,7 @@ msgstr ""
 msgid "Updating files with convert-ly"
 msgstr ""
 
-msgid "Updating with"
+msgid "Updating with @command{convert-ly}"
 msgstr ""
 
 msgid "Reporting bugs"
@@ -990,7 +1006,10 @@ msgid "Point and click"
 msgstr ""
 
 msgid "LilyPond-book"
-msgstr ""
+msgstr "LilyPond-book"
+
+msgid "@command{lilypond-book}: Integrating text and music"
+msgstr "@command{lilypond-book} : associer de la musique et du texte"
 
 msgid "An example of a musicological document"
 msgstr ""
@@ -998,7 +1017,7 @@ msgstr ""
 msgid "Integrating LaTeX and music"
 msgstr ""
 
-msgid "Integrating La"
+msgid "Integrating La@TeX{} and music"
 msgstr ""
 
 msgid "Integrating Texinfo and music"
@@ -1028,7 +1047,7 @@ msgstr ""
 msgid "Invoking lilypond-book"
 msgstr ""
 
-msgid "Invoking"
+msgid "Invoking @command{lilypond-book}"
 msgstr ""
 
 msgid "Filename extensions"
@@ -1037,35 +1056,50 @@ msgstr ""
 msgid "Many quotes of a large score"
 msgstr ""
 
+msgid "Inserting LilyPond output into OpenOffice.org"
+msgstr ""
+
 msgid "Inserting LilyPond output into other programs"
 msgstr ""
 
 msgid "Converting from other formats"
-msgstr ""
+msgstr "Convertir à partir d'autres formats"
 
 msgid "Invoking midi2ly"
 msgstr ""
 
+msgid "Invoking @command{midi2ly}"
+msgstr ""
+
 msgid "Invoking etf2ly"
 msgstr ""
 
+msgid "Invoking @command{etf2ly}"
+msgstr ""
+
 msgid "Invoking musicxml2ly"
 msgstr ""
 
+msgid "Invoking @code{musicxml2ly}"
+msgstr ""
+
 msgid "Invoking abc2ly"
 msgstr ""
 
+msgid "Invoking @code{abc2ly}"
+msgstr ""
+
 msgid "Generating LilyPond files"
 msgstr ""
 
 msgid "Literature list"
-msgstr ""
+msgstr "Bibliographie"
 
 msgid "Scheme tutorial"
-msgstr ""
+msgstr "Tutoriel Scheme"
 
 msgid "Notation manual tables"
-msgstr ""
+msgstr "Tables du manuel de notation"
 
 msgid "Chord name chart"
 msgstr ""
@@ -1095,7 +1129,7 @@ msgid "The Feta font"
 msgstr ""
 
 msgid "Example templates"
-msgstr ""
+msgstr "Modèles-exemples"
 
 msgid "Single staff"
 msgstr ""
@@ -1142,6 +1176,9 @@ msgstr ""
 msgid "SATB vocal score and automatic piano reduction"
 msgstr ""
 
+msgid "SATB with aligned contexts"
+msgstr ""
+
 msgid "Ancient notation templates"
 msgstr ""
 
@@ -1164,7 +1201,7 @@ msgid "Texinfo"
 msgstr ""
 
 msgid "Cheat sheet"
-msgstr ""
+msgstr "Feuille aide-mémoire"
 
 msgid "GNU Free Documentation License"
 msgstr ""
@@ -1184,3 +1221,6 @@ msgstr "Précédent&nbsp;:"
 msgid "Appendix"
 msgstr "Annexe"
 
+msgid "Footnotes"
+msgstr "Notes de bas de page"
+
index 13cf8cefa278b8ac98b5e74798fb8b248a413691..158f29535063e769e274e7a4eea50783276eb1c4 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-19 10:23+0100\n"
+"POT-Creation-Date: 2007-01-07 16:10+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"
@@ -70,7 +70,7 @@ msgstr ""
 msgid "First steps"
 msgstr ""
 
-msgid "Running LilyPond for the first time"
+msgid "Entering music and viewing output"
 msgstr ""
 
 msgid "MacOS X"
@@ -82,6 +82,9 @@ msgstr ""
 msgid "Unix"
 msgstr ""
 
+msgid "Second steps"
+msgstr ""
+
 msgid "More about pitches"
 msgstr ""
 
@@ -196,6 +199,9 @@ msgstr ""
 msgid "Advanced tweaks with Scheme"
 msgstr ""
 
+msgid "Avoiding tweaks with slower processing"
+msgstr ""
+
 msgid "Basic notation"
 msgstr ""
 
@@ -697,6 +703,9 @@ msgstr ""
 msgid "Parentheses"
 msgstr ""
 
+msgid "Grid lines"
+msgstr ""
+
 msgid "Changing defaults"
 msgstr ""
 
@@ -733,6 +742,9 @@ msgstr ""
 msgid "Defining new contexts"
 msgstr ""
 
+msgid "Aligning contexts"
+msgstr ""
+
 msgid "The \\override command"
 msgstr ""
 
@@ -826,7 +838,7 @@ msgstr ""
 msgid "Music layout"
 msgstr ""
 
-msgid "Setting global staff size"
+msgid "Setting the staff size"
 msgstr ""
 
 msgid "Score layout"
@@ -907,6 +919,9 @@ msgstr ""
 msgid "Void functions"
 msgstr ""
 
+msgid "Functions without arguments"
+msgstr ""
+
 msgid "Programmer interfaces"
 msgstr ""
 
@@ -973,7 +988,7 @@ msgstr ""
 msgid "Updating files with convert-ly"
 msgstr ""
 
-msgid "Updating with"
+msgid "Updating with @command{convert-ly}"
 msgstr ""
 
 msgid "Reporting bugs"
@@ -991,13 +1006,16 @@ msgstr ""
 msgid "LilyPond-book"
 msgstr ""
 
+msgid "@command{lilypond-book}: Integrating text and music"
+msgstr ""
+
 msgid "An example of a musicological document"
 msgstr ""
 
 msgid "Integrating LaTeX and music"
 msgstr ""
 
-msgid "Integrating La"
+msgid "Integrating La@TeX{} and music"
 msgstr ""
 
 msgid "Integrating Texinfo and music"
@@ -1027,7 +1045,7 @@ msgstr ""
 msgid "Invoking lilypond-book"
 msgstr ""
 
-msgid "Invoking"
+msgid "Invoking @command{lilypond-book}"
 msgstr ""
 
 msgid "Filename extensions"
@@ -1036,6 +1054,9 @@ msgstr ""
 msgid "Many quotes of a large score"
 msgstr ""
 
+msgid "Inserting LilyPond output into OpenOffice.org"
+msgstr ""
+
 msgid "Inserting LilyPond output into other programs"
 msgstr ""
 
@@ -1045,15 +1066,27 @@ msgstr ""
 msgid "Invoking midi2ly"
 msgstr ""
 
+msgid "Invoking @command{midi2ly}"
+msgstr ""
+
 msgid "Invoking etf2ly"
 msgstr ""
 
+msgid "Invoking @command{etf2ly}"
+msgstr ""
+
 msgid "Invoking musicxml2ly"
 msgstr ""
 
+msgid "Invoking @code{musicxml2ly}"
+msgstr ""
+
 msgid "Invoking abc2ly"
 msgstr ""
 
+msgid "Invoking @code{abc2ly}"
+msgstr ""
+
 msgid "Generating LilyPond files"
 msgstr ""
 
@@ -1141,6 +1174,9 @@ msgstr ""
 msgid "SATB vocal score and automatic piano reduction"
 msgstr ""
 
+msgid "SATB with aligned contexts"
+msgstr ""
+
 msgid "Ancient notation templates"
 msgstr ""
 
@@ -1182,3 +1218,6 @@ msgstr ""
 
 msgid "Appendix"
 msgstr ""
+
+msgid "Footnotes"
+msgstr ""
index c663700030c51fedcf11dd5d11a0abc715f42e80..616eed601084caceba3f341beece0b8cc4338636 100644 (file)
@@ -79,7 +79,7 @@ You will need to install some additional packages to get mftrace to
 work.
 
 @item @uref{http://www.gnu.org/software/guile/guile.html,GUILE}
-(version 1.6.7 or newer).  If you are installing binary packages, you
+(version 1.8.2 or newer).  If you are installing binary packages, you
 may need to install guile-devel or guile-dev or libguile-dev too.
 
 @item @uref{ftp://ftp.gnu.org/gnu/texinfo/,Texinfo} (version 4.8 or newer).
@@ -116,7 +116,8 @@ software
 @item @uref{http://www.freetype.org/,FontConfig} (version 2.2).
 @item @uref{http://www.pango.org/,Pango} (version 1.12 or newer).
 @item @uref{http://www.gnu.org/software/guile/guile.html,GUILE}
-(version 1.8.0 or newer).
+(version 1.8.2 or newer), or patch 1.8.1 with
+@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch}.
 @item @uref{http://www.python.org,Python} (version 2.4 or newer).
 @item @uref{http://www.ghostscript.com,Ghostscript} (version 8.15 or
 newer. 8.50 recommended)
@@ -156,6 +157,45 @@ make out=www web-install
 @end example
 @end quotation
 
+@section Testing LilyPond
+
+LilyPond comes with an extensive suite that excercises the entire
+program. This suite can be used to automatically check the impact of a
+change. This is done as follows
+
+@example
+  make test-baseline
+  @emph{## apply your changes, compile}
+  make check
+@end example
+
+This will leave an HTML page @file{out/test-results/index.html}.  This
+page shows all the important differences that your change introduced,
+whether in the layout, MIDI, performance or error reporting.
+
+To rerun tests, use
+
+@example
+  make test-redo           @emph{## redo files differing from baseline}
+  make test-clean          @emph{## remove all test results}
+@end example
+
+@noindent
+and then run @code{make check} again.
+
+For tracking memory usage as part of this test, you will need GUILE
+CVS; especially the following patch:
+@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.9-gcstats.patch}.
+
+For checking the coverage of the test suite, do the following
+
+@example
+  ./buildscripts/build-coverage.sh
+  @emph{# uncovered files, least covered first}
+  python ./buildscripts/coverage.py  --summary out-cov/*.cc
+  @emph{# consecutive uncovered lines, longest first} 
+  python ./buildscripts/coverage.py  --uncovered out-cov/*.cc
+@end example
 
 @section Building LilyPond
 
index e5984dfe85821c5e00f0118af44c9108417178d0..4769d08c7adabf9dfe1c8f741112a7ad4fe64912 100644 (file)
@@ -65,6 +65,33 @@ which scares away people.
 * only show user-visible changes. 
 
 @end ignore
+@item
+Notes or rests, such as a typical end note, that fill an entire
+measure are preceded by some more space.
+
+@lilypond[ragged-right,relative=1]
+{
+  \time 4/4
+  s1
+  c2. c4
+  \time 3/4
+  c2.
+}
+@end lilypond
+
+@item All @code{\score}s in a lilypond-book fragment are now inserted
+into the document. Also, toplevel markups don't result in an entire
+page.
+
+@item Alterations (such as a sharp and flat) may now be arbitrary
+fractions. This allows some forms of microtonal music.  For example,
+Turkish makam music uses 1/9th tone alterations.
+
+@lilypondfile{makam.ly}
+
+
+
+@item Tie directions may be set with @code{^~} and @code{_~}
 
 @item Tablature now supports harmonics and slides,
 
index 2d6e26b99ee0c8e6ab5335ea56d7ffe5a53d3f30..e0e7a16503bb6fcad54a7bda00e0cddbdd33a0e8 100644 (file)
@@ -32,12 +32,12 @@ For compiling and running LilyPond see the installation instructions.
 These instructions can be found when you unpack lilypond, as
 @file{lilypond-x.y.z/INSTALL.txt}. They are also available on the web
 at
-@uref{http://lilypond.org/doc/v2.1/Documentation/topdocs/out-www/INSTALL.html}.
+@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/INSTALL.html}.
 
 @section Documentation
 
 The documentation is available online at
-@uref{http://www.lilypond.org/doc/}.
+@uref{http://lilypond.org/doc/}.
 
 You can also build it locally: follow the instructions under `Building
 documentation' in the installation instructions.
index ba2f98793ac3cb7068cdb767c7d8dd2d505cc4d8..b10f6607f18e4cec3c50951fd8fba5ac048405a9 100644 (file)
@@ -1,7 +1,7 @@
 Info for Documentation
 ----------------------
 
-Current version of the manual: 2.9.13
+Current version of the manual: 2.11.10 ?
 *** Please update this whenever you run convert-ly on the docs.
 
 convert-ly --from=... --to=... --no-version *.itely
@@ -133,6 +133,10 @@ GENERAL GUIDELINES
 
 * Lines should be less than 80 characters long.
 
+* Use @q instead of `...' and @qq instead of ``...''.  The latter macro
+  should be used with care since we use `...' as the default quoting
+  throughout the manual, except for things related to direct speech.
+
 
 %%%%%
 HINTS FOR TECHNICAL WRITING STYLE
index a414fe7b44c3909cb42013f05212ea98d2de7229..42cdb7bdae0f8a670720217f81e0be8b17cc7553 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @c A menu is needed before every deeper *section nesting of @node's; run
 @c     M-x texinfo-all-menus-update
@@ -621,7 +627,7 @@ individual parts.
 @cindex whole rests for a full measure
 @funindex R
 
-Rests for one full measure (or many bars) are entered using `@code{R}'.  It
+Rests for one full measure (or many bars) are entered using @samp{R}.  It
 is specifically meant for full bar rests and for entering parts: the rest
 can expand to fill a score with rests, or it can be printed as a single
 multi-measure rest.  This expansion is controlled by the property
@@ -650,7 +656,7 @@ R1*13/8*12 |
 An @code{R} spanning a single measure is printed as either a whole rest
 or a breve, centered in the measure regardless of the time signature.
 
-If there are only a few measures of rest, LilyPond prints ``church rests''
+If there are only a few measures of rest, LilyPond prints @q{church rests}
 (a series of rectangles) in the staff.  To replace that with a simple
 rest, use @code{MultiMeasureRest.expand-limit}.
 
@@ -804,8 +810,8 @@ c1 \mark \default
 @end lilypond
 
 @noindent
-The letter@tie{}`I' is skipped in accordance with engraving traditions.
-If you wish to include the letter `I', then use
+The letter@tie{}@q{I} is skipped in accordance with engraving traditions.
+If you wish to include the letter @q{I}, then use
 
 @example
 \set Score.markFormatter = #format-mark-alphabet
@@ -842,6 +848,20 @@ You may use @code{format-mark-barnumbers}, @code{format-mark-box-barnumbers},
 and @code{format-mark-circle-barnumbers} to get bar numbers instead of
 incremented numbers or letters.
 
+Other styles of rehearsal mark can be specified manually
+
+@example
+\mark "A1"
+@end example
+
+@noindent
+@code{Score.markFormatter} does not affect marks specified in this manner.
+However, it is possible to apply a @code{\markup} to the string.
+
+@example
+\mark \markup@{ \box A1 @}
+@end example
+
 @cindex segno
 @cindex coda
 @cindex D.S al Fine
@@ -887,6 +907,8 @@ appears at that point in the music.
 
 @seealso
 
+This manual: @ref{Text marks}.
+
 Program reference: @internalsref{RehearsalMark}.
 
 Init files: @file{scm/@/translation@/-functions@/.scm} contains the
@@ -1051,6 +1073,19 @@ be added to that context.
 More information about adding and removing engravers can
 be found in @ref{Modifying context plug-ins}.
 
+Instrument names may be changed in the middle of a piece,
+
+@lilypond[quote,fragment,verbatim,ragged-right]
+\set Staff.instrumentName = "First"
+\set Staff.shortInstrumentName = "one"
+c1 c c c \break
+c1 c c c \break
+\set Staff.instrumentName = "Second"
+\set Staff.shortInstrumentName = "two"
+c1 c c c \break
+c1 c c c \break
+@end lilypond
+
 
 @seealso
 
@@ -1116,7 +1151,7 @@ c'4^"in G"
 @node Ottava brackets
 @subsection Ottava brackets
 
-`Ottava' brackets introduce an extra transposition of an octave for
+@q{Ottava} brackets introduce an extra transposition of an octave for
 the staff.  They are created by invoking the function
 @code{set-octavation}
 
@@ -1288,8 +1323,8 @@ The first @code{g} appears only once, although it was
 specified twice (once in each part).  Stem, slur, and tie directions are
 set automatically, depending whether there is a solo or unisono.  The
 first part (with context called @code{one}) always gets up stems, and
-`Solo', while the second (called @code{two}) always gets down stems and
-`Solo II'.
+@q{Solo}, while the second (called @code{two}) always gets down stems and
+@q{Solo II}.
 
 If you just want the merging parts, and not the textual markings, you
 may set the property @code{printPartCombineTexts} to false
@@ -1360,7 +1395,7 @@ will be ignored.
 @cindex Hiding staves
 
 In orchestral scores, staff lines that only have rests are usually
-removed; this saves some space.  This style is called `French Score'.
+removed; this saves some space.  This style is called @q{French Score}.
 For @internalsref{Lyrics},
 @internalsref{ChordNames} and @internalsref{FiguredBass}, this is
 switched on by default.  When the lines of these contexts turn out
@@ -1408,19 +1443,19 @@ staff.
 
 With quotations, fragments of other parts can be inserted into a part
 directly.  Before a part can be quoted, it must be marked especially as
-quotable.  This is done with the @code{\addquote} command.
+quotable.  This is done with the @code{\addQuote} command.
 
 @example
-\addquote @var{name} @var{music}
+\addQuote @var{name} @var{music}
 @end example
 
 
 @noindent
 Here, @var{name} is an identifying string.  The @var{music} is any kind
-of music.  Here is an example of @code{\addquote}
+of music.  Here is an example of @code{\addQuote}
 
 @example
-\addquote clarinet \relative c' @{
+\addQuote clarinet \relative c' @{
   f4 fis g gis
 @}
 @end example
@@ -1428,7 +1463,7 @@ of music.  Here is an example of @code{\addquote}
 This command must be entered at toplevel, i.e., outside any music
 blocks.
 
-After calling @code{\addquote}, the quotation may then be done with
+After calling @code{\addQuote}, the quotation may then be done with
 @code{\quoteDuring} or @code{\cueDuring},
 
 @example
@@ -1448,7 +1483,7 @@ the previously added @code{clarinet} voice.
 
 More precisely, it takes the current time-step of the part being
 printed, and extracts the notes at the corresponding point of the
-@code{\addquote}d voice.  Therefore, the argument to @code{\addquote}
+@code{\addQuote}d voice.  Therefore, the argument to @code{\addQuote}
 should be the entire part of the voice to be quoted, including any
 rests at the beginning.
 
@@ -1456,7 +1491,7 @@ Quotations take into account the transposition of both source and target
 instruments, if they are specified using the @code{\transposition} command.
 
 @lilypond[quote,ragged-right,verbatim]
-\addquote clarinet \relative c' {
+\addQuote clarinet \relative c' {
   \transposition bes
   f4 fis g gis
 }
@@ -1483,12 +1518,15 @@ will quote notes (but no rests), together with scripts and dynamics.
 @refbugs
 
 Only the contents of the first @internalsref{Voice} occurring in an
-@code{\addquote} command will be considered for quotation, so
+@code{\addQuote} command will be considered for quotation, so
 @var{music} can not contain @code{\new} and @code{\context Voice}
 statements that would switch to a different Voice.
 
 Quoting grace notes is broken and can even cause LilyPond to crash.
 
+Quoting nested triplets may result in poor notation.
+
+
 @seealso
 
 In this manual: @ref{Instrument transpositions}.
@@ -1530,7 +1568,7 @@ smaller = {
   \override Beam #'length-fraction = #0.8
 }
 
-\addquote clarinet \relative {
+\addQuote clarinet \relative {
   R1*20
   r2 r8 c f f
 }
@@ -1581,6 +1619,34 @@ the original clef should be stated once again.
 
 @end itemize
 
+The macro @code{\transposedCueDuring} is
+useful to add cues to instruments which use a completely different
+octave range (for example, having a cue of a piccolo flute within
+a contra bassoon part).
+
+@lilypond[verbatim,ragged-right,quote]
+picc = \relative c''' {
+  \clef "treble^8"
+  R1 |
+  c8 c c e g2 |
+  a4 g g2 |
+}
+\addQuote "picc" { \picc }
+
+cbsn = \relative c, {
+  \clef "bass_8"
+  c4 r g r
+  \transposedCueDuring #"picc" #UP c,, { R1 } |
+  c4 r g r |
+}
+
+<<
+  \context Staff = "picc" \picc
+  \context Staff = "cbsn" \cbsn
+>>
+@end lilypond
+
+
 
 @node Aligning to cadenzas
 @subsection Aligning to cadenzas
@@ -1619,7 +1685,7 @@ cadenza = \relative c' {
 
 In the 20th century, composers have greatly expanded the musical
 vocabulary.  With this expansion, many innovations in musical notation
-have been tried.  The book ``Music Notation in the 20th century'' by
+have been tried.  The book @q{Music Notation in the 20th century} by
 Kurt Stone gives a comprehensive overview (see @ref{Literature
 list}).
 
@@ -1645,6 +1711,11 @@ see those sections of the documentation.
 @node Polymetric notation
 @subsection Polymetric notation
 
+@cindex double time signatures
+@cindex signatures, polymetric
+@cindex polymetric signatures
+@cindex meter, polymetric
+
 Double time signatures are not supported explicitly, but they can be
 faked.  In the next example, the markup for the time signature is
 created with a markup text.  This markup text is inserted in the
@@ -1656,7 +1727,7 @@ created with a markup text.  This markup text is inserted in the
 tsMarkup =\markup {
   \override #'(baseline-skip . 2) \number {
     \column { "2" "4" }
-    \lower #1 "+"
+    \vcenter "+"
     \bracket \column { "5" "8" }
   }
 }
@@ -1933,7 +2004,7 @@ accurately.  Use @code{<g a>8 <e a>8} instead.
 @cindex note heads, special
 
 Different noteheads are used by various instruments for various
-meanings -- crosses are used for ``parlato'' with vocalists, stopped
+meanings -- crosses are used for @q{parlato} with vocalists, stopped
 notes on guitar; diamonds are used for harmonics on string instruments,
 etc.  There is a shorthand (@code{\harmonic}) for diamond shapes; the
 other notehead styles are produced by tweaking the property
@@ -2079,6 +2150,7 @@ teaching tools in addition to great musical scores.
 * Analysis brackets::           
 * Coloring objects::            
 * Parentheses::                 
+* Grid lines::                  
 @end menu
 
 @node Balloon help
@@ -2126,6 +2198,7 @@ removing @code{Bar_number_engraver}.
 
 
 @lilypond[quote,verbatim]
+\layout{ indent = #0 }
 emptymusic = {
   \repeat unfold 2 % Change this for more lines.
   { s1\break }
@@ -2133,9 +2206,13 @@ emptymusic = {
 }
 \new Score \with {
   \override TimeSignature #'transparent = ##t
+% un-comment this line if desired
+%  \override Clef #'transparent = ##t
   defaultBarType = #""
   \remove Bar_number_engraver
 } <<
+
+% modify these to get the staves you want
   \new Staff \emptymusic
   \new TabStaff \emptymusic
 >>
@@ -2209,7 +2286,7 @@ combinations are possible, e.g.
 @cindex easy notation
 @cindex Hal Leonard
 
-The `easy play' note head includes a note name inside the head.  It is
+The @q{easy play} note head includes a note name inside the head.  It is
 used in music for beginners
 
 @lilypond[quote,ragged-right,verbatim,fragment,staffsize=26]
@@ -2367,3 +2444,11 @@ This only functions inside chords, even for single notes
 @end example
 
 
+@node Grid lines
+@subsection Grid lines
+
+Vertical lines can be drawn between staves synchronized with
+the notes.
+
+Examples: @inputfileref{input/@/regression,grid@/-lines@/.ly}.
+
index d760201c36c6ad716c772685bec994a9f5784752..b4e36e8655209fe1d54b68178c1e446dee4d4447 100644 (file)
@@ -1,5 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 
 @c A menu is needed before every deeper *section nesting of @node's; run
 @c     M-x texinfo-all-menus-update
@@ -68,9 +75,9 @@ c1
 @funindex ,
 
 The optional octave specification takes the form of a series of
-single quote (`@code{'}') characters or a series of comma
-(`@code{,}') characters.  Each @code{'} raises the pitch by one
-octave; each @code{,} lowers the pitch by an octave.
+single quote (@samp{'}) characters or a series of comma
+(@samp{,}) characters.  Each @samp{'} raises the pitch by one
+octave; each @samp{,} lowers the pitch by an octave.
 
 @lilypond[quote,ragged-right,fragment,verbatim]
 \clef treble
@@ -117,8 +124,8 @@ suffix; a natural pitch is shown as a simple note name
 a4 aes a2
 @end lilypond
 
-The input @code{d e f} is interpreted as ``print a D-natural,
-E-natural, and an F-natural,'' regardless of the key
+The input @code{d e f} is interpreted as @q{print a D-natural,
+E-natural, and an F-natural,} regardless of the key
 signature.  For more information about the distinction between
 musical content and the presentation of that content, see
 @ref{More about pitches}.
@@ -167,7 +174,7 @@ print them manually.  A reminder accidental
 can be forced by adding an exclamation mark @code{!}
 after the pitch.  A cautionary accidental
 (i.e., an accidental within parentheses) can be obtained by adding the
-question mark `@code{?}' after the pitch.  These extra accidentals
+question mark @samp{?} after the pitch.  These extra accidentals
 can be used to produce natural signs, too.
 
 @lilypond[quote,ragged-right,fragment,verbatim,relative=1]
@@ -422,7 +429,7 @@ mus = { \key d \major cis d fis g }
 
 @code{\transpose} may also be used to input written notes for a
 transposing instrument.  Pitches are normally entered into LilyPond
-in C (or ``concert pitch''), but they may be entered in another
+in C (or @q{concert pitch}), but they may be entered in another
 key.  For example, when entering music for a B-flat trumpet which
 begins on concert D, one would write
 
@@ -499,8 +506,8 @@ Program reference: @internalsref{Rest}.
 @funindex \skip
 @funindex s
 
-An invisible rest (also called a `skip') can be entered like a note
-with note name `@code{s}' or with @code{\skip @var{duration}}
+An invisible rest (also called a @q{skip}) can be entered like a note
+with note name @samp{s} or with @code{\skip @var{duration}}
 
 @lilypond[fragment,quote,ragged-right,verbatim,relative=2]
 a4 a4 s4 a4 \skip 1 a4
@@ -616,7 +623,7 @@ duration.  The default for the first note is a quarter note.
 
 @funindex .
 
-To obtain dotted note lengths, simply add a dot (`@code{.}') to
+To obtain dotted note lengths, simply add a dot (@samp{.}) to
 the number.  Double-dotted notes are produced in a similar way.
 
 @lilypond[quote,ragged-right,fragment,verbatim]
@@ -753,7 +760,7 @@ Examples: @inputfileref{input/@/regression,tuplet@/-nest@/.ly}.
 @subsection Scaling durations
 
 You can alter the length of duration by a fraction @var{N/M}
-appending `@code{*}@var{N/M}' (or `@code{*}@var{N}' if @var{M=1}).  This
+appending @samp{*@var{N/M}} (or @samp{*@var{N}} if @var{M=1}).  This
 will not affect the appearance of the notes or rests produced.
 
 In the following example, the first three notes take up exactly two
@@ -779,7 +786,7 @@ This manual: @ref{Tuplets}
 @funindex |
 
 Bar checks help detect errors in the durations.  A bar check is
-entered using the bar symbol, `@code{|}'.  Whenever it is encountered
+entered using the bar symbol, @samp{|}.  Whenever it is encountered
 during interpretation, it should fall on a measure boundary.  If it
 does not, a warning is printed.  In the next example, the second bar
 check will signal an error
@@ -962,7 +969,7 @@ them simultaneously, separating the voices with @code{\\}
 @end lilypond
 
 The separator causes @internalsref{Voice} contexts@footnote{Polyphonic
-voices are sometimes called ``layers'' in other notation packages}
+voices are sometimes called @q{layers} in other notation packages}
 @cindex layers
 to be instantiated.  They bear the names @code{"1"}, @code{"2"}, etc.  In
 each of these contexts, vertical direction of slurs, stems, etc., is set
@@ -1140,6 +1147,10 @@ Similarly, you can merge half note heads with eighth notes, by setting
 c8 c4. } \\ { c2 c2 } >>
 @end lilypond
 
+@noindent
+@code{merge-differently-headed} and @code{merge-differently-dotted}
+only apply to opposing stem directions (ie. Voice 1 & 2).
+
 LilyPond also vertically shifts rests that are opposite of a stem,
 for example
 
@@ -1373,7 +1384,7 @@ command
 
 Here, @var{type} should be @code{\major} or @code{\minor} to get
 @var{pitch}-major or @var{pitch}-minor, respectively.  You may also
-use the standard mode names (also called ``church modes''): @code{\ionian},
+use the standard mode names (also called @q{church modes}): @code{\ionian},
 @code{\locrian}, @code{\aeolian}, @code{\mixolydian}, @code{\lydian},
 @code{\phrygian}, and @code{\dorian}.
 
@@ -1533,7 +1544,7 @@ This is internally translated into
 The property @code{measurePosition} contains a rational number
 indicating how much of the measure has passed at this point.  Note
 that this is a negative number; @code{\partial 4} is internally
-translated to mean ``there is a quarter note left in the bar''.
+translated to mean @qq{there is a quarter note left in the bar.}
 
 
 @refbugs
@@ -1589,7 +1600,7 @@ To allow a line break where there is no visible bar line, use
 
 @noindent
 This will insert an invisible bar line and allow line breaks at this
-point.  This also increases the bar number counter.
+point (without increasing the bar number counter).
 
 In scores with many staves, a @code{\bar} command in one staff is
 automatically applied to all staves.  The resulting bar lines are
@@ -1638,8 +1649,6 @@ In this manual: @ref{Repeats}, @ref{System start delimiters}.
 Program reference: @internalsref{BarLine} (created at
 @internalsref{Staff} level), @internalsref{SpanBar} (across staves).
 
-Examples: @inputfileref{input/@/test,bar@/-lines@/.ly},
-
 
 @node Unmetered music
 @subsection Unmetered music
@@ -1748,13 +1757,31 @@ in every context, and that type is determined by the property
 @internalsref{systemStartDelimiter}.
 
 
+@commonprop
+
+System start delimiters may be deeply nested,
+
+@lilypond[quote,ragged-right,verbatim]
+\new StaffGroup 
+\relative <<
+  \set StaffGroup.systemStartDelimiterHierarchy
+    = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+>>
+@end lilypond
+
+
 @node Staff symbol
 @subsection Staff symbol
 
 @cindex adjusting staff symbol
 
 Notes, dynamic signs, etc., are grouped
-with a set of horizontal lines, called a staff (plural `staves').  In
+with a set of horizontal lines, called a staff (plural @q{staves}).  In
 LilyPond, these lines are drawn using a separate layout object called
 @code{staff symbol}.
 
@@ -1819,6 +1846,47 @@ Music for multiple parts can be interleaved
 >>
 @end lilypond
 
+This works quite well for piano music
+
+@lilypond[quote,verbatim]
+music = {
+  \key c \major
+  \time 4/4
+  \parallelMusic #'(voiceA voiceB voiceC voiceD) {
+    % Bar 1
+    r8  g'16[ c''] e''[ g' c'' e''] r8  g'16[ c''] e''[ g' c''
+e''] |
+    c'2                                 c'2 |
+    r8  a16[ d'] f'[ a d' f']       r8  a16[ d'] f'[ a d' f'] |
+    c2                                  c2 |
+
+    % Bar 2
+    a'8 b'      c'' d''    e'' f''    g'' a'' |
+    d'4         d'         d'         d' |
+    c16 d e f   d e f g    e f g a    f g a b |
+    a,4         a,4        a,4        a,4 |
+
+    % Bar 3 ...
+  }
+}
+
+\score {
+  \new PianoStaff <<
+    \music
+    \new Staff <<
+      \voiceA \\
+      \voiceB
+    >>
+    \new Staff {
+      \clef bass
+      <<
+        \voiceC \\
+        \voiceD
+      >>
+    }
+  >>
+}
+@end lilypond
 
 
 @node Connecting notes
@@ -1846,7 +1914,7 @@ This section deals with notation that affects groups of notes.
 A tie connects two adjacent note heads of the same pitch.  The tie in
 effect extends the length of a note.  Ties should not be confused with
 slurs, which indicate articulation, or phrasing slurs, which indicate
-musical phrasing.  A tie is entered using the tilde symbol `@code{~}'
+musical phrasing.  A tie is entered using the tilde symbol @samp{~}
 
 @lilypond[quote,ragged-right,fragment,verbatim]
 e' ~ e' <c' e' g'> ~ <c' e' g'>
@@ -1903,13 +1971,25 @@ notes need not be consecutive.  This can be achieved by setting the
 @code{tieWaitForNote} property to true. The same feature is also useful,
 for example, to tie a tremolo to a chord. For example,
 
-@lilypond[fragment,verbatim,relative=1,ragged-right]
+@lilypond[fragment,verbatim,relative=1,ragged-right,quote]
 \set tieWaitForNote = ##t
 \grace { c16[~ e~ g]~ } <c, e g>2
 \repeat "tremolo" 8 { c32~ c'~ } <c c,>1
 e8~ c~ a~ f~ <e' c a f>2
 @end lilypond
 
+Ties may be engraved manually by changing the @code{tie-configuration}
+property.  The first number indicates the distance from the center
+of the staff in staff-spaces, and the second number indicates the
+direction (1=up, -1=down).
+
+@lilypond[fragment,verbatim,relative=1,ragged-right,quote]
+<c e g>2~ <c e g> |
+\override TieColumn #'tie-configuration =
+  #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
+<c e g>~ <c e g> |
+@end lilypond
+
 
 @refcommands
 
@@ -2212,7 +2292,7 @@ c4 \grace c16 c4
 Unlike @code{\acciaccatura} and @code{\appoggiatura}, the
 @code{\grace} command does not start a slur.
 
-Internally, timing for grace notes is done using a second, `grace'
+Internally, timing for grace notes is done using a second, @q{grace}
 timing.  Every point in time consists of two rational numbers: one
 denotes the logical time, one denotes the grace timing.  The above
 example is shown here with timing tuples
@@ -2258,7 +2338,7 @@ following the main note.
 c1 \afterGrace d1 { c16[ d] } c4
 @end lilypond
 
-This will put the grace notes after a ``space'' lasting 3/4 of the
+This will put the grace notes after a @q{space} lasting 3/4 of the
 length of the main note.  The fraction 3/4 can be changed by setting
 @code{afterGraceFraction}, ie.
 
@@ -2966,6 +3046,10 @@ declared within a @code{Voice} context.
 @node Repeat syntax
 @subsection Repeat syntax
 
+@cindex volta
+@cindex prima volta
+@cindex seconda volta
+
 LilyPond has one syntactic construct for specifying different types of
 repeats.  The syntax is
 
@@ -3007,7 +3091,7 @@ c1
 
 In the following example, the first ending is not a complete
 bar (it only had 3 beats).  The beginning of the second ending
-contains the 4th beat from the first ending.  This ``extra''
+contains the 4th beat from the first ending.  This @q{extra}
 beat in the second ending is due to the first time ending,
 and has nothing to do with the @code{\partial} at the
 beginning of the example.
@@ -3207,7 +3291,7 @@ Example files: @inputfileref{input/@/regression,chord@/-tremolo@/.ly},
 @funindex tremoloFlags
 
 Tremolo marks can be printed on a single note by adding
-`@code{:}[@var{number}]' after the note.  The number indicates the
+@q{@code{:}[@var{number}]} after the note.  The number indicates the
 duration of the subdivision, and it must be at least 8.  A
 @var{length} value of 8 gives one line across the note stem.  If the
 length is omitted, the last value (stored in @code{tremoloFlags}) is
index a784db0e08d0d7040ab7ae7e16053ff2a6e74bb7..d88bf689156c1882bc1a214a95534a4b32af40cc 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Changing defaults
 @chapter Changing defaults
 
@@ -6,7 +14,7 @@
 The purpose of LilyPond's design is to provide the finest output
 quality as a default.  Nevertheless, it may happen that you need to
 change this default layout.  The layout is controlled through a large
-number of proverbial ``knobs and switches.''  This chapter does not
+number of proverbial @q{knobs and switches.}  This chapter does not
 list each and every knob.  Rather, it outlines what groups of controls
 are available and explains how to lookup which knob to use for a
 particular effect.
@@ -25,8 +33,8 @@ Program reference manual.
 That manual
 lists all different variables, functions and options available in
 LilyPond.  It is written as a HTML document, which is available
-@uref{http://@/lilypond@/.org/@/doc/@/v2.8/@/Documentation/@/user/@/
-lilypond@/-internals/,on@/-line},
+@c leave the @uref as one long line.
+@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line},
 but is also included with the LilyPond documentation package.
 
 There are four areas where the default settings may be changed:
@@ -146,7 +154,7 @@ cis' c'' cis'2 | c'' c'
 
 @item @code{modern-cautionary}
 @funindex modern-cautionary
-This rule is similar to @code{modern}, but the ``extra'' accidentals
+This rule is similar to @code{modern}, but the @q{extra} accidentals
 (the ones not typeset by @code{default}) are typeset as cautionary
 accidentals.  They are printed in reduced size or with parentheses
 @lilypond[quote,ragged-right,fragment,verbatim]
@@ -184,7 +192,7 @@ accidentals typeset as cautionaries.
 @item no-reset
 @funindex no-reset accidental style
 This is the same as @code{default} but with accidentals lasting
-``forever'' and not only until the next measure
+@q{forever} and not only until the next measure
 @lilypond[quote,ragged-right,fragment,verbatim,relative=1]
 #(set-accidental-style 'no-reset)
 c1 cis cis c
@@ -428,6 +436,7 @@ This section describes what contexts are, and how to modify them.
 * Layout tunings within contexts::  
 * Changing context default settings::  
 * Defining new contexts::       
+* Aligning contexts::           
 @end menu
 
 
@@ -626,8 +635,8 @@ To have it interpreted at the @context{Score} or @context{Staff} level use
 these forms
 
 @example
-\context \applyOutput #'Score #@var{function}
-\context \applyOutput #'Staff #@var{function}
+\applyOutput #'Score #@var{function}
+\applyOutput #'Staff #@var{function}
 @end example
 
 @end itemize
@@ -686,7 +695,7 @@ R1*2
 Contexts are hierarchical, so if a bigger context was specified, for
 example @context{Staff}, then the change would also apply to all
 @context{Voice}s in the current stave.  The change is applied
-`on-the-fly', during the music, so that the setting only affects the
+@q{on-the-fly}, during the music, so that the setting only affects the
 second group of eighth notes.
 
 @funindex \unset
@@ -762,7 +771,7 @@ Translation @arrow{} Tunable context properties.
 
 Notation contexts (like @code{Score} and @code{Staff}) not only
 store properties,
-they also contain plug-ins called ``engravers'' that create notation
+they also contain plug-ins called @q{engravers} that create notation
 elements.  For example, the @code{Voice} context contains a
 @code{Note_head_engraver} and the @code{Staff} context contains a
 @code{Key_signature_engraver}.
@@ -878,7 +887,7 @@ The syntax for this is
 
 Here @var{name} is the name of a graphical object, like @code{Stem} or
 @code{NoteHead}, and @var{property} is an internal variable of the
-formatting system (`grob property' or `layout property').  The latter is a
+formatting system (@q{grob property} or @q{layout property}).  The latter is a
 symbol, so it must be quoted.  The subsection @ref{Constructing a
 tweak} explains what to fill in for @var{name}, @var{property}, and
 @var{value}.  Here we only discuss the functionality of this command.
@@ -944,7 +953,7 @@ affects settings that were made in the same context.  In other words, the
 \revert Staff.Stem #'thickness
 @end example
 
-Some tweakable options are called ``subproperties'' and reside inside
+Some tweakable options are called @q{subproperties} and reside inside
 properties.  To tweak those, use commands of the form
 
 @c leave this as a long long
@@ -1206,6 +1215,30 @@ Then the output at the start of this subsection can be entered as
 @end example
 
 
+@node Aligning contexts
+@subsection Aligning contexts
+
+New contexts may be aligned above or below exisiting contexts.  This
+could be useful in setting up a vocal staff (@ref{Vocal ensembles}) and
+in ossia,
+
+@cindex ossia
+@findex alignAboveContext
+@findex alignBelowContext
+
+@lilypond[quote,ragged-right]
+ossia = { f4 f f f }
+\score{
+  \relative c' \new Staff = "main" {
+    c4 c c c
+    <<
+      \new Staff \with {alignAboveContext=main} \ossia
+      { d8 f d f d f d f }
+    >>
+  }
+}
+@end lilypond
+
 
 
 @node The \override command
@@ -1247,7 +1280,7 @@ This means that we must determine these bits of information:
 @item a sensible value: here @code{3.0}.
 @end itemize
 
-Some tweakable options are called ``subproperties'' and reside inside
+Some tweakable options are called @q{subproperties} and reside inside
 properties.  To tweak those, use commands in the form
 
 @example
@@ -1436,13 +1469,13 @@ This object supports the following interfaces:
 
 Clicking any of the links will take you to the page of the respective
 object interface.  Each interface has a number of properties.  Some of
-them are not user-serviceable (``Internal properties''), but others
+them are not user-serviceable (@q{Internal properties}), but others
 can be modified.
 
 We have been talking of @emph{the} @code{Fingering} object, but actually it
 does not amount to much.  The initialization file (see
 @ref{Default files})
-@file{scm/@/define@/-grobs@/.scm} shows the soul of the `object',
+@file{scm/@/define@/-grobs@/.scm} shows the soul of the @q{object},
 
 @example
 (Fingering
@@ -1604,7 +1637,7 @@ this.  Context properties are modified with @code{\set}.
 There is a special type of context property: the element
 description. These properties are named in @code{StudlyCaps}
 (starting with capital letters).  They contain the
-``default settings'' for said graphical object as an
+@q{default settings} for said graphical object as an
 association list.  See @file{scm/@/define@/-grobs@/.scm}
 to see what kind of settings there are.  Element descriptions
 may be modified with @code{\override}.
index ced3e2efd0d6034d3bcf4682eab33cc439221216..1bef3ccfebc123b77783438034da6b9f50f7c11d 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 
 @c TODO: add tablature.
 
@@ -115,7 +123,7 @@ c c,
 @tab
 @lilypond[fragment,relative=2]
 \set Score.timing = ##f
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
 c( d e)
 @end lilypond
@@ -126,7 +134,7 @@ c( d e)
 @tab
 @lilypond[fragment,relative=2]
 \set Score.timing = ##f
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
 c\( c( d) e\)
 @end lilypond
@@ -137,7 +145,7 @@ c\( c( d) e\)
 @tab
 @lilypond[fragment,relative=2]
 \set Score.timing = ##f
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
 a8-[ b-]
 @end lilypond
@@ -156,7 +164,7 @@ a8-[ b-]
 @tab articulations
 @tab
 @lilypond[fragment,relative=2]
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 c-> c-.
 @end lilypond
 
@@ -165,7 +173,7 @@ c-> c-.
 @tab dynamics
 @tab
 @lilypond[fragment,relative=2]
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 c\mf c\sfz
 @end lilypond
 
@@ -175,7 +183,7 @@ c\mf c\sfz
 @tab
 @lilypond[fragment,relative=2]
 \set Score.timing = ##f
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
 a\< a a\!
 @end lilypond
@@ -185,7 +193,7 @@ a\< a a\!
 @tab
 @lilypond[fragment,relative=2]
 \set Score.timing = ##f
-\override Staff.TimeSignature #'break-visibility = #all-invisible
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \set Staff.autoBeaming = ##f
 a\> a a\!
 @end lilypond
index 7ba2816ab23941d6878743b9c62153f71e735be7..35cf314b20ea4e44881de6653cdf26f8b388de0b 100644 (file)
@@ -1,4 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @node Converting from other formats
 @chapter Converting from other formats
@@ -10,11 +17,11 @@ sequencers and XML converters.  Refer to the
 @uref{http://@/lilypond@/.org,website} for more details.
 
 These are separate programs from lilypond itself, and are run
-on the command-line.  By ``command-line'', we mean the command
+on the command-line.  By @q{command-line}, we mean the command
 line in the operating system.  Windows users
-might be more familiar with the terms ``DOS shell'' or
-``command shell''; OSX users might be more familiar with the
-terms ``terminal'' or ``console''.  OSX users should also
+might be more familiar with the terms @q{DOS shell} or
+@q{command shell}; OSX users might be more familiar with the
+terms @q{terminal} or @q{console}.  OSX users should also
 consult @ref{Notes for the MacOS X app}.
 
 Describing how to use
@@ -67,7 +74,7 @@ It is invoked from the command-line as follows,
 midi2ly [@var{option}]@dots{} @var{midi-file}
 @end example
 
-Note that by ``command-line'', we mean the command line of the
+Note that by @q{command-line}, we mean the command line of the
 operating system.  See @ref{Converting from other formats} for
 more information about this.
 
@@ -139,7 +146,7 @@ It is invoked from the command-line as follows.
 etf2ly [@var{option}]@dots{} @var{etf-file}
 @end example
 
-Note that by ``command-line'', we mean the command line of the
+Note that by @q{command-line}, we mean the command line of the
 operating system.  See @ref{Converting from other formats} for
 more information about this.
 
@@ -169,7 +176,7 @@ for representing music notation.
 @command{musicxml2ly} extracts the notes from part-wise MusicXML
 files, and writes it to a .ly file.  It is invoked from the command-line.
 
-Note that by ``command-line'', we mean the command line of the
+Note that by @q{command-line}, we mean the command line of the
 operating system.  See @ref{Converting from other formats} for
 more information about this.
 
@@ -219,7 +226,7 @@ source file.  If you say:
 %%LY voices \set autoBeaming = ##f
 @end example
 
-This will cause the text following the keyword ``voices'' to be inserted
+This will cause the text following the keyword @q{voices} to be inserted
 into the current voice of the LilyPond output file.
 
 Similarly,
@@ -228,13 +235,13 @@ Similarly,
 %%LY slyrics more words
 @end example
 
-will cause the text following the ``slyrics'' keyword to be inserted
+will cause the text following the @q{slyrics} keyword to be inserted
 into the current line of lyrics.
 
 
 @refbugs
 
-The ABC standard is not very ``standard''.  For extended features
+The ABC standard is not very @q{standard}.  For extended features
 (e.g., polyphonic music) different conventions exist.
 
 Multiple tunes in one file cannot be converted.
index cc5b1fc081a51db2fe56175e974663628c1ac38c..59cae48337e71d8a9e82abd7db48e3d73f4c29af 100644 (file)
@@ -1,3 +1,11 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @quotation
 We want to dedicate this program to all the friends that we
index a497bbae7c6fb30967c7b891d42fadadd2fee301..46ebfc3fb5d4b7f3412e6160750c87499bac813f 100644 (file)
@@ -25,7 +25,7 @@ this License preserves for the author and publisher a way to get
 credit for their work, while not being considered responsible for
 modifications made by others.
 
-This License is a kind of ``copyleft'', which means that derivative
+This License is a kind of @q{copyleft}, which means that derivative
 works of the document must themselves be free in the same sense.  It
 complements the GNU General Public License, which is a copyleft
 license designed for free software.
@@ -43,15 +43,15 @@ APPLICABILITY AND DEFINITIONS
 
 This License applies to any manual or other work that contains a
 notice placed by the copyright holder saying it can be distributed
-under the terms of this License.  The ``Document'', below, refers to any
+under the terms of this License.  The @q{Document}, below, refers to any
 such manual or work.  Any member of the public is a licensee, and is
-addressed as ``you''.
+addressed as @q{you}.
 
-A ``Modified Version'' of the Document means any work containing the
+A @q{Modified Version} of the Document means any work containing the
 Document or a portion of it, either copied verbatim, or with
 modifications and/or translated into another language.
 
-A ``Secondary Section'' is a named appendix or a front-matter section of
+A @q{Secondary Section} is a named appendix or a front-matter section of
 the Document that deals exclusively with the relationship of the
 publishers or authors of the Document to the Document's overall subject
 (or to related matters) and contains nothing that could fall directly
@@ -62,15 +62,15 @@ connection with the subject or with related matters, or of legal,
 commercial, philosophical, ethical or political position regarding
 them.
 
-The ``Invariant Sections'' are certain Secondary Sections whose titles
+The @q{Invariant Sections} are certain Secondary Sections whose titles
 are designated, as being those of Invariant Sections, in the notice
 that says that the Document is released under this License.
 
-The ``Cover Texts'' are certain short passages of text that are listed,
+The @q{Cover Texts} are certain short passages of text that are listed,
 as Front-Cover Texts or Back-Cover Texts, in the notice that says that
 the Document is released under this License.
 
-A ``Transparent'' copy of the Document means a machine-readable copy,
+A @q{Transparent} copy of the Document means a machine-readable copy,
 represented in a format whose specification is available to the
 general public, whose contents can be viewed and edited directly and
 straightforwardly with generic text editors or (for images composed of
@@ -80,7 +80,7 @@ for automatic translation to a variety of formats suitable for input
 to text formatters.  A copy made in an otherwise Transparent file
 format whose markup has been designed to thwart or discourage
 subsequent modification by readers is not Transparent.  A copy that is
-not ``Transparent'' is called ``Opaque''.
+not @q{Transparent} is called @q{Opaque}.
 
 Examples of suitable formats for Transparent copies include plain
 @sc{ascii} without markup, Texinfo input format, La@TeX{} input format,
@@ -93,10 +93,10 @@ the @acronym{DTD} and/or processing tools are not generally available,
 and the machine-generated @acronym{HTML} produced by some word
 processors for output purposes only.
 
-The ``Title Page'' means, for a printed book, the title page itself,
+The @q{Title Page} means, for a printed book, the title page itself,
 plus such following pages as are needed to hold, legibly, the material
 this License requires to appear in the title page.  For works in
-formats which do not have any title page as such, ``Title Page'' means
+formats which do not have any title page as such, @q{Title Page} means
 the text near the most prominent appearance of the work's title,
 preceding the beginning of the body of the text.
 
@@ -202,10 +202,10 @@ and required Cover Texts given in the Document's license notice.
 Include an unaltered copy of this License.
 
 @item
-Preserve the section entitled ``History'', and its title, and add to
+Preserve the section entitled @q{History}, and its title, and add to
 it an item stating at least the title, year, new authors, and
 publisher of the Modified Version as given on the Title Page.  If
-there is no section entitled ``History'' in the Document, create one
+there is no section entitled @q{History} in the Document, create one
 stating the title, year, authors, and publisher of the Document as
 given on its Title Page, then add an item describing the Modified
 Version as stated in the previous sentence.
@@ -214,13 +214,13 @@ Version as stated in the previous sentence.
 Preserve the network location, if any, given in the Document for
 public access to a Transparent copy of the Document, and likewise
 the network locations given in the Document for previous versions
-it was based on.  These may be placed in the ``History'' section.
+it was based on.  These may be placed in the @q{History} section.
 You may omit a network location for a work that was published at
 least four years before the Document itself, or if the original
 publisher of the version it refers to gives permission.
 
 @item
-In any section entitled ``Acknowledgments'' or ``Dedications'',
+In any section entitled @q{Acknowledgments} or @q{Dedications},
 preserve the section's title, and preserve in the section all the
 substance and tone of each of the contributor acknowledgments
 and/or dedications given therein.
@@ -231,11 +231,11 @@ unaltered in their text and in their titles.  Section numbers
 or the equivalent are not considered part of the section titles.
 
 @item
-Delete any section entitled ``Endorsements''.  Such a section
+Delete any section entitled @q{Endorsements}.  Such a section
 may not be included in the Modified Version.
 
 @item
-Do not retitle any existing section as ``Endorsements''
+Do not retitle any existing section as @q{Endorsements}
 or to conflict in title with any Invariant Section.
 @end enumerate
 
@@ -246,7 +246,7 @@ of these sections as invariant.  To do this, add their titles to the
 list of Invariant Sections in the Modified Version's license notice.
 These titles must be distinct from any other section titles.
 
-You may add a section entitled ``Endorsements'', provided it contains
+You may add a section entitled @q{Endorsements}, provided it contains
 nothing but endorsements of your Modified Version by various
 parties---for example, statements of peer review or that the text has
 been approved by an organization as the authoritative definition of a
@@ -285,11 +285,11 @@ author or publisher of that section if known, or else a unique number.
 Make the same adjustment to the section titles in the list of
 Invariant Sections in the license notice of the combined work.
 
-In the combination, you must combine any sections entitled ``History''
+In the combination, you must combine any sections entitled @q{History}
 in the various original documents, forming one section entitled
-``History''; likewise combine any sections entitled ``Acknowledgments'',
-and any sections entitled ``Dedications''.  You must delete all sections
-entitled ``Endorsements.''
+@q{History}; likewise combine any sections entitled @q{Acknowledgments},
+and any sections entitled @q{Dedications}.  You must delete all sections
+entitled @q{Endorsements.}
 
 @item
 COLLECTIONS OF DOCUMENTS
@@ -312,7 +312,7 @@ A compilation of the Document or its derivatives with other separate
 and independent documents or works, in or on a volume of a storage or
 distribution medium, does not as a whole count as a Modified Version
 of the Document, provided no compilation copyright is claimed for the
-compilation.  Such a compilation is called an ``aggregate'', and this
+compilation.  Such a compilation is called an @q{aggregate}, and this
 License does not apply to the other self-contained works thus compiled
 with the Document, on account of their being thus compiled, if they
 are not themselves derivative works of the Document.
@@ -359,7 +359,7 @@ differ in detail to address new problems or concerns.  See
 
 Each version of the License is given a distinguishing version number.
 If the Document specifies that a particular numbered version of this
-License ``or any later version'' applies to it, you have the option of
+License @q{or any later version} applies to it, you have the option of
 following the terms and conditions either of that specified version or
 of any later version that has been published (not as a draft) by the
 Free Software Foundation.  If the Document does not specify a version
@@ -382,15 +382,15 @@ license notices just after the title page:
   or any later version published by the Free Software Foundation;
   with the Invariant Sections being @var{list their titles}, with the
   Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}.
-  A copy of the license is included in the section entitled ``GNU
-  Free Documentation License''.
+  A copy of the license is included in the section entitled @q{GNU
+  Free Documentation License}.
 @end group
 @end smallexample
 
-If you have no Invariant Sections, write ``with no Invariant Sections''
+If you have no Invariant Sections, write @q{with no Invariant Sections}
 instead of saying which ones are invariant.  If you have no
-Front-Cover Texts, write ``no Front-Cover Texts'' instead of
-``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts.
+Front-Cover Texts, write @q{no Front-Cover Texts} instead of
+@q{Front-Cover Texts being @var{list}}; likewise for Back-Cover Texts.
 
 If your document contains nontrivial examples of program code, we
 recommend releasing these examples in parallel under your choice of
index 42e4348cc61d112f6be43395cce00eb8eb49b551..fdd4d5ca41399ca49c3971f611ae2c82eb398ff6 100644 (file)
@@ -1,5 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 
 @c A menu is needed before every deeper *section nesting of @node's; run
 @c     M-x texinfo-all-menus-update
@@ -44,7 +51,7 @@ handle this cross-staffing behavior.  In this section we discuss the
 @refbugs
 
 Dynamics are not centered, but workarounds do exist.  See the
-``piano centered dynamics'' template in @ref{Piano templates}.
+@q{piano centered dynamics} template in @ref{Piano templates}.
 
 @cindex cross staff stem
 @cindex stem, cross staff
@@ -197,7 +204,7 @@ b\sustainUp\sustainDown
 b g \sustainUp a \sustainDown \bar "|."
 @end lilypond
 
-The default `*Ped.' style for sustain and damper pedals corresponds to
+The default @q{*Ped.} style for sustain and damper pedals corresponds to
 style @code{#'text}.  The sostenuto pedal uses @code{mixed} style by
 default.
 
@@ -356,7 +363,7 @@ modifier (which may include a number if desired)
 @lilypond[quote,fragment,verbatim]
 \chordmode { e1:m e1:7 e1:m7 }
 @end lilypond
-The first number following the root is taken to be the `type' of the
+The first number following the root is taken to be the @q{type} of the
 chord, thirds are added to the root until it reaches the specified
 number
 @lilypond[quote,fragment,verbatim]
@@ -580,7 +587,7 @@ separators, e.g.,
 @item chordRootNamer
 The root of a chord is usually printed as a letter with an optional
 alteration.  The transformation from pitch to letter is done by this
-function.  Special note names (for example, the German ``H'' for a
+function.  Special note names (for example, the German @q{H} for a
 B-chord) can be produced by storing a new function in this property.
 
 @funindex chordNoteNamer
@@ -592,9 +599,9 @@ base can be printed in lower case.
 
 @funindex chordPrefixSpacer
 @item chordPrefixSpacer
-The ``m'' for minor chords is usually printed right after the root of
+The @q{m} for minor chords is usually printed right after the root of
 the chord. By setting @code{chordPrefixSpacer}, you can fix a spacer
-between the root and ``m''. The spacer is not used when the root
+between the root and @q{m}. The spacer is not used when the root
 is altered.
 
 @end table
@@ -866,7 +873,7 @@ Program reference: @internalsref{LyricText}, @internalsref{LyricSpace}.
 
 @cindex hyphens
 
-Centered hyphens are entered as `@code{--}' between syllables.
+Centered hyphens are entered as @samp{--} between syllables.
 The hyphen will have variable length depending on the space between
 the syllables and it will be centered between the syllables.
 
@@ -876,7 +883,7 @@ the syllables and it will be centered between the syllables.
 When a lyric is sung over many notes (this is called a melisma), this is
 indicated with a horizontal line centered between a syllable and the
 next one.  Such a line is called an extender line, and it is entered as
-`@code{__}'.
+@samp{__}.
 
 In tighly engraved music, hyphens can be removed.  Whether this
 happens can be controlled with the @code{minimum-distance} (minimum
@@ -1134,8 +1141,8 @@ in the text, as shown here,
 @end lilypond
 
 
-The @code{ignoreMelismata} applies to the syllable ``fas'', so it
-should be entered before ``go''.
+The @code{ignoreMelismata} applies to the syllable @q{fas}, so it
+should be entered before @q{go}.
 
 The reverse is also possible: making a lyric line slower than the
 standard.  This can be achieved by insert @code{\skip}s into the
@@ -1241,7 +1248,7 @@ done by setting the @code{associatedVoice} property.  In the example
 @end lilypond
 
 @noindent
-the text for the first stanza is set to a melody called ``lahlah'',
+the text for the first stanza is set to a melody called @q{lahlah},
 
 @example
 \new Lyrics \lyricsto "lahlah" @{
@@ -1251,7 +1258,7 @@ the text for the first stanza is set to a melody called ``lahlah'',
 
 
 The second stanza initially is set to the @code{lahlah} context, but
-for the syllable ``ran'', it switches to a different melody.
+for the syllable @q{ran}, it switches to a different melody.
 This is achieved with
 @example
 \set associatedVoice = alternative
@@ -1261,7 +1268,7 @@ This is achieved with
 Here, @code{alternative} is the name of the @code{Voice} context
 containing the triplet.
 
-Again, the command must be one syllable too early, before ``Ty'' in
+Again, the command must be one syllable too early, before @q{Ty} in
 this case.
 
 @example
@@ -1287,25 +1294,16 @@ It is also possible to define melismata entirely in the lyrics. This
 can be done by entering @code{_} for every note that is part of the
 melisma.
 
-@lilypond[relative=1,verbatim,fragment]
+@lilypond[relative=1,verbatim,fragment,quote]
 { \set melismaBusyProperties = #'()
   c d( e) f f( e) e e  }
 \addlyrics
  { Ky -- _ _ ri __ _ _ _  e }
 @end lilypond
 
-In this case, you can also have ties and slurs in the melody, if you
+In this case, you can also have ties and slurs in the melody if you
 set @code{melismaBusyProperties}, as is done in the example above.
 
-@lilypond[relative=1,verbatim,fragment,quote]
-{
- \set melismaBusyProperties = #'()
-  c d( e) f f( e) e e
-}
-\addlyrics
- { Ky -- _ _ ri __ _ _ _  e }
-@end lilypond
-
 
 @node Lyrics independent of notes
 @subsubsection Lyrics independent of notes
@@ -1645,7 +1643,7 @@ can ask them for specific instructions about where to move these
 examples, and that might get them more involved in the docs.  -gp
 @end ignore
 
-``Parlato'' is spoken without pitch but still with rhythm; it is
+@q{Parlato} is spoken without pitch but still with rhythm; it is
 notated by cross noteheads.  This is demonstrated in
 @ref{Special noteheads}.
 
@@ -2535,9 +2533,9 @@ overview over all available note head styles.
 @cindex accidentals
 
 
-Use the @code{style} property of grob @internalsref{Accidental} to
-select ancient accidentals.   Supported styles are
-@code{mensural}, @code{vaticana}, @code{hufnagel}, and @code{medicaea}.
+Use the @code{glyph-name-alist} property of grob
+@internalsref{Accidental} and @internalsref{KeySignature} to select
+ancient accidentals. 
 
 @lilypond[quote,ragged-right,staffsize=26]
 \score {
@@ -2584,7 +2582,7 @@ different style, as demonstrated in
 @inputfileref{input/@/test,ancient@/-accidentals@/.ly}.
 
 Similarly to local accidentals, the style of the key signature can be
-controlled by the @code{style} property of the
+controlled by the @code{glyph-name-alist} property of the
 @internalsref{KeySignature} grob.
 
 @seealso
@@ -2850,16 +2848,16 @@ historic style hufnagel combined do/fa clef
 
 
 
-@emph{Modern style} means ``as is typeset in contemporary editions of
-transcribed mensural music''.
+@emph{Modern style} means @qq{as is typeset in contemporary editions of
+transcribed mensural music.}
 
-@emph{Petrucci style} means ``inspired by printings published by the
-famous engraver Petrucci (1466-1539)''.
+@emph{Petrucci style} means @qq{inspired by printings published by the
+famous engraver Petrucci (1466-1539).}
 
-@emph{Historic style} means ``as was typeset or written in historic
-editions (other than those of Petrucci)''.
+@emph{Historic style} means @qq{as was typeset or written in historic
+editions (other than those of Petrucci).}
 
-@emph{Editio XXX style} means ``as is/was printed in Editio XXX''.
+@emph{Editio XXX style} means @qq{as is/was printed in Editio XXX.}
 
 Petrucci used C clefs with differently balanced left-side vertical
 beams, depending on which staff line it is printed.
@@ -3065,7 +3063,7 @@ the right end of the episem line is often too far to the right.
 @cindex custos
 @cindex custodes
 
-A @emph{custos} (plural: @emph{custodes}; Latin word for `guard') is a
+A @emph{custos} (plural: @emph{custodes}; Latin word for @q{guard}) is a
 symbol that appears at the end of a staff.  It anticipates the pitch
 of the first note(s) of the following line thus helping the performer
 to manage line breaks during performance.
@@ -3146,7 +3144,7 @@ Examples: @inputfileref{input/@/regression,custos@/.ly}.
 @cindex finalis
 
 A @emph{divisio} (plural: @emph{divisiones}; Latin word for
-`division') is a staff context symbol that is used to structure
+@q{division}) is a staff context symbol that is used to structure
 Gregorian music into phrases and sections.  The musical meaning of
 @emph{divisio minima}, @emph{divisio maior}, and @emph{divisio maxima}
 can be characterized as short, medium, and long pause, somewhat like
@@ -4362,7 +4360,7 @@ entering the chant, as the following excerpt demonstrates
 
 In European music from before about 1600, singers were often expected
 to chromatically alter notes at their own initiative. This is called
-``Musica Ficta''. In modern transcriptions, these accidentals are
+@q{Musica Ficta}. In modern transcriptions, these accidentals are
 usually printed over the note.
 
 @cindex Accidental, musica ficta
index 2ac91d0867f8e43a44e823533bba6f21e20e9f92..33a62a44b8d15f7b6b921a150ee76821116cba7b 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @node Introduction
 @chapter Introduction
@@ -104,10 +110,10 @@ LilyPond Feta font (2003)
 @c introduce illustrating aspects of engraving, spacing...
 In spacing, the distribution of space should reflect the durations
 between notes.  However, many modern scores adhere to the durations
-with mathematical precision, which leads to poor results.  In the
-next example a motive is printed twice.  It is printed once using
-exact mathematical spacing, and once with corrections.  Can you
-spot which fragment is which?
+with mathematical precision, which leads to poor results.  In the next
+example a motive is printed twice: once using exact mathematical
+spacing, and once with corrections.  Can you spot which fragment is
+which?
 
 @cindex optical spacing
 @c file spacing-optical.
@@ -168,42 +174,42 @@ music = {
 @cindex regular rhythms
 @cindex regular spacing
 
-Each bar in the fragment only uses notes that are played in a
-constant rhythm.  The spacing should reflect that.  Unfortunately, the
-eye deceives us a little; not only does it notice the distance between
+Each bar in the fragment only uses notes that are played in a constant
+rhythm.  The spacing should reflect that.  Unfortunately, the eye
+deceives us a little; not only does it notice the distance between
 note heads, it also takes into account the distance between
 consecutive stems.  As a result, the notes of an up-stem/@/down-stem
 combination should be put farther apart, and the notes of a
-down-stem/@/up-stem
-combination should be put closer together, all depending on the
-combined vertical positions of the notes.  The upper two measures are
-printed with this correction, the lower two measures without, forming
-down-stem/@/up-stem clumps of notes.
+down-stem/@/up-stem combination should be put closer together, all
+depending on the combined vertical positions of the notes.  The upper
+two measures are printed with this correction, the lower two measures
+without, forming down-stem/@/up-stem clumps of notes.
 
 @cindex typography
 
 Musicians are usually more absorbed with performing than with studying
-the looks of a piece of music, so nitpicking about typographical details
-may seem academical.  But it is not.  In larger pieces with monotonous
-rhythms, spacing corrections lead to subtle variations in the layout
-of every line, giving each one a distinct visual signature.  Without
-this signature all lines would look the same, and they become like a
-labyrinth.  If a musician looks away once or has a lapse in
+the looks of a piece of music, so nitpicking about typographical
+details may seem academical.  But it is not.  In larger pieces with
+monotonous rhythms, spacing corrections lead to subtle variations in
+the layout of every line, giving each one a distinct visual signature.
+Without this signature all lines would look the same, and they become
+like a labyrinth.  If a musician looks away once or has a lapse in
 concentration, the lines might lose their place on the page.
 
 Similarly, the strong visual look of bold symbols on heavy staff lines
-stands out better when the music is far away from the reader, for example,
-if it is on a music stand.  A careful distribution of white space allows
-music to be set very tightly without cluttering symbols together.  The
-result minimizes the number of page turns, which is a great advantage.
+stands out better when the music is far away from the reader, for
+example, if it is on a music stand.  A careful distribution of white
+space allows music to be set very tightly without cluttering symbols
+together.  The result minimizes the number of page turns, which is a
+great advantage.
 
 This is a common characteristic of typography.  Layout should be
 pretty, not only for its own sake, but especially because it helps the
-reader in her task.  For performance material like sheet music, this is
-of double importance: musicians have a limited amount of attention.  The
-less attention they need for reading, the more they can focus on
-playing the music.  In other words, better typography translates to better
-performances.
+reader in her task.  For performance material like sheet music, this
+is of double importance: musicians have a limited amount of attention.
+The less attention they need for reading, the more they can focus on
+playing the music.  In other words, better typography translates to
+better performances.
 
 These examples demonstrate that music typography is an art that is
 subtle and complex, and that producing it requires considerable
@@ -311,8 +317,8 @@ Formatting rules are also preset variables: each object has variables
 containing procedures.  These procedures perform the actual
 formatting, and by substituting different ones, we can change the
 appearance of objects.  In the following example, the rule which note
-head objects are used to produce their symbol is changed during the music
-fragment.
+head objects are used to produce their symbol is changed during the
+music fragment.
 
 @lilypond[quote,ragged-right]
 #(set-global-staff-size 30)
@@ -361,17 +367,17 @@ fragment.
 @cindex engraving
 @cindex typography
 
-The formatting process decides where to place
-symbols.  However, this can only be done once it is decided @emph{what}
-symbols should be printed, in other words what notation to use.
+The formatting process decides where to place symbols.  However, this
+can only be done once it is decided @emph{what} symbols should be
+printed, in other words what notation to use.
 
 Common music notation is a system of recording music that has evolved
 over the past 1000 years.  The form that is now in common use dates
-from the early renaissance.  Although the basic form (i.e., note heads on a
-5-line staff) has not changed, the details still evolve to express the
-innovations of contemporary notation.  Hence, it encompasses some 500
-years of music.  Its applications range from monophonic melodies to
-monstrous counterpoints for large orchestras.
+from the early renaissance.  Although the basic form (i.e., note heads
+on a 5-line staff) has not changed, the details still evolve to
+express the innovations of contemporary notation.  Hence, it
+encompasses some 500 years of music.  Its applications range from
+monophonic melodies to monstrous counterpoints for large orchestras.
 
 How can we get a grip on such a many-headed beast, and force it into
 the confines of a computer program?  Our solution is to break up the
@@ -379,8 +385,8 @@ problem of notation (as opposed to engraving, i.e., typography) into
 digestible and programmable chunks: every type of symbol is handled by
 a separate module, a so-called plug-in.  Each plug-in is completely
 modular and independent, so each can be developed and improved
-separately.  Such plug-ins are called @code{engraver}s, by analogy with
-craftsmen who translate musical ideas to graphic symbols.
+separately.  Such plug-ins are called @code{engraver}s, by analogy
+with craftsmen who translate musical ideas to graphic symbols.
 
 In the following example, we see how we start out with a plug-in for
 note heads, the @code{Note_heads_engraver}.
@@ -526,8 +532,8 @@ polyphony?  In polyphonic notation, many voices can share a staff.
 In this situation, the accidentals and staff are shared, but the stems,
 slurs, beams, etc., are private to each voice.  Hence, engravers should
 be grouped.  The engravers for note heads, stems, slurs, etc., go into a
-group called `Voice context,' while the engravers for key, accidental,
-bar, etc., go into a group called `Staff context.'  In the case of
+group called @q{Voice context,} while the engravers for key, accidental,
+bar, etc., go into a group called @q{Staff context.}  In the case of
 polyphony, a single Staff context contains more than one Voice context.
 Similarly, multiple Staff contexts can be put into a single Score
 context.  The Score context is the top level notation context.
@@ -674,7 +680,7 @@ presentations.
 
 This manual also shows an application: the input format is text, and
 can therefore be easily embedded in other text-based formats such as
-La@TeX{}, HTML, or in the case of this manual, Texinfo.  By means of a
+@LaTeX{}, HTML, or in the case of this manual, Texinfo.  By means of a
 special program, the input fragments can be replaced by music images
 in the resulting PDF or HTML output files.  This makes it easy
 to mix music and text in documents.
@@ -695,15 +701,20 @@ The
 gives a gentle introduction to typesetting music.  First time
 users should start here.
 
+@item
+@emph{@ref{Putting it all together}}
+explains some general concepts about the lilypond file format.  If
+you are not certain where to place a command, read this chapter!
+
 @item
 @emph{@ref{Working on LilyPond projects}}
-demonstrates practical uses of LilyPond.
+discusses practical uses of LilyPond and how to avoid some common
+problems.
 
 @item
-@emph{@ref{Running LilyPond}}
-shows how to run LilyPond and its helper
-programs.  In addition, this section explains how to upgrade input
-files from previous versions of LilyPond.
+@emph{@ref{Tweaking output}}
+shows how to change the default engraving that LilyPond
+produces.
 
 @item
 @emph{@ref{Basic notation}}
@@ -736,14 +747,24 @@ and how to select which MIDI instruments to use.
 discusses issues which affect the global output, such as selecting
 paper size or specifying page breaks.
 
+@item
+@emph{@ref{Interfaces for programmers}}
+explains how to create music functions.
+
+@item
+@emph{@ref{Running LilyPond}}
+shows how to run LilyPond and its helper programs.  In addition, this
+section explains how to upgrade input files from previous versions of
+LilyPond.
+
 @item
 @emph{@ref{LilyPond-book}} explains the details behind creating
 documents with in-line music examples, like this manual.
 
 @item
 @emph{@ref{Converting from other formats}}
-explains how to run the conversion programs.  These programs
-are supplied with the LilyPond package, and convert a variety of music
+explains how to run the conversion programs.  These programs are
+supplied with the LilyPond package, and convert a variety of music
 formats to the @code{.ly} format.
 
 @item
@@ -754,11 +775,37 @@ The
 contains a set of useful reference books for those who wish to know
 more on notation and engraving.
 
+@item
+The
+@emph{@ref{Scheme tutorial}}
+presents a short introduction to Scheme, the programming
+language that music functions use.
+
+@item
+@emph{@ref{Notation manual tables}}
+are a set of tables showing the chord names, MIDI instruments,
+a list of color names, and the Feta font.
+
 @item
 @emph{@ref{Example templates}}
 provides templates of LilyPond pieces.  Just cut and paste a
 template into a file, add notes, and you're done!
 
+@item
+The
+@emph{@ref{Cheat sheet}}
+is a handy reference of the most common LilyPond commands.
+
+@item
+The
+@emph{@ref{LilyPond command index}}
+is an index of all LilyPond @code{\commands}.
+
+@item
+The
+@emph{@ref{LilyPond index}}
+is a complete index.
+
 @end itemize
 
 
@@ -822,10 +869,10 @@ Almost all formatting functionality that is used internally, is
 available directly to the user.  For example, all variables that
 control thickness values, distances, etc., can be changed in input
 files.  There are a huge number of formatting options, and all of them
-are described in this document.  Each section of the
-notation manual has a @b{See also} subsection, which refers to the
-generated documentation.  In the HTML document, these subsections
-have clickable links.
+are described in this document.  Each section of the notation manual
+has a @b{See also} subsection, which refers to the generated
+documentation.  In the HTML document, these subsections have clickable
+links.
 
 @cindex snippets
 @item
@@ -868,7 +915,7 @@ vary from system to system.  On occasion, this manual refers to
 initialization and example files.  Throughout this manual, we refer to
 input files relative to the top-directory of the source archive.  For
 example, @file{input/@/test/@/bla@/.ly} may refer to the file
-@file{lilypond@/-2.8.0/@/input/@/test/@/bla@/.ly}.  On binary packages
+@file{lilypond@/2.x.y/@/input/@/test/@/bla@/.ly}.  On binary packages
 for the Unix platform, the documentation and examples can typically be
 found somewhere below @file{/usr/@/share/@/doc/@/lilypond/}.
 Initialization files, for example @file{scm/@/lily@/.scm}, or
index 68177e1e1a33b867a5250267396a270c461e9451..543a4cdd429b884170bfdaa59cf354f2218e6fbd 100644 (file)
@@ -1,4 +1,11 @@
-c -*- coding: utf-8; mode: texinfo; -*-
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 
 @ignore
@@ -35,11 +42,12 @@ This procedure may be applied to La@TeX{}, HTML, Texinfo or DocBook documents.
 * Integrating LaTeX and music::  
 * Integrating Texinfo and music::  
 * Integrating HTML and music::  
-* Integrating DocBook and music::
+* Integrating DocBook and music::  
 * Music fragment options::      
 * Invoking lilypond-book::      
 * Filename extensions::         
 * Many quotes of a large score::  
+* Inserting LilyPond output into OpenOffice.org::  
 * Inserting LilyPond output into other programs::  
 @end menu
 
@@ -116,6 +124,9 @@ dvips -o -Ppdf -h lilybook.psfonts lilybook
 ps2pdf lilybook.ps
 @end example
 
+If you are running latex in twocolumn mode, remember to add
+@code{-t landscape} to the dvips options.
+
 Running @command{lilypond-book} and @command{latex} creates a lot of
 temporary files, which would clutter up the working directory.  To
 remedy this, use the @code{--output=@var{dir}} option.  It will create
@@ -305,6 +316,9 @@ can then be produced with a PostScript to PDF translator like
 will produce some warnings about fonts; these are harmless and may
 be ignored.
 
+If you are running latex in twocolumn mode, remember to add
+@code{-t landscape} to the dvips options.
+
 @cindex international characters
 @cindex latin1
 
@@ -532,7 +546,7 @@ For HTML (HTML Help, JavaHelp etc.) generation you can use the official DocBook
 @node Music fragment options
 @section Music fragment options
 
-In the following, a ``LilyPond command'' refers to any command described
+In the following, a @q{LilyPond command} refers to any command described
 in the previous sections which is handled by @command{lilypond-book} to
 produce a music snippet.  For simplicity, LilyPond commands are only
 shown in La@TeX{} syntax.
@@ -604,7 +618,7 @@ LilyPond, not the text layout.  Since no indentation is the default,
 
 @item quote
 Reduce line length of a music snippet by @math{2*0.4}@dmn{in} and put
-the output into a quotation block.  The value `0.4@dmn{in}' can be
+the output into a quotation block.  The value @q{0.4@dmn{in}} can be
 controlled with the @code{exampleindent} option.
 
 @item exampleindent
@@ -769,6 +783,17 @@ cd out
 ...
 @end example
 
+@itemx --padding=@var{amount}
+Pad EPS boxes by this much. @var{amount} is measured in milimeters,
+and is 3.0 by default.  This option should be used if the lines of
+music stick out of the right margin.
+
+The width of a tightly clipped systems can vary, due to notation
+elements that stick into the left margin, such as bar numbers and
+instrument names. This option will shorten each line and move each 
+line to the right by the same amount.
+
+
 @item -P @var{process}
 @itemx --process=@var{command}
 Process LilyPond snippets using @var{command}.  The default command is
@@ -823,12 +848,23 @@ output format based on the input filename's extension.
 @end multitable
 @end quotation
 
+
 @node Many quotes of a large score
 @section Many quotes of a large score
 
 If you need to quote many fragments of a large score, you can also use
 the clip systems feature, see @ref{Extracting fragments of notation}.
 
+
+@node Inserting LilyPond output into OpenOffice.org
+@section Inserting LilyPond output into OpenOffice.org
+
+@cindex OpenOffice.org
+
+LilyPond notation can be added to OpenOffice.org with
+@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}
+
+
 @node Inserting LilyPond output into other programs
 @section Inserting LilyPond output into other programs
 
index ce5b8b4f1096d886611866f52d669f54acb8f3d6..3bd4ca5623de61e964933a32c1d4e141207978cb 100644 (file)
@@ -1,4 +1,10 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 @setfilename lilypond.info
 @settitle GNU LilyPond
 @iftex
@@ -133,7 +139,7 @@ Free Documentation License''.
 @top GNU LilyPond --- The music typesetter
 @c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX.
 
-This is the user manual for GNU LilyPond 2.10.x series.
+This is the user manual for GNU LilyPond 2.11.x series.
 @ifhtml
 (See the bottom of this page for the exact version number).
 @end ifhtml
index 2e7f3f7c2cd208cf54be159d6bc5e130688e3a2b..9501d7949dd2619c545abf032312104f950a7980 100644 (file)
@@ -1,3 +1,12 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Literature list
 @appendix Literature list
 
index 68b52bb51368db7ea2bab262a7113c35c66a1276..0a85e749dce08303ba67f09e8b9f8b61e94eed9d 100644 (file)
 @ref{\NAME\,,,music-glossary}
 @end macro
 
+@c to get decent quotes in `foo'
+@macro q{TEXT}
+@html
+&lsquo;\TEXT\&rsquo;
+@end html
+@end macro
+
+@c to get decent quotes in ``foo''
+@macro qq{TEXT}
+@html
+&ldquo;\TEXT\&rdquo;
+@end html
+@end macro
+
 @end ifhtml
 
 
 @ref{\NAME\,,,music-glossary}
 @end macro
 
+@c to get decent quotes in `foo'
+@macro q{TEXT}
+@xml
+&lsquo;\TEXT\&rsquo;
+@end xml
+@end macro
+
+@c to get decent quotes in ``foo''
+@macro qq{TEXT}
+@xml
+&ldquo;\TEXT\&rdquo;
+@end xml
+@end macro
+
 @end ifdocbook
 
 
 @inforef{\NAME\}
 @end macro
 
+@c to get decent quotes in `foo'
+@macro q{TEXT}
+`\TEXT\'
+@end macro
+
+@c to get decent quotes in ``foo''
+@macro qq{TEXT}
+``\TEXT\''
+@end macro
+
 @end ifinfo
 
 
@@ -142,8 +180,19 @@ internals document, @internalsref{\NAME\}
 user manual, @internalsref{\NAME\}
 @end macro
 
+@c to get decent quotes in `foo'
+@macro q{TEXT}
+`\TEXT\'
+@end macro
+
+@c to get decent quotes in ``foo''
+@macro qq{TEXT}
+``\TEXT\''
+@end macro
+
 @end iftex
 
+
 @ifnottex
 @c **** not TEX ****
 
@@ -201,4 +250,4 @@ user manual, @internalsref{\NAME\}
 @kindex \WORD\
 @end macro
 
-
+@c EOF
index 55e07d2b2ac2f503874a9e415ee1dcfaa52b98ee..840ac2ccb9ceef47551b63ea317c8c1f776e4ccf 100644 (file)
@@ -1348,6 +1348,7 @@ music of the baroque era, has been one of the most popular polyphonic
 composition methods.
 
 @lilypond[fragment,staffsize=12,line-width=13.0\cm]
+\set Score.implicitTimeSignatureVisibility = #all-invisible
 \override Score.TimeSignature #'break-visibility = #all-invisible
 \context PianoStaff <<
   \context Staff = SA \relative c' {
@@ -1419,7 +1420,7 @@ S: crescendo,
 FI: cresendo, voimistuen.
 
 Increasing volume.  Indicated by a rightwards opening horizontal wedge or the
-abbreviation ``cresc.''.
+abbreviation @q{cresc.}.
 
 @lilypond[fragment,ragged-right]
 \key g \major \time 4/4
@@ -1501,7 +1502,7 @@ S: da capo,
 FI: da capo, alusta.
 
 The term indicates repetition of the piece from the beginning to the end or
-to a certain place marked @emph{fine}.  Mostly abbreviated as ``D.C.''.
+to a certain place marked @emph{fine}.  Mostly abbreviated as @q{D.C.}.
 
 @node dal segno
 @section dal segno
@@ -1515,7 +1516,7 @@ DK: dal segno,
 S: dal segno,
 FI: dal segno, lähtien merkistä.
 
-Abbreviated ``d.s.''.  Repetition, not from the beginning, but from
+Abbreviated @q{d.s.}.  Repetition, not from the beginning, but from
 another place frequently near the beginning marked by a sign:
 
 @lilypond[fragment,ragged-right]
@@ -1543,7 +1544,7 @@ S: decrescendo,
 FI: decresendo, hiljentyen.
 
 Decreasing tone volume.  Indicated by a leftwards opening horizontal wedge
-or the abbreviation ``decresc.''.
+or the abbreviation @q{decresc.}.
 
 @lilypond[fragment,ragged-right]
 \relative c'' {
@@ -2809,7 +2810,7 @@ S: ledton,
 FI: johtosävel.
 
 The seventh @aref{scale degree}, a @aref{semitone} below
-the tonic; so called because of its strong tendency to ``lead up'' (resolve
+the tonic; so called because of its strong tendency to @q{lead up} (resolve
 upwards) to the tonic scale degree.
 
 @node ledger line
@@ -3270,8 +3271,8 @@ subject.
 @lilypond[line-width=13.0\cm]
 \score{
 \relative c'' {
+  \set Score.implicitTimeSignatureVisibility = #all-invisible
   \override Score.TimeSignature #'break-visibility = #all-invisible
-  %\override Score.TextScript #'font-style = #'large
   \time 4/4
   \key g \major
   \partial 8 g16\startGroup fis |
@@ -4233,7 +4234,7 @@ A form used frequently for single movements of the @aref{sonata},
 falls into three sections called @emph{exposition}, @emph{development} and
 @emph{recapitulation}.  In the exposition the composer introduces some musical
 ideas, consisting of a number of themes; in the development section the
-composer `develops' this material, and in the recapitulation the composer
+composer @q{develops} this material, and in the recapitulation the composer
 repeats the exposition, with certain modifications.  The exposition contains a
 number of themes that fall into two groups, often called first and second
 subject.  Other melodies occurring in each group are considered as
index 9fb163d7c0742c579367e23aabf8a6691fc6c5c1..365cfa9c2d19301b7da03f6ab68acc4354aeac35 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @c A menu is needed before every deeper *section nesting of @node's; run
 @c     M-x texinfo-all-menus-update
@@ -24,7 +30,7 @@ specific notation.
 @section Input files
 
 The main format of input for LilyPond are text files.  By convention,
-these files end with ``@code{.ly}''.
+these files end with @samp{.ly}.
 
 @menu
 * File structure (introduction)::  
@@ -277,6 +283,9 @@ A markup text, a verse for example
 Markup texts are rendered above, between or below the scores or music
 expressions, wherever they appear.
 
+@cindex variables
+@cindex identifiers
+
 @item
 An identifier, such as
 @example
@@ -378,7 +387,7 @@ file, use
 The line @code{\include "file.ly"} is equivalent to pasting the contents
 of file.ly into the current file at the place where you have the
 \include.  For example, for a large project you might write separate files
-for each instrument part and create a ``full score'' file which brings
+for each instrument part and create a @q{full score} file which brings
 together the individual instrument files.
 
 The initialization of LilyPond is done in a number of files that are
@@ -387,7 +396,7 @@ user.  Run lilypond --verbose to see a list of paths and files that Lily
 finds.
 
 Files placed in directory @file{PATH/TO/share/lilypond/VERSION/ly/} (where
-VERSION is in the form ``2.6.1'') are on the path and available to
+VERSION is in the form @q{2.6.1}) are on the path and available to
 @code{\include}.  Files in the
 current working directory are available to \include, but a file of the same
 name in LilyPond's installation takes precedence.  Files are
@@ -646,7 +655,7 @@ You may change this behavior (and print all the headers when defining
 The default footer is empty, except for the first page, where the
 @code{copyright} field from @code{\header} is inserted, and the last
 page, where @code{tagline} from @code{\header} is added.  The default
-tagline is ``Music engraving by LilyPond (@var{version})''.@footnote{Nicely
+tagline is @qq{Music engraving by LilyPond (@var{version})}.@footnote{Nicely
 printed parts are good PR for us, so please leave the tagline if you
 can.}
 
@@ -780,9 +789,20 @@ to a score, for example,
 @}
 @end example
 
-The tempo is specified using the @code{\tempo} command.  In this
-example the tempo of quarter notes is set to 72 beats per minute.
+The tempo can be specified using the @code{\tempo} command within the 
+actual music, see @ref{Metronome marks}.  An alternative, which does not
+result in a metronome mark in the printed score, is shown in the example
+above. In this example the tempo of quarter notes is set to 72 beats per
+minute. 
+This kind of tempo
+specification can not take dotted note lengths as an argument. In this
+case, break the dotted notes into smaller units. For example, a tempo
+of 90 dotted quarter notes per minute can be specified as 270 eighth
+notes per minute
 
+@example
+tempoWholesPerMinute = #(ly:make-moment 270 8)
+@end example
 
 If there is a @code{\midi} command in a @code{\score}, only MIDI will
 be produced.  When notation is needed too, a @code{\layout} block must
index 32afbd6f1bf2e9df3ddc562e8a450eb1c8ea305a..865cfd72b81f9a5477d146dfa8ab4c836637080d 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @node Notation manual tables
 @appendix Notation manual tables
@@ -97,12 +103,12 @@ darkcyan    darkmagenta    darkyellow
 X color names come several variants:
 
 Any name that is spelled as a single word with capitalisation
-(e.g. ``LightSlateBlue'') can also be spelled as space separated
-words without capitalisation (e.g. ``light slate blue'').
+(e.g. @q{LightSlateBlue}) can also be spelled as space separated
+words without capitalisation (e.g. @q{light slate blue}).
 
-The word ``grey'' can always be spelled ``gray'' (e.g. ``DarkSlateGray'').
+The word @q{grey} can always be spelled @q{gray} (e.g. @q{DarkSlateGray}).
 
-Some names can take a numerical suffix (e.g. ``LightSalmon4'').
+Some names can take a numerical suffix (e.g. @q{LightSalmon4}).
 
 
 @subsubheading Color Names without a numerical suffix:
diff --git a/Documentation/user/point-and-click.itely b/Documentation/user/point-and-click.itely
deleted file mode 100644 (file)
index 8d74e79..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-@node Point and click
-@appendix Point and click
-@cindex point and click
-
-
-Point and click lets you find notes in the input by clicking on them
-in the PDF viewer.  This makes it easier to find input that causes
-some error in the sheet music.
-
-When this functionality is active, LilyPond adds hyperlinks to the PDF
-file. These hyperlinks are sent to the web-browser, which opens a
-text-editor with the cursor in the right place.
-
-To make this chain work, you should configure your PDF viewer to
-follow hyperlinks using the @file{lilypond-invoke-editor} script
-supplied with LilyPond.
-
-For Xpdf on Unix, the following should be present in
-@file{xpdfrc}@footnote{On unix, this file is found either in
-@file{/etc/xpdfrc} or as @file{.xpdfrc} in your home directory.}
-
-@example
-urlCommand     "lilypond-invoke-editor %s"
-@end example
-
-The program @file{lilypond-invoke-editor} is a small helper
-program. It will invoke an editor for the special @code{textedit}
-URIs, and run a web browser for others.  It tests the environment
-variable @code{EDITOR} for the following patterns,
-
-@table @code
-@item emacs
-  this will invoke
-@example
-emacsclient --no-wait +@var{line}:@var{column} @var{file}
-@end example
-@item vim
-  this will invoke
-@example
-gvim --remote +:@var{line}:norm@var{char} @var{file}
-@end example
-
-@item nedit
-this will invoke
-@example
-  nc -noask +@var{line} @var{file}'
-@end example
-@end table
-
-The environment variable @code{LYEDITOR} is used to override this. It
-contains the command line to start the editor, where @code{%(file)s},
-@code{%(column)s}, @code{%(line)s} is replaced with the file, column
-and line respectively. The  setting
-
-@example
-emacsclient --no-wait +%(line)s:%(column)s %(file)s
-@end example
-
-@noindent
-for @code{LYEDITOR} is equivalent to the standard emacsclient
-invocation.
-
-
-@cindex file size, output
-
-The point and click links enlarge the output files significantly. For
-reducing the size of PDF and PS files, point and click may be switched
-off by issuing
-
-@example
-#(ly:set-option 'point-and-click #f)
-@end example
-
-@noindent
-in a @file{.ly} file.  Alternately, you may pass this as an command-line
-option
-
-@example
-lilypond -dno-point-and-click file.ly
-@end example
-
index 09d561a6c0342510fbfe4f048a4616dc4772ca81..a4d8f295eaf9b4c9f3ec9a57221172d97c5b2761 100644 (file)
@@ -1,4 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @node Preface
 @unnumbered Preface
index 9a62200bbabba423e9f2f34d9c7609a9e1d8af4b..431e029919d8e9d1f1d49719f04eccec78b99acb 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Interfaces for programmers
 @chapter Interfaces for programmers
 
@@ -27,6 +35,7 @@ This section discusses how to create music functions within LilyPond.
 * Paired substitution functions::  
 * Mathematics in functions::    
 * Void functions::              
+* Functions without arguments::  
 * Overview of available music functions::  
 @end menu
 
@@ -74,7 +83,7 @@ The @code{parser} and @code{location} argument are mandatory,
 and are used in some advanced situations.  The @code{parser}
 argument is used to access to the value of another LilyPond
 variable.  The @code{location} argument
-is used to set the ``origin'' of the music expression that is built
+is used to set the @q{origin} of the music expression that is built
 by the music function, so that in case of a syntax error LilyPond
 can tell the user an appropriate place to look in the input file.
 
@@ -123,7 +132,7 @@ tempoMark = #(define-music-function (parser location padding marktext)
                                     (number? string?)
 #{
   \once \override Score . RehearsalMark #'padding = $padding
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup { \bold $marktext }
 #})
 
@@ -237,6 +246,36 @@ noPointAndClick =
 \noPointAndClick   % disable point and click
 @end example
 
+
+@node Functions without arguments
+@subsection Functions without arguments
+
+In most cases a function without arguments should be written
+with an identifier,
+
+@example
+dolce = \markup@{ \italic \bold dolce @}
+@end example
+
+However, in rare cases it may be useful to create a music function
+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 #@}
+       #@{#@}))
+@end example
+
+To actually display bar numbers where this function is called,
+invoke lilypond with
+
+@example
+lilypond -d display-bar-numbers FILENAME.ly
+@end example
+
+
 @node Overview of available music functions
 @subsection Overview of available music functions
 
@@ -294,7 +333,7 @@ traLaLa = @{ c'4 d'4 @}
 @noindent
 is internally converted to a Scheme definition
 @example
-(define traLaLa @var{Scheme value of ``@code{... }''})
+(define traLaLa @var{Scheme value of `@code{... }'})
 @end example
 
 This means that input variables and Scheme variables may be freely
@@ -325,7 +364,7 @@ the dummy statement in the above example, the @code{newLa} definition
 is executed before @code{traLaLa} is defined, leading to a syntax
 error.
 
-The above example shows how to `export' music expressions from the
+The above example shows how to @q{export} music expressions from the
 input to the Scheme interpreter.  The opposite is also possible.  By
 wrapping a Scheme value in the function @code{ly:export}, a Scheme
 value is interpreted as if it were entered in LilyPond syntax.
@@ -374,7 +413,7 @@ available is in the Program reference manual, under
 @internalsref{Music expressions}.
 
 @item
-`type' or interface: Each music name has several `types' or
+@q{type} or interface: Each music name has several @q{types} or
 interfaces, for example, a note is an @code{event}, but it is also a
 @code{note-event}, a @code{rhythmic-event}, and a
 @code{melodic-event}.  All classes of music are listed in the
@@ -394,7 +433,7 @@ under @internalsref{Music properties}.
 
 A compound music expression is a music object that contains other
 music objects in its properties.  A list of objects can be stored in
-the @code{elements} property of a music object, or a single `child'
+the @code{elements} property of a music object, or a single @q{child}
 music object in the @code{element} object.  For example,
 @internalsref{SequentialMusic} has its children in @code{elements},
 and @internalsref{GraceMusic} has its single argument in
@@ -550,7 +589,7 @@ d'
 @subsection Doubling a note with slurs (example)
 
 Suppose we want to create a function which translates
-input like ``@code{a}'' into ``@code{a( a)}''.  We begin
+input like @samp{a} into @samp{a( a)}.  We begin
 by examining the internal representation of the music
 we want to end up with.
 
@@ -589,7 +628,7 @@ we want to end up with.
 @end example
 
 The bad news is that the @code{SlurEvent} expressions
-must be added ``inside'' the note (or more precisely,
+must be added @q{inside} the note (or more precisely,
 inside the @code{EventChord} expression).
 
 Now we examine the input,
@@ -727,12 +766,12 @@ necessary, but just like clear variable names, it is good practice.
 (let ((result-event-chord (ly:music-deep-copy event-chord)))
 @end example
 
-`@code{let}' is used to declare local variables.  Here we use one local
-variable, named `@code{result-event-chord}', to which we give the value
-@code{(ly:music-deep-copy event-chord)}.  `@code{ly:music-deep-copy}' is
+@code{let} is used to declare local variables.  Here we use one local
+variable, named @code{result-event-chord}, to which we give the value
+@code{(ly:music-deep-copy event-chord)}.  @code{ly:music-deep-copy} is
 a function specific to LilyPond, like all functions prefixed by
-`@code{ly:}'.  It is use to make a copy of a music
-expression.  Here we copy `@code{event-chord} (the parameter of the
+@code{ly:}.  It is use to make a copy of a music
+expression.  Here we copy @code{event-chord} (the parameter of the
 function).  Recall that our purpose is to add a marcato to an
 @code{EventChord} expression.  It is better to not modify the
 @code{EventChord} which was given as an argument, because it may be
@@ -766,7 +805,7 @@ former elements property, with an extra item: the
       (ly:music-property result-event-chord 'elements))
 @end example
 
-`@code{cons}' is used to add an element to a list without modifying the
+@code{cons} is used to add an element to a list without modifying the
 original list.  This is what we
 want: the same list as before, plus the new @code{ArticulationEvent}
 expression.  The order inside the elements property is not important here.
@@ -930,7 +969,7 @@ The arguments are
 @item argi-type?
 a type predicate for the i@var{th} argument
 @item layout
-the `layout' definition
+the @q{layout} definition
 @item props
 a list of alists, containing all active properties.
 @end table
index 0cc5ecd908ff926d5c6b9226482325ee3f4d314f..af557788fc89bced9da052e525d55b4955d98325 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Putting it all together
 @chapter Putting it all together
 
@@ -22,7 +30,7 @@ want something that isn't covered?
 
 Start off with the template that seems closest to what you want to end
 up with.  Let's say that you want to write something for soprano and
-cello.  In this case, we would start with ``Notes and lyrics'' (for the
+cello.  In this case, we would start with @q{Notes and lyrics} (for the
 soprano part).
 
 @example
@@ -52,7 +60,7 @@ text = \lyricmode @{
 @}
 @end example
 
-Now we want to add a cello part.  Let's look at the ``Notes only'' example:
+Now we want to add a cello part.  Let's look at the @q{Notes only} example:
 
 @example
 \version "2.9.13"
@@ -283,6 +291,9 @@ Some people put some of those commands outside the
 often placed above the @code{\score}.  That's just
 another shorthand that LilyPond accepts.
 
+@cindex variables
+@cindex indentifiers
+
 Another great shorthand is the ability to define
 variables.  All the templates use this
 
index 81b6751d201504689584d8c512013e1471768b50..ff4af0cf17153f077c7cf1110e8985767336a29f 100644 (file)
@@ -1,5 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 
 @node Running LilyPond
 @chapter Running LilyPond
 This chapter details the technicalities of running LilyPond.
 
 Some of these commands are run from the command-line.  By
-``command-line'', we mean the command
+@q{command-line}, we mean the command
 line in the operating system.  Windows users
-might be more familiar with the terms ``DOS shell'' or
-``command shell''; OSX users might be more familiar with the
-terms ``terminal'' or ``console''.  OSX users should also
+might be more familiar with the terms @q{DOS shell} or
+@q{command shell}; OSX users might be more familiar with the
+terms @q{terminal} or @q{console}.  OSX users should also
 consult @ref{Notes for the MacOS X app}.
 
 Describing how to use
@@ -87,11 +94,13 @@ on the command-line, and include
 at the top of the @code{.ly} file.
 
 @item -f,--format=@var{format}
-which formats should be written.  Choices are @code{svg}, @code{ps},
-@code{pdf}, @code{png}, @code{tex}, @code{dvi}.
+which formats should be written.  Choices for @code{format} are
+@code{svg}, @code{ps}, @code{pdf}, @code{png}, @code{tex}, @code{dvi}.
+
+Example: @code{lilypond -fpng filename.ly}
 
 @item -b,--backend=@var{format}
-the output format to use for the back-end.  Choices are
+the output format to use for the back-end.  Choices for @code{format} are
 @table @code
 @item tex
 for @TeX{} output, to be processed with La@TeX{}.  If present, the file
@@ -130,6 +139,8 @@ This mode is used by default by lilypond-book.
 @cindex Scheme dump
 @end table
 
+Example: @code{lilypond -bsvg filename.ly}
+
 @cindex output format, setting
 
 @item -d,--define-default=@var{var}=@var{val}
@@ -356,11 +367,36 @@ invoking them directly, e.g.
 The same is true of the other scripts in that directory, including
 lilypond-book, convert-ly, abc2ly, etc.
 
-Alternatively, you may add this directory to your path.  Modify (or create)
+Alternatively, you may create scripts which add the path
+automatically.  Create a directory to store these scripts,
+
+@example
+mkdir -p ~/bin
+cd ~/bin
+@end example
+
+Create a file called @code{lilypond} which contains
+
+@example
+exec @var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond "$@"
+@end example
+
+Create similar files @code{lilypond-book}, @code{convert-ly}, and
+any other helper programs you use (@code{abc2ly}, @code{midi2ly},
+etc).  Simply replace the @code{bin/lilypond} with
+@code{bin/convert-ly} (or other program name) in the above file.
+
+Make the file executable,
+
+@example
+chmod u+x lilypond
+@end example
+
+Now, add this directory to your path.  Modify (or create)
 a file called @code{.profile} in your home directory such that it contains
 
 @example
-export PATH=$PATH:@var{path/to}/LilyPond.app/Contents/Resources/bin
+export PATH=$PATH:~/bin
 @end example
 
 @noindent
@@ -532,59 +568,15 @@ converted.
 @cindex reporting bugs
 
 If you have input that results in a crash or an erroneous output, then
-that is a bug.  We try to respond to bug-reports promptly, and fix them as
-soon as possible.  Help us by sending a defective input file, so we can
-reproduce the problem. Send the report via:
-
-@example
-@uref{http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs}
-@end example
-
-A few tips:
-@itemize @bullet
+that is a bug. There is a list of current bugs on our google bug tracker,
 
-@item Try to produce a very small input file which demonstrates the problem;
-one or two bars is often sufficient to reproduce a bug. The smaller the
-input file is, the easier it is for us to debug the problem.
+@uref{http://code.google.com/p/lilypond/issues/list}
 
-@item Don't forget to tell which version of LilyPond you use!
+If you have discovered a bug which is not listed, please report the
+bug by following the directions on
 
-@item If possible, use @code{ragged-right} in your example. This makes sure
-that the bug can be reproduced in all paper sizes.
-@end itemize
-
-@ignore
-@c the bug database is not up to date enough.
-
-When you've found a bug, have a look at our
-@uref{http://@/lilypond@/.org/@/bugs/@/v2.8/@/,bug database} to see if
-it has already been reported.  You could also try to do a few searches
-on the mailing list for the bug.  Sometimes the bug will have already
-been reported and a fix or workaround is already known.
-@end ignore
+@uref{http://lilypond.org/web/devel/participating/bugs}
 
-Here is an example of a good bug report:
-
-@verbatim
-It seems that placement of accidentals is broken.  In the
-following example, the accidental touches the note head.
-
-Using Mac OSX 10.3.7, lilypond 2.7.32
-
-\version "2.9.13"
-\layout { ragged-right = ##t }
-\relative c'' {
-   a4 b cis d
-}
-@end verbatim
-
-@lilypond[quote]
-\layout { ragged-right = ##t }
-\relative c''{
-  \override Accidental #'extra-offset = #'(1.0 . 0)
-  a4 b cis d
-}
-@end lilypond
 
 @node Error messages
 @section Error messages
index 64f1ff6e18b03d84b3ad6a1bf52fae2cb458bb26..1655535cb548ce14506b0a6c1433d40d82e2329f 100644 (file)
@@ -1,4 +1,11 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
 
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @node Scheme tutorial
 @appendix Scheme tutorial
@@ -146,8 +153,8 @@ staff lines, so these stem lines will be @code{2.6} times the
 width of staff lines.  This makes stems almost twice as thick as their
 normal size. To distinguish between variables defined in input files (like
 @code{twentyFour} in the example above) and variables of internal
-objects, we will call the latter ``properties'' and the former
-``identifiers.''  So, the stem object has a @code{thickness} property,
+objects, we will call the latter @q{properties} and the former
+@q{identifiers.}  So, the stem object has a @code{thickness} property,
 while @code{twentyFour} is an identifier.
 
 @cindex properties vs. identifiers
index 21b93288603b2bf7de66431dfccaa1fdb20daf9a..a15df5904575ec5cccfe755ca847f45d73489974 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @c A menu is needed before every deeper *section nesting of @node's; run
 @c     M-x texinfo-all-menus-update
@@ -15,8 +21,8 @@ This influences where line breaks are chosen, and thus ultimately, how
 many pages a piece of music takes.
 
 Globally speaking, this procedure happens in four steps: first,
-flexible distances (``springs'') are chosen, based on durations.  All
-possible line breaking combinations are tried, and a ``badness'' score
+flexible distances (@q{springs}) are chosen, based on durations.  All
+possible line breaking combinations are tried, and a @q{badness} score
 is calculated for each. Then the height of each possible system is
 estimated. Finally, a page breaking and line breaking combination is chosen
 so that neither the horizontal nor the vertical spacing is too cramped
@@ -704,7 +710,7 @@ lilypond <file>.ly
 @subsection Horizontal spacing overview
 
 The spacing engine translates differences in durations into stretchable
-distances (``springs'') of differring lengths.  Longer durations get
+distances (@q{springs}) of differring lengths.  Longer durations get
 more space, shorter durations get less.  The shortest durations get a
 fixed amount of space (which is controlled by
 @code{shortest-duration-space} in the @internalsref{SpacingSpanner}
@@ -839,7 +845,9 @@ Horizontal spacing may be altered with the
 we compare the same music; once without altering
 the property, and then altered.  Larger values
 of @code{ly:make-moment} will produce smaller
-music.
+music.  Note that @code{ly:make-moment} constructs
+a duration, so @code{1 4} is a longer duration
+than @code{1 16}.
 
 @lilypond[relative,verbatim,line-width=12\cm]
 \score {
@@ -864,7 +872,7 @@ music.
     \context {
       \Score
       \override SpacingSpanner
-                #'base-shortest-duration = #(ly:make-moment 1 4)
+                #'base-shortest-duration = #(ly:make-moment 1 16)
     }
   }
 }
@@ -1019,7 +1027,7 @@ for details.
 
 @refbugs
 
-Line breaks can only occur if there is a ``proper'' bar line.  A note
+Line breaks can only occur if there is a @q{proper} bar line.  A note
 which is hanging over a bar line is not proper, such as
 
 @lilypond[quote,ragged-right,relative=2,fragment,verbatim]
@@ -1117,8 +1125,8 @@ the absence of notes. This is so that single-staff polyphony with rests in one
 of the parts does not throw off the @code{Page_turn_engraver}). When it finds
 a sufficiently long section without notes, the @code{Page_turn_engraver} will
 insert an @code{\allowPageTurn} at the final barline in that section, unless
-there is a ``special'' barline (such as a double bar), in which case the
-@code{\allowPageTurn} will be inserted at the final ``special'' barline in
+there is a @q{special} barline (such as a double bar), in which case the
+@code{\allowPageTurn} will be inserted at the final @q{special} barline in
 the section.
 
 @funindex minimumPageTurnLength
index 3e7845709c03c1ebeafe8b6d1b28019b25d9ac16..fca2900d655f1b1cc9d53a332f37c7e448032f58 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Example templates
 @appendix Example templates
 
@@ -723,6 +731,120 @@ bassWords = \lyricmode {
 }
 @end lilypond
 
+@appendixsubsec SATB with aligned contexts
+
+Here all the lyrics lines are placed using @code{alignAboveContext}
+and @code{alignBelowContext}.
+
+@lilypond[quote,verbatim,ragged-right]
+\version "2.10.0"
+global = {
+  \key c \major
+  \time 4/4
+}
+
+sopMusic = \relative c'' {
+  c4 c c8[( b)] c4
+}
+sopWords = \lyricmode {
+  hi hi hi hi
+}
+
+altoMusic = \relative c' {
+  e4 f d e
+}
+altoWords =\lyricmode {
+  ha ha ha ha
+}
+
+tenorMusic = \relative c' {
+  g4 a f g
+}
+tenorWords = \lyricmode {
+  hu hu hu hu
+}
+
+bassMusic = \relative c {
+  c4 c g c
+}
+bassWords = \lyricmode {
+  ho ho ho ho
+}
+
+\score {
+  \new ChoirStaff <<
+     \new Staff = women <<
+        \new Voice =
+          "sopranos" { \voiceOne << \global \sopMusic >> }
+        \new Voice =
+          "altos" { \voiceTwo << \global \altoMusic >> }
+     >>
+     \new Lyrics \with {alignAboveContext=women} \lyricsto sopranos \sopWords
+     \new Lyrics \with {alignBelowContext=women} \lyricsto altos \altoWords
+% we could remove the line about this with the line below, since we want
+% the alto lyrics to be below the alto Voice anyway.
+%    \new Lyrics \lyricsto altos \altoWords
+
+     \new Staff = men <<
+        \clef bass
+        \new Voice =
+          "tenors" { \voiceOne <<\global \tenorMusic >> }
+        \new Voice =
+          "basses" { \voiceTwo <<\global \bassMusic >> }
+     >>
+
+     \new Lyrics \with {alignAboveContext=men} \lyricsto tenors \tenorWords
+     \new Lyrics \with {alignBelowContext=men} \lyricsto basses \bassWords
+% again, we could replace the line above this with the line below.
+%    \new Lyrics \lyricsto basses \bassWords
+  >>
+
+  \layout {
+     \context {
+        % a little smaller so lyrics
+        % can be closer to the staff
+        \Staff
+        \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
+     }
+  }
+}
+
+
+\score {
+  \new ChoirStaff <<
+     \new Staff = women <<
+        \new Voice =
+          "sopranos" { \voiceOne << \global \sopMusic >> }
+        \new Voice =
+          "altos" { \voiceTwo << \global \altoMusic >> }
+     >>
+
+     \new Lyrics \with {alignAboveContext=women} \lyricsto sopranos \sopWords
+     \new Lyrics \lyricsto altos \altoWords
+
+     \new Staff = men <<
+        \clef bass
+        \new Voice =
+          "tenors" { \voiceOne <<\global \tenorMusic >> }
+        \new Voice =
+          "basses" { \voiceTwo <<\global \bassMusic >> }
+     >>
+
+     \new Lyrics \with {alignAboveContext=men} \lyricsto tenors \tenorWords
+     \new Lyrics \lyricsto basses \bassWords
+  >>
+
+  \layout {
+     \context {
+        % a little smaller so lyrics
+        % can be closer to the staff
+        \Staff
+        \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
+     }
+  }
+} 
+@end lilypond
+
 
 @c bad node name to avoid node name confict
 @node Ancient notation templates
index 796705ec5149f7e08b299d82c36f8a27ac9b2e1a..ee0ee87abe533fe4a032da4def61b059b6bfe5e3 100644 (file)
@@ -1,5 +1,11 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
 
 @c TODO:
 @c   * more details about running lilypond; error messages,
 @node Tutorial
 @chapter Tutorial
 
-This tutorial starts with a short introduction to the LilyPond music
-language.  After this first contact we will show you how to produce
-printed output.  Then you will be able to create and print your own
-sheets of music.
+This tutorial starts with an introduction to the LilyPond music
+language and how to produce printed music.  After this first contact we
+will explain how to create common musical notation.
 
 @ifhtml
 Many people learn programs by trying and fiddling around with the
@@ -42,7 +47,7 @@ commands for quick reference.
 
 @menu
 * First steps::                 
-* Running LilyPond for the first time::  
+* Second steps::                
 * More about pitches::          
 * Entering ties::               
 * Automatic and manual beams::  
@@ -68,26 +73,128 @@ commands for quick reference.
 @section First steps
 
 The first example demonstrates how to enter the most elementary piece
-of music, a @rglos{scale}.  A @rglos{note} can be entered by typing its
-name, from @samp{a} through @samp{g}.  So, if you enter
+of music, a @rglos{scale}.  A @rglos{note} can be entered by typing
+its name, from @samp{a} through @samp{g}.  So, if you enter
 
 @example
 @{
-c d e f g a b
+c' d' e' f' g' a' b' c''
 @}
 @end example
 
 @noindent
 the result looks like this
 
-@lilypond[fragment,quote,notime,relative=1]
-c d e f g a b
+@lilypond[quote]
+{
+c' d' e' f' g' a' b' c''
+}
 @end lilypond
 
-Every piece of LilyPond input needs to have @{curly braces@} placed
-around the input.  For the rest of this manual, most examples will
-omit these braces, but don't forget them in your own music!
+@emph{Warning:} Every piece of LilyPond input needs to have @{curly
+braces@} placed around the input.  The braces should be also be
+surrounded by a space unless they are at the beginning or end of a
+line to avoid ambiguities.  These may be omitted in examples in this
+manual, but don't forget them in your own music!
+
+@cindex Case sensitive
+In addition, LilyPond input is case sensitive.  @code{ @{ c d e @} } is
+valid input; @code{ @{ C D E @} } will produce an error message.
+
+
+
+@unnumberedsubsec Entering music and viewing output
+
+In this section we will explain what commands to run
+and how to view or print the output.
+
+@unnumberedsubsubsec MacOS X
+
+If you double click LilyPond.app, it will open with an example
+file. Save it, for example, to @file{test.ly} on your Desktop, and
+then process it with the menu command @samp{Compile > Typeset File}.
+The resulting PDF file will be displayed on your screen.
+
+Be warned that the first time you ever run lilypond will take a minute
+or two, because all of the system fonts have to be analyzed first.
+
+For future use of LilyPond, you should begin by selecting "New"
+or "Open".
+
+@unnumberedsubsubsec Windows
+
+On Windows, start up a text-editor@footnote{Any simple or
+programmer-oriented editor with UTF-8 support will do, for example
+Notepad.  Do not use a word processor, since these insert formatting
+codes that will confuse LilyPond.} and enter
+
+@verbatim
+{ c' e' g' c'' }
+@end verbatim
+
+Save it on the desktop as @file{test.ly} and make sure that it is not
+called @file{test.ly.TXT}.  Double clicking @file{test.ly} will process
+the file and show the resulting PDF file.
+
+
+@unnumberedsubsubsec Unix
+
+Begin by opening a terminal window and starting a text editor.  For
+example, you could open an xterm and execute
+@code{joe}@footnote{There are macro files for VIM addicts, and there
+is a @code{LilyPond-mode} for Emacs addicts.  If they have not been
+installed already, refer to the file @file{INSTALL.txt}.}.  In your
+text editor, enter the following input and save the file as
+@file{test.ly}
+
+@verbatim
+{ c' e' g' c'' }
+@end verbatim
+
+@noindent
+To process @file{test.ly}, proceed as follows
+
+@example
+lilypond test.ly
+@end example
+
+@noindent
+You will see something resembling
+
+@example
+lilypond test.ly
+GNU LilyPond 2.10.0
+Processing `test.ly'
+Parsing...
+Interpreting music... [1]
+Preprocessing graphical objects...
+Calculating line breaks... [2]
+Layout output to `test.ps'...
+Converting to `test.pdf'...
+@end example
+
+@cindex PDF file
+@cindex Viewing music
 
+@noindent
+The result is the file @file{test.pdf} which you can print or view
+with the standard facilities of your operating system.@footnote{If
+your system does not have any tools installed, you can try
+@uref{http://@/www@/.cs@/.wisc@/.edu/@/~ghost/,Ghostscript}, a freely
+available package for viewing and printing PDF and PostScript files.}
+
+
+@node Second steps
+@section Second steps
+
+@emph{Remember:} Every piece of LilyPond input needs to have @{curly
+braces@} placed around the input.  The braces should be surrounded by
+a space unless they are at the beginning or end of a line to avoid
+ambiguities.  For the rest of this manual, most examples will omit
+these braces, but don't forget them in your own music!
+
+@c will be removed once the tutorial either explains \relative or
+@c examples are fixed so they don't use it.  -gp
 In addition, many examples use @code{relative} mode.  This is explained
 in @ref{Octave entry}; for now simply be aware that some examples
 should be placed inside @code{\relative @{ @emph{...music...} @}}.
@@ -98,6 +205,11 @@ space, using @code{\paper @{ ragged-right = ##t @}}.
 Finally, LilyPond input is case sensitive.  @code{ @{ c d e @} } is
 valid input; @code{ @{ C D E @} } will produce an error message.
 
+@c  End of latest re-write.  Since I have no life, I may do more
+@c  work on this, but I'd really like to have a Doc Helper take
+@c  over this task.  -gp
+
+
 The @rglos{duration} of a note is specified by a number after the note
 name.  @samp{1} for a @rglos{whole note}, @samp{2} for a @rglos{half note},
 @samp{4} for a @rglos{quarter note} and so on
@@ -187,7 +299,6 @@ s16_" "
 Remember to enclose the notes and commands in curly braces
 @code{@{@tie{}@dots{}@tie{}@}} to convert it to printable output.
 
-@c @li lypond[fragment,quote,noindent,line-width=55\staff-space]
 @lilypond[fragment,quote,noindent,verbatim]
 \time 3/4
 \clef bass
@@ -212,89 +323,6 @@ see @ref{Time signature}.
 @end quotation
 
 
-@node Running LilyPond for the first time
-@section Running LilyPond for the first time
-
-@c cheesy title to avoid clash with chapter name.
-
-In the last section we explained what kind of things you can enter in
-a LilyPond file.  In this section we will explain what commands to run
-and how to view or print the output.  If you have not used LilyPond
-before, want to test your setup, or want to run an example file
-yourself, read this section.
-
-@unnumberedsubsec MacOS X
-
-If you double click LilyPond.app, it will open with an example
-file. Save it, for example, to @file{test.ly} on your Desktop, and
-then process it with the menu command @samp{Compile > Typeset File}.
-The resulting PDF file will be displayed on your screen.
-
-Be warned that the first-ever run will take a minute or two, because
-all of the system fonts have to be analyzed first.
-
-@unnumberedsubsec Windows
-
-On Windows, start up a text-editor@footnote{Any simple or
-programmer-oriented editor will do, for example Notepad.  Do not use a
-word processor, since these insert formatting codes that will confuse
-LilyPond.} and enter
-
-@verbatim
-{ c'4 e' g' }
-@end verbatim
-
-Save it on the desktop as @file{test.ly} and make sure that it is not
-called @file{test.ly.TXT}.  Double clicking @file{test.ly} will process
-the file and show the resulting PDF file.
-
-
-@unnumberedsubsec Unix
-
-Begin by opening a terminal window and starting a text editor.  For
-example, you could open an xterm and execute
-@code{joe}.@footnote{There are macro files for VIM addicts, and there
-is a @code{LilyPond-mode} for Emacs addicts.  If they have not been
-installed already, refer to the file @file{INSTALL.txt}.}  In your
-text editor, enter the following input and save the file as
-@file{test.ly}
-
-@verbatim
-{ c'4 e' g' }
-@end verbatim
-
-@noindent
-To process @file{test.ly}, proceed as follows
-
-@example
-lilypond test.ly
-@end example
-
-@noindent
-You will see something resembling
-
-@example
-lilypond test.ly
-GNU LilyPond 2.6.0
-Processing `test.ly'
-Parsing...
-Interpreting music... [1]
-Preprocessing graphical objects...
-Calculating line breaks... [2]
-Layout output to `test.ps'...
-Converting to `test.pdf'...
-@end example
-
-@cindex DVI file
-@cindex Viewing music
-@cindex xdvi
-@noindent
-The result is the file @file{test.pdf} which you can print or view
-with the standard facilities of your operating system.@footnote{If
-your system does not have any tools installed, you can try
-@uref{http://@/www@/.cs@/.wisc@/.edu/@/~ghost/,Ghostscript}, a freely
-available package for viewing and printing PDF and PostScript files.}
-
 @node More about pitches
 @section More about pitches
 
@@ -364,8 +392,8 @@ d cis fis
 @end example
 
 @noindent
-The code @samp{d} does not mean `print a black dot just below the
-staff.'  Rather, it means: `a note with pitch D-natural.'  In the key
+The code @samp{d} does not mean @qq{print a black dot just below the
+staff.}  Rather, it means: @qq{a note with pitch D-natural.}  In the key
 of A-flat major, it does get an accidental
 
 @lilypond[quote,notime,fragment,relative=1,verbatim]
@@ -466,8 +494,8 @@ according to standard notation conventions.
 
 @c better to have this just before the `octaves are bad' snipped
 @c but we'd need to remove the ', from \key and tie
-To raise a note by an octave, add a high quote @code{'} (apostrophe) to
-the note name, to lower a note one octave, add a `low quote' @code{,}
+To raise a note by an octave, add a high quote @samp{'} (apostrophe) to
+the note name, to lower a note one octave, add a @q{low quote} @samp{,}
 (comma).  Middle C is @code{c'}
 
 @lilypond[quote,notime,fragment,verbatim]
@@ -486,11 +514,11 @@ b'8. cis''16 b'8 d''4 d''8
 @noindent
 This example shows that music in a high register needs lots of quotes.
 This makes the input less readable, and it is a source of errors.  The
-solution is to use `relative octave' mode.   This is the
+solution is to use @q{relative octave} mode.   This is the
 most convenient way to copy existing music.
 
-In relative mode, a note without octavation quotes (i.e., the @code{'}
-or @code{,} after a note) is chosen so that it is closest to the
+In relative mode, a note without octavation quotes (i.e., the @samp{'}
+or @samp{,} after a note) is chosen so that it is closest to the
 previous one.  For example, @samp{c f} goes up while @samp{c g} goes
 down.
 
@@ -574,7 +602,7 @@ notes
 This technique is useful for non-monophonic music.  To enter music
 with more voices or more staves, we also combine expressions in
 parallel.  Two voices that should play at the same time, are entered
-as a simultaneous combination of two sequences.  A `simultaneous'
+as a simultaneous combination of two sequences.  A @q{simultaneous}
 music expression is formed by enclosing expressions in @code{<<} and
 @code{>>}.  In the following example, three sequences (all containing
 two separate notes) are combined simultaneously
@@ -662,7 +690,7 @@ staff is marked by adding @code{\new Staff} before it.  These
 @end lilypond
 
 
-The command @code{\new} introduces a `notation context.'  A notation
+The command @code{\new} introduces a @q{notation context.}  A notation
 context is an environment in which musical events (like notes or
 @code{\clef} commands) are interpreted.  For simple pieces, such
 notation contexts are created automatically.  For more complex pieces, it
@@ -899,7 +927,7 @@ see @ref{Partial measures}.
 A comment is a remark for the human reader of the music input; it is
 ignored while parsing, so it has no effect on the printed output.
 There are two types of comments.  The percent symbol @samp{%}
-introduces a line comment; after @code{%} the rest of the line is
+introduces a line comment; after @samp{%} the rest of the line is
 ignored.  A block comment marks a whole section of music
 input.  Anything that is enclosed in @code{%@{} and @code{%@}} is
 ignored.  The following fragment shows possible uses for comments
@@ -925,10 +953,10 @@ ignored.  The following fragment shows possible uses for comments
 
 There is a special statement that is a kind of comment.  The @code{\version}
 statement marks for which version of LilyPond the file was written.
-To mark a file for version 2.6.0, use
+To mark a file for version 2.10.1, use
 
 @example
-\version "2.9.13"
+\version "2.10.1"
 @end example
 
 @noindent
@@ -977,7 +1005,7 @@ The lyrics can be set to these notes, combining both with the
 @cindex melisma
 @cindex extender line
 @c synonyms?
-This melody ends on a @rglos{melisma}, a single syllable (`free')
+This melody ends on a @rglos{melisma}, a single syllable (@q{free})
 sung to more than one note.  This is indicated with an @emph{extender
 line}.  It is entered as two underscores, i.e.,
 
@@ -1129,7 +1157,7 @@ voices with @code{\\}
 For polyphonic music typesetting, spacer rests can also be convenient;
 these are rests that do not print.  They are useful for filling up
 voices that temporarily do not play.  Here is the same example with a
-spacer rest (@code{s}) instead of a normal rest (@code{r}),
+spacer rest (@samp{s}) instead of a normal rest (@samp{r}),
 
 @lilypond[quote,verbatim,relative=2,fragment]
 << { a4 g2 f4~ f4 } \\
@@ -1371,7 +1399,7 @@ leading to
 More in-depth information on preparing parts and scores can be found
 in the notation manual; see @ref{Orchestral music}.
 
-Setting run-time variables (`properties') is discussed in
+Setting run-time variables (@q{properties}) is discussed in
 @ref{Changing context properties on the fly}.
 
 
index bbef69b00b094477b42670432b0a8cd17ad0040e..25a878120e4d00be7dff4808fdc9ebadf246c85e 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Tweaking output
 @chapter Tweaking output
 
@@ -13,6 +21,7 @@ configurable; virtually every fragment of output may be changed.
 * Default files::               
 * Fitting music onto fewer pages::  
 * Advanced tweaks with Scheme::  
+* Avoiding tweaks with slower processing::  
 @end menu
 
 
@@ -140,7 +149,7 @@ object.  The same mechanism can be used to move other types of
 objects; simply replace @code{TextScript} with the name of
 another object.
 
-To find the object name, look at the ``@strong{see also}'' at
+To find the object name, look at the @q{@strong{see also}} at
 bottom of the relevant documentation page.  For example, at
 the bottom of @ref{Dynamics}, we see
 
@@ -243,9 +252,9 @@ f-5
 f-5
 @end lilypond
 
- @item
+@item
 Setting the @code{transparent} property will cause an object to be printed
-in `invisible ink': the object is not printed, but all its other
+in @q{invisible ink}: the object is not printed, but all its other
 behavior is retained.  The object still takes up space, it takes part in
 collisions, and slurs, ties, and beams can be attached to it.
 
@@ -389,7 +398,7 @@ require extra space.  If these repeats are spread over two
 systems, they will take up more space than one system with
 the volta repeats and another system without.
 
-Another example is moving dynamics which ``stick out'' of
+Another example is moving dynamics which @q{stick out} of
 a system.
 
 @lilypond[verbatim,quote,fragment]
@@ -460,7 +469,7 @@ tempoMark = #(define-music-function (parser location padding marktext)
                                     (number? string?)
 #{
   \once \override Score . RehearsalMark #'padding = $padding
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup { \bold $marktext }
 #})
 
@@ -485,3 +494,18 @@ pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
 }
 @end lilypond
 
+
+@node Avoiding tweaks with slower processing
+@section Avoiding tweaks with slower processing
+
+LilyPond can perform extra checks while it processes files.  These
+commands will take extra time, but the result may require fewer
+manual tweaks.
+
+@example
+%%  makes sure text scripts and lyrics are within the paper margins
+\override Score.PaperColumn #'keep-inside-line = ##t 
+@end example
+
+
+
index 2872272a9f09c7341d70129e976dd0e41669ee5b..97edb206c335eeee8dae48d4659090583a15e535 100644 (file)
@@ -1,4 +1,12 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of lilypond.tely
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  See TRANSLATION for details.
+@end ignore
+
 @node Working on LilyPond projects
 @chapter Working on LilyPond projects
 
@@ -71,7 +79,7 @@ which version of LilyPond you used.
 @item @strong{Include checks}: @ref{Bar check} and @ref{Octave check}.  If
 you
 include checks every so often, then if you make a mistake, you can pinpoint
-it quicker.  How often is ``every so often''?  It depends on the complexity
+it quicker.  How often is @q{every so often}?  It depends on the complexity
 of the music.  For very simple music, perhaps just once or twice.  For
 very complex music, perhaps every bar.
 
@@ -79,12 +87,12 @@ very complex music, perhaps every bar.
 either in the music
 itself or in the output you desire, it's often good to write only one bar
 per line.  Saving screen space by cramming eight bars per line just isn't
-worth it if you have to `debug' your files.
+worth it if you have to @q{debug} your files.
 
 @item @strong{Comment your files}.  Use either bar numbers (every so often)
 or
-references to musical themes (``second theme in violins,'' ``fourth
-variation'', etc).  You may not need comments when you're writing the piece
+references to musical themes (@q{second theme in violins,} @q{fourth
+variation,} etc.).  You may not need comments when you're writing the piece
 for the first time, but if you want to go back to change something two or
 three years later, or if you pass the source over to a friend, it will
 be much more
@@ -181,6 +189,9 @@ g4\fthenp c'8. e16
 @node Saving typing with identifiers and functions
 @section Saving typing with identifiers and functions
 
+@cindex variables
+@cindex identifiers
+
 By this point, you've seen this kind of thing:
 
 @lilypond[quote,verbatim,ragged-right]
@@ -298,7 +309,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup { \bold $markp }
 #})
 
@@ -326,7 +337,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #@{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup @{ \bold $markp @}
 #@})
 @end example
@@ -354,7 +365,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup { \bold $markp }
 #})
 
@@ -383,7 +394,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #@{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup @{ \bold $markp @}
 #@})
 
@@ -408,7 +419,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup { \bold $markp }
 #})
 
@@ -450,7 +461,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #@{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup @{ \bold $markp @}
 #@})
 
@@ -475,7 +486,7 @@ mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
 tempoMark = #(define-music-function (parser location markp) (string?)
 #{
   \once \override Score . RehearsalMark #'self-alignment-X = #left
-  \once \override Score . RehearsalMark #'no-spacing-rods = ##t
+  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
   \mark \markup { \bold $markp }
 #})
 
@@ -520,7 +531,7 @@ prefers.  The top of @file{music.ly} would then look like this:
 
 This approach can be useful even if you are only producing
 one set of parts.  I use half a dozen different
-``style sheet'' files for my projects.  I begin every music
+@q{style sheet} files for my projects.  I begin every music
 file with @code{\include "../global.ly"}, which contains
 
 @example
@@ -554,9 +565,9 @@ are listed in @ref{Updating files with convert-ly}.
 
 For example, in LilyPond 2.4 and earlier, accents and non-English
 letters were entered using LaTeX -- for example,
-"@code{No\"el}" (this would print the French word for
-`Christmas').  In LilyPond 2.6 and above, the special
-"@code{ë}" must be entered directly into the LilyPond file as an
+@samp{No\"el} (this would print the French word for
+@q{Christmas}).  In LilyPond 2.6 and above, the special
+@samp{ë} must be entered directly into the LilyPond file as an
 UTF-8 character.  @code{convert-ly} cannot change all the LaTeX
 special characters into UTF-8 characters; you must manually update
 your old LilyPond files.
index 423d2154ca1b22c8947623843f6ac00fde5d62a5..4eea5f17918f5d9205affb259503424168f2bbbe 100644 (file)
@@ -32,6 +32,13 @@ INSTALLATION_FILES=$(config_make) VERSION
 STEPMAKE_TEMPLATES=toplevel po install
 include $(depth)/make/stepmake.make
 
+#
+# suggested settings
+#
+# LILYPOND_JOBS= -djob-count=X   ## for SMP/Multicore machine
+# 
+include local.make
+
 local-dist: dist-toplevel-txt-files dist-changelog
 
 dist-changelog:
@@ -41,9 +48,10 @@ dist-changelog:
                cp $(top-src-dir)/ChangeLog $(distdir) ; \
        fi
 
-default: $(outdir)/VERSION
+all: $(outdir)/VERSION
 
 $(outdir)/VERSION: $(config_make) VERSION
+       -mkdir -p $(outdir)
        echo $(TOPLEVEL_VERSION) > $@
 
 dist-toplevel-txt-files:
@@ -56,8 +64,7 @@ doc:
 
 install-WWW:
        -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir)
-       cp -a $(outdir)/web-root/ $(DESTDIR)$(webdir)/
-
+       rsync -rl $(outdir)/offline-root/ $(DESTDIR)$(webdir)
        $(MAKE) -C Documentation/user local-install-WWW
        $(MAKE) -C Documentation/user install-info
 
@@ -80,55 +87,30 @@ local-install:
 final-install:
        @true
 
-web-ext = html midi pdf png txt ly signature
-
-# For docball, issue `make web CONTENT_NEGOTIATION='
-CONTENT_NEGOTIATION = --content-negotiation
-footify = $(PYTHON) $(step-bindir)/add-html-footer.py --name $(PACKAGE_NAME) --version $(TOPLEVEL_VERSION) $(CONTENT_NEGOTIATION)
-footifymail = MAILADDRESS='http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs'
-
 
+# For online docs with content negotiation, issue `make web WEB_TARGETS=online'
+# For both online and offline docs, issue `make web WEB_TARGETS="offline online"'
+WEB_TARGETS = offline
 
 local-WWW-post:
 # need UTF8 setting in case this is hosted on a website. 
        echo -e 'AddDefaultCharset utf-8\nAddCharset utf-8 .html\nAddCharset utf-8 .en\nAddCharset utf-8 .nl\nAddCharset utf-8 .txt\n' > $(top-build-dir)/.htaccess
        $(PYTHON) $(buildscript-dir)/mutopia-index.py -o $(outdir)/examples.html input/
-       echo '<META HTTP-EQUIV="refresh" content="0;URL=Documentation/index.html">' > $(outdir)/index.html
-       echo '<html><body>Redirecting to the documentation index...</body></html>' >> $(outdir)/index.html
-
-       cd $(top-build-dir) && $(FIND) . -name '*.html' -print | $(footifymail) xargs $(footify)
-
-       cd $(top-build-dir) && find Documentation input \
-               $(web-ext:%=-path '*/out-www/*.%' -or) -type l \
-               | grep -v 'lily-[0-9a-f]*.*pdf' \
-               | grep -v '/fr/' \
-               > $(outdir)/weblist
-       ls $(outdir)/*.html >> $(outdir)/weblist
-
-## urg: this is too hairy, should write a python script to do this.
-
-## rewrite file names so we lose out-www
-       rm -rf $(outdir)/web-root/ 
-       mkdir $(outdir)/web-root/
-## urg slow.
-       cat $(outdir)/weblist | (cd $(top-build-dir); tar -cf-  -T- ) | \
-               tar -C $(outdir)/web-root/ -xf -  
-       for dir in $(outdir)/web-root/ ; do  \
-               cd $$dir && \
-               for a in `find . -name out-www`; do \
-                       rsync -a  --link-dest $$a/ $$a/ $$a/.. ; \
-                       rm -rf $$a ; \
-               done \
-       done
+       rm -rf $(outdir)/online-root
+       rm -rf $(outdir)/offline-root
+       $(PYTHON) $(buildscript-dir)/www_post.py $(PACKAGE_NAME) $(TOPLEVEL_VERSION) $(buildscript-dir) $(outdir) "$(WEB_TARGETS)"
+
 
 tree-prefix = $(outdir)
 tree-bin = $(tree-prefix)/bin
 tree-lib = $(tree-prefix)/lib
 tree-share = $(tree-prefix)/share
-tree-share-prefix = $(tree-share)/lilypond/$(TOPLEVEL_VERSION)
-tree-share-prefix-current = $(tree-share)/lilypond/current
-tree-lib-prefix = $(tree-lib)/lilypond/$(TOPLEVEL_VERSION)
-tree-lib-prefix-current = $(tree-lib)/lilypond/current
+
+# Don't put version numbers here. During development
+# they make no sense, and cause EPS files to become invalid.
+
+tree-share-prefix = $(tree-share)/lilypond/current
+tree-lib-prefix = $(tree-lib)/lilypond/current
 
 C_DIRS = flower lily
 c-clean:
@@ -153,9 +135,7 @@ $(tree-share-prefix)/lilypond-force link-tree: GNUmakefile $(outdir)/VERSION
        cd $(top-build-dir)/$(outbase) && rm -rf bin lib share
        mkdir -p $(tree-bin)
        mkdir -p $(tree-share-prefix)
-       ln -s $(TOPLEVEL_VERSION) $(tree-share-prefix-current)
        mkdir -p $(tree-lib-prefix)
-       ln -s $(TOPLEVEL_VERSION) $(tree-lib-prefix-current)
        mkdir -p $(tree-share-prefix)/elisp
        mkdir -p $(tree-share-prefix)/fonts
        mkdir -p $(tree-share-prefix)/fonts/otf
@@ -224,3 +204,46 @@ $(config_h): config.hh.in
        @echo '         rm $(config_h); ./autogen.sh'
        @echo
        @false
+
+
+################################################################
+# testing
+
+RESULT_DIR=$(top-build-dir)/out/test-results
+OUT_TEST=test
+
+
+test:
+       rm -f input/regression/out-$(OUT_TEST)/collated-files.html
+       @echo -en 'For tracking crashes: use\n\n\t'
+       @echo 'grep sourcefilename `grep -L systems.texi input/regression/out-test/*log|sed s/log/ly/g`'
+       @echo
+       if test -d .git  ; then \
+               echo -e 'HEAD is:\n\n\t' ; \
+               git log --max-count=1 --pretty=oneline ;\
+               echo -e '\n\n\n' ; \
+               git diff ; \
+       fi > input/regression/out-test/tree.gittxt
+       $(MAKE) -C input/regression/ out=$(OUT_TEST) LILYPOND_BOOK_LILYPOND_FLAGS="--backend=eps --formats=ps $(LILYPOND_JOBS) -dseparate-log-files -dinclude-eps-fonts -dgs-load-fonts --header=texidoc -I $(top-src-dir)/input/manual -ddump-profile -dcheck-internal-types -ddump-signatures -danti-alias-factor=1" LILYPOND_BOOK_VERBOSE= out-$(OUT_TEST)/collated-files.html
+       @find input ly -name '*.ly' -print |grep -v 'out.*/' | xargs grep '\\version' -L | grep -v "standard input" |sed 's/^/**** Missing version: /g' 
+
+
+test-baseline: test
+       rm -rf input/regression/out-test-baseline
+       mv input/regression/out-test input/regression/out-test-baseline
+
+local-check: test
+       rm -rf $(RESULT_DIR)
+       mkdir -p $(RESULT_DIR)
+       $(PYTHON) $(buildscript-dir)/output-distance.py --create-images --output-dir $(RESULT_DIR) input/regression/out-test-baseline input/regression/out-test/
+
+
+test-redo:
+       for a in `cat $(RESULT_DIR)/changed.txt` ; do \
+               echo removing $$a* ; \
+               rm -f $$a* ;\
+       done
+       $(MAKE) check
+
+test-clean:
+       $(MAKE) -C input/regression/ out=$(OUT_TEST) clean
index 7e86f13cb10f7e2d31815338f44b0d5f1d2e7e26..5a07e1b33aec49b71850c3d4c66e19032abea440 100644 (file)
@@ -176,11 +176,14 @@ import packagepython
 package = packagepython.Package (srcdir)
 version = packagepython.version_tuple_to_str (package.version)
 
-ENV = { 'PATH' : os.environ['PATH'] }
-for key in ['LD_LIBRARY_PATH', 'GUILE_LOAD_PATH', 'PKG_CONFIG_PATH', 'TEXMF']:
+ENV = { 'PYTHONPATH': '' }
+for key in ['GUILE_LOAD_PATH', 'LD_LIBRARY_PATH', 'PATH', 'PKG_CONFIG_PATH',
+            'PYTHONPATH', 'TEXMF']:
     if os.environ.has_key (key):
         ENV[key] = os.environ[key]
 
+ENV['PYTHONPATH'] = os.path.join (srcdir, 'python') + ':' + ENV['PYTHONPATH']
+
 env = Environment (
     ENV = ENV,
     BYTEORDER = sys.byteorder.upper (),
diff --git a/THANKS b/THANKS
index 94f71d220862707fa81e5ac1e13ccec350fe9f8e..2e7cd7cf4a59eabbb63051eaeb16d6eddd1ad972 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -1,4 +1,4 @@
-Release 2.10
+Release 2.11
 ************
 
 
@@ -10,7 +10,11 @@ Jan Nieuwenhuizen - Core development
 Joe Neeman        - Core development
 Graham Percival   - Documentation Editor and Bug Meister
 Mats Bengtsson    - Support Guru 
+John Mandereau    - Translation Meister
+
+CONTRIBUTORS
 
+Rune Zedeler
 
 SPONSORS
 
@@ -19,16 +23,48 @@ Mike Amundsen
 
 BUG HUNTERS/SUGGESTIONS
 
+Alard de Boer
+Arvid Grøtting
+Bertalan Fodor
 Benjamin Drung
-David Bobroff
 Cameron Horsburgh
+Carl Sorensen
+Christian Hitz
+David Bobroff
+Daniel Johnson
+Eduardo Vieira
+Frédéric Chiasson
+Georg Dummer
+Jay Anderson
+James Kilfinger
+Jean-Marie Mouchel
+Kazuhiro Suzuki
+Laura Conrad
+Luc Wehli
 Maarten Hijzelendoorn 
 Matthijs Frankeno
+Martijn Vromans
+Marnen Laibow-Koser
+Maximilian Albert
+Mirosław Doroszewski
+Nicolas Mayencourt
+Nicolas Sceaux
+Orm Finnendahl
 Phillip Kirlin
+Ralph Palmer
 Rick Hansen
+Roland Goretzki
+Rune Zedeler
+Ruud van Silfhout
+Sean Reed
+Steven Weber
+Tomas Sauer
 Thomas Scharkowski
 Trevor Bača
 Werner Lemberg
+Wilbert Berendsen
+William Oram
+Yota Moteuchi
 
 
 Release 2.10
diff --git a/VERSION b/VERSION
index 7616dcf40b55846af3137b405098c1fb44510c43..0b8b4feb65dd346078857f31b7f04bdb0d6cc046 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=11
-PATCH_LEVEL=2
+PATCH_LEVEL=12
 MY_PATCH_LEVEL=
 
diff --git a/buildscripts/add_html_footer.py b/buildscripts/add_html_footer.py
new file mode 100644 (file)
index 0000000..a7bc7e1
--- /dev/null
@@ -0,0 +1,224 @@
+#!@PYTHON@
+
+"""
+Print a nice footer.
+"""
+import re
+import os
+import time
+
+import langdefs
+
+default_header = r"""
+"""
+
+default_footer = r'''
+<div style="background-color: #e8ffe8; padding: 2; border: #c0ffc0 1px solid;">
+<p>
+<font size="-1">
+This page is for %(package_name)s-%(package_version)s (%(branch_str)s). <br>
+</font>
+<address><font size="-1">
+Report errors to <a href="%(mail_address_url)s">%(mail_address)s</a>.</font></address>
+</p>
+</div>
+'''
+
+header_tag = '<!-- header_tag -->'
+footer_tag = '<!-- footer_tag -->'
+
+def _ (s):
+    return s
+
+language_available = _ ("Other languages: %s.") % "%(language_menu)s"
+browser_language = _ ("Using <A HREF='%s'>automatic language selection</A>.") \
+           % "/web/about/browser-language"
+
+LANGUAGES_TEMPLATE = '''\
+<P>
+ %(language_available)s
+ <BR>
+ %(browser_language)s
+</P>
+''' % vars ()
+
+
+html_re = re.compile ('(.*?)(?:[.]([^/.]*))?[.]html$')
+
+def build_pages_dict (filelist):
+    """Build dictionnary of available translations of each page"""
+    pages_dict = {}
+    for f in filelist:
+        m = html_re.match (f)
+        if m:
+            g = m.groups()
+            if len (g) <= 1 or g[1] == None:
+                e = ''
+            else:
+                e = g[1]
+            if not g[0] in pages_dict.keys():
+                pages_dict[g[0]] = [e]
+            else:
+                pages_dict[g[0]].append (e)
+    return pages_dict
+
+
+def do_file (prefix, lang_ext, target, header, footer, pages_dict, out_root, name_filter,
+             package_name, package_version, branch_str, mail_address_url, mail_address):
+    file_name = langdefs.lang_file_name (prefix, lang_ext, '.html')
+    in_f = open (file_name)
+    s = in_f.read()
+    in_f.close()
+    
+    s = re.sub ('%', '%%', s)
+
+    ### add header
+    if re.search (header_tag, s) == None:
+        body = '<BODY BGCOLOR=WHITE TEXT=BLACK>'
+        s = re.sub ('(?i)<body>', body, s)
+        if re.search ('(?i)<BODY', s):
+            s = re.sub ('(?i)<body[^>]*>', body + header, s, 1)
+        elif re.search ('(?i)<html', s):                
+            s = re.sub ('(?i)<html>', '<HTML>' + header, s, 1)
+        else:
+            s = header + s
+
+        s = header_tag + '\n' + s
+
+        if re.search ('(?i)<!DOCTYPE', s) == None:
+            doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n'
+            s = doctype + s
+
+    # remove info's annoying's indication of referencing external document
+    s = re.sub (' \((lilypond|lilypond-internals|music-glossary)\)</a>',                                  '</a>', s)
+
+    # urg
+    # maybe find first node?
+    fallback_web_title = '-- --'
+    m = re.match ('.*?<title>(.*?)</title>', s, re.DOTALL)
+    if m:
+        fallback_web_title = m.group (1)
+    s = re.sub ('@WEB-TITLE@', fallback_web_title, s)
+
+    ### add footer
+    page_flavors = {}
+    if re.search (footer_tag, s) == None:
+        if re.search ('(?i)</body', s):
+            s = re.sub ('(?i)</body>', footer_tag + footer + '\n' + '</BODY>', s, 1)
+        elif re.search ('(?i)</html', s):                
+            s = re.sub ('(?i)</html>', footer_tag + footer + '\n' + '</HTML>', s, 1)
+        else:
+            s += footer_tag + footer + '\n'
+        
+        # Find available translations of this page.
+        available = []
+        missing = []
+        for l in langdefs.LANGUAGES:
+            e = l.webext
+            if lang_ext != e:
+                if e in pages_dict[prefix]:
+                    available.append (l)
+                elif lang_ext == '' and l.enabled: # English version of missing translated pages will be written
+                    missing.append (e)
+
+        if target == 'online':
+            # Strip .html, .png suffix for auto language selection (content
+            # negotiation).  The menu must keep the full extension, so do
+            # this before adding the menu.
+            # Don't strip .html suffix for documentation index because of
+            # lilypond/ vs. lilypond.html conflict
+            if prefix == 'Documentation/out-www/index':
+                page_flavors[file_name] = s
+            else:
+                page_flavors[file_name] = re.sub (
+                    '''(href|src)=[\'"]([^/][.]*[^.:\'"]*)(.html|.png)(#[^"\']*|)[\'"]''',
+                    '\\1="\\2\\4"', s)
+        elif target == 'offline':
+            if lang_ext == '':
+                page_flavors[file_name] = s
+                for e in missing:
+                    page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = re.sub (
+                        '''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''',
+                        'href="\\1.' + e + '\\2\\3"', s)
+            else:
+                page_flavors[file_name] = re.sub (
+                    '''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''',
+                    'href="\\1.' + lang_ext + '\\2\\3"', s)
+
+        # Add menu after stripping: must not have autoselection for language menu.
+        language_menu = ''
+        for lang in available:
+            lang_file = lang.file_name (os.path.basename (prefix), '.html')
+            if language_menu != '':
+                language_menu += ', '
+            language_menu += '<a href="%s">%s</a>' % (lang_file, lang.name)
+
+        languages = ''
+        if language_menu:
+            languages = LANGUAGES_TEMPLATE % vars ()
+
+        # Put language menu before '</body>' and '</html>' tags
+        for k in page_flavors.keys():
+            if re.search ('(?i)</body', page_flavors[k]):
+                page_flavors[k] = re.sub ('(?i)</body>', languages + '</BODY>', page_flavors[k], 1)
+            elif re.search ('(?i)</html', page_flavors[k]):                
+                page_flavors[k] = re.sub ('(?i)</html>', languages + '</HTML>', page_flavors[k], 1)
+            else:
+                page_flavors[k] += languages
+    else:
+        for e in [l.webext for l in langdefs.LANGUAGES]:
+            if not e in pages_dict[prefix]:
+                page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = s
+
+    for k in page_flavors.keys():
+        page_flavors[k] = page_flavors[k] % vars ()
+
+        out_f = open (os.path.join (out_root, name_filter (k)), 'w')
+        out_f.write (page_flavors[k])
+        out_f.close()
+
+
+def add_html_footer (package_name = '',
+                     package_version = '',
+                     header = default_header,
+                     footer = default_footer,
+                     target = 'offline',
+                     mail_address = '(address unknown)',
+                     pages_dict = {},
+                     out_root = '',
+                     name_filter = lambda s: s):
+    """Add header, footer to a number of HTML files
+
+    Arguments:
+     package_name=NAME         set package_name to NAME
+     package_version=VERSION   set package version to VERSION
+     header=TEXT               use TEXT as header
+     footer=TEXT               use TEXT as footer
+     targets=offline|online    set page processing depending on the target
+          offline is for reading HTML pages locally
+          online is for hosting the HTML pages on a website with content
+            negotiation
+     mail_address              set \"Report errors to\" link
+     pages_dict                a dictionnary returned by build_pages_dict()
+     out_root                  a path prefix where to write HTML pages
+     name_filter               a HTML file name filter
+    """
+    localtime = time.strftime ('%c %Z', time.localtime (time.time ()))
+
+    if re.search ("http://", mail_address):
+        mail_address_url = mail_address
+    else:
+        mail_address_url= 'mailto:' + mail_address
+
+    versiontup = package_version.split ('.')
+    branch_str = 'stable-branch'
+    if int ( versiontup[1]) %  2:
+        branch_str = 'development-branch'
+
+    for page, ext_list in pages_dict.items ():
+        for e in ext_list:
+            do_file (page, e, target, header, footer, pages_dict, out_root, name_filter,
+                     package_name, package_version, branch_str, mail_address_url, mail_address)
+        # if the page is translated, a .en.html symlink is necessary for content negotiation
+        if target == 'online' and ext_list != ['']:
+            os.symlink (os.path.basename (page) + '.html', os.path.join (out_root, name_filter (page + '.en.html')))
diff --git a/buildscripts/build-coverage.sh b/buildscripts/build-coverage.sh
new file mode 100755 (executable)
index 0000000..6e54386
--- /dev/null
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+if test "$1" == "--fresh"; then
+  fresh=yes
+fi
+
+if test ! -f config-cov.make; then
+  fresh=yes
+fi
+
+if test "$fresh" = "yes";
+then
+  ./configure --enable-config=cov --disable-optimising \
+   &&   make conf=cov -j2 clean \
+   &&   perl -i~ -pe 's/-pipe /-fprofile-arcs -ftest-coverage -pipe /g' config-cov.make \
+   &&   perl -i~ -pe 's/ -ldl / -lgcov -ldl /g' config-cov.make
+else
+  find -name '*.gcda' -exec rm  '{}' ';'
+fi
+
+mkdir -p scripts/out-cov/
+touch  scripts/out-cov/midi2ly.1
+make conf=cov -j2 &&  \
+  make conf=cov test-clean OUT_TEST=testcov LILYPOND_JOBS= && \
+  make conf=cov test OUT_TEST=testcov LILYPOND_JOBS= 
+
+if test "$?" != "0"; then
+  tail -100 out-cov/test-run.log
+  exit 1
+fi
+
+depth=../..
+resultdir=out/coverage-results
+
+rm -rf $resultdir
+mkdir $resultdir
+cd $resultdir
+
+ln $depth/lily/* .
+ln $depth/lily/out-cov/*[ch] .
+mkdir include
+ln $depth/lily/include/* include/
+ln $depth/flower/include/* include/
+for a in *[cl] *.yy
+do
+   gcov -o $depth/lily/out-cov/  -p $a > $a.gcov-summary
+done 
+
+python $depth/buildscripts/coverage.py --uncovered *.cc > uncovered.txt
+python $depth/buildscripts/coverage.py --hotspots *.cc > hotspots.txt
+python $depth/buildscripts/coverage.py --summary *.cc > summary.txt
+
+head -20 summary.txt
+
+cat <<EOF
+results in
+
+  out/coverage-results/summary.txt
+  out/coverage-results/uncovered.txt
+  out/coverage-results/hotspots.txt
+
+EOF
diff --git a/buildscripts/build-profile.sh b/buildscripts/build-profile.sh
new file mode 100755 (executable)
index 0000000..4c53c64
--- /dev/null
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+if test "$1" == "--fresh"; then
+  fresh=yes
+fi
+
+if test ! -f config-prof.make; then
+  fresh=yes
+fi
+
+if test "$fresh" = "yes";
+then
+  ./configure --enable-config=prof --enable-optimising \
+   &&   perl -i~ -pe 's/-pipe /-pg -pipe /g' config-prof.make \
+   &&   perl -i~ -pe 's/ -ldl / -pg -ldl /g' config-prof.make
+fi
+
+make conf=prof -j2
+
+if test "$?" != "0"; then
+  exit 2
+fi
+
+depth=../..
+resultdir=out/profile-results
+
+rm -rf $resultdir
+mkdir $resultdir
+cd $resultdir
+
+
+cat > long-score.ly << EOF
+\version "2.10.0"
+foo = \new Staff \new Voice \repeat unfold 50 \relative { c4 d8[ d16( e]~ e16[ e e) f] g8  }
+\new ChoirStaff << 
+  \foo \foo \foo \foo 
+  \foo \foo \foo \foo 
+
+>>
+EOF
+
+rm gmon.sum
+
+exe=$depth/out-prof/bin/lilypond
+
+## todo: figure out representative sample.
+files="wtk1-fugue2 wtk1-fugue2 wtk1-fugue2 wtk1-fugue2 mozart-hrn-3  mozart-hrn-3  long-score"
+
+
+
+$exe -ddump-profile --formats=ps -I $depth/input/ -I  $depth/input/mutopia/J.S.Bach/ \
+    -I $depth/input/mutopia/W.A.Mozart/ \
+    $files
+
+
+for a in *.profile; do
+  echo $a
+  cat $a
+done
+
+echo 'running gprof' 
+gprof $exe > profile
+
+exit 0
+
+
+## gprof -s takes forever.
+for a in seq 1 3; do
+  for f in $files ; do
+    $exe -ddump-profile --formats=ps -I $depth/input/ -I  $depth/input/mutopia/J.S.Bach/ \
+       -I $depth/input/mutopia/W.A.Mozart/ \
+       $f
+
+    echo 'running gprof' 
+    if test -f gmon.sum ; then
+      gprof -s $exe gmon.out gmon.sum
+    else
+      mv gmon.out gmon.sum
+    fi
+  done
+done
+
+gprof $exe gmon.sum > profile
diff --git a/buildscripts/check_translation.py b/buildscripts/check_translation.py
new file mode 100644 (file)
index 0000000..35ab59e
--- /dev/null
@@ -0,0 +1,88 @@
+#!@PYTHON@
+
+import __main__
+import optparse
+import gettext
+import os
+import re
+import sys
+
+verbose = 0
+lang = 'site'
+C = lang
+
+def dir_lang (file, lang):
+    path_components = [lang] + file.split ('/')[1:]
+    return os.path.join (*path_components)
+
+##     Translation of GIT Commit: <hash>
+REVISION_RE = re.compile ('.*GIT [Cc]ommittish: ([a-f0-9]+)', re.DOTALL)
+CVS_DIFF = 'git diff %(revision)s HEAD -- %(original)s | cat'
+
+def check_file (original, translated):
+    s = open (translated).read ()
+    m = REVISION_RE.match (s)
+    if not m:
+        raise translated + ': no GIT committish: <hash> found'
+    revision = m.group (1)
+
+    c = CVS_DIFF % vars ()
+    if verbose:
+        sys.stderr.write ('running: ' + c)
+    os.system (c)
+
+def do_file (file_name, langdefs):
+    if verbose:
+        sys.stderr.write ('%s...\n' % file_name)
+    file_lang = file_name.split ('/')[0]
+    if file_lang in langdefs.LANGDICT.keys():
+        check_lang = file_lang
+    else:
+        check_lang = lang
+    if check_lang == C:
+        raise 'cannot determine language for: ' + file_name
+    
+    original = dir_lang (file_name, '')
+    translated = dir_lang (file_name, check_lang)
+    check_file (original, translated)
+
+def usage ():
+    sys.stdout.write (r'''
+Usage:
+check-translation [--language=LANG] [--verbose] BUILDSCRIPT-DIR FILE...
+
+This script is licensed under the GNU GPL.
+''')
+
+def do_options ():
+    global lang, verbose
+
+    p = optparse.OptionParser (usage="check-translation [--language=LANG] [--verbose] FILE...",
+                               description="This script is licensed under the GNU GPL.")
+    p.add_option ("--language",
+                  action='store',
+                  default='site',
+                  dest="language")
+    p.add_option ("--verbose",
+                  action='store_true',
+                  default=False,
+                  dest="verbose",
+                  help="the GIT directory to merge.")
+    
+    (options, files) = p.parse_args ()
+    verbose = options.verbose
+    lang = options.language
+    
+    return (files[0], files[1:])
+
+def main ():
+    import_path, files = do_options ()
+    
+    sys.path.append (import_path)
+    import langdefs
+
+    for i in files:
+        do_file (i, langdefs)
+
+if __name__ == '__main__':
+    main ()
diff --git a/buildscripts/coverage.py b/buildscripts/coverage.py
new file mode 100644 (file)
index 0000000..380e9e3
--- /dev/null
@@ -0,0 +1,193 @@
+#!/bin/sh
+import os
+import glob
+import re
+import sys
+import optparse
+
+#File 'accidental-engraver.cc'
+#Lines executed:87.70% of 252
+
+def summary (args):
+    results = []
+    for f in args:
+        str = open (f).read ()
+        m = re.search ("File '([^']+.cc)'\s*Lines executed:([0-9.]+)% of ([0-9]+)", str)
+
+        if m and '/usr/lib' in m.group (1):
+            continue
+
+        if m:
+            cov = float (m.group (2))
+            lines = int (m.group (3))
+            pain = lines * (100.0 - cov)
+            file = m.group (1)
+            tup = (pain, locals ().copy())
+
+            results.append(tup)
+
+    results.sort ()
+    results.reverse()
+
+    print 'files sorted by number of untested lines (decreasing)'
+    print
+    print '%5s (%6s): %s' % ('cov %', 'lines', 'file')
+    print '----------------------------------------------'
+
+    for (pain, d) in results:
+        print '%(cov)5.2f (%(lines)6d): %(file)s' % d
+
+class Chunk:
+    def __init__ (self, range, coverage_count, all_lines, file):
+        assert coverage_count >= 0
+        assert type (range) == type (())
+        
+        self.coverage_count = coverage_count
+        self.range = range
+        self.all_lines = all_lines
+        self.file = file
+
+    def length (self):
+        return self.range[1] - self.range[0]
+
+    def text (self):
+        return ''.join ([l[2] for l in self.lines()])
+        
+    def lines (self):
+        return self.all_lines[self.range[0]:
+                              self.range[1]]
+    def widen (self):
+        self.range = (min (self.range[0] -1, 0),
+                      self.range[0] +1)
+    def write (self):
+        print 'chunk in', self.file
+        for (c, n, l) in self.lines ():
+            cov = '%d' % c
+            if c == 0:
+                cov = '#######'
+            elif c < 0:
+                cov = ''
+            sys.stdout.write ('%8s:%8d:%s' % (cov, n, l))
+            
+def read_gcov (f):
+    ls = []
+
+    in_lines = [l for l in open (f).readlines ()]
+    (count_len, line_num_len) = tuple (map (len, in_lines[0].split( ':')[:2]))
+    
+    for l in in_lines:
+        c = l[:count_len].strip ()
+        l = l[count_len+1:]
+        n = int (l[:line_num_len].strip ())
+
+        if n == 0:
+            continue
+
+        if '#' in c:
+            c = 0
+        elif c == '-':
+            c = -1
+        else:
+            c = int (c)
+        
+        l = l[line_num_len+1:]
+
+        ls.append ((c,n,l))
+        
+    return ls
+
+def get_chunks (ls, file):
+    chunks = []
+    chunk = []
+
+    last_c = -1
+    for (c, n, l) in ls:
+        if not (c == last_c or c < 0 and l != '}\n'):
+            if chunk and last_c >= 0:
+                nums = [n-1 for (n, l) in chunk]
+                chunks.append (Chunk ((min (nums), max (nums)+1),
+                                      last_c, ls, file))
+                chunk = []
+
+        chunk.append ((n,l))
+        if c >= 0:
+            last_c = c
+            
+    return chunks
+
+def widen_chunk (ch, ls):
+    a -= 1
+    b += 1
+
+    return [(n, l)  for (c, n, l) in ls[a:b]]
+    
+
+def extract_chunks (file):
+    try:
+        ls = read_gcov (file)
+    except IOError, s :
+        print s
+        return []
+        
+    return get_chunks (ls, file)
+
+def filter_uncovered (chunks):
+    def interesting (c):
+        if c.coverage_count > 0:
+            return False
+        
+        t = c.text()
+        for stat in  ('warning', 'error', 'print', 'scm_gc_mark'):
+            if stat in t:
+                return False
+        return True
+   
+    return [c for c in chunks if interesting (c)]
+    
+
+def main ():
+    p = optparse.OptionParser (usage="usage coverage.py [options] files",
+                               description="")
+    p.add_option ("--summary",
+                  action='store_true',
+                  default=False,
+                  dest="summary")
+    
+    p.add_option ("--hotspots",
+                  default=False,
+                  action='store_true',
+                  dest="hotspots")
+    
+    p.add_option ("--uncovered",
+                  default=False,
+                  action='store_true',
+                  dest="uncovered")
+
+    
+    (options, args) = p.parse_args ()
+    
+
+    if options.summary:
+        summary (['%s.gcov-summary' % s for s in args])
+
+    if options.uncovered or options.hotspots:
+        chunks = []
+        for a in args:
+            chunks += extract_chunks  ('%s.gcov' % a)
+
+        if options.uncovered:
+            chunks = filter_uncovered (chunks)
+            chunks = [(c.length (), c) for c in chunks]
+        elif options.hotspots:
+            chunks = [((c.coverage_count, -c.length()), c) for c in chunks]
+            
+            
+        chunks.sort ()
+        chunks.reverse ()
+        for (score, c) in chunks:
+            c.write ()
+
+            
+        
+if __name__ == '__main__':
+    main ()
index 97f8e5f6f66fbc806490d01a12625800cb3f34e9..3f401382ae23cf3c54c8e867a00fb1f270fc96e4 100644 (file)
@@ -1,45 +1,45 @@
 #!@PYTHON@
 # html-gettext.py
 
-# Usage:  html-gettext.py [-o OUTDIR] LOCALEDIR LANG FILES
+# USAGE:  html-gettext.py [-o OUTDIR] BUILDSCRIPT-DIR LOCALEDIR LANG FILES
 #
 # -o OUTDIR specifies that output files should be written in OUTDIR
 #    rather than be overwritten
 #
-# LANG
-# LOCALEDIR should contain 'lilypond-doc' message catalogs
-
-
-### DATA
-# Currently, typo_rules[LANG] only defines the HTML-coded space occuring
-# before double punctuation characters (i.e. : ; ? ! ) for LANG
-
-typo_rules = { 'fr':'&nbsp;', 'default':'' }
-
-
-### PROGRAM
 
 import sys
 import re
 import os
-import string
-import gettext
 import getopt
+import gettext
 
 optlist, args = getopt.getopt(sys.argv[1:],'o:')
+buildscript_dir, localedir, lang = args[0:3]
 
 outdir = '.'
 for x in optlist:
        if x[0] == '-o':
                outdir = x[1]
 
-if args[1] in typo_rules.keys():
-       dbl_punct_char_separator = typo_rules[args[1]]
-else:
-       dbl_punct_char_separator = typo_rules['default']
+sys.path.append (buildscript_dir)
+import langdefs
+
+double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep
+print localedir
+print lang
+t = gettext.translation('lilypond-doc', localedir, [lang])
+my_gettext = t.gettext
+
+html_codes = ((' -- ', ' &ndash; '),
+             (' --- ', ' &mdash; '))
 
-t = gettext.translation('lilypond-doc', args[0], [args[1]])
-_ = t.gettext
+def _ (s):
+       for c in html_codes:
+               s = s.replace (c[1], c[0])
+       s = my_gettext (s)
+       for c in html_codes:
+               s = s.replace (c[0], c[1])
+       return s
 
 def link_gettext (m):
        return '<link rel="' + m.group(1) + '" ' + m.group(2) + ' title="' + _(m.group(3)) + '">'
@@ -48,24 +48,24 @@ def title_gettext (m):
        return '<title>' + _(m.group(1)) + ' - ' + m.group(2) + '</title>'
 
 def a_href_gettext (m):
-       if m.group(4) == ':':
-               s = dbl_punct_char_separator + ':'
-       elif m.group(4) == None:
+       if m.group(6) == ':':
+               s = double_punct_char_separator + ':'
+       elif m.group(6) == None:
                s = ''
-       return '<a ' + (m.group(1) or '') + m.group(2) + _(m.group(3)) + '</a>' + s
+       return '<a ' + (m.group(1) or '') + m.group(2) + m.group(3) + _(m.group(4)) + m.group(5) + '</a>' + s
 
 def h_gettext (m):
-       return '<h' + m.group(1) + ' class="' + m.group(2) + '">' + \
-              (m.group(3) or '') + _(m.group(4)) + '</h' + m.group(1) + '>'
+       return '<h' + m.group(1) + m.group(2) + '>' + \
+              m.group(3) + _(m.group(4)) + '</h' + m.group(1) + '>'
 
-for filename in args[2:]:
+for filename in args[3:]:
        f = open (filename, 'r')
        page = f.read ()
        f.close()
        page = re.sub (r'<link rel="(up|prev|next)" (.*?) title="([^"]*?)">', link_gettext, page)
        page = re.sub (r'<title>([^<]*?) - ([^<]*?)</title>', title_gettext, page)
-       page = re.sub (r'<a ((?:rel="\w+")? ?(?:accesskey="[^"]+?" ?)?)(href="[^"]+?">)([^<]+)</a>(:)?', a_href_gettext, page)
-       page = re.sub (r'<h(\d) class="(\w+)">([\d.]+ )?([^<]+)</h\1>', h_gettext, page)
+       page = re.sub (r'<a ((?:rel="\w+")? ?(?:accesskey="[^"]+?" ?)?)(href="[^"]+?">)((?:<code>|)(?:[\d.]+ |))([^<]+)(</code>|)</a>(:)?', a_href_gettext, page)
+       page = re.sub (r'<h(\d)( class="\w+"|)>([\d.]+ |)?([^<]+)</h\1>', h_gettext, page)
        for w in ('Next:', 'Previous:', 'Up:'):
                page = re.sub (w, _(w), page)
        f = open (os.path.join (outdir, filename), 'w')
diff --git a/buildscripts/langdefs.py b/buildscripts/langdefs.py
new file mode 100644 (file)
index 0000000..993398e
--- /dev/null
@@ -0,0 +1,47 @@
+#!@PYTHON@
+
+"""
+Documentation i18n module
+"""
+
+def lang_file_name (p, langext, ext):
+    if langext != '':
+        return p + '.' + langext + ext
+    return p + ext
+
+class LanguageDef:
+    def __init__ (self, code, name, webext=None, double_punct_char_sep=''):
+        self.code = code
+        self.name = name
+        self.enabled = True
+        if webext == None:
+            self.webext = self.code
+        else:
+            self.webext = webext
+        self.double_punct_char_sep = double_punct_char_sep
+    
+    def file_name (self, prefix, ext):
+        return lang_file_name (prefix, self.webext, ext)
+
+
+# All language information needed for documentation i18n is defined
+# here. For each 'Documentation/ab' directory containing docs
+# translated in 'ab', there should be an entry in LANGUAGES.
+
+site = LanguageDef ('en', 'English', webext='')
+fr = LanguageDef ('fr', 'French', double_punct_char_sep='&nbsp;')
+#nl = LanguageDef ('nl', 'Nederlands')
+
+# Outdated or broken translations may be disabled
+# (please run 'make web-clean' before doing that):
+#fr.enabled = False
+
+LANGUAGES = (site, fr)
+
+if __name__ == '__main__':
+    print ' '.join ([l.code for l in LANGUAGES if l.enabled and l.code != 'en'])
+else:
+    import gettext
+    LANGDICT = {}
+    for l in LANGUAGES:
+        LANGDICT[l.code] = l
index e8984600aed2cf6607bc9878eff48f7a657a40c4..c94d402e79876c0cd48489ab6b9af2d482ddb3b5 100644 (file)
@@ -256,4 +256,5 @@ for filenm in files:
     if depfile_nm:
         write_deps (open (depfile_nm, 'wb'), deps,
               [base + '.log', base + '.dvi', base + '.pfa',
-              base + '.pfb', texfile_nm])
+               depfile_nm,
+               base + '.pfb', texfile_nm])
diff --git a/buildscripts/mirrortree.py b/buildscripts/mirrortree.py
new file mode 100644 (file)
index 0000000..72a5672
--- /dev/null
@@ -0,0 +1,87 @@
+#!@PYTHON@
+
+import re
+import os
+
+def new_link_path (link, dir, r):
+    l = link.split ('/')
+    d = dir.split ('/')
+    i = 0
+    while i < len(d) and i < len(l) and l[i] == '..':
+        if r.match (d[i]):
+            del l[i]
+        else:
+            i += 1
+    return '/'.join ([x for x in l if not r.match (x)])
+
+def hardlink_tree (input_roots = [],
+                   process_dirs = '.*',
+                   strip_dir_names = '',
+                   exclude_dirs = '',
+                   process_files = '.*',
+                   find_files = '',
+                   exclude_files = '',
+                   target_pattern = '',
+                   targets = ['.']):
+    """Mirror trees for different targets by hardlinking files.
+
+    Arguments:
+     input_roots=DIRLIST      use DIRLIST as input tree roots list
+     process_dir=PATTERN      only process files in directories named PATTERN
+     strip_dir_names=PATTERN  strip directories names matching PATTERN 
+                                 (write their content to parent)
+     exclude_dir=PATTERN      don't recurse into directories named PATTERN
+     process_files=PATTERN    filters files which are hardlinked
+     find_files=PATTERN       find files named PATTERN. The files list will be returned.
+     exclude_files=PATTERN    exclude files named PATTERN
+     target_pattern=STRING    use STRING as target root directory name pattern
+     targets=DIRLIST          mkdir each directory in DIRLIST and mirrors the tree into each
+    """
+    process_files_re = re.compile (process_files)
+    find_files_re = re.compile (find_files)
+    exclude_dirs_re = re.compile (exclude_dirs)
+    exclude_files_re = re.compile (exclude_files)
+    process_dirs_re = re.compile (process_dirs)
+    strip_dir_names_re = re.compile (strip_dir_names)
+    do_strip_dir_names_re = re.compile ('/(?:' + strip_dir_names + ')')
+
+    found_files = []
+
+    if not '%s' in target_pattern:
+        target_pattern += '%s'
+    target_dirs = [target_pattern % s for s in targets]
+
+    map (os.mkdir, target_dirs)
+
+    for d in input_roots:
+        for in_dir, dirs, files in os.walk(d):
+            out_dir = strip_dir_names_re.sub ('', in_dir)
+            i = 0
+            while i < len(dirs):
+                if exclude_dirs_re.search (dirs[i]):
+                    del dirs[i]
+                else:
+                    if os.path.islink (os.path.join (in_dir, dirs[i])):
+                        files.append (dirs[i])
+                    i += 1
+            if not strip_dir_names_re.match (os.path.basename (in_dir)):
+                for t in target_dirs:
+                    p = os.path.join (t, out_dir)
+                    if not os.path.isdir (p):
+                        os.mkdir (p)
+            if not process_dirs_re.search (in_dir):
+                continue
+            for f in files:
+                if exclude_files_re.match (f):
+                    continue
+                in_file = os.path.join (in_dir, f)
+                if find_files_re.match (f):
+                    found_files.append (in_file)
+                if os.path.islink (in_file): # all symlinks are assumed to be relative and to point to files in the input trees
+                    link_path = new_link_path (os.path.normpath (os.readlink (in_file)), in_dir, do_strip_dir_names_re)
+                    for t in target_dirs:
+                        os.symlink (link_path, os.path.join (t, out_dir, f))
+                elif process_files_re.match (f):
+                    for t in target_dirs:
+                        os.link (in_file, os.path.join (t, out_dir, f))
+    return found_files
index 8bb5af36ab94d7ba00ff665a34804f13188bc3b7..c73481aabad094643f2451c76a230d1efd92aa35 100644 (file)
@@ -148,7 +148,7 @@ hr { border:0; height:1; color: #000000; background-color: #000000; }\n
                 pictures = ['jpeg', 'png', 'xpm']
                 lst.write ('\n')
             else:
-                print "can't find" , `file_name`
+                print "cannot find" , `file_name`
 
         list_item (base + ext, 'The input', 'ASCII')
 
index 92768454dc4c80f5247137aa21386209f2aa46b0..d066ff7af7f3afbabcf354ee03e150e83df938c5 100644 (file)
@@ -2,13 +2,12 @@
 import sys
 import optparse
 import os
+import math
 
 ## so we can call directly as buildscripts/output-distance.py
 me_path = os.path.abspath (os.path.split (sys.argv[0])[0])
 sys.path.insert (0, me_path + '/../python/')
-
-
-import safeeval
+sys.path.insert (0, me_path + '/../python/out/')
 
 
 X_AXIS = 0
@@ -17,7 +16,45 @@ INFTY = 1e6
 
 OUTPUT_EXPRESSION_PENALTY = 1
 ORPHAN_GROB_PENALTY = 1
-inspect_max_count = 0
+options = None
+
+################################################################
+# system interface.
+temp_dir = None
+class TempDirectory:
+    def __init__ (self):
+        import tempfile
+        self.dir = tempfile.mkdtemp ()
+        print 'dir is', self.dir
+    def __del__ (self):
+        print 'rm -rf %s' % self.dir 
+        os.system ('rm -rf %s' % self.dir )
+    def __call__ (self):
+        return self.dir
+
+
+def get_temp_dir  ():
+    global temp_dir
+    if not temp_dir:
+        temp_dir = TempDirectory ()
+    return temp_dir ()
+
+def read_pipe (c):
+    print 'pipe' , c
+    return os.popen (c).read ()
+
+def system (c):
+    print 'system' , c
+    s = os.system (c)
+    if s :
+        raise Exception ("failed")
+    return
+
+def shorten_string (s):
+    threshold = 15 
+    if len (s) > 2*threshold:
+        s = s[:threshold] + '..' + s[-threshold:]
+    return s
 
 def max_distance (x1, x2):
     dist = 0.0
@@ -28,6 +65,38 @@ def max_distance (x1, x2):
     return dist
 
 
+def compare_png_images (old, new, dest_dir):
+    def png_dims (f):
+        m = re.search ('([0-9]+) x ([0-9]+)', read_pipe ('file %s' % f))
+        
+        return tuple (map (int, m.groups ()))
+
+    dest = os.path.join (dest_dir, new.replace ('.png', '.compare.jpeg'))
+    try:
+        dims1 = png_dims (old)
+        dims2 = png_dims (new)
+    except AttributeError:
+        ## hmmm. what to do?
+        system ('touch %(dest)s' % locals ())
+        return
+    
+    dims = (min (dims1[0], dims2[0]),
+            min (dims1[1], dims2[1]))
+
+    dir = get_temp_dir ()
+    system ('convert -depth 8 -crop %dx%d+0+0 %s %s/crop1.png' % (dims + (old, dir)))
+    system ('convert -depth 8 -crop %dx%d+0+0 %s %s/crop2.png' % (dims + (new, dir)))
+
+    system ('compare -depth 8 %(dir)s/crop1.png %(dir)s/crop2.png %(dir)s/diff.png' % locals ())
+
+    system ("convert  -depth 8 %(dir)s/diff.png -blur 0x3 -negate -channel alpha,blue -type TrueColorMatte -fx 'intensity'    %(dir)s/matte.png" % locals ())
+
+    system ("composite -quality 65 %(dir)s/matte.png %(new)s %(dest)s" % locals ())
+
+
+################################################################
+# interval/bbox arithmetic.
+
 empty_interval = (INFTY, -INFTY)
 empty_bbox = (empty_interval, empty_interval)
 
@@ -269,13 +338,217 @@ def read_signature_file (name):
 ################################################################
 # different systems of a .ly file.
 
+hash_to_original_name = {}
+
 class FileLink:
-    def __init__ (self):
-        self.original_name = ''
-        self.base_names = ('','')
-        self.system_links = {}
+    def __init__ (self, f1, f2):
         self._distance = None
+        self.file_names = (f1, f2)
+        
+    def text_record_string (self):
+        return '%-30f %-20s\n' % (self.distance (),
+                                  self.name ())
+    def calc_distance (self):
+        return 0.0
+
+    def distance (self):
+        if self._distance == None:
+           self._distance = self.calc_distance ()
+
+        return self._distance
+    
+        
+    def name (self):
+        base = os.path.basename (self.file_names[1])
+        base = os.path.splitext (base)[0]
+        
+        base = hash_to_original_name.get (base, base)
+        base = os.path.splitext (base)[0]
+        return base
+    
+    def extension (self):
+        return os.path.splitext (self.file_names[1])[1]
+
+    def link_files_for_html (self, dest_dir):
+        for f in self.file_names:
+            link_file (f, os.path.join (dest_dir, f))
+
+    def get_distance_details (self):
+        return ''
+
+    def get_cell (self, oldnew):
+        return ''
+    
+    def get_file (self, oldnew):
+        return self.file_names[oldnew]
+    
+    def html_record_string (self, dest_dir):
+        dist = self.distance()
+        
+        details = self.get_distance_details ()
+        if details:
+            details_base = os.path.splitext (self.file_names[1])[0]
+            details_base += '.details.html'
+            fn = dest_dir + '/'  + details_base
+            open_write_file (fn).write (details)
+
+            details = '<br>(<a href="%(details_base)s">details</a>)' % locals ()
+
+        cell1 = self.get_cell (0)
+        cell2 = self.get_cell (1)
+
+        name = self.name () + self.extension ()
+        file1 = self.get_file (0)
+        file2 = self.get_file (1)
+        
+        return '''<tr>
+<td>
+%(dist)f
+%(details)s
+</td>
+<td>%(cell1)s<br><font size=-2><a href="%(file1)s"><tt>%(name)s</tt></font></td>
+<td>%(cell2)s<br><font size=-2><a href="%(file2)s"><tt>%(name)s</tt></font></td>
+</tr>''' % locals ()
+
+
+class FileCompareLink (FileLink):
+    def __init__ (self, f1, f2):
+        FileLink.__init__ (self, f1, f2)
+        self.contents = (self.get_content (self.file_names[0]),
+                         self.get_content (self.file_names[1]))
+        
+
+    def calc_distance (self):
+        ## todo: could use import MIDI to pinpoint
+        ## what & where changed.
+
+        if self.contents[0] == self.contents[1]:
+            return 0.0
+        else:
+            return 100.0;
+        
+    def get_content (self, f):
+        print 'reading', f
+        s = open (f).read ()
+        return s
+
+
+class GitFileCompareLink (FileCompareLink):
+    def get_cell (self, oldnew):
+        str = self.contents[oldnew]
+
+        # truncate long lines
+        str = '\n'.join ([l[:80] for l in str.split ('\n')])
+
+        
+        str = '<font size="-2"><pre>%s</pre></font>' % str
+        return str
+    
+    def calc_distance (self):
+        if self.contents[0] == self.contents[1]:
+            d = 0.0
+        else:
+            d = 1.0001 *options.threshold
+
+        return d
+        
+class TextFileCompareLink (FileCompareLink):
+    def calc_distance (self):
+        import difflib
+        diff = difflib.unified_diff (self.contents[0].strip().split ('\n'),
+                                     self.contents[1].strip().split ('\n'),
+                                     fromfiledate = self.file_names[0],
+                                     tofiledate = self.file_names[1]
+                                     )
+        
+        self.diff_lines =  [l for l in diff]
+        self.diff_lines = self.diff_lines[2:]
+        
+        return math.sqrt (float (len ([l for l in self.diff_lines if l[0] in '-+'])))
+        
+    def get_cell (self, oldnew):
+        str = ''
+        if oldnew == 1:
+            str = '\n'.join ([d.replace ('\n','') for d in self.diff_lines])
+        str = '<font size="-2"><pre>%s</pre></font>' % str
+        return str
+
         
+class ProfileFileLink (FileCompareLink):
+    def __init__ (self, f1, f2):
+        FileCompareLink.__init__ (self, f1, f2)
+        self.results = [{}, {}]
+    
+    def get_cell (self, oldnew):
+        str = ''
+        for k in ('time', 'cells'):
+            if oldnew==0:
+                str += '%-8s: %d\n' %  (k, int (self.results[oldnew][k]))
+            else:
+                str += '%-8s: %8d (%5.3f)\n' % (k, int (self.results[oldnew][k]),
+                                                self.get_ratio (k))
+
+        return '<pre>%s</pre>' % str
+            
+    def get_ratio (self, key):
+        (v1,v2) = (self.results[0].get (key, -1),
+                   self.results[1].get (key, -1))
+
+        if v1 <= 0 or v2 <= 0:
+            return 0.0
+
+        return (v1 - v2) / float (v1+v2)
+    
+    def calc_distance (self):
+        for oldnew in (0,1):
+            def note_info (m):
+                self.results[oldnew][m.group(1)] = float (m.group (2))
+            
+            re.sub ('([a-z]+): ([-0-9.]+)\n',
+                    note_info, self.contents[oldnew])
+
+        dist = 0.0
+        factor = {'time': 3.0 ,
+                  'cells': 5.0,
+                  }
+        
+        for k in ('time', 'cells'):
+            real_val = math.tan (self.get_ratio (k) * 0.5* math.pi)
+            dist += math.exp (math.fabs (real_val) * factor[k])  - 1
+
+        dist = min (dist, 100)
+        return dist
+
+    
+class MidiFileLink (TextFileCompareLink):
+    def get_content (self, oldnew):
+        import midi
+        
+        data = FileCompareLink.get_content (self, oldnew)
+        midi = midi.parse (data)
+        tracks = midi[1]
+
+        str = ''
+        j = 0
+        for t in tracks:
+            str += 'track %d' % j
+            j += 1
+
+            for e in t:
+                ev_str = repr (e)
+                if re.search ('LilyPond [0-9.]+', ev_str):
+                    continue
+                
+                str += '  ev %s\n' % `e`
+        return str
+    
+
+
+class SignatureFileLink (FileLink):
+    def __init__ (self, f1, f2 ):
+        FileLink.__init__ (self, f1, f2)
+        self.system_links = {}
+
     def add_system_link (self, link, number):
         self.system_links[number] = link
 
@@ -289,16 +562,6 @@ class FileLink:
             
         return d + orphan_distance
 
-    def distance (self):
-        if type (self._distance) != type (0.0):
-            return self.calc_distance ()
-        
-        return self._distance
-
-    def text_record_string (self):
-        return '%-30f %-20s\n' % (self.distance (),
-                             self.original_name)
-
     def source_file (self):
         for ext in ('.ly', '.ly.txt'):
             if os.path.exists (self.base_names[1] + ext):
@@ -319,19 +582,16 @@ class FileLink:
                            os.path.normpath (base2))
 
         def note_original (match):
-            self.original_name = match.group (1)
+            hash_to_original_name[os.path.basename (self.base_names[1])] = match.group (1)
             return ''
         
-        if not self.original_name:
-            self.original_name = os.path.split (base1)[1]
-
-            ## ugh: drop the .ly.txt
-            for ext in ('.ly', '.ly.txt'):
-                try:
-                    re.sub (r'\\sourcefilename "([^"]+)"',
-                            note_original, open (base1 + ext).read ())
-                except IOError:
-                    pass
+        ## ugh: drop the .ly.txt
+        for ext in ('.ly', '.ly.txt'):
+            try:
+                re.sub (r'\\sourcefilename "([^"]+)"',
+                        note_original, open (base1 + ext).read ())
+            except IOError:
+                pass
                 
         s1 = read_signature_file (f1)
         s2 = read_signature_file (f2)
@@ -340,14 +600,53 @@ class FileLink:
 
         self.add_system_link (link, system_index[0])
 
-    def link_files_for_html (self, old_dir, new_dir, dest_dir):
-        for ext in ('.png', '.ly', '-page*png'):
+    
+    def create_images (self, dest_dir):
+
+        files_created = [[], []]
+        for oldnew in (0, 1):
+            pat = self.base_names[oldnew] + '.eps'
+
+            for f in glob.glob (pat):
+                infile = f
+                outfile = (dest_dir + '/' + f).replace ('.eps', '.png')
+
+                mkdir (os.path.split (outfile)[0])
+                cmd = ('gs -sDEVICE=png16m -dGraphicsAlphaBits=4 -dTextAlphaBits=4 '
+                       ' -r101 '
+                       ' -sOutputFile=%(outfile)s -dNOSAFER -dEPSCrop -q -dNOPAUSE '
+                       ' %(infile)s  -c quit '  % locals ())
+
+                files_created[oldnew].append (outfile)
+                system (cmd)
+
+        return files_created
+    
+    def link_files_for_html (self, dest_dir):
+        FileLink.link_files_for_html (self, dest_dir)
+        to_compare = [[], []]
+
+        exts = []
+        if options.create_images:
+            to_compare = self.create_images (dest_dir)
+        else:
+            exts += ['.png', '-page*png']
+        
+        for ext in exts:            
             for oldnew in (0,1):
                 for f in glob.glob (self.base_names[oldnew] + ext):
-                    print f
-                    link_file (f, dest_dir + '/' + f)
+                    dst = dest_dir + '/' + f
+                    link_file (f, dst)
+
+                    if f.endswith ('.png'):
+                        to_compare[oldnew].append (f)
+                        
+        if options.compare_images:                
+            for (old, new) in zip (to_compare[0], to_compare[1]):
+                compare_png_images (old, new, dest_dir)
+
 
-    def html_record_string (self,  old_dir, new_dir):
+    def get_cell (self, oldnew):
         def img_cell (ly, img, name):
             if not name:
                 name = 'source'
@@ -355,15 +654,10 @@ class FileLink:
                 name = '<tt>%s</tt>' % name
                 
             return '''
-<td align="center">
 <a href="%(img)s">
 <img src="%(img)s" style="border-style: none; max-width: 500px;">
 </a><br>
-<font size="-2">(<a href="%(ly)s">%(name)s</a>)
-</font>
-</td>
 ''' % locals ()
-
         def multi_img_cell (ly, imgs, name):
             if not name:
                 name = 'source'
@@ -377,45 +671,30 @@ class FileLink:
 
 
             return '''
-<td align="center">
 %(imgs_str)s
-<font size="-2">(<a href="%(ly)s">%(name)s</a>)
-</font>
-</td>
 ''' % locals ()
 
 
 
         def cell (base, name):
-            pages = glob.glob (base + '-page*.png')
-            
+            pat = base + '-page*.png'
+            pages = glob.glob (pat)
+
             if pages:
                 return multi_img_cell (base + '.ly', sorted (pages), name)
             else:
                 return img_cell (base + '.ly', base + '.png', name)
-            
 
-        html_2  = self.base_names[1] + '.html'
-        name = self.original_name
-        
-        html_entry = '''
-<tr>
-<td>
-%f<br>
-(<a href="%s">details</a>)
-</td>
 
-%s
-%s
-</tr>
-''' % (self.distance (), html_2,
-       cell (self.base_names[0], name),
-       cell (self.base_names[1], name))
 
-        return html_entry
+        str = cell (os.path.splitext (self.file_names[oldnew])[0], self.name ())  
+        if options.compare_images and oldnew == 1:
+            str = str.replace ('.png', '.compare.jpeg')
+            
+        return str
 
 
-    def html_system_details_string (self):
+    def get_distance_details (self):
         systems = self.system_links.items ()
         systems.sort ()
 
@@ -439,7 +718,7 @@ class FileLink:
             e = '<tr>%s</tr>' % e
             html += e
             
-        original = self.original_name
+        original = self.name ()
         html = '''<html>
 <head>
 <title>comparison details for %(original)s</title>
@@ -461,11 +740,6 @@ class FileLink:
 ''' % locals ()
         return html
 
-    def write_html_system_details (self, dir1, dir2, dest_dir):
-        dest_file =  os.path.join (dest_dir, self.base_names[1] + '.html')
-
-        details = open_write_file (dest_file)
-        details.write (self.html_system_details_string ())
 
 ################################################################
 # Files/directories
@@ -473,8 +747,6 @@ class FileLink:
 import glob
 import re
 
-
-
 def compare_signature_files (f1, f2):
     s1 = read_signature_file (f1)
     s2 = read_signature_file (f2)
@@ -488,20 +760,23 @@ def paired_files (dir1, dir2, pattern):
     Return (PAIRED, MISSING-FROM-2, MISSING-FROM-1)
 
     """
-    
-    files1 = dict ((os.path.split (f)[1], 1) for f in glob.glob (dir1 + '/' + pattern))
-    files2 = dict ((os.path.split (f)[1], 1) for f in glob.glob (dir2 + '/' + pattern))
 
+    files = []
+    for d in (dir1,dir2):
+        found = [os.path.split (f)[1] for f in glob.glob (d + '/' + pattern)]
+        found = dict ((f, 1) for f in found)
+        files.append (found)
+        
     pairs = []
     missing = []
-    for f in files1.keys ():
+    for f in files[0].keys ():
         try:
-            files2.pop (f)
+            files[1].pop (f)
             pairs.append (f)
         except KeyError:
             missing.append (f)
 
-    return (pairs, files2.keys (), missing)
+    return (pairs, files[1].keys (), missing)
     
 class ComparisonData:
     def __init__ (self):
@@ -525,23 +800,43 @@ class ComparisonData:
                 self.compare_trees (d1, d2)
     
     def compare_directories (self, dir1, dir2):
+        for ext in ['signature', 'midi', 'log', 'profile', 'gittxt']:
+            (paired, m1, m2) = paired_files (dir1, dir2, '*.' + ext)
 
-        (paired, m1, m2) = paired_files (dir1, dir2, '*.signature')
+            self.missing += [(dir1, m) for m in m1] 
+            self.added += [(dir2, m) for m in m2] 
 
-        self.missing += [(dir1, m) for m in m1] 
-        self.added += [(dir2, m) for m in m2] 
-
-        for p in paired:
-            if (inspect_max_count
-                and len (self.file_links) > inspect_max_count):
+            for p in paired:
+                if (options.max_count
+                    and len (self.file_links) > options.max_count):
+                    continue
                 
-                continue
-            
-            f2 = dir2 +  '/' + p
-            f1 = dir1 +  '/' + p
-            self.compare_files (f1, f2)
+                f2 = dir2 +  '/' + p
+                f1 = dir1 +  '/' + p
+                self.compare_files (f1, f2)
 
     def compare_files (self, f1, f2):
+        if f1.endswith ('signature'):
+            self.compare_signature_files (f1, f2)
+        else:
+            ext = os.path.splitext (f1)[1]
+            klasses = {
+                '.midi': MidiFileLink,
+                '.log' : TextFileCompareLink,
+                '.profile': ProfileFileLink,
+                '.gittxt': GitFileCompareLink, 
+                }
+            
+            if klasses.has_key (ext):
+                self.compare_general_files (klasses[ext], f1, f2)
+
+    def compare_general_files (self, klass, f1, f2):
+        name = os.path.split (f1)[1]
+
+        file_link = klass (f1, f2)
+        self.file_links[name] = file_link
+        
+    def compare_signature_files (self, f1, f2):
         name = os.path.split (f1)[1]
         name = re.sub ('-[0-9]+.signature', '', name)
         
@@ -549,34 +844,52 @@ class ComparisonData:
         try:
             file_link = self.file_links[name]
         except KeyError:
-            file_link = FileLink ()
+            generic_f1 = re.sub ('-[0-9]+.signature', '.ly', f1)
+            generic_f2 = re.sub ('-[0-9]+.signature', '.ly', f2)
+            file_link = SignatureFileLink (generic_f1, generic_f2)
             self.file_links[name] = file_link
 
-        file_link.add_file_compare (f1,f2)
+        file_link.add_file_compare (f1, f2)
+
+    def write_changed (self, dest_dir, threshold):
+        (changed, below, unchanged) = self.thresholded_results (threshold)
+
+        str = '\n'.join ([os.path.splitext (link.file_names[1])[0]
+                        for link in changed])
+        fn = dest_dir + '/changed.txt'
+        
+        open_write_file (fn).write (str)
+                
+    def thresholded_results (self, threshold):
+        ## todo: support more scores.
+        results = [(link.distance(), link)
+                   for link in self.file_links.values ()]
+        results.sort ()
+        results.reverse ()
+
+        unchanged = [r for (d,r) in results if d == 0.0]
+        below = [r for (d,r) in results if threshold >= d > 0.0]
+        changed = [r for (d,r) in results if d > threshold]
 
+        return (changed, below, unchanged)
+                
     def write_text_result_page (self, filename, threshold):
-        print 'writing "%s"' % filename
         out = None
         if filename == '':
             out = sys.stdout
         else:
+            print 'writing "%s"' % filename
             out = open_write_file (filename)
 
-        ## todo: support more scores.
-        results = [(link.distance(), link)
-                   for link in self.file_links.values ()]
-        results.sort ()
-        results.reverse ()
+        (changed, below, unchanged) = self.thresholded_results (threshold)
 
         
-        for (score, link) in results:
-            if score > threshold:
-                out.write (link.text_record_string ())
+        for link in changed:
+            out.write (link.text_record_string ())
 
         out.write ('\n\n')
-        out.write ('%d below threshold\n' % len ([1 for s,l  in results
-                                                    if threshold >=  s > 0.0]))
-        out.write ('%d unchanged\n' % len ([1 for (s,l) in results if s == 0.0]))
+        out.write ('%d below threshold\n' % len (below))
+        out.write ('%d unchanged\n' % len (unchanged))
         
     def create_text_result_page (self, dir1, dir2, dest_dir, threshold):
         self.write_text_result_page (dest_dir + '/index.txt', threshold)
@@ -584,48 +897,45 @@ class ComparisonData:
     def create_html_result_page (self, dir1, dir2, dest_dir, threshold):
         dir1 = dir1.replace ('//', '/')
         dir2 = dir2.replace ('//', '/')
-        
-        results = [(link.distance(), link)
-                   for link in self.file_links.values ()]
-        results.sort ()
-        results.reverse ()
+
+        (changed, below, unchanged) = self.thresholded_results (threshold)
+
 
         html = ''
         old_prefix = os.path.split (dir1)[1]
-        for (score, link) in results:
-            if score <= threshold:
-                continue
-
-            link.link_files_for_html (dir1, dir2, dest_dir) 
-            link.write_html_system_details (dir1, dir2, dest_dir)
-            html += link.html_record_string (dir1, dir2)
+        for link in changed:
+            html += link.html_record_string (dest_dir)
 
 
+        short_dir1 = shorten_string (dir1)
+        short_dir2 = shorten_string (dir2)
         html = '''<html>
 <table rules="rows" border bordercolor="blue">
 <tr>
 <th>distance</th>
-<th>%(dir1)s</th>
-<th>%(dir2)s</th>
+<th>%(short_dir1)s</th>
+<th>%(short_dir2)s</th>
 </tr>
 %(html)s
 </table>
 </html>''' % locals()
 
         html += ('<p>')
-        below_count  =len ([1 for s,l  in results
-                            if threshold >=  s > 0.0])
+        below_count = len (below)
 
         if below_count:
             html += ('<p>%d below threshold</p>' % below_count)
-
-        html += ('<p>%d unchanged</p>'
-                 % len ([1 for (s,l) in results if s == 0.0]))
-
+            
+        html += ('<p>%d unchanged</p>' % len (unchanged))
 
         dest_file = dest_dir + '/index.html'
         open_write_file (dest_file).write (html)
+
+
+        for link in changed:
+            link.link_files_for_html (dest_dir)
         
+
     def print_results (self, threshold):
         self.write_text_result_page ('', threshold)
 
@@ -637,6 +947,7 @@ def compare_trees (dir1, dir2, dest_dir, threshold):
     if os.path.isdir (dest_dir):
         system ('rm -rf %s '% dest_dir)
 
+    data.write_changed (dest_dir, threshold)
     data.create_html_result_page (dir1, dir2, dest_dir, threshold)
     data.create_text_result_page (dir1, dir2, dest_dir, threshold)
     
@@ -651,6 +962,7 @@ def mkdir (x):
 def link_file (x, y):
     mkdir (os.path.split (y)[0])
     try:
+        print x, '->', y
         os.link (x, y)
     except OSError, z:
         print 'OSError', x, y, z
@@ -677,14 +989,17 @@ def test_paired_files ():
 def test_compare_trees ():
     system ('rm -rf dir1 dir2')
     system ('mkdir dir1 dir2')
-    system ('cp 20{-*.signature,.ly,.png} dir1')
-    system ('cp 20{-*.signature,.ly,.png} dir2')
-    system ('cp 20expr{-*.signature,.ly,.png} dir1')
-    system ('cp 19{-*.signature,.ly,.png} dir2/')
-    system ('cp 19{-*.signature,.ly,.png} dir1/')
-    system ('cp 19-1.signature 19-sub-1.signature')
-    system ('cp 19.ly 19-sub.ly')
-    system ('cp 19.png 19-sub.png')
+    system ('cp 20{-*.signature,.ly,.png,.eps,.log,.profile} dir1')
+    system ('cp 20{-*.signature,.ly,.png,.eps,.log,.profile} dir2')
+    system ('cp 20expr{-*.signature,.ly,.png,.eps,.log,.profile} dir1')
+    system ('cp 19{-*.signature,.ly,.png,.eps,.log,.profile} dir2/')
+    system ('cp 19{-*.signature,.ly,.png,.eps,.log,.profile} dir1/')
+    system ('cp 19-1.signature 19.sub-1.signature')
+    system ('cp 19.ly 19.sub.ly')
+    system ('cp 19.profile 19.sub.profile')
+    system ('cp 19.log 19.sub.log')
+    system ('cp 19.png 19.sub.png')
+    system ('cp 19.eps 19.sub.eps')
 
     system ('cp 20multipage* dir1')
     system ('cp 20multipage* dir2')
@@ -692,35 +1007,47 @@ def test_compare_trees ():
 
     
     system ('mkdir -p dir1/subdir/ dir2/subdir/')
-    system ('cp 19-sub{-*.signature,.ly,.png} dir1/subdir/')
-    system ('cp 19-sub{-*.signature,.ly,.png} dir2/subdir/')
-    system ('cp 20grob{-*.signature,.ly,.png} dir2/')
-    system ('cp 20grob{-*.signature,.ly,.png} dir1/')
+    system ('cp 19.sub{-*.signature,.ly,.png,.eps,.log,.profile} dir1/subdir/')
+    system ('cp 19.sub{-*.signature,.ly,.png,.eps,.log,.profile} dir2/subdir/')
+    system ('cp 20grob{-*.signature,.ly,.png,.eps,.log,.profile} dir2/')
+    system ('cp 20grob{-*.signature,.ly,.png,.eps,.log,.profile} dir1/')
+    system ('echo HEAD is 1 > dir1/tree.gittxt')
+    system ('echo HEAD is 2 > dir2/tree.gittxt')
 
     ## introduce differences
     system ('cp 19-1.signature dir2/20-1.signature')
-    system ('cp 20-1.signature dir2/subdir/19-sub-1.signature')
+    system ('cp 19.profile dir2/20.profile')
+    system ('cp 19.png dir2/20.png')
+    system ('cp 19multipage-page1.png dir2/20multipage-page1.png')
+    system ('cp 20-1.signature dir2/subdir/19.sub-1.signature')
+    system ('cp 20.png dir2/subdir/19.sub.png')
+    system ("sed 's/: /: 1/g'  20.profile > dir2/subdir/19.sub.profile")
 
     ## radical diffs.
     system ('cp 19-1.signature dir2/20grob-1.signature')
     system ('cp 19-1.signature dir2/20grob-2.signature')
+    system ('cp 19multipage.midi dir1/midi-differ.midi')
+    system ('cp 20multipage.midi dir2/midi-differ.midi')
+    system ('cp 19multipage.log dir1/log-differ.log')
+    system ('cp 19multipage.log dir2/log-differ.log &&  echo different >> dir2/log-differ.log &&  echo different >> dir2/log-differ.log')
 
-    compare_trees ('dir1', 'dir2', 'compare-dir1dir2', 0.5)
+    compare_trees ('dir1', 'dir2', 'compare-dir1dir2', options.threshold)
 
 
 def test_basic_compare ():
     ly_template = r"""
-#(set! toplevel-score-handler print-score-with-defaults)
- #(set! toplevel-music-handler
-  (lambda (p m)
-  (if (not (eq? (ly:music-property m 'void) #t))
-     (print-score-with-defaults
-     p (scorify-music m p)))))
+
+\version "2.10.0"
+#(define default-toplevel-book-handler
+  print-book-with-defaults-as-systems )
+
+#(ly:set-option (quote no-point-and-click))
 
 \sourcefilename "my-source.ly"
  
 %(papermod)s
-\header { tagline = ##f } 
+\header { tagline = ##f }
+\score {
 <<
 \new Staff \relative c {
   c4^"%(userstring)s" %(extragrob)s
@@ -729,6 +1056,9 @@ def test_basic_compare ():
   c4^"%(userstring)s" %(extragrob)s
   }
 >>
+\layout{}
+}
+
 """
 
     dicts = [{ 'papermod' : '',
@@ -747,25 +1077,28 @@ def test_basic_compare ():
                'name' : '20grob',
                'extragrob': 'r2. \\break c1',
                'userstring': 'test' },
-                
              ]
 
     for d in dicts:
         open (d['name'] + '.ly','w').write (ly_template % d)
         
     names = [d['name'] for d in dicts]
-    
-    system ('lilypond -ddump-signatures --png -b eps ' + ' '.join (names))
+
+    system ('lilypond -ddump-profile -dseparate-log-files -ddump-signatures --png -b eps ' + ' '.join (names))
     
 
     multipage_str = r'''
     #(set-default-paper-size "a6")
-    {c1 \pageBreak c1 }
+    \score {
+      \relative {c1 \pageBreak c1 }
+      \layout {}
+      \midi {}
+    }
     '''
 
-    open ('20multipage', 'w').write (multipage_str)
-    open ('19multipage', 'w').write ('#(set-global-staff-size 19.5)\n' + multipage_str)
-    system ('lilypond -ddump-signatures --png 19multipage 20multipage ')
+    open ('20multipage.ly', 'w').write (multipage_str.replace ('c1', 'd1'))
+    open ('19multipage.ly', 'w').write ('#(set-global-staff-size 19.5)\n' + multipage_str)
+    system ('lilypond -dseparate-log-files -ddump-signatures --png 19multipage 20multipage ')
  
     test_compare_signatures (names)
     
@@ -811,7 +1144,7 @@ def test_compare_signatures (names, timing=False):
 
 
 def run_tests ():
-    dir = 'output-distance-test'
+    dir = 'test-output-distance'
 
     do_clean = not os.path.exists (dir)
 
@@ -853,9 +1186,29 @@ def main ():
                   type="float",
                   help='threshold for geometric distance')
 
-    (o,a) = p.parse_args ()
+    p.add_option ('--no-compare-images',
+                  dest="compare_images",
+                  default=True,
+                  action="store_false",
+                  help="Don't run graphical comparisons")
+
+    p.add_option ('--create-images',
+                  dest="create_images",
+                  default=False,
+                  action="store_true",
+                  help="Create PNGs from EPSes")
 
-    if o.run_test:
+    p.add_option ('-o', '--output-dir',
+                  dest="output_dir",
+                  default=None,
+                  action="store",
+                  type="string",
+                  help='where to put the test results [tree2/compare-tree1tree2]')
+
+    global options
+    (options, a) = p.parse_args ()
+
+    if options.run_test:
         run_tests ()
         sys.exit (0)
 
@@ -863,11 +1216,12 @@ def main ():
         p.print_usage()
         sys.exit (2)
 
-    global inspect_max_count
-    inspect_max_count = o.max_count
-
-    compare_trees (a[0], a[1], os.path.join (a[1],  'compare-' +  a[0]),
-                   o.threshold)
+    name = options.output_dir
+    if not name:
+        name = a[0].replace ('/', '')
+        name = os.path.join (a[1], 'compare-' + shorten_string (name))
+    
+    compare_trees (a[0], a[1], name, options.threshold)
 
 if __name__ == '__main__':
     main()
index cdb82475f67079612a02a406c5b6593b619e1df5..53b9de980e4e4cf2dce67dfdb7ade5f0bb0d5fd4 100644 (file)
@@ -4,30 +4,24 @@ Open($1);
 MergeKern($2)
 
 
-# 
-# NCSB is broken as shipped by Fedora Core 6
-# it contains bogus ligatures TM and No in the AFM file.
+# The AFM files of `New Century Schoolbook' family as distributed within the
+# urw-fonts-1.0.7pre41.tar.bz2 archive contain a bunch of ligatures which
+# shouldn't be active by default:
 #
-# Remove the TM glyph - for want of better FF fix.  
-err = SelectIf("trademark");
-if ( err > 0 )
-   Cut();
-elseif ( err == 0 )
-   Print("Could not find \"trademark\" glyph");
-elseif ( err < 0 )
-   Print("An error occurred while searching for the \"trademark\" glyph");
-endif
-
+#   T + M -> trademark
+#   N + o -> afii61352
+#   i + j -> ij
+#   I + J -> IJ
+#
+# This font bundle is shipped by Fedora Core 6 and other GNU/Linux
+# distributions; we simply remove those ligatures.
 
-# Remove the No. glyph - for want of better FF fix.  
-err = SelectIf("afii61352");
-if ( err > 0 )
-   Cut();
-elseif ( err == 0 )
-   Print("Could not find \"numero\" glyph");
-elseif ( err < 0 )
-   Print("An error occurred while searching for the \"numero\" glyph");
-endif
+SelectIf("trademark", "trademark", \
+         "afii61352", "afii61352", \
+         "ij", "ij", \
+         "IJ", "IJ");
+RemoveATT("Ligature", "*", "*");
 
 Generate($3 + $fontname + ".otf");
 
+# EOF
index 09737639b7834523bbc14e377e3b355cb7951535..62c87619ddadf9f8a030057fe15db80c4f6a980f 100644 (file)
@@ -86,7 +86,7 @@ if make_gettext:
        node_list = open (node_list_filename, 'w')
        for texi_file in texi_files:
                process_texi (texi_file, intro_blurb, node_blurb, make_skeleton, node_list)
-       for word in ('Up:', 'Next:', 'Previous:', 'Appendix'):
+       for word in ('Up:', 'Next:', 'Previous:', 'Appendix', 'Footnotes'):
                node_list.write ('_("' + word + '")\n')
        node_list.close ()
        os.system ('xgettext -L Python --no-location -o ' + output_file + ' ' + node_list_filename)
diff --git a/buildscripts/www_post.py b/buildscripts/www_post.py
new file mode 100644 (file)
index 0000000..1e18241
--- /dev/null
@@ -0,0 +1,56 @@
+#!@PYTHON@
+
+## This is www_post.py. This script is the main stage
+## of toplevel GNUmakefile local-WWW-post target.
+
+# USAGE: www_post PACKAGE_NAME TOPLEVEL_VERSION BUILDSCRIPT-DIR OUTDIR TARGETS
+# please call me from top of the source directory
+
+import sys
+import os
+import re
+
+package_name, package_version, buildscript_dir, outdir, targets = sys.argv[1:]
+targets = targets.split (' ')
+outdir = os.path.normpath (outdir)
+doc_dirs = ['input', 'Documentation', outdir]
+target_pattern = os.path.join (outdir, '%s-root')
+
+static_files = {os.path.join (outdir, 'index.html'):
+               '''<META HTTP-EQUIV="refresh" content="0;URL=Documentation/index.html">
+<html><body>Redirecting to the documentation index...</body></html>\n''',
+               os.path.join (outdir, 'VERSION'):
+               package_version + '\n' }
+
+for f in static_files.keys():
+    open (f, 'w').write (static_files[f])
+
+
+sys.path.append (buildscript_dir)
+import mirrortree
+import add_html_footer
+import langdefs
+
+sys.stderr.write ("Mirrorring...\n")
+html_list = mirrortree.hardlink_tree (input_roots = doc_dirs,
+                          process_dirs = outdir,
+                          strip_dir_names = outdir,
+                          exclude_dirs = '(' +
+                                      '|'.join ([l.code for l in langdefs.LANGUAGES]) +
+                                      r'|po|out|\w*?-root)(/|$)',
+                          process_files = r'.*?\.(?:midi|pdf|png|txt|ly|signature)$|VERSION',
+                          exclude_files = r'lily-[0-9a-f]+.*\.pdf',
+                          target_pattern = target_pattern,
+                          targets = targets)
+html_dict = add_html_footer.build_pages_dict (html_list)
+strip_re = re.compile (outdir + '/')
+for t in targets:
+    sys.stderr.write ("Processing HTML pages for %s target...\n" % t)
+    add_html_footer.add_html_footer (
+        package_name = package_name,
+        package_version = package_version,
+        target = t,
+        mail_address = 'http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs',
+        pages_dict = html_dict,
+        out_root = target_pattern % t,
+        name_filter = lambda s: strip_re.sub ('', s))
index 16cb3c3f211afbae5d9021ca509a2fc2bb33343c..8a7a12c52245ddefed5a375c860a47b04f3de32a 100644 (file)
@@ -107,7 +107,27 @@ STEPMAKE_GETTEXT
 STEPMAKE_MSGFMT(REQUIRED)
 STEPMAKE_TEXMF(REQUIRED)
 STEPMAKE_TEXMF_DIRS
-STEPMAKE_GUILE_DEVEL(REQUIRED, 1.6.7)
+
+## should check for 1.8.2 ?  
+STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.0)
+
+
+## check rational bugfix.
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
+AC_MSG_CHECKING(GUILE rational bugfix)
+AC_TRY_CPP(
+#include <libguile.h>
+#ifdef SCM_FRACTION_REDUCED_BIT
+#error 
+#endif
+,
+AC_MSG_RESULT(ok),
+REQUIRED="$REQUIRED GUILE-with-rational-bugfix"
+AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt))
+CPPFLAGS="$save_CPPFLAGS"
+
+
 STEPMAKE_MAKEINFO(REQUIRED, 4.8)
 STEPMAKE_PYTHON_DEVEL(REQUIRED)
 
@@ -165,6 +185,9 @@ STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.8)
 AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
 
 
+# must also have local.make if configure fails.
+touch local.make
+
 # Gather requirements and generate output.
 STEPMAKE_END
 
@@ -177,4 +200,7 @@ Type:
     make$mc install   to install LilyPond
     make$mc help      to see all possible targets
 
+Edit local.make for local Makefile overrides.
+
+
 EOF
index 5fe94f1f08c8bbf17368392ce9e91c2e49709d85..670aece45c790970d06f82ce48953360b542e96e 100644 (file)
@@ -12,5 +12,5 @@ STEPMAKE_TEMPLATES=library c++ po test
 # test uses LILYPONDPREFIX
 LOCALSTEPMAKE_TEMPLATES=lilypond
 TEST_MODULE_LIBS = ../flower
-
+export top-src-dir
 include $(depth)/make/stepmake.make
index f0e428a59829d01e487b418ee41a36a82318c21b..37f735ffe9a24a245126494c25ae256420e805b2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "cpu-timer.hh"
index 21fec4e4b1a8a8a5a054edef2f32ae3175a9c566..e5736e06b0834ed6c26e15e01f32d25d91682067 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 31e7e993efe105fe8c35266e12a07f1c1bcbbfe9..175357d88962d232328d70f796732ee22ce0b7de 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index bb51a018631f15362d34c6bd497ba2f5a032d976..2cb537c67b39724afa5d06e57f8697e3e7115277 100644 (file)
@@ -1,7 +1,7 @@
 /*
   process command line, GNU style.
 
-  this is Copyleft (c) 1996--2006 Han-Wen Nienhuys, <hanwen@xs4all.nl>
+  this is Copyleft (c) 1996--2007 Han-Wen Nienhuys, <hanwen@xs4all.nl>
 */
 
 #include "getopt-long.hh"
@@ -141,7 +141,7 @@ Getopt_long::report (Errorcod c)
                 found_option_->to_string ());
       break;
     case E_NOARGEXPECT:
-      str += _f ("option `%s' doesn't allow an argument",
+      str += _f ("option `%s' does not allow an argument",
                 found_option_->to_string ());
       break;
     case E_UNKNOWNOPTION:
index 89d63923a72b19ec7cd92e14ca331c9eb81e6137..3e5238b7b46ed0ab4922d302513e6e1247a0fb12 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ARITHMETIC_OPERATOR_HH
index 3ec040bb8b2da4c916361ca71d83b22f0d6b2583..741ce181b685e296a11d5b650c0ecb9216c81465 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef AXES_HH
index acf8a394c1d2f3a098081679d883f64aae2b5321..f2cff8a80f11ee4a1a03f0b9c68e60e5045321da 100644 (file)
@@ -1,7 +1,7 @@
 /*
   flowerlib
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 #ifndef COMPARE_HH
 #define COMPARE_HH
index d5e58de7116439cd659064114b908d5c8b8a918a..01383b5edb85cc04f11563e187bb0a7ae485cfc0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef CPU_TIMER_HH
index 7902eaea566aeb9750d0c280b9ccd3c5e9e4b856..5400a5220d727e635f6647e429af6aec725eb761 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DIRECTION_HH
index 09c8a22fa4ca461205689d0c79a429f8a2e94563..e687acf2d7a0d7026a430589ae2f795922542f78 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DRUL_ARRAY_HH
index 3d1a2d0fb2fe28e6094868387bd8792e6a331b87..46d4724974e5da7f1c36724ded27bcb7009c88bc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FILE_NAME_HH
index bb69df245b448b1a2555d03bd222d1fe9223b48a..9a35388c4c08a33686efb39007f5381b3833e768 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FILE_PATH_HH
index 384d8b89c8fdc071b5acff7d4bdc45d0c5adb08e..8246d09fe3b93b5bba5fca71ad9e49aec79fa501 100644 (file)
@@ -1,7 +1,7 @@
 /*
   fflower-proto.hh -- typenames in flowerlib
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef FLOWER_PROTO_HH
index 0ccbe57196e578200427761417dc22998311829c..3fe85ab9f6a2aeb5dd4ae3f08af1948a5500ad5e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GUILE_COMPATIBILITY_HH
index b515af64c450f827c0a7923cec2f3e2f7673d417..8cfcfb637caab1fa09a120ad8f0138415bdfa2b4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef INTERNATIONAL_HH
index c485f32016a7e72304eb13016827ae5cb396c997..ba28b1c76c2031062a7526d7776ceeed98311066 100644 (file)
@@ -1,7 +1,7 @@
 /*
   interval.hh -- part of flowerlib
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef INTERVAL_HH
index f43d52587fd7beb4f69ed3f7d41b3b31089c1675..3f5abc8b47945de2d3063b7e3dfbbb9700b9993e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef INTERVAL_TCC
index 236b731d8a12e9828316a9fdcd022193ce05789d..9191d6476a2ecb29e1192e74e5c59abe9fe477f4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the flowerlib
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef LIBC_EXTENSION_HH
index 4429ccc46d59c4f328ef4ebc22249200f60c5e33..d9b32c2ee47569e9c09470e271707c68f06e438d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef MATRIX_HH
index 8cfab27b2a0275816ddf6aebfa3990e5544bcc1a..699dea851490f5600558f01e4cf8d6e45f18076c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MEMORY_STREAM_HH
index f45ec7f90ebf30f25c293b80c4d1bed2e344e22b..1995dd2554eed232bf9279396ac044a18c4c44ce 100644 (file)
@@ -1,7 +1,7 @@
 /*
   offset.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef OFFSET_HH
index 69b7add10337587ad95da00791b9f724c9c55b5f..820d9214b3e04e0e3af4546559446de16da89a22 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PARRAY_HH
index faf52d20266d1b0bebde49266886a8ad4f3122d1..297bd6c8c15a1d57b7e72f0bb8575b41560e7ce5 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * poly.h -- routines for manipulation of polynomials in one var
  *
- * (c) 1993--2006 Han-Wen Nienhuys
+ * (c) 1993--2007 Han-Wen Nienhuys
  */
 
 #ifndef POLY_H
index 6a936b8e6fb3b50cf7761cf048852858b64596d5..cb21c8d49cb9cfdb017a5248941cd1db5db1b152 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PQUEUE_HH
index 290d02b9601b9918938b33ba47447527ab3a0094..49b2322ed717e464bf992afedda255f050b5f493 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef RATIONAL_HH
@@ -11,8 +11,6 @@
 
 #include "std-string.hh"
 
-#include "std-string.hh"
-
 /**
    Rational numbers.  Included is support for + and - infinity.
 */
@@ -28,7 +26,7 @@ class Rational
   */
   int sign_;
   unsigned int num_, den_;
-  void normalise ();
+  void normalize ();
   void copy (Rational const &);
 
 public:
@@ -43,10 +41,12 @@ public:
   Rational trunc_rat () const;
   Rational div_rat (Rational) const;
   Rational mod_rat (Rational) const;
+  Rational abs () const;
   void negate ();
   int to_int () const;
-  operator bool () const;
-  operator double () const;
+
+  operator double () const { return to_double (); }
+  double to_double () const;
 
   Rational operator - () const;
   /**
@@ -54,8 +54,8 @@ public:
   */
   Rational ();
   Rational (int);
-  Rational (int, int);
-  Rational (double);
+  explicit Rational (int, int);
+  explicit Rational (double);
   Rational (Rational const &r) { copy (r);}
   Rational &operator = (Rational const &r)
   {
@@ -73,6 +73,7 @@ public:
 };
 
 #include "arithmetic-operator.hh"
+
 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, /);
 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, +);
 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, *);
@@ -97,6 +98,6 @@ ostream &
 operator << (ostream &, Rational);
 #endif
 
-const Rational infinity_rat = INT_MAX;
+const Rational infinity_rat (INT_MAX);
 
 #endif // RATIONAL_HH
index 5d8457e42a84cc32e6e35cd02f82c6324c41e0e4..2185d9b46b81ee6eaece34d71bc9f817646d613d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef REAL_HH
index d0fdd9c9782d77accc33f7001a63ebdeea5f7ca5..57805bbe21d95206d55d65ea8fc820062a5e43fe 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2006--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef STD_STRING_HH
index 10641dc5a00daa8e1569352469fc97c86e7b5e9d..4c3dcc0e0e8f61ae506d8672cf81073b0799759b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2006--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef STD_VECTOR_HH
index 2191d6bf97fa1c18027cb5d79b9ccd3179b20c1a..5f2705b8fab12501a9f615114eb7a32cb7b27e09 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
 
 */
 
index bf28b66737510b205b05074dc891d5cf353c0333..7c97716e4229f573836e28140e6dd1811d363df4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef VIRTUAL_METHODS_HH
index 5171b2efb70e1af7d391359e6ac2979f5da8ba61..d2b1722adcac8b4a32eb663bb49c0561c96ba7fc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef WARN_HH
diff --git a/flower/include/yaffut-parameters.hh b/flower/include/yaffut-parameters.hh
new file mode 100644 (file)
index 0000000..9a569f9
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef __YAFFUT_PARAMETERS_H__
+#define __YAFFUT_PARAMETERS_H__
+
+#include "yaffut.hh"
+
+namespace yaffut {
+template <typename Suite, typename ParameterOne, typename Case>
+struct TestOne: public ITest, public Suite
+{
+  ParameterOne const parameter_one_;
+  //static Registrator<Suite, Case> s_Registrator;
+  TestOne(ParameterOne p)
+  : Suite(p)
+  , parameter_one_ (p)
+  {
+    Registrator<Suite, Case>* r = &Test<Suite, Case>::s_Registrator;
+    r = 0;
+  }
+};
+
+#define TEST_STRING(Suite, Case, String)\
+  namespace { \
+      struct Case: public yaffut::TestOne<Suite, std::string, Case>{ Case(); };        \
+  } \
+  template struct yaffut::TestOne<Suite, std::string, Case>; Case::Case() \
+    : yaffut::TestOne<Suite, std::string, Case> (String)
+
+}
+
+#endif // __YAFFUT_PARAMETERS_H__
diff --git a/flower/include/yaffut.hh b/flower/include/yaffut.hh
new file mode 100644 (file)
index 0000000..91a3521
--- /dev/null
@@ -0,0 +1,359 @@
+// Copyright 2006 Rutger E.W. van Beusekom.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef __YAFFUT_H__
+#define __YAFFUT_H__
+
+#include <cxxabi.h>
+
+#include <cmath>
+#include <iostream>
+#include <map>
+#include <memory>
+#include <sstream>
+#include <stdexcept>
+
+#define YAFFUT_STRINGIZE(x) YAFFUT_STRINGIZE_(x)
+#define YAFFUT_STRINGIZE_(x) #x
+
+#define __YAFFUT_AT__ __FILE__ ":" YAFFUT_STRINGIZE(__LINE__)": "
+#ifndef __AT__
+#define __AT__ __YAFFUT_AT__
+#endif
+
+#define YAFFUT_EQUAL(e,a) \
+  yaffut::equal (e ,a , __YAFFUT_AT__, "EQUAL(" #e " == " #a ") failed ")
+#ifndef EQUAL
+#define EQUAL YAFFUT_EQUAL
+#endif
+
+#define YAFFUT_UNEQUAL(e,a) \
+  yaffut::unequal (e, a, __YAFFUT_AT__, "UNEQUAL(" #e " != " #a ") failed ")
+#ifndef UNEQUAL
+#define UNEQUAL YAFFUT_UNEQUAL
+#endif
+
+#define YAFFUT_CHECK(e) \
+  yaffut::check (e, __YAFFUT_AT__, "CHECK(" #e ") failed ")
+#ifndef CHECK
+#define CHECK YAFFUT_CHECK
+#endif
+
+#define YAFFUT_FAIL(s) yaffut::fail (s, __YAFFUT_AT__);
+#ifndef FAIL
+#define FAIL YAFFUT_FAIL
+#endif
+
+#define YAFFUT_ASSERT_THROW(s, e) \
+  try \
+  { \
+    s; \
+    throw yaffut::failure (__YAFFUT_AT__,  #s " failed to throw"); \
+  } \
+  catch(const e&){}
+#ifndef ASSERT_THROW
+#define ASSERT_THROW YAFFUT_ASSERT_THROW
+#endif
+
+namespace yaffut {
+
+template <typename T>
+std::string demangle()
+{
+  size_t sz;
+  int status;
+  char* ptr = abi::__cxa_demangle(typeid(T).name(), 0, &sz, &status);
+  std::string name(ptr ? ptr : "", ptr ? strlen(ptr) : 0);
+  if(ptr){ free(ptr); }
+  std::string::size_type pos = name.rfind("::");
+  if(pos != std::string::npos)
+  {
+    name = name.substr(pos + 2);
+  }  
+  return name;
+}
+
+struct ITest
+{
+  virtual ~ITest(){}
+};
+
+class Factory
+{
+public:
+  typedef ITest* (*Create_t) ();
+private:
+  typedef std::map<std::string, Create_t> Tests_t;
+  Tests_t m_Tests;
+  size_t m_fail;
+  size_t m_pass;
+private:
+  Factory(){}
+  ~Factory(){}
+  static bool EqualsSuiteName (std::string const &name, std::string const& s)
+  {
+    return name.find (':') >= name.length () - 2
+      && s.substr (0, name.length ()) == name;
+  }
+public:
+  static Factory& Instance()
+  {
+    static Factory instance;
+    return instance;
+  }
+  void Register(const std::string& name, Create_t create)
+  {
+    m_Tests[name] = create;
+  }
+  size_t Fail () { return m_fail; }
+  void List(const std::string& name)
+  {
+    for(Tests_t::const_iterator it = m_Tests.begin(); it != m_Tests.end(); ++it)
+    {
+      if(name.empty () || it->first == name
+        || EqualsSuiteName (name, it->first))
+       std::cout << it->first << std::endl;
+    }
+  }
+  void Run(const std::string& name)
+  {
+    for(Tests_t::const_iterator it = m_Tests.begin(); it != m_Tests.end(); ++it)
+    {
+      if("All" == name || it->first == name
+        || EqualsSuiteName (name, it->first))
+      {
+        try
+        {
+          std::cout << std::endl << it->first << ' ' << std::flush;
+          {
+            std::auto_ptr<ITest> test(it->second());
+          }
+          std::cout << "[OK]" << std::flush;
+          ++m_pass;
+        }
+        catch(const std::exception& e)
+        {
+          std::cout << "[FAIL]\n" << e.what() << std::flush;
+          ++m_fail;
+        }
+        catch(...)
+        {
+          std::cout << "[FAIL]\nunknown exception" << std::flush;
+          ++m_fail;
+        }
+      }
+    }
+  }
+  void Report ()
+  {
+    const size_t size = m_Tests.size();
+    std::cout << std::endl;
+    std::cout << "[TOTAL](" << m_pass + m_fail << '/' << size << ")" << std::endl;
+    std::cout << "[OK](" << m_pass << '/' << size << ")" << std::endl;
+    if (m_fail)
+      std::cout << "[FAIL](" << m_fail << '/' << size << ")" << std::endl;
+  }
+  int Main (int argc, const char* argv[])
+  {
+    if(argc > 1
+       && (std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help"))
+    {
+      std::cout << "Yaffut - Yet Another Framework For Unit Testing.\n\n"
+       "Usage: yaffut [OPTION] [Suite:|Suite::Test]...\n\n"
+       "Options:\n"
+       "  -h, --help  show this help\n"
+       "  -l, --list  list test cases" << std::endl;
+      return 0;
+    }
+    if(argc > 1
+       && (std::string(argv[1]) == "-l" || std::string(argv[1]) == "--list"))
+    {
+      Factory::Instance().List(argc > 2 ? argv[2] : "");
+      return 0;
+    }
+
+    const char* all[] = {"All"};
+    const char** test = all;
+    int num = 1;
+    if(1 < argc)
+    {
+      test = argv;
+      num = argc;
+    }
+    
+    for(int i = 0; i < num; ++i)
+    {
+      try
+      {
+       Factory::Instance().Run(test[i]);
+      }
+      catch(const std::exception& e)
+      {
+       std::clog << e.what() << std::endl;
+      }
+    }
+
+    Factory::Instance().Report ();
+    return Factory::Instance().Fail ();
+  }
+};
+
+class failure: public std::exception
+{
+  std::string failure_;
+public:
+  template <typename Expected, typename Actual>
+  failure(const Expected& e, Actual& a, const char* at = "", const char* expr = "")
+  {
+    std::ostringstream os;
+    os << at << expr << "\nexpected: "
+       << "(" << demangle<Expected>() << ") " << e
+       << " != actual: " << "(" << demangle<Actual>() << ") " << a;
+    failure_ = os.str();
+  }
+  failure(const char* at = "", const char* expr = "")
+  {
+    std::ostringstream os;
+    os << at << expr;
+    failure_ = os.str();
+  }
+  virtual ~failure() throw() {}
+  virtual const char* what() const throw() { return failure_.c_str(); }
+};
+
+template <typename Suite, typename Case>
+struct Registrator
+{
+  Registrator()
+  {
+    Factory::Instance().Register(TestName(), Create);
+  }
+  const std::string& TestName()
+  {
+    static const std::string name(demangle<Suite>() + "::" + demangle<Case>());
+    return name;
+  }
+  static ITest* Create()
+  {
+    return new Case;
+  }
+};
+
+template <typename Suite, typename Case>
+struct Test: public ITest, public Suite
+{
+  static Registrator<Suite, Case> s_Registrator;
+  Test()
+  : Suite()
+  {
+    Registrator<Suite, Case>* r = &s_Registrator;
+    r = 0;
+  }
+  template <typename E, typename T>
+  void assert_throw(void(T::*mf)(), const char* at)
+  {
+    try
+    {
+      (dynamic_cast<T*> (this)->*mf)();
+      throw yaffut::failure (at, "statement failed to throw");
+    }
+    catch(const E&){}
+  }
+};
+
+template <typename Suite, typename Case>
+Registrator<Suite, Case> Test<Suite, Case>::s_Registrator;
+
+template <typename Expected, typename Actual>
+void equal(const Expected& e, const Actual& a, const char* at = "", const char* expr = "")
+{
+  if(e != a)
+  {
+    throw failure(e, a, at, expr);
+  }
+}
+inline void equal(double e, double a, const char* at = "", const char* expr = "")
+{
+  double max = std::abs(std::max(e, a));
+  max = max < 1.0 ? 1.0 : max;
+  if(std::abs(e - a) > std::numeric_limits<double>::epsilon() * max)
+  {
+    throw failure(e, a, at, expr);
+  }
+}
+inline void check(bool b, const char* at = "", const char* expr = "")
+{ 
+  if(!b)
+  {
+    throw failure(at, expr);
+  }
+}
+
+template <typename Expected, typename Actual>
+void unequal(const Expected& e, const Actual& a, const char* at = "", const char* expr = "")
+{
+  if(e == a)
+  {
+    throw failure(e, a, at, expr);
+  }
+}
+inline void unequal(double e, double a, const char* at = "", const char* expr = "")
+{
+  double max = std::abs(std::max(e, a));
+  max = max < 1.0 ? 1.0 : max;
+  if(std::abs(e - a) <= std::numeric_limits<double>::epsilon() * max)
+  {
+    throw failure(e, a, at, expr);
+  }
+}
+
+template <typename T>
+void fail(const T& expr, const char* at = "")
+{
+  std::ostringstream os;
+  os << expr;
+  throw failure(at, os.str().c_str());
+}
+
+template <typename E>
+void assert_throw(void(*pf)(), const char* at = "")
+{
+  try
+  {
+    (*pf)();
+    throw failure (at, " statement failed to throw");
+  }
+  catch(const E&){}
+}
+
+//define catch-all suite
+struct Suite {};
+
+}
+
+//and for those who prefer macro obscurity over more typing
+#define TEST(Suite, Case)\
+  namespace { struct Case: public yaffut::Test<Suite, Case>{ Case(); }; } \
+  template struct yaffut::Test<Suite, Case>; Case::Case()
+
+#define FUNC(Case)\
+  namespace { struct Case: public yaffut::Test<yaffut::Suite, Case>{ Case(); }; } \
+  template struct yaffut::Test<yaffut::Suite, Case>; Case::Case()
+
+#ifdef YAFFUT_MAIN
+
+#include <iostream>
+
+int main(int argc, const char* argv[])
+{
+  std::cout << "pid(" << getpid() << ")" << std::endl;
+  return yaffut::Factory::Instance().Main (argc, argv);
+};
+
+#endif /* YAFFUT_MAIN */
+
+#define yaffut_main(argc, argv) yaffut::Factory::Instance().Main (argc, argv)
+
+#endif
index ef1ebfbc8967aeef836d95e343ffeb9e625e1140..78dc3ddb3c363e5fc7caa6bf176fad280f2d707b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "config.hh"
index b78579685175336348943f1ee7081b99df63a3d8..ed45c665620eb42349595f90e5d2aab081cb816b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "interval.hh"
index 7b33b0430e399cd719bba75201ea940cecbeb74e..31c280abe704b388d51d316d38e8cd69582136bc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the flowerlib
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index d6bedf615e8ec9df021d712670188b2ea242d01f..863f4bd4def2de6fb785178de84d495ed70e9937 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cassert>
index a0e87b58cf57984734386aabc3a6b3dc8ea99b7d..f578b191f9a4c8b93f4f694a8b8f06beefb522c8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "offset.hh"
index 8aa5d3a63b993bb39578fb7382961ef7ad4ad99d..d9784c277069e363866077b3302c1d5b7887a425 100644 (file)
@@ -1,7 +1,7 @@
 /*
   poly.cc -- routines for manipulation of polynomials in one var
 
-  (c) 1993--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1993--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "polynomial.hh"
index a0c0d22410e235726eeee037b760fee1f7dcaef9..724f0d99ca5b526dfc5f067decfbaf2066f7796c 100644 (file)
@@ -3,28 +3,35 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "rational.hh"
 
 #include <cmath>
+#include <cassert>
 #include <cstdlib>
 using namespace std;
 
 #include "string-convert.hh"
 #include "libc-extension.hh"
 
-Rational::operator double () const
+double
+Rational::to_double () const
 {
-  return ((double)sign_) * num_ / den_;
-}
+  if (sign_ == -1 || sign_ == 1 || sign_ == 0)
+    return ((double)sign_) * num_ / den_;
+  if (sign_ == -2)
+    return -HUGE_VAL;
+  else if (sign_ == 2)
+    return HUGE_VAL;
+  else
+    assert (false);
 
-Rational::operator bool () const
-{
-  return sign_ && num_;
+  return 0.0;
 }
 
+
 #ifdef STREAM_SUPPORT
 ostream &
 operator << (ostream &o, Rational r)
@@ -34,6 +41,12 @@ operator << (ostream &o, Rational r)
 }
 #endif
 
+Rational
+Rational::abs () const
+{
+  return Rational (num_, den_);
+}
+
 Rational
 Rational::trunc_rat () const
 {
@@ -49,29 +62,18 @@ Rational::Rational ()
 Rational::Rational (int n, int d)
 {
   sign_ = ::sign (n) * ::sign (d);
-  num_ = abs (n);
-  den_ = abs (d);
-  normalise ();
+  num_ = ::abs (n);
+  den_ = ::abs (d);
+  normalize ();
 }
 
 Rational::Rational (int n)
 {
   sign_ = ::sign (n);
-  num_ = abs (n);
+  num_ = ::abs (n);
   den_ = 1;
 }
 
-static inline
-int gcd (int a, int b)
-{
-  int t;
-  while ((t = a % b))
-    {
-      a = b;
-      b = t;
-    }
-  return b;
-}
 
 void
 Rational::set_infinite (int s)
@@ -103,8 +105,56 @@ Rational::mod_rat (Rational div) const
   return r;
 }
 
+
+/*
+  copy & paste from scm_gcd (GUILE).
+ */
+static int
+gcd (long u, long v) 
+{
+  long result = 0;
+  if (u == 0)
+    result = v;
+  else if (v == 0)
+    result = u;
+  else
+    {
+      long k = 1;
+      long t;
+      /* Determine a common factor 2^k */
+      while (!(1 & (u | v)))
+       {
+         k <<= 1;
+         u >>= 1;
+         v >>= 1;
+       }
+      /* Now, any factor 2^n can be eliminated */
+      if (u & 1)
+       t = -v;
+      else
+       {
+         t = u;
+       b3:
+         t = t >> 1;
+       }
+      if (!(1 & t))
+       goto b3;
+      if (t > 0)
+       u = t;
+      else
+       v = -t;
+      t = u - v;
+      if (t != 0)
+       goto b3;
+      result = u * k;
+    }
+
+  return result;
+}
+
+
 void
-Rational::normalise ()
+Rational::normalize ()
 {
   if (!sign_)
     {
@@ -175,9 +225,9 @@ Rational::operator += (Rational r)
       int n = sign_ * num_ * (lcm / den_) + r.sign_ * r.num_ * (lcm / r.den_);
       int d = lcm;
       sign_ = ::sign (n) * ::sign (d);
-      num_ = abs (n);
-      den_ = abs (d);
-      normalise ();
+      num_ = ::abs (n);
+      den_ = ::abs (d);
+      normalize ();
     }
   return *this;
 }
@@ -207,19 +257,19 @@ Rational::Rational (double x)
 
       num_ = (unsigned int) (mantissa * FACT);
       den_ = (unsigned int) FACT;
-      normalise ();
+      normalize ();
       if (expt < 0)
        den_ <<= -expt;
       else
        num_ <<= expt;
-      normalise ();
+      normalize ();
     }
   else
     {
       num_ = 0;
       den_ = 1;
       sign_ = 0;
-      normalise ();
+      normalize ();
     }
 }
 
@@ -244,7 +294,7 @@ Rational::operator *= (Rational r)
   num_ *= r.num_;
   den_ *= r.den_;
 
-  normalise ();
+  normalize ();
  exit_func:
   return *this;
 }
index 6d8ebd52f5ba7fe7d00319176feec7150b14eb9d..b78b0196616aa1adde6f46b9ab64df379b523ed5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006  Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2006--2007  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "std-string.hh"
index 43f0389bde87d399de8fbff41d7428e53583b093..6a6dbc6d7c655882d9ec18f1415b5dc9d5a6d1d0 100644 (file)
@@ -66,7 +66,6 @@ String_convert::bin2unsigned (string bin_string)
   return result_u;
 }
 
-// breendet imp from string
 int
 String_convert::dec2int (string dec_string)
 {
@@ -76,6 +75,8 @@ String_convert::dec2int (string dec_string)
   long l = 0;
   if (!sscanf (dec_string.c_str (), "%ld", &l))
     assert (false);
+
+  assert (form_string ("%ld", l) == dec_string);
   
   return (int)l;
 }
diff --git a/flower/test-file-name.cc b/flower/test-file-name.cc
new file mode 100644 (file)
index 0000000..0bd427b
--- /dev/null
@@ -0,0 +1,31 @@
+#include "file-name.hh"
+
+#include "yaffut-parameters.hh"
+
+using namespace std;
+
+string slashify (string file_name);
+
+TEST_STRING (File_name, Mingw_slashify, "foe.ly")
+{
+  string s = slashify (to_string ());
+  EQUAL (parameter_one_, s);
+}
+
+TEST_STRING (File_name, Mingw_slashify_2, "/tmp/x.ly")
+{
+  string s = slashify (to_string ());
+  EQUAL (parameter_one_, s);
+}
+
+TEST_STRING (File_name, Mingw_slashify_3, "c:/tmp/x.ly")
+{
+  string s = slashify (to_string ());
+  EQUAL (parameter_one_, s);
+}
+
+TEST_STRING (File_name, Mingw_slashify_4, "\\tmp\\x.ly")
+{
+  string s = slashify (to_string ());
+  EQUAL ("/tmp/x.ly", s);
+}
diff --git a/flower/test-file-path.cc b/flower/test-file-path.cc
new file mode 100644 (file)
index 0000000..053d237
--- /dev/null
@@ -0,0 +1,19 @@
+#include "file-path.hh"
+
+#include "yaffut.hh"
+#include "config.hh"
+
+TEST (File_path, Find)
+{
+  char const *extensions[] = {"ly", "", 0};
+  string file = "init";
+  char cwd[PATH_MAX];
+  getcwd (cwd, PATH_MAX);
+  string ly_dir = string (getenv ("top-src-dir")) + "/ly";
+  parse_path (string (1, PATHSEP) + ly_dir);
+  string file_name = find (file, extensions);
+  EQUAL (file_name.substr (file_name.rfind ('/')), "/init.ly");
+  file = "init.ly";
+  file_name = find (file, extensions);
+  EQUAL (file_name, ly_dir + "/init.ly");
+}
diff --git a/flower/test-file.cc b/flower/test-file.cc
deleted file mode 100644 (file)
index 9057b3a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#define HAVE_BOOST_LAMBDA 1
-#include "std-vector.hh"
-
-#include <unistd.h>
-#include <iostream>
-
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
-
-using namespace std;
-using boost::unit_test::test_suite;
-
-#include "file-name.hh"
-string slashify (string file_name);
-
-// FIXME
-//BOOST_AUTO_UNIT_TEST (mingw_slashify)
-void mingw_slashify ()
-{
-  File_name f = string ("foe.ly");
-  string s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "foe.ly");
-  f = string ("/tmp/x.ly");
-  s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "/tmp/x.ly");
-  f = string ("c:/tmp/x.ly");
-  s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "c:/tmp/x.ly");
-  f = string ("\\tmp\\x.ly");
-  s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "/tmp/x.ly");
-}
-
-#include "config.hh"
-#include "file-path.hh"
-
-// FIXME
-//BOOST_AUTO_UNIT_TEST (mingw_slashify)
-void file_find ()
-{
-  char const *extensions[] = {"ly", "", 0};
-  string file = "init";
-  File_path path;
-  char cwd[PATH_MAX];
-  getcwd (cwd, PATH_MAX);
-  string ly_dir = string (getenv ("LILYPONDPREFIX")) + "/ly";
-  cout << ly_dir << endl;
-  path.parse_path (string (1, PATHSEP) + ly_dir);
-  string file_name = path.find (file, extensions);
-  cout << file_name << endl;
-  BOOST_CHECK_EQUAL (file_name.substr (file_name.rfind ('/')), "/init.ly");
-  file = "init.ly";
-  file_name = path.find (file, extensions);
-  cout << file_name << endl;
-  BOOST_CHECK_EQUAL (file_name, ly_dir + "/init.ly");
-}
index ed317f7f631a13c4850ed307118a859bb2d7c276..1c1a71fa3a058f3e91a388cedc749010c6b39a14 100644 (file)
@@ -9,16 +9,14 @@
 
 #include <iostream>
 
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
+#define YAFFUT_MAIN
+#include "yaffut.hh"
 
 #if !STD_VECTOR
 #define vector flower_vector
 #endif
 
 using namespace std;
-using boost::unit_test::test_suite;
-using namespace boost::unit_test;
 
 template<typename T>
 void
@@ -40,24 +38,24 @@ print (Link_array<T> v)
 }
 #endif
 
-BOOST_AUTO_UNIT_TEST (vector_erase)
+FUNC (vector_erase)
 {
   vector<int> v;
   v.push_back (0);
   v.push_back (1);
-  BOOST_CHECK_EQUAL (v.size (), vsize (2));
+  EQUAL (v.size (), vsize (2));
   v.erase (v.begin () + 1);
-  BOOST_CHECK_EQUAL (v.size (), vsize (1));
-  BOOST_CHECK_EQUAL (v.back (), 0);
+  EQUAL (v.size (), vsize (1));
+  EQUAL (v.back (), 0);
 
   v.push_back (1);
-  BOOST_CHECK_EQUAL (v.size (), vsize (2));
+  EQUAL (v.size (), vsize (2));
   v.erase (v.begin () + 0);
-  BOOST_CHECK_EQUAL (v.size (), vsize (1));
-  BOOST_CHECK_EQUAL (v.back (), 1);
+  EQUAL (v.size (), vsize (1));
+  EQUAL (v.back (), 1);
 }
 
-BOOST_AUTO_UNIT_TEST (vector_slice)
+FUNC (vector_slice)
 {
   vector<int> v;
   v.push_back (0);
@@ -65,18 +63,18 @@ BOOST_AUTO_UNIT_TEST (vector_slice)
   v.push_back (2);
   v.push_back (3);
 #if VECTOR_SLICE
-  BOOST_CHECK_EQUAL (v.slice (0, 0).size (), vsize (0));
-  BOOST_CHECK_EQUAL (v.slice (0, v.size ()).size (), v.size ());
-  BOOST_CHECK_EQUAL (v.slice (1, 2).size (), vsize (1));
+  EQUAL (v.slice (0, 0).size (), vsize (0));
+  EQUAL (v.slice (0, v.size ()).size (), v.size ());
+  EQUAL (v.slice (1, 2).size (), vsize (1));
 #else
-  BOOST_CHECK_EQUAL (vector<int> (v.begin (), v.begin ()).size (), vsize (0));
-  BOOST_CHECK_EQUAL (vector<int> (v.begin (), v.end ()).size (), v.size ());
-  BOOST_CHECK_EQUAL (vector<int> (v.begin () + 1, v.begin () + 2).size (),
+  EQUAL (vector<int> (v.begin (), v.begin ()).size (), vsize (0));
+  EQUAL (vector<int> (v.begin (), v.end ()).size (), v.size ());
+  EQUAL (vector<int> (v.begin () + 1, v.begin () + 2).size (),
                     vsize (1));
 #endif
 }
 
-BOOST_AUTO_UNIT_TEST (vector_sorting)
+FUNC (vector_sorting)
 {
   vector<int> v;
   v.push_back (2);
@@ -88,12 +86,12 @@ BOOST_AUTO_UNIT_TEST (vector_sorting)
   //sort (v.begin (), v.end ());
   vector_sort (v, less<int> ());
 #endif
-  BOOST_CHECK_EQUAL (v[0], 0);
-  BOOST_CHECK_EQUAL (v[1], 1);
-  BOOST_CHECK_EQUAL (v[2], 2);
+  EQUAL (v[0], 0);
+  EQUAL (v[1], 1);
+  EQUAL (v[2], 2);
 }
 
-BOOST_AUTO_UNIT_TEST (vector_insert)
+FUNC (vector_insert)
 {
   vector<int> v;
   v.push_back (0);
@@ -102,23 +100,23 @@ BOOST_AUTO_UNIT_TEST (vector_insert)
 #else
   v.insert (v.begin (), 1);
 #endif  
-  BOOST_CHECK_EQUAL (v[0], 1);
+  EQUAL (v[0], 1);
 #if VECTOR_INSERT
   v.insert (2, v.size ());
 #else
   v.insert (v.end (), 2);
 #endif  
-  BOOST_CHECK_EQUAL (v.back (), 2);
+  EQUAL (v.back (), 2);
   vector<int> u;
   u.insert (u.begin (), v.begin (), v.end ());
-  BOOST_CHECK_EQUAL (u.size (), v.size ());
+  EQUAL (u.size (), v.size ());
   u.clear ();
   u.insert (u.end (), v.begin (), v.end ());
-  BOOST_CHECK_EQUAL (u.size (), v.size ());
+  EQUAL (u.size (), v.size ());
   u.clear ();
 }
 
-BOOST_AUTO_UNIT_TEST (parray_concat)
+FUNC (parray_concat)
 {
 #if !STD_VECTOR
   Link_array<int> u, v;
@@ -132,14 +130,14 @@ BOOST_AUTO_UNIT_TEST (parray_concat)
   v.push_back (&a[3]);
   v.push_back (&a[4]);
   concat (u, v);
-  BOOST_CHECK_EQUAL (u[0], &a[0]);
-  BOOST_CHECK_EQUAL (u[1], &a[1]);
-  BOOST_CHECK_EQUAL (u[2], &a[2]);
-  BOOST_CHECK_EQUAL (u[3], &a[3]);
-  BOOST_CHECK_EQUAL (u[4], &a[4]);
-  BOOST_CHECK_EQUAL (u.size (), vsize (5));
+  EQUAL (u[0], &a[0]);
+  EQUAL (u[1], &a[1]);
+  EQUAL (u[2], &a[2]);
+  EQUAL (u[3], &a[3]);
+  EQUAL (u[4], &a[4]);
+  EQUAL (u.size (), vsize (5));
   concat (u, v);
-  BOOST_CHECK_EQUAL (u.size (), vsize (7));
+  EQUAL (u.size (), vsize (7));
 
   u.clear ();
   v.clear ();
@@ -149,15 +147,15 @@ BOOST_AUTO_UNIT_TEST (parray_concat)
   v.push_back (&a[3]);
   v.push_back (&a[4]);
   concat (u, v);
-  BOOST_CHECK_EQUAL (u[0], &a[0]);
-  BOOST_CHECK_EQUAL (u[1], &a[1]);
-  BOOST_CHECK_EQUAL (u[2], &a[2]);
-  BOOST_CHECK_EQUAL (u[3], &a[3]);
-  BOOST_CHECK_EQUAL (u[4], &a[4]);
-  BOOST_CHECK_EQUAL (u.size (), vsize (5));
+  EQUAL (u[0], &a[0]);
+  EQUAL (u[1], &a[1]);
+  EQUAL (u[2], &a[2]);
+  EQUAL (u[3], &a[3]);
+  EQUAL (u[4], &a[4]);
+  EQUAL (u.size (), vsize (5));
 }
 
-BOOST_AUTO_UNIT_TEST (parray_uniq)
+FUNC (parray_uniq)
 {
   vector<int> v;
   v.push_back (0);
@@ -165,76 +163,15 @@ BOOST_AUTO_UNIT_TEST (parray_uniq)
   v.push_back (0);
   vector_sort (v, less<int> ());
   uniq (v);
-  BOOST_CHECK_EQUAL (v.size (), vsize (2));
+  EQUAL (v.size (), vsize (2));
 }
 
-BOOST_AUTO_UNIT_TEST (vector_search)
+FUNC (vector_search)
 {
   vector<int> v;
   v.push_back (0);
   v.push_back (1);
   v.push_back (2);
   vsize i = binary_search (v, 1, less<int> ());
-  BOOST_CHECK_EQUAL (i, vsize (1));
-}
-
-#if 0
-#include "file-name.hh"
-string slashify (string file_name);
-
-BOOST_AUTO_UNIT_TEST (mingw_slashify)
-{
-  File_name f = string ("foe.ly");
-  string s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "foe.ly");
-  f = string ("/tmp/x.ly");
-  s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "/tmp/x.ly");
-  f = string ("c:/tmp/x.ly");
-  s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "c:/tmp/x.ly");
-  f = string ("\\tmp\\x.ly");
-  s = slashify (f.to_string ());
-  cout << s << endl;
-  BOOST_CHECK_EQUAL (s, "/tmp/x.ly");
-}
-#endif
-
-void mingw_slashify ();
-void file_find ();
-
-#include <boost/test/results_reporter.hpp>
-#include <boost/test/framework.hpp>
-#include <boost/test/detail/unit_test_parameters.hpp>
-
-test_suite*
-init_unit_test_suite (int, char**)
-{
-  vsize i = 0;
-  vsize j = 0;
-  vector<int> v;
-  binary_search (v, 1, less<int> (), i, j);
-  //binary_search_bounds (v, 1, &default_compare, 0, 0);
-  
-  //Link_array<char> w;
-  vector<char*> w;
-  binary_search (w, (char*)1, less<char*> (), i, j);
-  
-  test_suite *test = BOOST_TEST_SUITE("Flower");
-
-
-  test->add (BOOST_TEST_CASE (vector_erase));
-  test->add (BOOST_TEST_CASE (vector_slice));
-  test->add (BOOST_TEST_CASE (vector_sorting));
-  test->add (BOOST_TEST_CASE (vector_insert));
-  test->add (BOOST_TEST_CASE (parray_concat));
-  test->add (BOOST_TEST_CASE (parray_uniq));
-  test->add (BOOST_TEST_CASE (vector_search));
-  test->add (BOOST_TEST_CASE (mingw_slashify));
-  test->add (BOOST_TEST_CASE (file_find));
-
-  return test;
+  EQUAL (i, vsize (1));
 }
index 4014b73adbec90eda997dcce0217e4f3d67b3dc2..52631a866592661850c77c0c19053d1e35fd1c3e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "warn.hh"
index da9987de40f7cf6afb0559cae600c71425601bca..022f9c3f12a1407957ff54ed6c2b42f9fda6d8d4 100644 (file)
@@ -1,8 +1,8 @@
 depth = ..
 
-SUBDIRS = test regression tutorial no-notation mutopia manual
+SUBDIRS = test regression tutorial mutopia manual
 
-examples = typography-demo les-nereides wilhelmus proportional bach-schenker
+examples = typography-demo les-nereides wilhelmus proportional bach-schenker cary
 
 LOCALSTEPMAKE_TEMPLATES=ly mutopia
 EXTRA_DIST_FILES=paddy.abc
diff --git a/input/cary-layout.ly b/input/cary-layout.ly
new file mode 100644 (file)
index 0000000..7f49c57
--- /dev/null
@@ -0,0 +1,104 @@
+
+\version "2.11.11"
+
+\layout {
+  indent = #0
+  ragged-right = ##t
+  \context {
+    \Score
+    
+    proportionalNotationDuration = #(ly:make-moment 1 64)
+    \override Beam #'breakable = ##t
+    autoBeaming = ##f
+    tupletFullLength = ##t
+    \override BarNumber #'transparent = ##t
+    \override BarLine #'transparent = ##t
+    \override SpanBar #'transparent = ##t
+    \override Beam #'break-overshoot = #'(-0.5 . 1.0)
+    \override TextScript #'staff-padding = #6
+    \override Glissando #'thickness = #3
+    \override SpacingSpanner #'strict-grace-spacing = ##t
+    \override TupletBracket #'bracket-visibility = ##t
+    \override NoteColumn #'ignore-collision = ##t
+  }
+}
+
+\paper {
+  oddHeaderMarkup = \markup \fill-line { " " }
+  evenHeaderMarkup = \markup \fill-line { " " }
+  oddFooterMarkup = \markup { 
+    \fill-line { 
+      \bold \fontsize #3 \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string } }
+  evenFooterMarkup = \markup { 
+    \fill-line { 
+      \bold \fontsize #3 \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string } }
+  printfirst-page-number = ##t
+  print-page-number = ##t
+  ragged-last-bottom = ##t
+}
+
+#(set-global-staff-size 14)
+
+
+%% definitions.
+
+
+ppX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "pp" #:hspace 0)))
+pX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "p" #:hspace 0)))
+mpX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "mp" #:hspace 0)))
+fX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "f" #:hspace 0)))
+ffX = #(make-dynamic-script (markup #:combine #:transparent #:dynamic "f" #:line(#:hspace 0 #:dynamic "ff" #:hspace 0)))
+sfp = #(make-dynamic-script "sfp")
+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?)
+       (cond ((and (= left 0) (> right 0))
+                       #{
+                               \set stemRightBeamCount = #$right
+                       #})
+
+                       ((and (> left 0) (= right 0))
+                       #{
+                               \set stemLeftBeamCount = #$left
+                       #})
+
+                       (else
+                       #{
+                               \set stemLeftBeamCount = #$left
+                               \set stemRightBeamCount = #$right
+                       #})
+       )
+)
+
+fraction = #(define-music-function (parser location music) (ly:music?)
+       #{ \tweak #'text #tuplet-number::calc-fraction-text $music #})
+
+triangle = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(do do do do do do do) $music #})
+
+semicircle = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(re re re re re re re) $music #})
+
+blackdiamond = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(mi mi mi mi mi mi mi) $music #})
+
+tiltedtriangle = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(fa fa fa fa fa fa fa) $music #})
+
+square = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(la la la la la la la) $music #})
+
+wedge = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(ti ti ti ti ti ti ti) $music #})
+
+harmonic = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) $music #})
+
+cross = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \set shapeNoteStyles = ##(cross cross cross cross cross cross cross) $music #})
+
+white = #(define-music-function (parser location music) (ly:music?)
+       #{ \once \override NoteHead #'duration-log = #1 $music #})
+
diff --git a/input/cary.ly b/input/cary.ly
new file mode 100644 (file)
index 0000000..22837f0
--- /dev/null
@@ -0,0 +1,393 @@
+
+\header {
+  dedication = "Carin Levine"
+  instrument = "bass flute"
+  title = "ČÁRY"
+  year = "2004--2006"
+
+  subtitle = \markup { \italic Sorcery (extract) }
+  % Measures 6 - 10;
+
+  composer = "Trevor Bača"
+  copyright = "Copyright 2006 Trevor Bača - all rights reserved."
+  
+}
+
+% Verbatim from composer's score.
+%
+% Upper staff gives fingerings;
+% Lower staff gives special types of breath.
+%
+% Copyright 2006 for the entire score;
+% All rights reserved by the composer.
+
+\version "2.11.2"
+
+\include "english.ly"
+\include "cary-layout.ly"
+
+\new Score <<
+       
+       \new StaffGroup <<
+               
+               \new Staff \with {
+                       \override Stem #'direction = #down
+                       \override Beam #'positions = #'(-7 . -7)
+                       \override TupletBracket #'direction = #down
+                       \override TupletBracket #'staff-padding = #5
+                       \override TupletBracket #'padding = #2.25
+                       \override VerticalAxisGroup #'minimum-Y-extent = #'(10 . 10)
+               } <<
+                       
+                       \new Voice {
+                               
+            \override Score.MetronomeMark #'extra-offset = #'(0 . 6)
+            \override Score.MetronomeMark #'font-size = #3
+            \tempo 8=42
+                               \time 5/16       s4 ~ s16       \noBreak                 % measure 6
+                               \time 4/8        s2                     \noBreak                 % measure 7
+                               \time 4/8        s2                     \noBreak                 % measure 8
+                               
+                       }
+                       
+                       \new Voice \with {
+                               \remove Forbid_line_break_engraver
+                       } {
+                               
+                               % measure 6
+                               \fraction \times 5/3 {
+                                       \times 4/5 {
+                                               a'64 [ % 36
+                                               cs''64 % 37
+                                               f''64 % 38
+                                               cs''64 % 39
+                                               ef'''64 ] % 40
+                                       }
+                                       \times 4/5 {
+                                               g''64 [ % 41
+                                               c''64 % 42
+                                               e''64 % 43
+                                               g''64 % 44
+                                               ef'''64 ] % 45
+                                       }
+                                       bf''16 % 46
+                               }
+                               
+                               % measure 7
+                               r8 % 47
+                               \times 4/5 {
+                                       d''32 [ % 48
+                                       af''32 % 49
+                                       e'32 % 50
+                                       b'32 % 51
+                                       b'32 ] % 52
+                               }
+                               ef'''4 % 53
+                               
+                               % measure 8
+                               b''8 [ % 54
+                               g''8 ] % 55
+                               d''4 % 56
+                               
+                       }
+               >>
+               
+               \new Staff \with {
+                       \override Clef #'transparent = ##t
+                       \override StaffSymbol #'line-positions = #'(-4 -2   2 4)
+                       \override Stem #'direction = #down
+                       \override TupletBracket #'staff-padding = #5
+                       \override TupletBracket #'padding = #2.25
+                       \override VerticalAxisGroup #'minimum-Y-extent = #'(10 . 10)
+               } <<
+                       
+                       \new Voice \with {
+                               \remove Forbid_line_break_engraver
+                               \override Stem #'direction = #up
+                               \override Stem #'stroke-style = #"grace" 
+                               \override Stem #'font-size = #-3
+                               \override Rest #'transparent = ##t
+                               \override NoteHead #'no-ledgers = ##t
+                               \override Dots #'transparent = ##t
+                               \override TupletBracket #'transparent = ##t
+                               \override TupletNumber #'transparent = ##t
+                       } {
+                               
+                               % measure 6
+                               \fraction \times 5/3 {
+                                       \square f''16 * 1/8 % 40
+                                       \square f''16 * 1/8 % 41
+                                       \square f''16 * 1/8 % 42
+                                       \square f''16 * 1/8 % 43
+                                       \square f''16 * 1/8 % 44
+                                       \square f''16 * 1/8 % 45
+                                       \square f''16 * 1/8 % 46
+                                       \square f''16 * 1/8 % 47
+                                       \times 2/3 {
+                                               \square f''16 % 48
+                                               \square f''16 * 1/2 % 49
+                                       }
+                                       \times 2/3 {
+                                               \square f''16 * 1/4 % 50
+                                               \square f''16 * 1/4 % 51
+                                               \square f''16 * 1/4 % 52
+                                               \square f''16 * 1/4 % 53
+                                               \square f''16 * 1/4 % 54
+                                               \square f''16 * 1/4 % 55
+                                       }
+                               }
+                               
+                               % measure 7
+                               s8 % 56
+                               \square g''16 * 2/1 % 57
+                               \square g''16 % 58
+                               \square g''16 % 59
+                               \times 8/9 {
+                                       s16 % 60
+                                       f''16 * 1/4 % 61
+                                       f''16 * 1/4 % 62
+                                       f''16 * 1/4 % 63
+                                       f''16 * 1/4 % 64
+                                       f''16 * 1/4 % 65
+                               }
+                               
+                               % measure 8
+                               \times 4/5 {
+                                       \times 4/7 {
+                                               s4 % 66
+                                               \triangle a''16 % 67
+                                               \triangle a''16 % 68
+                                               \triangle a''16 % 69
+                                       }
+                                       s8 % 70
+                                       \triangle a''16 * 1/2 % 71
+                                       \triangle a''16 * 1/2 % 72
+                                       \triangle a''16 * 1/2 % 73
+                                       \triangle a''16 * 1/2 % 74
+                                       \triangle a''16 * 1/2 % 75
+                                       \triangle g''16 * 1/2 % 76
+                                       \triangle g''16 * 1/2 % 77
+                                       \triangle g''16 * 1/2 % 78
+                               }
+                               
+                       }
+                       
+                       \new Voice \with {
+                               \remove Forbid_line_break_engraver
+                               \override Stem #'transparent = ##t
+                               \override Rest #'transparent = ##t
+                               \override Rest #'staff-position = #-0.5
+                               \override Dots #'transparent = ##t
+                               \override Beam #'transparent = ##t
+                               \override TupletBracket #'transparent = ##t
+                               \override TupletNumber #'transparent = ##t
+                       } {
+                               
+                               % measure 6
+                               \fraction \times 5/3 {
+                                       \blackdiamond f'128 [ % 40
+                                       \blackdiamond f'128 % 41
+                                       \blackdiamond f'128 % 42
+                                       \blackdiamond f'128 % 43
+                                       \blackdiamond f'128 % 44
+                                       \blackdiamond f'128 % 45
+                                       \blackdiamond f'128 % 46
+                                       \blackdiamond f'128 ] % 47
+                                       \times 2/3 {
+                                               \blackdiamond f'16 % 48
+                                               \blackdiamond f'32 % 49
+                                       }
+                                       \times 2/3 {
+                                               \blackdiamond f'64 % 50
+                                               \blackdiamond f'64 % 51
+                                               \blackdiamond f'64 % 52
+                                               \blackdiamond f'64 % 53
+                                               \blackdiamond f'64 % 54
+                                               \blackdiamond f'64 % 55
+                                       }
+                               }
+                               
+                               % measure 7
+                               s8 % 56
+                               \harmonic a'8 \glissando % 57
+                               \harmonic a'16 \glissando % 58
+                               \blackdiamond a'16 % 59
+                               \times 8/9 {
+                                       s16 % 60
+                                       \harmonic g'64 \glissando % 61
+                                       \harmonic g'64 \glissando % 62
+                                       \harmonic g'64 \glissando % 63
+                                       \harmonic g'64 \glissando % 64
+                                       \blackdiamond g'64 % 65
+                               }
+                               
+                               % measure 8
+                               \times 4/5 {
+                                       \times 4/7 {
+                                               s4 % 66
+                                               \blackdiamond f'16 % 67
+                                               \blackdiamond f'16 % 68
+                                               \blackdiamond f'16 % 69
+                                       }
+                                       s8 % 70
+                                       \blackdiamond f'32 % 71
+                                       \blackdiamond f'32 % 72
+                                       \blackdiamond f'32 % 73
+                                       \blackdiamond f'32 % 74
+                                       \blackdiamond f'32 % 75
+                                       \harmonic e'32 \glissando % 76
+                                       \harmonic e'32 \glissando % 77
+                                       \blackdiamond e'32 % 78
+                               }
+                               
+                       }
+                       
+                       \new Voice \with {
+                               \remove Forbid_line_break_engraver
+                               \override Stem #'direction = #down
+                               \override Stem #'font-size = #-3
+                               \override Stem #'stroke-style = #"grace" 
+                               \override Rest #'transparent = ##t
+                               \override NoteHead #'no-ledgers = ##t
+                               \override Dots #'transparent = ##t
+                               \override TupletBracket #'transparent = ##t
+                               \override TupletNumber #'transparent = ##t
+                       } {
+                               
+                               % measure 6
+                               \fraction \times 5/3 {
+                                       s128 % 40
+                                       s128 % 41
+                                       s128 % 42
+                                       s128 % 43
+                                       s128 % 44
+                                       s128 % 45
+                                       s128 % 46
+                                       s128 % 47
+                                       \times 2/3 {
+                                               \semicircle a16 % 48
+                                               \semicircle a16 * 1/2 % 49
+                                       }
+                                       \times 2/3 {
+                                               \semicircle a16 * 1/4 % 50
+                                               \semicircle a16 * 1/4 % 51
+                                               \semicircle a16 * 1/4 % 52
+                                               \semicircle a16 * 1/4 % 53
+                                               \semicircle a16 * 1/4 % 54
+                                               \semicircle a16 * 1/4 % 55
+                                       }
+                               }
+                               
+                               % measure 7
+                               s8 % 56
+                               s8 % 57
+                               s16 % 58
+                               \triangle a16 % 59
+                               \times 8/9 {
+                                       s16 % 60
+                                       s64 % 61
+                                       s64 % 62
+                                       s64 % 63
+                                       s64 % 64
+                                       \triangle a16 * 1/4 % 65
+                               }
+                               
+                               % measure 8
+                               \times 4/5 {
+                                       \times 4/7 {
+                                               s4 % 66
+                                               \semicircle a16 % 67
+                                               \semicircle a16 % 68
+                                               \semicircle a16 % 69
+                                       }
+                                       s8 % 70
+                                       \semicircle a16 * 1/2 % 71
+                                       \semicircle a16 * 1/2 % 72
+                                       \semicircle a16 * 1/2 % 73
+                                       \semicircle a16 * 1/2 % 74
+                                       \semicircle a16 * 1/2 % 75
+                                       s32 % 76
+                                       s32 % 77
+                                       \semicircle a16 * 1/2 % 78
+                               }
+                               
+                       }
+                       
+                       \new Voice \with {
+                               \remove Forbid_line_break_engraver
+                               \override Stem #'direction = #down
+                               \override NoteHead #'transparent = ##t
+                               \override NoteHead #'no-ledgers = ##t
+                               \override Rest #'staff-position = #-18
+                               \override Stem #'length = #10
+                               \override Beam #'positions = #'(-13 . -13)
+                               \override DynamicLineSpanner #'staff-padding = #18
+                               \override TextSpanner #'edge-text = #(cons (markup #:italic "covered") "")
+                               \override TextSpanner #'dash-period = #1
+                               \override TextSpanner #'dash-fraction = #0.2
+                               \override TextSpanner #'edge-height = #'(0 . 1.25)
+                               \override TextSpanner #'bound-padding = #0.5
+                               \override TextSpanner #'staff-padding = #4
+                       } {
+                               
+                               % measure 6
+                               \fraction \times 5/3 {
+                                       \beam #0 #5 g,128 \sffp \< [ % 40
+                                       \beam #5 #5 g,128 % 41
+                                       \beam #5 #5 g,128 % 42
+                                       \beam #5 #5 g,128 % 43
+                                       \beam #5 #5 g,128 % 44
+                                       \beam #5 #5 g,128 % 45
+                                       \beam #5 #5 g,128 % 46
+                                       \beam #5 #1 g,128 % 47
+                                       \times 2/3 {
+                                               \beam #1 #2 g,16 % 48
+                                               \beam #3 #1 g,32 \fX % 49
+                                       }
+                                       \times 2/3 {
+                                               \beam #1 #4 g,64 \sffp \< % 50
+                                               \beam #4 #4 g,64 % 51
+                                               \beam #4 #4 g,64 % 52
+                                               \beam #4 #4 g,64 % 53
+                                               \beam #4 #4 g,64 % 54
+                                               \beam #4 #0 g,64 \fX ] % 55
+                                       }
+                               }
+                               
+                               % measure 7
+                               r8 % 56
+                               g,8 \sf \< [ % 57
+                               g,16 % 58
+                               \beam #2 #0 g,16 \ffX ] % 59
+                               \times 8/9 {
+                                       r16 % 60
+                                       \beam #4 #4 g,64 \sfp \< [ % 61
+                                       \beam #4 #4 g,64 % 62
+                                       \beam #4 #4 g,64 % 63
+                                       \beam #4 #4 g,64 % 64
+                                       \beam #4 #0 g,64 \fX ] % 65
+                               }
+                               
+                               % measure 8
+                               \times 4/5 {
+                                       \times 4/7 {
+                                               r4 % 66
+                                               \beam #2 #2 g,16 \fX [ % 67
+                                               \beam #2 #2 g,16 \fX % 68
+                                               \beam #2 #0 g,16 \fX ] % 69
+                                       }
+                                       r8 % 70
+                                       \beam #3 #3 g,32 \fX [ % 71
+                                       \beam #3 #3 g,32 \fX % 72
+                                       \beam #3 #3 g,32 \fX % 73
+                                       \beam #3 #3 g,32 \fX % 74
+                                       \beam #3 #3 g,32 \fX % 75
+                                       \beam #3 #3 g,32 \sf \< % 76
+                                       \beam #3 #3 g,32 % 77
+                                       \beam #3 #0 g,32 \ffX ] % 78
+                               }
+                               
+                       }
+               >>
+       >>
+>>
index 73f42ecf83e5351fa1248f695eb62180d46fe219..b5cdc8492d605c552292e3c1636f26863fbdfc16 100644 (file)
@@ -21,8 +21,8 @@
     c \bar ":|:" \mark \markup {  \simple #":|:" }
     c \bar "|." \mark \markup {  \simple #"|." }
     c \bar ":" \mark \markup {  \simple #":" }
-
-    c c c
+    c c c \bar "dashed" \mark \markup { \simple #"dashed" }
+    c c c c
     \bar "||:" \mark \markup { \tiny \typewriter "unbroken" \simple
 #"||:" }
     c c c c
diff --git a/input/no-notation/GNUmakefile b/input/no-notation/GNUmakefile
deleted file mode 100644 (file)
index daedbb1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-depth = ../..
-
-EXTRA_DIST_FILES=README
-LOCALSTEPMAKE_TEMPLATES=ly mutopia
-
-include $(depth)/make/stepmake.make
-
-
diff --git a/input/no-notation/README b/input/no-notation/README
deleted file mode 100644 (file)
index d162aad..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-These examples test various non-typesetting things. Since they 
-do not generate output, they are not in test/ or regression/
-
-Some (notably parse*.ly) are just error/warning generation tests
-and should remain here.
-
-Some (notably midi-*.ly) test midi output, which does not usually
-get tested in ../regression files.
-
diff --git a/input/no-notation/bar-check.ly b/input/no-notation/bar-check.ly
deleted file mode 100644 (file)
index e9a714e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-\version "2.10.0"
-
-\header {
-
-texidoc = "skipTypesetting doesn't affect bar checks."
-
-}
-
-\score {  {
-       \set Score.skipTypesetting = ##t
-       c4 c4
-       |
-       c4 c4 }}
diff --git a/input/no-notation/beam-warn.ly b/input/no-notation/beam-warn.ly
deleted file mode 100644 (file)
index 3a6586d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-\version "2.10.0"
-
-\header        {
-
-texidoc = "The first duration following a beam-open request is checked if it is short enough."
-
-}
-
-\score {
-   { [c4 c] }
-}
diff --git a/input/no-notation/die-staff.ly b/input/no-notation/die-staff.ly
deleted file mode 100644 (file)
index 4f94b3b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-\version "2.10.0"
-
-\header  {
-texidoc = "a staff should really die, if no one's referencing it."
-}
-\score {
- {
-    \new Staff =  "q" {
-       { a' b' c' d' }
-    }
-
-    \break
-
-    \context PianoStaff <<
-      \new Staff =  "i" {
-         { a' b' c' d' }
-      }
-      \new Staff =  "ii" {
-         { \clef "bass" a b c d }
-      }
-    >>
-  }
-}
diff --git a/input/no-notation/display-lily-tests.ly b/input/no-notation/display-lily-tests.ly
deleted file mode 100644 (file)
index 014f63c..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-\version "2.10.0"
-
-#(use-modules (srfi srfi-13)
-              (ice-9 format))
-
-%%%
-%%% Testing utilities
-%%%
-
-#(define (parse-lily-and-compute-lily-string chr port)
-  (let ((lily-string (call-with-output-string
-                      (lambda (out)
-                        (do ((c (read-char port) (read-char port)))
-                            ((and (char=? c #\#)
-                                  (char=? (peek-char port) #\]))
-                             (read-char port))
-                          (display c out))))))
-    `(let* ((parser-clone (ly:clone-parser parser))
-            (input-str (string-trim-both ,lily-string))
-            (music (car (ly:music-property (parse-string-result input-str
-                                                                parser-clone)
-                                           'elements)))
-            (result-str (string-trim-both (music->lily-string music parser-clone))))
-       (cons input-str result-str))))
-
-#(read-hash-extend #\[ parse-lily-and-compute-lily-string) %{ ] %}
-
-#(define (lily-string->markup str)
-   (make-column-markup (string-split str #\NewLine)))
-
-#(define test-function
-  (let ((test-number 0))
-   (lambda (parser location result-info strings)
-    (let ((input (car strings))
-         (output (cdr strings)))
-     (set! test-number (1+ test-number))
-     (if (string=? input output)
-         (make-music 'SequentialMusic 'void #t)
-         (make-music 'SequentialMusic
-           'elements
-           (list (ly:parser-lookup parser 'fatText)
-                 (make-music 'EventChord
-                   'elements (list (make-music 'LineBreakEvent
-                                     'break-permission 'force)))
-                 (make-music 'EventChord
-                   'elements (list (make-music 'SkipEvent
-                                     'duration (ly:make-duration 0 0 1 1))
-                                   (make-music 'TextScriptEvent
-                                     'direction -1
-                                     'text (markup #:column
-                                            (#:simple (format #f "Test #~a " test-number)
-                                             (if (string-null? result-info) 
-                                                 (markup #:bold "BUG") 
-                                                 (markup #:simple result-info))
-                                             #:typewriter (lily-string->markup input)
-                                             #:typewriter (lily-string->markup output)))))))))))))
-    
-
-test = 
-#(define-music-function (parser location result-info strings) (string? pair?)
-   (test-function parser location result-info strings))
-
-%%%
-%%% Tests
-%%%
-\header {
-  texidoc = \markup \column { \line { \typewriter display-lily-music unit tests }
-                              \line { Real bugs (regressions) are marked as \bold BUG. }
-                              \line { Known bugs are marked as TODO. } }
-}
-
-\layout {
-  raggedright = ##t 
-  indent = 0\cm
-  \context {
-    \Staff
-    \override StaffSymbol #'line-count = #1
-    \remove "Time_signature_engraver"
-    \remove "Clef_engraver"
-  }
-  \context {
-    \Score
-    \remove "Bar_number_engraver"
-  }
-}
-
-%% Sequential music
-\test "" ##[ { { a b } { c d } } #]            % SequentialMusic
-\test "" ##[ << { a b } { c d } >> #]          % SimultaneousMusic
-\test "" ##[ << { a b } \\ { c d } >> #]       % VoiceSeparator
-
-%% Chords and Notes
-\test "" ##[ { ceses ces c cis cisis } #]      % NoteEvent
-\test "" ##[ { deses des d dis disis } #]
-\test "" ##[ { eeses ees e eis eisis } #]
-\test "" ##[ { feses fes f fis fisis } #]
-\test "" ##[ { geses ges g gis gisis } #]
-\test "" ##[ { aeses aes a ais aisis } #]
-\test "" ##[ { beses bes b bis bisis } #]
-\test "" ##[ { c,, d' } #]
-\test "" ##[ { c' d'=' } #]
-\test "" ##[ { c! c? } #]
-\test "" ##[ r1.*4/3 #]                % RestEvent
-\test "" ##[ c1\rest #]                % RestEvent
-\test "" ##[ s2..*3/4 #]               % SkipEvent
-\test "" ##[ R1.*2/3 #]                % MultiMeasureRestMusicGroup, MultiMeasureRestEvent
-\test "" ##[ \skip 2.*3/4 #]           % SkipMusic
-\test "" ##[ < c\1 e\3 >4.*3/4-. #]    % EventChord, NoteEvent, StringNumberEvent, ArticulationEvent
-
-%% tags
-\test "" ##[ { \tag #'foo { c4 d } } #]
-\test "" ##[ c-\tag #'foo -\tag #'baz -^ -. #]
-
-%% Graces
-\test "" ##[ { \grace c8 d2 } #]                       % GraceMusic
-\test "" ##[ { \appoggiatura c8 d2 } #]
-\test "" ##[ { \acciaccatura c8 d2 } #]
-\test "" ##[ { c1 \afterGrace { b,16 c } d2 } #]
-
-%% Clusters
-\test "" ##[ { \makeClusters { c4 g } } #]             % ClusterNoteEvent
-
-%% Figured bass
-\test "" ##[ \figures { < 6 > } #]                     % BassFigureEvent
-\test "" ##[ \figuremode { < 1-- 3- > < 2+ 4++ > < _! 7! > } #]
-\test "" ##[ \figuremode { < [6 > < 5] > } #]
-
-%% Lyrics
-\test "" ##[ \lyrics { a b } #]
-\test "" ##[ \lyricmode { a --  b } #]                 % HyphenEvent
-\test "" ##[ \lyricmode { a __  b } #]                 % ExtenderEvent
-\test "" ##[ \lyricmode { "a " } #]                    % LyricEvent
-\test "" ##[ \lyricsto "foo" { bla bla } #]            % LyricCombineMusic
-\test "" ##[ { { c d }
-  \addlyrics { bla bla } } #]
-
-%% Drums
-\test "" ##[ \drums { hihat } #]
-\test "" ##[ \drummode { hihat4.*3/4 } #]
-
-%% Expressive marks
-\test "" ##[ c4 ~ #]                                   % TieEvent
-\test "" ##[ c\noBeam #]                               % BeamForbidEvent
-\test "" ##[ c\1 #]                                    % StringNumberEvent
-\test "" ##[ { c:  c:1  } #]                           % TremoloEvent
-\test "" ##[ { c-^  c^^  c_^  } #]                     % ArticulationEvent
-\test "" ##[ { c-+  c^+  c_+  } #]
-\test "" ##[ { c--  c^-  c_-  } #]
-\test "" ##[ { c-|  c^|  c_|  } #]
-\test "" ##[ { c->  c^>  c_>  } #]
-\test "" ##[ { c-.  c^.  c_.  } #]
-\test "" ##[ { c-_  c^_  c__  } #]
-\test "" ##[ { c-\trill  c^\trill  c_\trill  } #]
-\test "" ##[ { c-1  c^2  c_3  } #]                     % FingerEvent
-\test "" ##[ { c-"foo"  c^"foo"  c_"foo"  } #] % TextScriptEvent
-\test "" ##[ { R1*4-"foo"  R^"foo"  R_"foo"  } #]      % MultiMeasureTextEvent
-\test "" ##[ { c4-\harmonic  c^\harmonic  c_\harmonic  } #]    % HarmonicEvent
-\test "" ##[ { c-\glissando  c^\glissando  c_\glissando  } #] % GlissandoEvent
-\test "" ##[ { c-\arpeggio  c^\arpeggio  c_\arpeggio  } #]     % ArpeggioEvent
-\test "" ##[ { c\p  c^\ff  c_\sfz  } #]                % AbsoluteDynamicEvent
-\test "" ##[ { c[  c]  c^[  c^]  c_[  c_]  } #]        % BeamEvent
-\test "" ##[ { c(  c)  c^(  c^)  c_(  c_)  } #]        % SlurEvent
-\test "" ##[ { c\<  c\!  c^\<  c^\!  c_\<  c_\!  } #]  % CrescendoEvent
-\test "" ##[ { c\>  c\!  c^\>  c^\!  c_\>  c_\!  } #]  % DecrescendoEvent
-\test "" ##[ { c\(  c\)  c^\(  c^\)  c_\(  c_\)  } #]  % PhrasingSlurEvent
-\test "" ##[ { c\sustainDown  c\sustainUp  } #] % SustainEvent
-\test "" ##[ { c\sostenutoDown  c\sostenutoUp  } #] % SostenutoEvent
-\test "" ##[ \melisma #]
-\test "" ##[ \melismaEnd #]
-\test "" ##[ { c\startTextSpan  c\stopTextSpan  } #] % TextSpanEvent
-\test "" ##[ { c\startTrillSpan  c\stopTrillSpan  } #] % TrillSpanEvent
-\test "" ##[ { c \startStaff c \stopStaff } #] % StaffSpanEvent
-\test "" ##[ { c\startGroup  c\stopGroup  c^\startGroup  c^\stopGroup  c_\startGroup  c_\stopGroup  } #] % NoteGroupingEvent
-\test "" ##[ { c\unaCorda  c\treCorde  } #] % UnaCordaEvent
-\test "" ##[ \breathe #]
-\test "" ##[ { c \[ c \] } #]                  % LigatureEvent
-\test "" ##[ \~ #]                                     % PesOrFlexaEvent
-
-\test "" ##[ \break #]
-\test "" ##[ \noBreak #]
-\test "" ##[ \pageBreak #]
-\test "" ##[ \noPageBreak #]
-\test "" ##[ \pageTurn #]
-\test "" ##[ \noPageTurn #]
-
-%% Checks
-\test "" ##[ \octave a' #]                             % RelativeOctaveCheck
-\test "" ##[ | #]                                      % BarCheck
-
-%% Marks
-\test "" ##[ \mark \default #]                 % MarkEvent
-\test "" ##[ \mark "Allegro" #]
-\test "" ##[ \tempo 4 = 120 #]                 % MetronomeChangeEvent
-
-%% key, time, clef, bar
-\test "" ##[ \key \default #]                  % KeyChangeEvent
-\test "" ##[ \key e \minor #]
-\test "" ##[ \clef "bass" #]
-\test "" ##[ \clef "french^2" #]
-\test "" ##[ \clef "alto_3" #]
-\test "" ##[ \time 2/4 #]
-\test "" ##[ #(set-time-signature 5 8 '(3 2)) #]
-\test "" ##[ \bar "|." #]
-
-%% staff switches
-\test "" ##[ \autochange { c d } #]                    % AutoChangeMusic
-\test "" ##[ { \change Staff = "up" { c d } } #]       % ContextChange
-
-%% Tuplets
-\test "" ##[ \times 2/3 { c8 d e } #]                          % TimeScaledMusic
-\test "" ##[ \times 4/6 { c16 d e f g a } #]
-%}
-%% \relative and \tranpose
-\test #"NOT A BUG" ##[ \relative c' { c b } #] % RelativeOctaveMusic
-\test #"NOT A BUG" ##[ \transpose c d { c d } #]       % TransposedMusic
-%}
-%% Repeats
-\test "" ##[ \repeat volta 2 { c d } #]                % VoltaRepeatedMusic
-\test "" ##[ \repeat unfold 2 { c d } #]               % UnfoldedRepeatedMusic
-\test "" ##[ \repeat fold 2 { c d } #]         % FoldedRepeatedMusic
-\test "" ##[ \repeat percent 2 { c d } #]              % PercentRepeatedMusic
-\test "" ##[ \repeat tremolo 4 { c16 d } #]            % TremoloRepeatedMusic
-\test "" ##[ \repeat volta 2 { c4 d } \alternative { { c d } { e f } } #] % 
-
-%% Context creation
-\test "" ##[ \new Staff { c d } #]                     % ContextSpeccedMusic
-\test "" ##[ \new Staff = "up" { c d } #]                      % ContextSpeccedMusic
-\test "" ##[ \context Staff { c d } #]
-\test "" ##[ \context Staff = "up" { c d } #]
-\test "" ##[
-\new Staff \with {
-  \consists "Timing_engraver"
-  \remove "Clef_engraver"
-} { c d } #]
-%% Context properties
-\test "" ##[ \once \set Score . skipBars = ##t #]      % PropertySet
-\test "" ##[ \set autoBeaming = ##f #]
-\test "" ##[ \unset Score . skipBars #]                % PropertyUnset
-\test "" ##[ \unset autoBeaming #]
-%% Layout properties
-\test "" ##[ \override Staff . Stem #'thickness = #4.0 #]      % OverrideProperty
-\test "" ##[ \once \override Beam #'thickness = #0.6 #]
-\test "" ##[ \revert Staff . Stem #'thickness #]       % RevertProperty
-\test "" ##[ \revert Beam #'thickness #]
-
-%% \applyOutput
-\test "" ##[ \applyOutput #'Foo #(lambda (arg) (list)) #]
-%% \applyContext
-\test "" ##[ \applyContext #(lambda (arg) (list)) #]
-
-%% \partial
-\test "" ##[ \partial 2 #]
-\test "" ##[ \partial 8. #]
-\test #"TODO? exotic durations in \\partial" ##[ \partial 4*2/3 #]
-
-%% \partcombine
-\test "" ##[ \partcombine { c e }
-{ d f } #]                                             % PartCombineMusic UnrelativableMusic
-
-%% Cue notes
-\test "" ##[ \cueDuring #"foo" #1 { c d } #]
-\test "" ##[ \quoteDuring #"foo" { c d } #]
diff --git a/input/no-notation/dos-guile.ly b/input/no-notation/dos-guile.ly
deleted file mode 100644 (file)
index 9858a59..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-\version "2.10.0"
-
-\header{
-    
-    texidoc = "This should not hang lilypond --safe-mode."
-    
-}
-
-% DOS
-#(do () (#f))
-
-\score{
-     c''
-}
\ No newline at end of file
diff --git a/input/no-notation/dos-ps.ly b/input/no-notation/dos-ps.ly
deleted file mode 100644 (file)
index 31c0da1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-\version "2.10.0"
-
-\header{
-
-    texidoc = "This should not hang lilypond --safe-mode --no-pdf
-    --png run.
-
-}
-
-\score{
-    % DOS
-     c''-"\\embeddedps{ { 0 0 moveto } loop }"
-}
diff --git a/input/no-notation/dos-tex.ly b/input/no-notation/dos-tex.ly
deleted file mode 100644 (file)
index 859df66..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-\version "2.10.0"
-
-\header{
-    
-    texidoc = "This should not hang lilypond --safe-mode run."
-
-}
-
-\score{
-    % DOS
-     c''-"\\loop\\iftrue\\repeat"
-}
diff --git a/input/no-notation/dynamic-absolute-volume.ly b/input/no-notation/dynamic-absolute-volume.ly
deleted file mode 100644 (file)
index 8c3a24c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-\version "2.10.0"
-\header {
-    texidoc = "@cindex Dynamic Absolute Volume
-Absolute dynamics have an effect on MIDI files.
-"
-}
-
-
-\score{
-\relative c''{
-%segfault in engraver
-a1\ppp 
-a1\pp
-a\p
-a\mp
-a\mf
-a\f
-a\ff
-a\fff
-a\sf
-}
-\layout{ ragged-right = ##t }
-
-  \midi {
-    \context {
-      \Score
-      tempoWholesPerMinute = #(ly:make-moment 60 1)
-      }
-    }
-
-
-}
-
diff --git a/input/no-notation/embedded-scm.ly b/input/no-notation/embedded-scm.ly
deleted file mode 100644 (file)
index b84dfc8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-\version "2.10.0"
-\header {
-    
-    texidoc = "@cindex Embedded scm
-
-You can embed scheme functions in your scores.  While generating the
-output, ``hello world'' is printed to the console.
-"
-     % see also: --safe-mode
-}
-
-#(begin
-  (newline)
-  (display "hello world")
-  (newline))
-
-\score {
-       \relative c' { c }
-       \layout {ragged-right = ##t}
-}
-
-
diff --git a/input/no-notation/midi-drums.ly b/input/no-notation/midi-drums.ly
deleted file mode 100644 (file)
index 2b799be..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-\version "2.10.0"
-
-\version "2.10.1" 
-
-\score {
-  \new DrumStaff <<
-    \drummode {
-      bd4 sn4 bd4 sn4
-      <<
-       {\voiceOne \repeat unfold 16 hh16 }
-       \new DrumVoice { \voiceTwo bd4 sn4 bd4 sn4 }
-      >> \oneVoice
-    }
-  >>
-  \layout {}
-  \midi {}
-}
diff --git a/input/no-notation/midi-grace.ly b/input/no-notation/midi-grace.ly
deleted file mode 100644 (file)
index 108b03b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#(ly:set-option 'old-relative)
-\version "2.10.0"
-\header{ texidoc = "Tests MIDI output with grace notes. " }
-
-\score { 
-  \context Voice \relative c {
-    \new Voice = VoiceOne
-       \grace {
-  \override Stem  #'stroke-style = #"grace"
-   c8 
-  \revert Stem #'stroke-style }
- d4 d d d d
-       \grace {
-  \override Stem  #'stroke-style = #"grace"
-   e16 f e f 
-  \revert Stem #'stroke-style }
- d4 d d d d 
-       
-  }
-  \layout { }  
-  \midi { }
-}
-
diff --git a/input/no-notation/midi-lyric-barcheck.ly b/input/no-notation/midi-lyric-barcheck.ly
deleted file mode 100644 (file)
index 7c22ef1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-\version "2.10.0"
-\header {
-
-    texidoc = "Lyrics in MIDI are aligned to ties and beams:
-this examples causes no bar checks in MIDI.
-"
-
-
-    }
-\score {
-
-    <<\relative c'' \new Voice =  A {
-       \autoBeamOff
-       c8[ c] c2.
-       c1~c4 c2.
-       c4 ( d e) d
-       c1
-
-    }
-    \lyricsto "A" \lyricmode\new Lyrics { bla bla | bla bla | bla bla | bla }
-    >>
-    \layout {}
-      \midi {}
-    }
diff --git a/input/no-notation/midi-scales.ly b/input/no-notation/midi-scales.ly
deleted file mode 100644 (file)
index d6e8ed9..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-
-\version "2.10.0"
-% candidate for regression.  -gp
-\header {
-  texidoc="Converting LilyPond input to MIDI and then again back with
-  @code{midi2ly.py} is a reversible procedure in some simple cases,
-  which mean that the original @code{.ly} -file and the one converted 
-  back from the generated @code{.midi} -file do not differ.
-  Here are produced some scales.
-  
-  "
-}
-
-%{
-  This means, doing:
-
-    lilypond input/test/midi-scales.ly
-    midi2ly midi-scales.midi
-    diff -u input/test/midi-scales.ly midi-scales-midi.ly
-
-  should show no differences at all in \key commands or notes.
-
-  Therefore, do not reformat this file unless midi2ly changes.
-
-  1.7.30 reformatted, because
-  midi2ly now outpts 1 bar per line and adds bar checks and numbers.
-
-%}
-
-scales =  \relative c {
-
-  % [INSTRUMENT_NAME] bright acoustic
-  \key c \major  % sharp-major
-  c'4 d e f |
-  g a b c |
-
-  \key g \major
-  g a b c |
-  d e fis g |
-
-  \key d \major
-  d, e fis g |
-  a b cis d |
-
-  \key a \major
-  a b cis d |
-  e fis gis a |
-
-  \key e \major
-  e, fis gis a |
-  b cis dis e |
-
-  \key b \major
-  b cis dis e |
-  fis gis ais b |
-
-  \key fis \major
-  fis, gis ais b |
-  cis dis eis fis |
-
-  \key cis \major
-  cis, dis eis fis |
-  gis ais bis cis |
-
-  \key a \minor  % sharp-minor
-  a b c d |
-  e f gis a |
-
-  \key e \minor
-  e, fis g a |
-  b c dis e |
-
-  \key b \minor
-  b cis d e |
-  fis g ais b |
-
-  \key fis \minor
-  fis, gis a b |
-  cis d eis fis |
-
-  \key cis \minor
-  cis, dis e fis |
-  gis a bis cis |
-
-  \key gis \minor
-  gis ais b cis |
-  dis e fisis gis |
-
-  \key dis \minor
-  dis, eis fis gis |
-  ais b cisis dis |
-
-  \key ais \minor
-  ais bis cis dis |
-  eis fis gisis ais |
-
-  \key f \major  % flat-major
-  f, g a bes |
-  c d e f |
-
-  \key bes \major
-  bes c d ees |
-  f g a bes |
-
-  \key ees \major
-  ees,, f g aes |
-  bes c d ees |
-
-  \key aes \major
-  aes, bes c des |
-  ees f g aes |
-
-  \key des \major
-  des,, ees f ges |
-  aes bes c des |
-
-  \key ges \major
-  ges, aes bes ces |
-  des ees f ges |
-
-  \key ces \major
-  ces,, des ees fes |
-  ges aes bes ces |
-
-  \key d \minor  % flat-minor
-  d, e f g |
-  a bes cis d |
-
-  \key g \minor
-  g, a bes c |
-  d ees fis g |
-
-  \key c \minor
-  c,, d ees f |
-  g aes b c |
-
-  \key f \minor
-  f, g aes bes |
-  c des e f |
-
-  \key bes \minor
-  bes,, c des ees |
-  f ges a bes |
-
-  \key ees \minor
-  ees, f ges aes |
-  bes ces d ees |
-
-  \key aes \minor
-  aes, bes ces des |
-  ees fes g aes |
-}
-
-\score {
-  \context Voice \scales
-  \layout { }
-  \midi { }
-}
-
diff --git a/input/no-notation/midi-transposing.ly b/input/no-notation/midi-transposing.ly
deleted file mode 100644 (file)
index 3bf8b41..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#(ly:set-option 'old-relative)
-\version "2.10.0"
-
-\header { texidoc = "@cindex Transposing
-The transposing property leaves output invariant, but has effect on MIDI. "
-}
-
-\score { 
-  \context Voice \relative c {
-    % btw: this is not how transposing is done in lilypond
-       % this is a transposing performer, i.e. for midi-output only
-       \set Staff.transposing = #0 c
-       \set Staff.transposing = #2 c
-       \set Staff.transposing = #4 c
-       \set Staff.transposing = #5 c
-       \set Staff.transposing = #7 c
-       \set Staff.transposing = #9 c
-       \set Staff.transposing = #11 c
-       \set Staff.transposing = #12 c
-       
-  }
-  \layout { ragged-right = ##t } 
-  \midi { }
-}
-
diff --git a/input/no-notation/midi-tuplets.ly b/input/no-notation/midi-tuplets.ly
deleted file mode 100644 (file)
index 8169f36..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#(ly:set-option 'old-relative)
-\version "2.10.0"
-\header {
-texidoc = "
-
-Midi2ly tuplet test.
-
-@example
-  python scripts/midi2ly.py --duration-quant=32 \
-      --allow-tuplet=4*2/3 \
-      --allow-tuplet=8*2/3 \
-      --allow-tuplet=4*3/5 \
-      --allow-tuplet=8*3/5 \
-      tu.midi 
-@end example
-"
-}
-
-
-\score { 
-  \context Voice  \relative c' {
-
-    a1 a2 a2. a4 a4. a8 a8. a16 a16. a32 a32. a64
-
-    \times 2/3 { b4 b4 b4 }
-    \times 3/5 { b4 b4 b4 b4 b4 }
-
-    \times 2/3 { c8 c8 c8 }
-    \times 3/5 { c8 c8 c8 c8 c8 }
-
-  }
-  \layout { }  
-  \midi { }
-}
-
-
diff --git a/input/no-notation/midi-volume-equaliser.ly b/input/no-notation/midi-volume-equaliser.ly
deleted file mode 100644 (file)
index 73c4f70..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-#(ly:set-option 'old-relative)
-\version "2.10.0"
-\header {
-texidoc = "@cindex Midi Volume Equaliser
-The full orchestra plays a notes, where groups stop one after
-another. Use this to tune equalizer settings. "
-}
-
-#(set-global-staff-size 16)
-
-%{
-
-Override, see scm/midi.scm:
-
-#(set! instrument-equalizer-alist
-      (append 
-       '(
-        ("flute" . (0 . 0.7))
-        )
-      instrument-equalizer-alist))
-
-%}
-
-flauti =  \relative c' {
-  \set Staff.midiInstrument = #"flute"
-  \set Staff.instrumentName = #"2 Flauti"
-  \set Staff.shortInstrumentName = #"Fl."
-
-  c1\f R1*10
-}
-
-oboi =  \relative c' {
-  \set Staff.midiInstrument = #"oboe"
-  \set Staff.instrumentName = #"2 Oboi"
-  \set Staff.shortInstrumentName = #"Ob."
-
-  R1*1 c1\f R1*9
-}
-
-clarinetti =  \relative c' {
-  \set Staff.midiInstrument = #"clarinet"
-  \set Staff.instrumentName = #"Clarinetti"
-  \set Staff.shortInstrumentName = #"Cl"
-
-  R1*2 c1\f R1*8
-}
-
-fagotti =  \relative c' {
-  \set Staff.midiInstrument = #"bassoon"
-  \set Staff.instrumentName = #"2 Fagotti"
-  \set Staff.shortInstrumentName = #"Fg."
-
-  \clef bass
-  R1*3 c1\f R1*7
-}
-
-corni =  \relative c' {
-  \set Staff.midiInstrument = #"french horn"
-  \set Staff.instrumentName = #"Corni"
-  \set Staff.shortInstrumentName = #"Cor"
-
-  R1*4 c1\f R1*6
-}
-
-trombe =  \relative c' {
-  \set Staff.midiInstrument = #"trumpet"
-  \set Staff.instrumentName = #"Trombe"
-  \set Staff.shortInstrumentName = #"Tp."
-
-  \clef bass
-  R1*5 c1\f R1*5
-}
-
-timpani =  \relative c' {
-  \set Staff.midiInstrument = #"timpani"
-  \set Staff.instrumentName = #"Timpani"
-  \set Staff.shortInstrumentName = #"Timp."
-
-  R1*6 c1\f R1*4
-}
-
-violinoI =  \relative c' {
-  \set Staff.midiInstrument = #"violin"
-  \set Staff.instrumentName = #"Violino I "
-  \set Staff.shortInstrumentName = #"Vl. I "
-
-  R1*7 c1\f R1*3
-}
-
-violinoII =  \relative c' {
-  \set Staff.midiInstrument = #"violin"
-  \set Staff.instrumentName = #"Violino II "
-  \set Staff.shortInstrumentName = #"Vl. II "
-  R1*8 c1\f R1*2
-}
-
-viola =  \relative c' {
-  \set Staff.midiInstrument = #"viola"
-  \set Staff.instrumentName = #"Viola"
-  \set Staff.shortInstrumentName = #"Vla."
-
-  \clef alto
-  R1*9 c1\f R1*1
-}
-
-violoncello =  \relative c' {
-  \set Staff.midiInstrument = #"cello"
-  %\set Staff.midiInstrument = #"contrabass"
-  \set Staff.instrumentName = #"Violoncello"
-  \set Staff.shortInstrumentName = #"Vc."
-  
-  \clef bass
-  R1*10 c1\f
-}
-
-
-\score {
-  << 
-    \new StaffGroup = "legni" << 
-      \new Staff = "flauti" \flauti
-      \new Staff = "oboi" \oboi
-      \new Staff = "clarinetti" \clarinetti 
-      \new Staff = "fagotti" \fagotti 
-    >>
-    \new StaffGroup = "ottoni" <<
-      \new Staff = "corni" \corni
-      \new Staff = "trombe" \trombe
-    >>
-    \new StaffGroup = "timpani" <<
-      \new Staff = "timpani" \timpani
-     { 
-       \skip 1 
-       % Hmm: this forces a staff-bracket, that's good!
-       % However, I can't find where is decided on staff-bracket yes/no
-     }
-    >>
-    \new StaffGroup = "archi" <<
-      \new GrandStaff = "violini" <<
-        \new Staff = "violino1" \violinoI
-        \new Staff = "violino2" \violinoII
-      >>
-      \new Staff = "viola" \viola
-      \new Staff = "violoncello" \violoncello
-    >>
-  >>
-
-  \layout {
-       \layoutSixteen
-       indent=100.0\mm
-       line-width=150.0\mm
-    \context {
-      \RemoveEmptyStaffContext
-    }
-  }
-  
-  \midi {
-    \context {
-      \Score
-      tempoWholesPerMinute = #(ly:make-moment 60 1)
-      }
-    }
-
-
-}
-
-
diff --git a/input/no-notation/parse.ly b/input/no-notation/parse.ly
deleted file mode 100644 (file)
index b851323..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-\version "2.10.0"
-
-% Test parser error
-
-\score{
diff --git a/input/no-notation/parse2.ly b/input/no-notation/parse2.ly
deleted file mode 100644 (file)
index 5096c6c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-\version "2.10.0"
-
-% Test parser error
-
-foo = {
-
-
-\score{
-}
diff --git a/input/no-notation/parse3.ly b/input/no-notation/parse3.ly
deleted file mode 100644 (file)
index cdf9626..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-\version "2.10.0"
-
-% Test parser error
-
-foo = {
-
-
-\score{
-
diff --git a/input/no-notation/parse4.ly b/input/no-notation/parse4.ly
deleted file mode 100644 (file)
index cee8a6a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-\version "2.10.0"
-
-% Test parser error
-
-foo = {
-}
-
-
-\score{
-  burp
-}
-
diff --git a/input/no-notation/parse5.ly b/input/no-notation/parse5.ly
deleted file mode 100644 (file)
index 4b9756e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-\version "2.10.0"
-%If you specify two different key sigs at one point, a
-%warning is printed.
-
-\score { 
-\context Voice <<
- { \key cis \major cis4 \key bes \major bes4 }
- { \key cis \major fis4 \key es \major g4 }  
->>
-}
-
diff --git a/input/no-notation/recording.ly b/input/no-notation/recording.ly
deleted file mode 100644 (file)
index 39ea07d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-\version "2.10.0"
-\header {
-
-texidoc = "The @code{Recording_group_engraver} will record events
-synchronized in time, collecting them in a list.  This file also shows
-how to skip the rendering and outputting step of the process, using
-@code{ly:run-translator}."
-
-}
-
-theMusic = \context Staff  { c4 d8-. }
-
-#(define (notice-the-events context lst)
-  (map (lambda (x) (display x) (newline))  lst))
-
-listener = \layout {
- \context {
-   \Voice
-   \type "Recording_group_engraver"
-   recordEventSequence = #notice-the-events
- }
-}
-
-#(ly:run-translator theMusic listener)
diff --git a/input/no-notation/safe-guile.ly b/input/no-notation/safe-guile.ly
deleted file mode 100644 (file)
index eeaf1f2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-\version "2.10.0"
-
-\header{
-    
-    texidoc = "This should not survive lilypond --safe-mode, and
-    certainly not write /tmp/safe-guile.scm"
-    
-}
-
-#(write "hallo" (open-file "/tmp/safe-guile.scm" "w"))
-
-\score{
-     c''
-}
\ No newline at end of file
diff --git a/input/no-notation/safe-include.ly b/input/no-notation/safe-include.ly
deleted file mode 100644 (file)
index aa26b22..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-\version "2.10.0"
-
-\header{
-    
-    texidoc = "This should not survive lilypond --safe-mode"
-    
-}
-
-\include "safe-ps.ly"
-
-\score{
-     c''
-}
\ No newline at end of file
diff --git a/input/no-notation/safe-ps.ly b/input/no-notation/safe-ps.ly
deleted file mode 100644 (file)
index 8a0ccca..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-\version "2.10.0"
-
-\header{
-    texidoc = "This should not survive lilypond --safe-mode
-    --no-pdf --png run, and certainly not write /tmp/safe-ps.ps"
-}
-
-\score{
-     c''-"\\embeddedps{ (/tmp/safe-ps.ps) (w) file (hallo) writestring }"
-}
diff --git a/input/no-notation/safe-tex.ly b/input/no-notation/safe-tex.ly
deleted file mode 100644 (file)
index 516146e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-\version "2.10.0"
-
-\header{
-    
-    texidoc = "This should not survive lilypond --safe-mode run, and
-    certainly not write /tmp/safe-tex.tex"
-
-    % beware
-    % openout_any=y lilypond --keep --safe-mode -S latexoptions=']{article}
-    % \let\nofiles\relax%' input/no-notation/safe-tex.ly
-
-}
-
-\score{
-     c''-"\\newwrite\\barf\\immediate\\openout\\barf=/tmp/safe-tex.tex\\immediate\\write\\barf{hallo}"
-}
diff --git a/input/no-notation/textcresc.ly b/input/no-notation/textcresc.ly
deleted file mode 100644 (file)
index 08b1fde..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-\version "2.10.0"
-\header{
-texidoc="crashes lily"
-}
-
-\score {  {
-  \context Voice {
-    \set crescendoText = "cresc."
-    \set crescendoSpanner = #'dashed-line
-    c2. r8 c8 \< \break \! c1
-  }
-}
-\layout { line-width = 5.\cm}
-}
-
diff --git a/input/no-notation/to-xml.ly b/input/no-notation/to-xml.ly
deleted file mode 100644 (file)
index 036063f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-\version "2.10.0"
-
-fooBar =  { << c''4 \\ g'4 >> }
-
-#(ly:set-option 'parse-protect #f)
-#(load-from-path "to-xml.scm")
-
-#(music-to-xml fooBar (current-output-port))
-
-\header {
-    texidoc = "@cindex To XML"
-       texidoc = #(string-append
-      "The input representation is very generic. Therefore, it
-      should not be hard to convert it to XML or a similar format:\n\n"
-
-      "@example\n"
-       (call-with-output-string
-              (lambda (p) (music-to-xml fooBar p))
-      )
-    "@end example" )
-}
-
-
-\score {
-\fooBar
-}
-
index d5f68c70dc126d3ae637e7e068965776c46702fb..0f87feae221f3dfb29111433b88447ca89781bcc 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.10.0"
+\version "2.11.11"
 
 \header
 {
@@ -14,7 +14,7 @@
    \remove "Forbid_line_break_engraver"
   \override  TupletNumber #'text = #tuplet-number::calc-fraction-text
    tupletFullLength = ##t
-   allowBeamBreak = ##t
+   \override Beam #'breakable = ##t
  }
  \context {
    \Score
diff --git a/input/regression/accidental-ancient.ly b/input/regression/accidental-ancient.ly
new file mode 100644 (file)
index 0000000..879f81c
--- /dev/null
@@ -0,0 +1,26 @@
+
+\header {
+texidoc = "@cindex Ancient Accidentals
+Accidentals are available in different ancient styles, which all
+are collected here.
+"
+}
+
+\version "2.11.6"
+
+\relative c'' {
+      \time 3/4
+      cis^\markup { \typewriter default } c ces  
+
+      \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+      cis^\markup { \typewriter hufnagel } c ces  
+
+      \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+      cis^\markup { \typewriter medicaea } c ces  
+
+      \override Staff.Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+      cis^\markup { \typewriter vaticana } c ces  
+
+      \override Staff.Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+      cis^\markup { \typewriter mensural } c ces  
+}
index d93d253c045208208d43a2eea7798ae081968469..b48c8b610d156e80901c38d5d4403c54d0c362a9 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.10.0"
+\version "2.11.5"
 \header {
 
 texidoc = "Cautionary accidentals are indicated using either
@@ -13,9 +13,9 @@ parentheses (default) or smaller accidentals.
 {
     c''4
     cis''?4
-    \override Staff.Accidental  #'cautionary-style = #'smaller
+    \once \override Staff.AccidentalCautionary #'font-size = #-2
     cis''?4
-    \override Staff.Accidental  #'cautionary-style = #'parentheses
+    \once \override Staff.AccidentalCautionary #'parenthesized = ##t
     cis''?4
 }
 
index 59a6b64b5882b393b051d667150a9f54894b35e6..fabf9546bba507053f7c0909aab94e761027f8cf 100644 (file)
@@ -2,6 +2,11 @@
   texidoc = "Accidentals are reset for clef changes."
 }
 
+\layout {
+  ragged-right = ##t
+}
+
+
 \version "2.10.0"
 \new Staff \relative c' {
     \clef treble
@@ -10,4 +15,3 @@
     <cis dis fis gis>
 }
 
-\layout {ragged-right = ##t} 
index 8ad68e34a1b73f42f007514a4fe79b5afcf40f3f..06abaedb661f8d7bf49d4c85ad1183553d3a52f8 100644 (file)
@@ -7,7 +7,7 @@ denoting Musica Ficta."
  
 }
 
-\version "2.10.0"
+\version "2.11.5"
 \paper {
   ragged-right = ##t
 }
@@ -16,10 +16,8 @@ denoting Musica Ficta."
   \time 2/4 
   \set suggestAccidentals = ##t 
   cis^> gis'-|
-  \override AccidentalSuggestion #'cautionary-style = #'parentheses
+  \override AccidentalSuggestion #'parenthesized = ##t
   cis,_"paren" gis'
-  \override AccidentalSuggestion #'cautionary-style = #'()
-  cis,_"no caut style"  gis'
 
 }
   
index 9024fbe8f460e819062819a09b4477e508ff6c36..abcbd3028165077e2555452d23d8ce2ade465238 100644 (file)
@@ -24,7 +24,7 @@ This example prints a bar-number during processing on stdout.
   
   \applyContext
   #(lambda (tr)
-    (format #t "\nWe were called in barnumber ~a.\n"
+    (ly:progress "\nWe were called in bar number ~a.\n"
      (ly:context-property tr 'currentBarNumber)))
   c1 c1
 }
diff --git a/input/regression/bar-line-dotted.ly b/input/regression/bar-line-dotted.ly
new file mode 100644 (file)
index 0000000..622ca75
--- /dev/null
@@ -0,0 +1,18 @@
+
+\header {
+  texidoc = "The dots in a dotted bar line are in spaces."
+
+}
+
+\version "2.10.0"
+
+\paper {  ragged-right = ##t }
+
+\relative \new StaffGroup <<
+  \new Staff {
+    c4 \bar ":" c }
+  \new Staff {
+    c c
+  }
+>>
+
diff --git a/input/regression/beam-beamlet-grace.ly b/input/regression/beam-beamlet-grace.ly
new file mode 100644 (file)
index 0000000..5c57a1e
--- /dev/null
@@ -0,0 +1,14 @@
+\header
+{
+  texidoc = "Beamlets in grace notes remain readable."
+}
+
+\version "2.10.2"
+\layout {
+  ragged-right = ##t
+}
+
+\relative c'
+\context Staff {
+  f1 \grace { a'8[ f16] } g1
+}
index ada5d682067267715a00a8a26e2875a9bbeba270..c2d4a2a08e4649cf06113b30524c7c0e497254eb 100644 (file)
@@ -4,10 +4,10 @@
 "
 
 }
-\version "2.10.0"
+\version "2.11.10"
 \layout { ragged-right= ##t }
 
 \relative c''  {
-  \set Score.allowBeamBreak = ##t
+  \override Score.Beam #'breakable = ##t
   \time 3/16 c16-[ d e \break f-] 
 }
diff --git a/input/regression/beam-flat-retain-direction.ly b/input/regression/beam-flat-retain-direction.ly
new file mode 100644 (file)
index 0000000..ba03734
--- /dev/null
@@ -0,0 +1,16 @@
+\header
+{
+  texidoc = "Even very flat but slanted patterns should give slanted beams. "
+}
+
+\version "2.10.7"
+\layout{
+  line-width = 15\cm
+  debug-beam-scoring = ##t
+}
+
+\relative c'''{
+  \time 2/4
+  \assertBeamQuant #'(0  . 1) #'(0 . 0) 
+  fis16[ dis b ais] cis4
+}
diff --git a/input/regression/beam-slope-stemlet.ly b/input/regression/beam-slope-stemlet.ly
new file mode 100644 (file)
index 0000000..a0657e8
--- /dev/null
@@ -0,0 +1,22 @@
+
+\header {
+
+  texidoc = "For slope calculations, stemlets are treated
+as invisible stems."
+
+}
+
+\version "2.10.7"
+
+\layout {
+  ragged-right = ##t
+  indent = #0
+}
+
+\relative c' {
+  \times 2/3 {r8[ c' g']}
+  \override Stem #'stemlet-length = #0.5
+  \times 2/3 {r8[ c, g']}
+}
+
+
index 4b55de5cd431cc42e23e62c28a8bcd6e209004bd..67a354e2f905a34e25b407fd7ea55bd8045ca7ff 100644 (file)
@@ -3,6 +3,10 @@
   texidoc  = "Bends avoid dots, but only if necessary."
 }
 
+\paper {
+  ragged-right = ##t
+}
+
 \score {
   <<
     \new Staff \relative c' {
@@ -13,7 +17,3 @@
     }
   >>
 }
-
-\paper {
-  ragged-right = ##t
-}
index 1611f965322d77d441b2e2737d3ed361e7129936..b3a88c798ee9f08150a94adc0da12b1f97945c3e 100644 (file)
@@ -7,13 +7,13 @@ Breaks can be encouraged and discouraged using @code{\\break} and
 @code{\\noBreak}."
 }
 
+\layout {
+  indent = 0.0
+  line-width = 4.0\cm
+}
 
 \relative c'' \context Voice {
   \emptyText
   c1 \noBreak c1 \noBreak \mark "nobreak" c1 \noBreak
   c1 \break \mark "break" c1 \break \mark "break" c1 
 }
-\layout {
-  indent = 0.0
-  line-width = 4.0\cm
-}
diff --git a/input/regression/chord-names-languages.ly b/input/regression/chord-names-languages.ly
new file mode 100644 (file)
index 0000000..f1ca5b4
--- /dev/null
@@ -0,0 +1,47 @@
+\version "2.10.0"
+\header  {
+    texidoc = "@cindex Chord Names German
+The english naming of chords (default) can be changed to german 
+(@code{\germanChords} replaces B and Bes to H and B), semi-german 
+(@code{\semiGermanChords} replaces B and Bes to H and Bb), italian
+(@code{\italianChords} uses Do Re Mi Fa Sol La Si), or french
+(@code{\frenchChords} replaces Re to Ré).
+
+" }
+
+scm = \chordmode {
+    e1/d c:m
+    % c/c cis/cis
+    % yeah, we get the idea. -hwn
+    
+    % cisis/cisis ces/ces ceses/ceses
+    b/b bis/bis bes/bes
+    % beses/beses
+} 
+
+
+\layout {
+    ragged-right = ##t 
+    \context {\ChordNames \consists Instrument_name_engraver }
+}
+
+<<
+    \new ChordNames {
+       \set instrumentName = #"default"
+       \scm
+    }
+    \new ChordNames {
+       \set instrumentName = #"german"
+       \germanChords \scm }
+    \new ChordNames {
+       \set instrumentName = #"semi-german"
+       \semiGermanChords \scm }
+    \new ChordNames {
+       \set instrumentName = #"italian"
+       \italianChords \scm }
+    \new ChordNames {
+       \set instrumentName = #"french"
+       \frenchChords \scm }
+
+    \context Voice { \scm }
+>>
diff --git a/input/regression/chord-tremolo-single.ly b/input/regression/chord-tremolo-single.ly
new file mode 100644 (file)
index 0000000..f4c03ab
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.10.0"
+
+\header{
+texidoc="Chord tremolos on a single note."
+}
+
+\context Voice \relative c' {
+  \time 4/4
+  \repeat "tremolo" 32 { d32 }
+
+  c4 c4 c4 c4 c4 
+}
+
diff --git a/input/regression/cluster-break.ly b/input/regression/cluster-break.ly
new file mode 100644 (file)
index 0000000..9b42b92
--- /dev/null
@@ -0,0 +1,21 @@
+
+\version "2.10.7"
+\header {
+  texidoc = "Clusters behave well across line breaks."
+}
+
+\layout { ragged-right = ##t }
+
+fragment = \relative c' {
+  \time 2/4 
+  <e d'>4
+  <g a>4 | \break
+  <e a>
+  <f a>
+}
+
+<< \new Staff \makeClusters \fragment
+   \new Staff \fragment
+>>
+
+
diff --git a/input/regression/cluster-style.ly b/input/regression/cluster-style.ly
new file mode 100644 (file)
index 0000000..9d4dfc8
--- /dev/null
@@ -0,0 +1,34 @@
+
+
+\version "2.10.7"
+\header {
+  texidoc = "Clusters behave well across line breaks."
+}
+
+\layout { ragged-right = ##t }
+
+fragment = \relative c' {
+  <e d'>4
+  <g a>4 
+  <e a>4
+}
+
+<<
+  \time 2/4 
+  \new Staff {
+    \override ClusterSpanner #'style = #'ramp
+    \makeClusters \fragment
+    r4
+    \override ClusterSpanner #'style = #'leftsided-stairs
+    \makeClusters \fragment
+    r4
+    \override ClusterSpanner #'style = #'rightsided-stairs
+    \makeClusters \fragment
+    r4
+    \override ClusterSpanner #'style = #'centered-stairs
+    \makeClusters \fragment
+    }
+  
+>>
+
+
index 289c1f8984fa5b419421a169d096aef4a6f59675..a05f2ac73d5b575bdb00b8b7d174b1f5e7b2cdc2 100644 (file)
@@ -15,7 +15,7 @@ fragment = \relative c' {
 
 <<
   \new Staff \fragment
-  \new Staff \applyMusic #notes-to-clusters \fragment
+  \new Staff \makeClusters \fragment
 >>
 
 
diff --git a/input/regression/collision-manual.ly b/input/regression/collision-manual.ly
new file mode 100644 (file)
index 0000000..002a2c1
--- /dev/null
@@ -0,0 +1,17 @@
+\header {
+
+  texidoc = "Collision resolution may be forced manually with @code{force-hshift}. "
+}
+\version "2.11.10"
+
+\paper  {
+  ragged-right = ##t
+}
+
+\relative {
+  << {  f
+       \override NoteColumn #'force-hshift = #0.1
+       f } \\
+     {  e  e }
+   >> 
+}
index 63c555519afe7b6043c7daff8749d9c6002dae6f..c2802689b378e6180c26db688ed0158274bef452 100644 (file)
@@ -8,11 +8,6 @@ Completion heads are not fooled by polyphony with a different rhythm.
 
 }
 
-\context Staff  \relative c'' << 
-  { c2. c bes2 } \\
-  { c2. a8 g4 f4. g4 f  }
->>
-
 \layout {
   \context{
     \Voice
@@ -20,3 +15,8 @@ Completion heads are not fooled by polyphony with a different rhythm.
     \consists "Completion_heads_engraver"
   }
 }
+
+\context Staff \relative c'' << 
+  { c2. c bes2 } \\
+  { c2. a8 g4 f4. g4 f  }
+>>
diff --git a/input/regression/context-die-staff.ly b/input/regression/context-die-staff.ly
new file mode 100644 (file)
index 0000000..b36ae93
--- /dev/null
@@ -0,0 +1,16 @@
+\version "2.10.0"
+
+\header  {
+texidoc = "a staff should die if there is reference to it."
+}
+\layout {
+  ragged-right = ##t
+  line-width = 2.5 \cm
+  indent = 0.0
+}
+
+{
+  << \new Staff =  "q" \new Voice ="V" c1  >>
+  %% no \break, BreakEvent causes spurious staff
+  \new RhythmicStaff = "R" \new Voice = "RV" c 
+}
diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly
new file mode 100644 (file)
index 0000000..516fbb4
--- /dev/null
@@ -0,0 +1,241 @@
+\version "2.11.6"
+#(use-modules (srfi srfi-13)
+              (ice-9 format))
+
+%%%
+%%% Testing utilities
+%%%
+
+#(define (parse-lily-and-compute-lily-string chr port)
+  (let ((lily-string (call-with-output-string
+                      (lambda (out)
+                        (do ((c (read-char port) (read-char port)))
+                            ((and (char=? c #\#)
+                                  (char=? (peek-char port) #\]))
+                             (read-char port))
+                          (display c out))))))
+    `(let* ((parser-clone (ly:parser-clone parser))
+            (input-str (string-trim-both ,lily-string))
+            (music (car (ly:music-property (parse-string-result input-str
+                                                                parser-clone)
+                                           'elements)))
+            (result-str (string-trim-both (music->lily-string music parser-clone))))
+       (cons input-str result-str))))
+
+#(read-hash-extend #\[ parse-lily-and-compute-lily-string) %{ ] %}
+
+#(define (lily-string->markup str)
+   (make-column-markup (string-split str #\NewLine)))
+
+#(define test-function
+  (let ((test-number 0))
+   (lambda (parser location result-info strings)
+    (let ((input (car strings))
+         (output (cdr strings)))
+     (set! test-number (1+ test-number))
+     (if (not (equal? input output))
+         (ly:progress "Test ~a unequal: ~a. \nin  = ~a\nout = ~a\n"
+         test-number
+         (if result-info
+             result-info "BUG")
+          input output))
+
+
+     (make-music 'SequentialMusic 'void #t)
+    
+   ))))
+         
+test = 
+#(define-music-function (parser location result-info strings) (string? pair?)
+   (test-function parser location result-info strings))
+
+%%%
+%%% Tests
+%%%
+\header {
+  texidoc = "This is a test of the display-lily-music unit. Problems are reported on the
+stderr of this run." 
+}
+
+
+%% Sequential music
+\test "" ##[ { { a b } { c d } } #]            % SequentialMusic
+\test "" ##[ << { a b } { c d } >> #]          % SimultaneousMusic
+\test "" ##[ << { a b } \\ { c d } >> #]       % VoiceSeparator
+
+%% Chords and Notes
+\test "" ##[ { ceses ces c cis cisis } #]      % NoteEvent
+\test "" ##[ { deses des d dis disis } #]
+\test "" ##[ { eeses ees e eis eisis } #]
+\test "" ##[ { feses fes f fis fisis } #]
+\test "" ##[ { geses ges g gis gisis } #]
+\test "" ##[ { aeses aes a ais aisis } #]
+\test "" ##[ { beses bes b bis bisis } #]
+\test "" ##[ { c,, d' } #]
+\test "" ##[ { c' d'=' } #]
+\test "" ##[ { c! c? } #]
+\test "" ##[ r1.*4/3 #]                % RestEvent
+\test "" ##[ c1\rest #]                % RestEvent
+\test "" ##[ s2..*3/4 #]               % SkipEvent
+\test "" ##[ R1.*2/3 #]                % MultiMeasureRestMusicGroup, MultiMeasureRestEvent
+\test "" ##[ \skip 2.*3/4 #]           % SkipMusic
+\test "" ##[ < c\1 e\3 >4.*3/4-. #]    % EventChord, NoteEvent, StringNumberEvent, ArticulationEvent
+
+%% tags
+\test "" ##[ { \tag #'foo { c4 d } } #]
+\test "" ##[ c-\tag #'foo -\tag #'baz -^ -. #]
+
+%% Graces
+\test "" ##[ { \grace c8 d2 } #]                       % GraceMusic
+\test "" ##[ { \appoggiatura c8 d2 } #]
+\test "" ##[ { \acciaccatura c8 d2 } #]
+\test "" ##[ { c1 \afterGrace { b,16 c } d2 } #]
+
+%% Clusters
+\test "" ##[ { \makeClusters { c4 g } } #]             % ClusterNoteEvent
+
+%% Figured bass
+\test "" ##[ \figures { < 6 > } #]                     % BassFigureEvent
+\test "" ##[ \figuremode { < 1-- 3- > < 2+ 4++ > < _! 7! > } #]
+\test "" ##[ \figuremode { < [6 > < 5] > } #]
+
+%% Lyrics
+\test "" ##[ \lyrics { a b } #]
+\test "" ##[ \lyricmode { a --  b } #]                 % HyphenEvent
+\test "" ##[ \lyricmode { a __  b } #]                 % ExtenderEvent
+\test "" ##[ \lyricmode { "a " } #]                    % LyricEvent
+\test "" ##[ \lyricsto "foo" { bla bla } #]            % LyricCombineMusic
+\test "" ##[ { { c d }
+  \addlyrics { bla bla } } #]
+
+%% Drums
+\test "" ##[ \drums { hihat } #]
+\test "" ##[ \drummode { hihat4.*3/4 } #]
+
+%% Expressive marks
+\test "" ##[ c4 ~ #]                                   % TieEvent
+\test "" ##[ c\noBeam #]                               % BeamForbidEvent
+\test "" ##[ c\1 #]                                    % StringNumberEvent
+\test "" ##[ { c:  c:1  } #]                           % TremoloEvent
+\test "" ##[ { c-^  c^^  c_^  } #]                     % ArticulationEvent
+\test "" ##[ { c-+  c^+  c_+  } #]
+\test "" ##[ { c--  c^-  c_-  } #]
+\test "" ##[ { c-|  c^|  c_|  } #]
+\test "" ##[ { c->  c^>  c_>  } #]
+\test "" ##[ { c-.  c^.  c_.  } #]
+\test "" ##[ { c-_  c^_  c__  } #]
+\test "" ##[ { c-\trill  c^\trill  c_\trill  } #]
+\test "" ##[ { c-1  c^2  c_3  } #]                     % FingerEvent
+\test "" ##[ { c-"foo"  c^"foo"  c_"foo"  } #] % TextScriptEvent
+\test "" ##[ { R1*4-"foo"  R^"foo"  R_"foo"  } #]      % MultiMeasureTextEvent
+\test "" ##[ { c4-\harmonic  c^\harmonic  c_\harmonic  } #]    % HarmonicEvent
+\test "" ##[ { c-\glissando  c^\glissando  c_\glissando  } #] % GlissandoEvent
+\test "" ##[ { c-\arpeggio  c^\arpeggio  c_\arpeggio  } #]     % ArpeggioEvent
+\test "" ##[ { c\p  c^\ff  c_\sfz  } #]                % AbsoluteDynamicEvent
+\test "" ##[ { c[  c]  c^[  c^]  c_[  c_]  } #]        % BeamEvent
+\test "" ##[ { c(  c)  c^(  c^)  c_(  c_)  } #]        % SlurEvent
+\test "" ##[ { c\<  c\!  c^\<  c^\!  c_\<  c_\!  } #]  % CrescendoEvent
+\test "" ##[ { c\>  c\!  c^\>  c^\!  c_\>  c_\!  } #]  % DecrescendoEvent
+\test "" ##[ { c\(  c\)  c^\(  c^\)  c_\(  c_\)  } #]  % PhrasingSlurEvent
+\test "" ##[ { c\sustainDown  c\sustainUp  } #] % SustainEvent
+\test "" ##[ { c\sostenutoDown  c\sostenutoUp  } #] % SostenutoEvent
+\test "" ##[ \melisma #]
+\test "" ##[ \melismaEnd #]
+\test "" ##[ { c\startTextSpan  c\stopTextSpan  } #] % TextSpanEvent
+\test "" ##[ { c\startTrillSpan  c\stopTrillSpan  } #] % TrillSpanEvent
+\test "" ##[ { c \startStaff c \stopStaff } #] % StaffSpanEvent
+\test "" ##[ { c\startGroup  c\stopGroup  c^\startGroup  c^\stopGroup  c_\startGroup  c_\stopGroup  } #] % NoteGroupingEvent
+\test "" ##[ { c\unaCorda  c\treCorde  } #] % UnaCordaEvent
+\test "" ##[ \breathe #]
+\test "" ##[ { c \[ c \] } #]                  % LigatureEvent
+\test "" ##[ \~ #]                                     % PesOrFlexaEvent
+
+\test "" ##[ \break #]
+\test "" ##[ \noBreak #]
+\test "" ##[ \pageBreak #]
+\test "" ##[ \noPageBreak #]
+\test "" ##[ \pageTurn #]
+\test "" ##[ \noPageTurn #]
+
+%% Checks
+\test "" ##[ \octave a' #]                             % RelativeOctaveCheck
+\test "" ##[ | #]                                      % BarCheck
+
+%% Marks
+\test "" ##[ \mark \default #]                 % MarkEvent
+\test "" ##[ \mark "Allegro" #]
+\test "" ##[ \tempo 4 = 120 #]                 % MetronomeChangeEvent
+
+%% key, time, clef, bar
+\test "" ##[ \key \default #]                  % KeyChangeEvent
+\test "" ##[ \key e \minor #]
+\test "" ##[ \clef "bass" #]
+\test "" ##[ \clef "french^2" #]
+\test "" ##[ \clef "alto_3" #]
+\test "" ##[ \time 2/4 #]
+\test "" ##[ #(set-time-signature 5 8 '(3 2)) #]
+\test "" ##[ \bar "|." #]
+
+%% staff switches
+\test "" ##[ \autochange { c d } #]                    % AutoChangeMusic
+\test "" ##[ { \change Staff = "up" { c d } } #]       % ContextChange
+
+%% Tuplets
+\test "" ##[ \times 2/3 { c8 d e } #]                          % TimeScaledMusic
+\test "" ##[ \times 4/6 { c16 d e f g a } #]
+%}
+%% \relative and \tranpose
+\test #"NOT A BUG" ##[ \relative c' { c b } #] % RelativeOctaveMusic
+\test #"NOT A BUG" ##[ \transpose c d { c d } #]       % TransposedMusic
+%}
+%% Repeats
+\test "" ##[ \repeat volta 2 { c d } #]                % VoltaRepeatedMusic
+\test "" ##[ \repeat unfold 2 { c d } #]               % UnfoldedRepeatedMusic
+\test "" ##[ \repeat fold 2 { c d } #]         % FoldedRepeatedMusic
+\test "" ##[ \repeat percent 2 { c d } #]              % PercentRepeatedMusic
+\test "" ##[ \repeat tremolo 4 { c16 d } #]            % TremoloRepeatedMusic
+\test "" ##[ \repeat volta 2 { c4 d } \alternative { { c d } { e f } } #] % 
+
+%% Context creation
+\test "" ##[ \new Staff { c d } #]                     % ContextSpeccedMusic
+\test "" ##[ \new Staff = "up" { c d } #]                      % ContextSpeccedMusic
+\test "" ##[ \context Staff { c d } #]
+\test "" ##[ \context Staff = "up" { c d } #]
+\test "" ##[
+\new Staff \with {
+  \consists "Timing_engraver"
+  \remove "Clef_engraver"
+} { c d } #]
+%% Context properties
+\test "" ##[ \once \set Score . skipBars = ##t #]      % PropertySet
+\test "" ##[ \set autoBeaming = ##f #]
+\test "" ##[ \unset Score . skipBars #]                % PropertyUnset
+\test "" ##[ \unset autoBeaming #]
+%% Layout properties
+\test "" ##[ \override Staff . Stem #'thickness = #4.0 #]      % OverrideProperty
+\test "" ##[ \once \override Beam #'thickness = #0.6 #]
+\test "" ##[ \revert Staff . Stem #'thickness #]       % RevertProperty
+\test "" ##[ \revert Beam #'thickness #]
+
+%% \applyOutput
+\test "" ##[ \applyOutput #'Foo #(lambda (arg) (list)) #]
+%% \applyContext
+\test "" ##[ \applyContext #(lambda (arg) (list)) #]
+
+%% \partial
+\test "" ##[ \partial 2 #]
+\test "" ##[ \partial 8. #]
+\test #"TODO? exotic durations in \\partial" ##[ \partial 4*2/3 #]
+
+%% \partcombine
+\test "" ##[ \partcombine { c e }
+{ d f } #]                                             % PartCombineMusic UnrelativableMusic
+
+%% Cue notes
+\test "" ##[ \cueDuring #"foo" #1 { c d } #]
+\test "" ##[ \quoteDuring #"foo" { c d } #]
+
+
+%% end test.
+
+#(read-hash-extend #\[ #f) %{ ] %}
index fac525db2421b37ab06d5eff3d615e881f108b2f..439e6bd01b1b6fd561e60b7d530b6c7edef70315 100644 (file)
@@ -4,11 +4,12 @@
 texidoc = "Broken crescendi should be open on one side."
 }
 
-\relative c'' { 
-  c1 \< \break c1\!  \> \break c1\!
-}
 \layout {
   line-width = 4.\cm
 }
 
 
+\relative c'' { 
+  c1 \< \break c1\!  \> \break c1\!
+}
+
diff --git a/input/regression/figured-bass-alteration.ly b/input/regression/figured-bass-alteration.ly
new file mode 100644 (file)
index 0000000..bc910f7
--- /dev/null
@@ -0,0 +1,22 @@
+
+\header {
+  texidoc = "Bass figures can carry alterations."
+}
+
+\version "2.11.10"
+
+\layout {
+  ragged-right= ##t
+}
+
+\relative c'' {
+  \new Voice 
+  <<
+    { c4 c c }
+    \figures
+    {
+      <3- > <3! > <3+ >
+    }
+  >>
+}
+    
diff --git a/input/regression/finger-chords-accidental.ly b/input/regression/finger-chords-accidental.ly
new file mode 100644 (file)
index 0000000..3ae06a4
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.10.8"
+\header
+{
+  texidoc = "Scripts left of a chord avoid accidentals."
+}
+
+\paper {
+  ragged-right = ##t
+}
+
+{
+  r4 
+  \set fingeringOrientations = #'(left)
+  <cis''-3 >
+}
diff --git a/input/regression/general-scheme-bindings.ly b/input/regression/general-scheme-bindings.ly
new file mode 100644 (file)
index 0000000..ad625ff
--- /dev/null
@@ -0,0 +1,18 @@
+\header {
+
+  texidoc = "This file tests various Scheme utiliity functions." 
+
+}
+
+
+\version "2.11.8"
+
+%% todo : use macro, to show the statement tested. 
+#(ly:progress "~a\n" (ly:expand-environment "${HOME} $HOME $$ "))
+#(ly:font-config-display-fonts)
+
+#(ly:progress "~A\n" (ly:duration->string (ly:make-duration 2 2 3 7)))
+#(ly:parser-parse-string (ly:parser-clone parser) "foo  = #1 #(ly:progress \"hello there\n\")")
+
+#(ly:progress "~a\n" (ly:truncate-list! (iota 5) 10))
+#(ly:progress "~a\n" (ly:truncate-list! (iota 10) 5))
diff --git a/input/regression/glissando-no-break.ly b/input/regression/glissando-no-break.ly
new file mode 100644 (file)
index 0000000..a30f4f5
--- /dev/null
@@ -0,0 +1,17 @@
+\header {
+
+  texidoc = "Glissandi are not broken. Here a @code{\break} is ineffective.
+Use @code{breakable} grob property to override."
+
+}
+\version "2.11.10"
+\layout {
+  ragged-right = ##t
+}
+\relative c' {
+  c1 
+  c1\glissando
+  \break
+  d'1
+  d1
+} 
index 407ad0b9cb7fada29ae2f5341c608ecb3379f5f9..7629873befa5dbbbe6bcee90f7550e37677dcf9a 100644 (file)
@@ -12,10 +12,17 @@ The engraver does no time-keeping, so it involves some trickery to get
 }
 
 
+\layout{
+  line-width = 50.\mm
+  indent = 0
+}
+
 \new Staff \relative c''{
-                               % gliss non gliss and 
+  \override Glissando #'breakable = ##t
+  
+  %% gliss non gliss and 
   c4 \glissando d e \glissando f \glissando \break
-                               % consecutive 
+  %% consecutive 
   c \glissando d, \glissando e'
   << { \stemUp e8 \glissando g8 }
      \context Voice = VB {\stemDown \repeat unfold 4 d16 } >>
@@ -23,9 +30,4 @@ The engraver does no time-keeping, so it involves some trickery to get
   c4 \glissando c,, \glissando c' \glissando d
 }
 
-\layout{
-  line-width = 50.\mm
-  indent = 0
-}
-
 
diff --git a/input/regression/grace-partial.ly b/input/regression/grace-partial.ly
new file mode 100644 (file)
index 0000000..56ed37e
--- /dev/null
@@ -0,0 +1,13 @@
+
+\version "2.10.4"
+
+\header {
+
+  texidoc = "A @code{\\partial} may be combined with a
+  @code{\\grace}."
+
+}
+
+\score {
+  { \partial 4 \grace b8 b4 b1 }
+}
diff --git a/input/regression/hairpin-to-rest.ly b/input/regression/hairpin-to-rest.ly
new file mode 100644 (file)
index 0000000..3ba757d
--- /dev/null
@@ -0,0 +1,11 @@
+\version "2.10.8"
+\header {
+  texidoc = "Hairpins end at the left edge of a rest."
+}
+
+\layout{
+  ragged-right=##t
+}
+\relative c'' {
+  c2\p\> r4\!
+}
diff --git a/input/regression/hara-kiri-stanza-number.ly b/input/regression/hara-kiri-stanza-number.ly
new file mode 100644 (file)
index 0000000..a0a9742
--- /dev/null
@@ -0,0 +1,24 @@
+
+\header {
+
+  texidoc = "stanza numbers remain, even on otherwise empty lyrics
+lines."
+         
+}
+
+\paper {
+  indent = #0.0
+  ragged-right = ##T
+}
+
+\version "2.10.11"
+
+<<
+  \new Voice = melody \relative c'{
+    r2 r4 r8 e8 |\break
+    e16 e8. 
+  }
+  \lyricsto "melody" \lyrics { 
+    \set stanza = "Verse 2."
+    _ bla bla  }
+>>
diff --git a/input/regression/identifiers.ly b/input/regression/identifiers.ly
new file mode 100644 (file)
index 0000000..682a156
--- /dev/null
@@ -0,0 +1,31 @@
+
+\header {
+  texidoc = "test identifiers."
+  }
+\version "2.10.8"
+
+num = #3
+mus = { c'4 }
+paperId = \paper { line-width = 5.0 \cm }
+layoutId = \layout { ragged-right = ##t }
+perfId = \midi {}
+markupId = \markup { hoi }
+stringId = "title"
+
+% headers not allowed  as Id's
+
+scoreId = \score {
+  \repeat unfold \num \mus
+  \layout { \layoutId }
+  \midi { \perfId }
+  }
+
+bookId = \book {
+  \score { \scoreId }
+  \paper { \paperId }
+  }
+
+
+\book { \bookId }
+
+
index abc315f7f3dec38a78270e0659cb916b316307ab..a418315deedf191750c843152a0be23d35e7d4e9 100644 (file)
@@ -6,15 +6,15 @@
   pedal line spanners."
 }
 
+\paper {
+  line-width = 3\cm
+  indent = 0\cm
+}
+
 \relative {
   \set Staff.shortInstrumentName = "foo"
   f1 | f1 | f1 |
   f1\< | f1 | f1\! |
 }
 
-\paper {
-  line-width = 3\cm
-  indent = 0\cm
-}
-
 % EOF
index 000f090827a090935102d8d0fef8f23305daf8c2..8d68529ea1a232cfe803d1691492c18dacd32a3d 100644 (file)
   \clef violin
   \key cis \major cis1  \key ces \major ces
   \clef soprano
-  \key cis \major cis \key ces \major ces
+  \key cis \major cis \key ces \major ces \break
   \clef mezzosoprano
   \key cis \major cis \key ces \major ces
   \clef alto
-  \key cis \major cis \key ces \major ces
+  \key cis \major cis \break \key ces \major ces 
   \clef tenor
-  \key cis \major cis \key ces \major ces
+  \key cis \major cis \key ces \major ces \break
   \clef baritone
   \key cis \major cis \key ces \major ces
   \clef bass
diff --git a/input/regression/key-signature-cancellation-extra-natural.ly b/input/regression/key-signature-cancellation-extra-natural.ly
new file mode 100644 (file)
index 0000000..a103f4e
--- /dev/null
@@ -0,0 +1,23 @@
+\header {
+
+  texidoc = "If @code{extraNatural} is set then keys that are not
+  altered farther away (eg from sharp to double sharp) are
+  cancelled. Otherwise only keys that does not accur in the new key
+  signature are cancelled."  }
+
+
+\version "2.11.2"
+
+\paper {
+  ragged-right = ##t
+}
+{
+  \set Staff.extraNatural = ##f
+  \key fes \major r1
+  \key as \major r1_"No B-natural (#f)"
+  \set Staff.extraNatural = ##t
+  \key gis \major r1
+  \key b \major r1_"with F-natural (#t)"
+
+}
+
index 456bc1a6290344f6873ae5b0bfd1e03e3732fd49..cfad4a74bfd579fd63fef6a60f36581c37b26be0 100644 (file)
@@ -11,9 +11,9 @@ key signatures can be set invidually per pitch.
 }
 \relative c'
 \new Staff {
-    \set Staff.keySignature = #'(((1 .  2) . 1) ((0 . 3) . -1))
+    \set Staff.keySignature = #`(((1 .  2) . ,SHARP) ((0 . 3) . ,FLAT))
     f8 a c e
-    \set Staff.keySignature = #'(((1 .  2) . -1) ((0 . 4) . 2))
+    \set Staff.keySignature = #`(((1 .  2) . ,FLAT) ((0 . 4) . ,DOUBLE-SHARP))
     e a, g a
 }
 
index 65ba2796e8b2d743d96f597b2dd0e2a31759946e..0a071d9bd6e55d7b7ab99f28bb5479de14747749 100644 (file)
@@ -25,7 +25,7 @@ are created also on a clef change.
     \break
     \key bes \major % \major
     c2 \clef alto c2   \key d \major \clef treble c2
-    \set Staff.keySignature = #'((2 . -1)  (6 . 3) (4 . -2))
+    \set Staff.keySignature = #`((2 . ,SEMI-FLAT)  (6 . ,THREE-Q-SHARP) (4 . ,FLAT))
     e2
 }
 
diff --git a/input/regression/lyric-combine-switch-voice-2.ly b/input/regression/lyric-combine-switch-voice-2.ly
new file mode 100644 (file)
index 0000000..27f6d4f
--- /dev/null
@@ -0,0 +1,29 @@
+\header
+{
+texidoc = "switching voices halfway a lyricsto is possible."
+  }
+\version "2.10.12"
+
+<<
+  \relative \new Voice = "lahlah" {
+    c4
+    <<
+      \new Voice = "alternative" {
+        \voiceOne
+       \override NoteColumn #'force-hshift = #-3
+       a'4 
+      } 
+      { \voiceTwo
+        c,4
+       \oneVoice
+      } >>
+    c4 c 
+    
+  }
+  \new Lyrics \lyricsto "lahlah" {
+    \set associatedVoice = alternative
+    two  
+    \set associatedVoice = lahlah
+    two this
+  } 
+>>
diff --git a/input/regression/lyric-combine-switch-voice.ly b/input/regression/lyric-combine-switch-voice.ly
new file mode 100644 (file)
index 0000000..b0b6d19
--- /dev/null
@@ -0,0 +1,44 @@
+\header {
+
+  texidoc = "Switching melody to a different voice works even
+the switch occurs together with context instantiation."
+
+}
+
+\version "2.10.8"
+
+<<
+  \relative \new Voice = "lahlah" {
+    \set Staff.autoBeaming = ##f
+    c4
+    <<
+      \new Voice = "alternative" {
+        \voiceOne
+        \times 2/3 {
+         %% show associations clearly.
+          \override NoteColumn #'force-hshift = #-3
+          r8 f g
+        }
+      }
+      {
+        \voiceTwo
+        f8.[ g16]
+        \oneVoice
+      } >>
+    a8( b) c
+  }
+  \new Lyrics \lyricsto "lahlah" {
+    %% Tricky: need to set associatedVoice
+    %% one syllable too soon!
+    
+    \set associatedVoice = alternative % applies to "ran"
+    Ty --
+    ran --
+    \set associatedVoice = lahlah % applies to "sau"
+    no --
+    sau -- rus Rex
+  }
+>>
+
+
+
index c7db43946779e3a74fd105c9eba17e7e635ca67a..36aae288b5a9061de72c8fc158d917986a319c20 100644 (file)
@@ -8,6 +8,9 @@ of the melisma."
 
 }
 
+\layout {
+  ragged-right = ##t
+}
 
 << 
   \new Voice =A  {
@@ -17,7 +20,4 @@ of the melisma."
   }
   \lyricsto A \context Lyrics \lyricmode { a __ a __ ha }
 >>
-  \layout {
-    ragged-right = ##t
-  }
 
diff --git a/input/regression/lyric-extender-no-heads.ly b/input/regression/lyric-extender-no-heads.ly
new file mode 100644 (file)
index 0000000..958805a
--- /dev/null
@@ -0,0 +1,24 @@
+\header
+{
+  texidoc = "Extender engraver also notices the lack of note heads.
+Here the extender ends on the 2nd quarter note, despite the grace note
+without a lyric attached." 
+  
+}
+
+\version "2.10.7"
+
+\layout {
+  ragged-right = ##t
+}
+
+\relative c'' {
+  \time 3/4
+  d4~ d4 r4
+  \grace es8
+
+  d4
+  
+}
+\addlyrics { x __ x  }
+
index c78cd759c4087574218c4061ced48201e786c7f7..c48f7c8737a39817aa6461edb4c35b716b769432 100644 (file)
@@ -8,6 +8,17 @@ they go past the first note. "
 }
 
 
+\layout   {
+  indent = 0.0 \cm
+  line-width = 3.4 \cm
+
+  \context {
+    \Staff \remove "Time_signature_engraver"
+  }
+}
+
+
+
 <<
   \new Staff \relative c'' {
     \time 1/4 c16[ c c  c]
@@ -23,15 +34,5 @@ they go past the first note. "
     bla16 -- bla -- bla 
   }
 >>
-  \layout   {
-    indent = 0.0 \cm
-    line-width = 3.4 \cm
-
-    \context {
-      \Staff \remove "Time_signature_engraver"
-    }
-  }
-  
-
 
   
diff --git a/input/regression/lyrics-no-notes.ly b/input/regression/lyrics-no-notes.ly
new file mode 100644 (file)
index 0000000..bc870f5
--- /dev/null
@@ -0,0 +1,28 @@
+\header {
+  texidoc ="lyric syllables without note attachment are
+not centered; Centering may cause unintended effects when
+the papercolumn is very wide."
+  }
+\layout{
+  ragged-right = ##t
+}
+
+\version "2.10.7"
+<<
+  \new Staff \relative c' {
+    \key aes \major
+    \context Voice = "1" { 
+      f8 f
+      \emptyText
+      
+      f^"xxxxxxxxxxxxxxxxxxxxxxxxxx"  f
+    }
+  }
+  \new Lyrics \lyricmode {
+    \skip 8
+    \skip 8
+    x8
+    x8
+  }
+>>
diff --git a/input/regression/markup-note-dot.ly b/input/regression/markup-note-dot.ly
new file mode 100644 (file)
index 0000000..517f541
--- /dev/null
@@ -0,0 +1,20 @@
+
+\header {
+
+  texidoc = " A dotted whole note displayed via the @code{\\note}
+  command must separate the note head and the dot. The dot avoids the upflag."
+
+       }
+\paper {
+  packed = ##T
+}
+
+\version "2.10.10"
+
+
+\relative {
+  c^\markup { \note #"1." #1 }
+  c^\markup { \note #"2." #1 }
+  c^\markup { \note #"8." #1 }
+}
+
index e82b4b0ba372671647894d40f32bd592dbe10fd4..e4589d4a9bd9302a855a179c56de59de0998e752 100644 (file)
@@ -25,7 +25,7 @@ For maintenance reasons, we don't excercise the entire markup command set.
 
 
 
-\version "2.10.0"
+\version "2.11.5"
 
 {
   \fatText
@@ -39,7 +39,7 @@ For maintenance reasons, we don't excercise the entire markup command set.
     \override #'(font-encoding . fetaMusic) {
       \lookup #"noteheads-0"
     }
-    \musicglyph #"accidentals.-1"
+    \musicglyph #"accidentals.mirroredflat"
     \combine "X" "+"   
     \combine "o" "/"
     \box \column { \line { "string 1" } \line { "string 2" } }
@@ -51,7 +51,7 @@ For maintenance reasons, we don't excercise the entire markup command set.
     \dynamic sfzp
     \huge { "A" \smaller "A" \smaller \smaller "A"
            \smaller \smaller \smaller "A" }
-    \sub "alike"
+    \larger \sub "alike"
   }    
   \break
   f'1-#(markup* 
@@ -62,7 +62,7 @@ For maintenance reasons, we don't excercise the entire markup command set.
        #:hspace 2.0
        #:override '(font-encoding . fetaMusic) #:line (#:lookup "noteheads-0" 
                                                      )
-       #:musicglyph "accidentals.-1"
+       #:musicglyph "accidentals.mirroredflat"
        #:combine "X" "+"   
        #:combine "o" "/"
        #:box #:column ("string 1" "string 2")
@@ -74,5 +74,5 @@ For maintenance reasons, we don't excercise the entire markup command set.
        #:dynamic "sfzp"
        #:huge #:line ("A" #:smaller "A" #:smaller #:smaller "A" 
                       #:smaller #:smaller #:smaller "A")
-       #:sub "alike")
+       #:larger #:sub "alike")
 }
index d89f00603046edfcb99f81d3f1504befaad0cd52..cfea330422831ee7a4af3dbc2de8efb846ec5e57 100644 (file)
@@ -9,10 +9,16 @@ brackets above beats when the beats of a time signature are grouped.  "
 
 \version "2.10.0"
 
+\layout  {
+  ragged-right = ##t
+}
 
 %% TODO: should have 2/4 + 5/8 time sig style.
 
-\context Staff
+\context Staff \with {
+    \consists "Measure_grouping_engraver"
+  }
+
 \relative c' {
   #(set-time-signature 2 4) 
   c8 a'4 a8~
@@ -23,11 +29,5 @@ brackets above beats when the beats of a time signature are grouped.  "
   #(set-time-signature 5 8 '(3 2)) 
   g8 a4 g a4.->
 }
-\layout  {
-  ragged-right = ##t
-  \context { \Staff
-            \consists "Measure_grouping_engraver"
-          }
-}
 
 
diff --git a/input/regression/midi-drums.ly b/input/regression/midi-drums.ly
new file mode 100644 (file)
index 0000000..2b799be
--- /dev/null
@@ -0,0 +1,18 @@
+
+\version "2.10.0"
+
+\version "2.10.1" 
+
+\score {
+  \new DrumStaff <<
+    \drummode {
+      bd4 sn4 bd4 sn4
+      <<
+       {\voiceOne \repeat unfold 16 hh16 }
+       \new DrumVoice { \voiceTwo bd4 sn4 bd4 sn4 }
+      >> \oneVoice
+    }
+  >>
+  \layout {}
+  \midi {}
+}
diff --git a/input/regression/midi-dynamics.ly b/input/regression/midi-dynamics.ly
new file mode 100644 (file)
index 0000000..edff9c2
--- /dev/null
@@ -0,0 +1,24 @@
+\header {
+
+  texidoc = "Midi also handles crescendo and decrescendo, either
+  starting and ending from specified or unspecified sound level."
+
+}
+
+\version  "2.11.10"
+
+\score {
+  \relative {
+
+    \set midiMinimumVolume = #0.0
+    \set midiMaximumVolume = #1.0
+    c\ff c\pppp
+    c\ff\> c c c c\!\pppp
+
+    c\< c c c c\! \ff
+
+    c\> c c c \!  
+  } 
+  \midi {}
+  \layout{}
+}
diff --git a/input/regression/midi-grace.ly b/input/regression/midi-grace.ly
new file mode 100644 (file)
index 0000000..5a58f3c
--- /dev/null
@@ -0,0 +1,16 @@
+
+\header {
+
+  texidoc = "Grace notes don't intrroduce syncing problems: the last note
+off will appear at tick 768 (2 * 384)."
+  
+}
+\version "2.10.10"
+\score {
+ \relative c' {
+   c4
+   \grace { b8 }
+   d4
+ }
+ \midi { }
+}
diff --git a/input/regression/midi-lyric-barcheck.ly b/input/regression/midi-lyric-barcheck.ly
new file mode 100644 (file)
index 0000000..5c06916
--- /dev/null
@@ -0,0 +1,24 @@
+\version "2.10.0"
+\header {
+
+    texidoc = "Lyrics in MIDI are aligned to ties and beams:
+this examples causes no bar checks in MIDI.
+"
+
+
+    }
+\score {
+
+    <<\relative c'' \new Voice =  A {
+       \autoBeamOff
+       c8[ c] c2.
+       c1~c4 c2.
+       c4 ( d e) d
+       c1
+
+    }
+    \lyricsto "A" \lyrics { bla bla | bla bla | bla bla | bla }
+    >>
+    \layout {}
+      \midi {}
+    }
diff --git a/input/regression/midi-microtone.ly b/input/regression/midi-microtone.ly
new file mode 100644 (file)
index 0000000..cf1f9f1
--- /dev/null
@@ -0,0 +1,10 @@
+\version "2.10.8"
+\header {
+  texidoc = "The pitch wheel is used for microtones."
+  }
+
+\score { 
+  { c4 cih cis cisih d }
+  \midi { }
+  }
+    
diff --git a/input/regression/midi-pedal.ly b/input/regression/midi-pedal.ly
new file mode 100644 (file)
index 0000000..0c4ecab
--- /dev/null
@@ -0,0 +1,22 @@
+\header {
+
+  texidoc = "Pedals.  Run @code{timidity -idvvv file.midi |grep Midi}
+  to see midi events."
+
+}
+
+\version  "2.11.10"
+
+\score {
+  \relative {
+    {
+      { c16 e g c }
+      
+      { c,16\sustainDown e g c\sustainUp }
+      { c,16\unaCorda e g c\treCorde }
+      { c,16\sostenutoDown e g c\sostenutoUp }
+    }
+  }
+  \midi {}
+  \layout{}
+}
diff --git a/input/regression/midi-scales.ly b/input/regression/midi-scales.ly
new file mode 100644 (file)
index 0000000..d6e8ed9
--- /dev/null
@@ -0,0 +1,159 @@
+
+\version "2.10.0"
+% candidate for regression.  -gp
+\header {
+  texidoc="Converting LilyPond input to MIDI and then again back with
+  @code{midi2ly.py} is a reversible procedure in some simple cases,
+  which mean that the original @code{.ly} -file and the one converted 
+  back from the generated @code{.midi} -file do not differ.
+  Here are produced some scales.
+  
+  "
+}
+
+%{
+  This means, doing:
+
+    lilypond input/test/midi-scales.ly
+    midi2ly midi-scales.midi
+    diff -u input/test/midi-scales.ly midi-scales-midi.ly
+
+  should show no differences at all in \key commands or notes.
+
+  Therefore, do not reformat this file unless midi2ly changes.
+
+  1.7.30 reformatted, because
+  midi2ly now outpts 1 bar per line and adds bar checks and numbers.
+
+%}
+
+scales =  \relative c {
+
+  % [INSTRUMENT_NAME] bright acoustic
+  \key c \major  % sharp-major
+  c'4 d e f |
+  g a b c |
+
+  \key g \major
+  g a b c |
+  d e fis g |
+
+  \key d \major
+  d, e fis g |
+  a b cis d |
+
+  \key a \major
+  a b cis d |
+  e fis gis a |
+
+  \key e \major
+  e, fis gis a |
+  b cis dis e |
+
+  \key b \major
+  b cis dis e |
+  fis gis ais b |
+
+  \key fis \major
+  fis, gis ais b |
+  cis dis eis fis |
+
+  \key cis \major
+  cis, dis eis fis |
+  gis ais bis cis |
+
+  \key a \minor  % sharp-minor
+  a b c d |
+  e f gis a |
+
+  \key e \minor
+  e, fis g a |
+  b c dis e |
+
+  \key b \minor
+  b cis d e |
+  fis g ais b |
+
+  \key fis \minor
+  fis, gis a b |
+  cis d eis fis |
+
+  \key cis \minor
+  cis, dis e fis |
+  gis a bis cis |
+
+  \key gis \minor
+  gis ais b cis |
+  dis e fisis gis |
+
+  \key dis \minor
+  dis, eis fis gis |
+  ais b cisis dis |
+
+  \key ais \minor
+  ais bis cis dis |
+  eis fis gisis ais |
+
+  \key f \major  % flat-major
+  f, g a bes |
+  c d e f |
+
+  \key bes \major
+  bes c d ees |
+  f g a bes |
+
+  \key ees \major
+  ees,, f g aes |
+  bes c d ees |
+
+  \key aes \major
+  aes, bes c des |
+  ees f g aes |
+
+  \key des \major
+  des,, ees f ges |
+  aes bes c des |
+
+  \key ges \major
+  ges, aes bes ces |
+  des ees f ges |
+
+  \key ces \major
+  ces,, des ees fes |
+  ges aes bes ces |
+
+  \key d \minor  % flat-minor
+  d, e f g |
+  a bes cis d |
+
+  \key g \minor
+  g, a bes c |
+  d ees fis g |
+
+  \key c \minor
+  c,, d ees f |
+  g aes b c |
+
+  \key f \minor
+  f, g aes bes |
+  c des e f |
+
+  \key bes \minor
+  bes,, c des ees |
+  f ges a bes |
+
+  \key ees \minor
+  ees, f ges aes |
+  bes ces d ees |
+
+  \key aes \minor
+  aes, bes ces des |
+  ees fes g aes |
+}
+
+\score {
+  \context Voice \scales
+  \layout { }
+  \midi { }
+}
+
diff --git a/input/regression/midi-transposition.ly b/input/regression/midi-transposition.ly
new file mode 100644 (file)
index 0000000..2429fef
--- /dev/null
@@ -0,0 +1,14 @@
+\header
+{
+  texidoc =  "should deliver f' in MIDI"
+}
+\version "2.10.5"
+
+\score {
+  {
+    \transposition f
+    c''
+  }
+  \midi{}
+  \layout{}
+}
diff --git a/input/regression/midi-tuplets.ly b/input/regression/midi-tuplets.ly
new file mode 100644 (file)
index 0000000..0a0f5ef
--- /dev/null
@@ -0,0 +1,35 @@
+\version "2.10.0"
+\header {
+texidoc = "
+
+Midi2ly tuplet test.
+
+@example
+  python scripts/midi2ly.py --duration-quant=32 \
+      --allow-tuplet=4*2/3 \
+      --allow-tuplet=8*2/3 \
+      --allow-tuplet=4*3/5 \
+      --allow-tuplet=8*3/5 \
+      tu.midi 
+@end example
+"
+}
+
+
+\score { 
+  \context Voice  \relative c' {
+
+    a1 a2 a2. a4 a4. a8 a8. a16 a16. a32 a32. a64
+
+    \times 2/3 { b4 b4 b4 }
+    \times 3/5 { b4 b4 b4 b4 b4 }
+
+    \times 2/3 { c8 c8 c8 }
+    \times 3/5 { c8 c8 c8 c8 c8 }
+
+  }
+  \layout { }  
+  \midi { }
+}
+
+
diff --git a/input/regression/midi-volume-equaliser.ly b/input/regression/midi-volume-equaliser.ly
new file mode 100644 (file)
index 0000000..6df7de7
--- /dev/null
@@ -0,0 +1,134 @@
+\version "2.10.0"
+\header {
+  texidoc = "@cindex Midi Volume Equaliser
+The full orchestra plays a notes, where groups stop one after
+another. Use this to tune equalizer settings. "
+}
+
+#(set-global-staff-size 16)
+
+%{
+
+Override, see scm/midi.scm:
+
+#(set! instrument-equalizer-alist
+  (append 
+   '(
+     ("flute" . (0 . 0.7))
+   )
+   instrument-equalizer-alist))
+
+%}
+
+flauti =  \relative c' {
+  \set Staff.midiInstrument = #"flute"
+
+  c1\f R1*10
+}
+
+oboi =  \relative c' {
+  \set Staff.midiInstrument = #"oboe"
+
+  R1*1 c1\f R1*9
+}
+
+clarinetti =  \relative c' {
+  \set Staff.midiInstrument = #"clarinet"
+
+  R1*2 c1\f R1*8
+}
+
+fagotti =  \relative c' {
+  \set Staff.midiInstrument = #"bassoon"
+
+  \clef bass
+  R1*3 c1\f R1*7
+}
+
+corni =  \relative c' {
+  \set Staff.midiInstrument = #"french horn"
+
+  R1*4 c1\f R1*6
+}
+
+trombe =  \relative c' {
+  \set Staff.midiInstrument = #"trumpet"
+
+  \clef bass
+  R1*5 c1\f R1*5
+}
+
+timpani =  \relative c' {
+  \set Staff.midiInstrument = #"timpani"
+
+  R1*6 c1\f R1*4
+}
+
+violinoI =  \relative c' {
+  \set Staff.midiInstrument = #"violin"
+
+  R1*7 c1\f R1*3
+}
+
+violinoII =  \relative c' {
+  \set Staff.midiInstrument = #"violin"
+  
+  R1*8 c1\f R1*2
+}
+
+viola =  \relative c' {
+  \set Staff.midiInstrument = #"viola"
+
+  \clef alto
+  R1*9 c1\f R1*1
+}
+
+violoncello =  \relative c' {
+  \set Staff.midiInstrument = #"cello"
+                               %\set Staff.midiInstrument = #"contrabass"
+  
+  \clef bass
+  R1*10 c1\f
+}
+
+
+
+\score {
+  << 
+    \new StaffGroup = "legni" << 
+      \new Staff = "flauti" \flauti
+      \new Staff = "oboi" \oboi
+      \new Staff = "clarinetti" \clarinetti 
+      \new Staff = "fagotti" \fagotti 
+    >>
+    \new StaffGroup = "ottoni" <<
+      \new Staff = "corni" \corni
+      \new Staff = "trombe" \trombe
+    >>
+    \new StaffGroup = "timpani" <<
+      \new Staff = "timpani" \timpani
+      { 
+       \skip 1 
+       %% Hmm: this forces a staff-bracket, that's good!
+       %% However, I can't find where is decided on staff-bracket yes/no
+      }
+    >>
+    \new StaffGroup = "archi" <<
+      \new GrandStaff = "violini" <<
+        \new Staff = "violino1" \violinoI
+        \new Staff = "violino2" \violinoII
+      >>
+      \new Staff = "viola" \viola
+      \new Staff = "violoncello" \violoncello
+    >>
+  >>
+
+  \midi {
+    \context {
+      \Score
+      tempoWholesPerMinute = #(ly:make-moment 60 1)
+    }
+  }
+}
+
+
diff --git a/input/regression/multi-measure-rest-usebreve.ly b/input/regression/multi-measure-rest-usebreve.ly
new file mode 100644 (file)
index 0000000..444bece
--- /dev/null
@@ -0,0 +1,24 @@
+\version "2.10.0"
+\header{
+
+  texidoc="For longer measure lengths, the breve rest is used."
+
+}
+
+\layout {
+  \context {
+    \Score
+    skipBars = ##t
+  }
+  ragged-right = ##t   
+}
+
+
+{
+  \time 8/4
+  R1*12
+  \time 4/4
+  R1*6
+}
+
+
index 5fb534401811eca66b36fa032e84127b339accc2..8ea6f3155c34bd9d8324a23cefb85a343b206a98 100644 (file)
@@ -27,8 +27,7 @@ are used then a different symbol is used.
   \time 3/4 \key cis \major
   R2.*15
   
-  R2.
-  R2.*3
+  R2.*7
   R2.*9
   R2.*11
 
index efd1fa5d89f7e97da1d2f808a12fb6c7a8916ee2..82256aac1899a49edac0097d279fddfc856e4418 100644 (file)
@@ -6,6 +6,9 @@
 The boolean property @code{no-spacing-rods} in @code{TextScript} is used
 to control the horizontal size of text.  " }
 
+\layout {
+  line-width = 3.0\cm
+}
 
 \relative c''{
   %% \emptyText
@@ -15,8 +18,5 @@ to control the horizontal size of text.  " }
   \fatText
   c_"very wide and long text" c
 }
-\layout {
-  line-width = 3.0\cm
-}
 
 
index f6e1a555075d2d407c5e8064a7ce28feb0800f1d..392dbf0c8bcff39079f0beb25f67b6a3aeb7ac09 100644 (file)
@@ -9,9 +9,15 @@ su = { \change Staff = up}
 sd = { \change Staff = down}
 
 
+\layout {
+  line-width = 8.0 \cm
+}
+
+
 \context PianoStaff
 <<
   \new Staff = "up"   {
+    \override Glissando #'breakable = ##t
     \set PianoStaff.connectArpeggios = ##t
     \showStaffSwitch
     \clef F
@@ -21,9 +27,4 @@ sd = { \change Staff = down}
     \clef F s1*4
   }
 >>
-  \layout {
-    line-width = 8.0 \cm
-  }
-
-
 
diff --git a/input/regression/option-help.ly b/input/regression/option-help.ly
new file mode 100644 (file)
index 0000000..75c67e6
--- /dev/null
@@ -0,0 +1,4 @@
+\version "2.11.10"
+
+#(ly:option-usage)
+
index cf0337ef29339925b109dffaa6ae4b1f64311ef1..a046efce871f4aed8bf310ebdd247a78ac63bd39 100644 (file)
@@ -15,6 +15,7 @@ bla = \new Staff {
   \repeat unfold 5 \relative { c1 c1 c1 }
 }
 
+
 \book {
   \score {
     \bla
@@ -28,19 +29,4 @@ tweakFileName = #(format "~a-page-layout.ly" (ly:parser-output-name parser))
 
 #(newline)
 
-%% unfortunately: the following doesn't show up in lp-book output
-
-%% if the following is there, the tweak file will be overwritten.
-
-%{
-
-#(ly:progress "Including file: '~a'" tweakFileName)
-
-\markup {
-  \column {
-    \line { contents of \typewriter tweakFileName: }
-    \smaller \verbatim-file #tweakFileName
-  }
-}
-
-%}
+#(ly:progress "Contents of: '~a'" (ly:gulp-file tweakFileName))
index 0292751d52b78e68aaaf4fda075a8c553fa67020..df8386d1ccbf3cc6d1faf4b2bf0426f011a8fbde 100644 (file)
@@ -7,16 +7,20 @@ should appear on 3 pages.
 "
 }
 
-\paper {
-  #(define page-breaking ly:page-turn-breaking)
-  paper-height = #70
-  print-page-number = ##t
-}
+\book {
+  \paper {
+    #(define page-breaking ly:page-turn-breaking)
+    paper-height = #65
+    print-page-number = ##t
+  }
 
-\relative c' {
-  a b c d a b c d \break
-  c d e f c d e f \break
-  d e f g d e f g
+  \score {
+    \relative c' {
+      a b c d a b c d \break
+      c d e f c d e f \break
+      d e f g d e f g
+    }
+  }
 }
 
 
diff --git a/input/regression/page-turn-page-breaking-repeats.ly b/input/regression/page-turn-page-breaking-repeats.ly
new file mode 100644 (file)
index 0000000..f43184d
--- /dev/null
@@ -0,0 +1,43 @@
+\version "2.10.0"
+
+\header {
+  texidoc = "The page-turn engraver will not count potential page
+turns if they occur in the middle of a repeat unless there is a
+long gap at the beginning or at the end of the repeat.
+"
+}
+
+\layout {
+  \context {
+    \Staff
+    \consists "Page_turn_engraver"
+  }
+}
+
+\book {
+  \paper {
+    #(define page-breaking ly:page-turn-breaking)
+    paper-height = #80
+    print-page-number = ##t
+    print-first-page-number = ##t
+  }
+
+  \score {
+    \relative {
+      \set Score.skipBars = ##t
+      % this should be kept on one page
+      \repeat volta 2 {
+       \repeat unfold 7 {a4 b c d16 d d d} R1*10
+       \repeat unfold 8 {a4 b c d16 d d d} \pageTurn
+      }
+      % use up a page
+      a4 b c d a b c d \pageBreak
+
+      % this should be allowed to have a page turn
+      \repeat volta 2 {
+       \repeat unfold 7 {a4 b c d16 d d d} R1*10
+       \repeat unfold 7 {a4 b c d16 d d d} R1*3
+      }
+    }
+  }
+}
\ No newline at end of file
index 8c296b71b6b5c3ad43b81ad5cf2537d213608f6e..686622b7d5b7436deebe6acd142de23d42facf4f 100644 (file)
@@ -7,14 +7,6 @@ in which case the turn will go after the special barline.
 "
 }
 
-\paper {
-  #(define page-breaking ly:page-turn-breaking)
-  paper-height = #70
-  auto-first-page-number = ##t
-  print-page-number = ##t
-  print-first-page-number = ##t
-}
-
 \layout {
   \context {
     \Staff
@@ -22,11 +14,24 @@ in which case the turn will go after the special barline.
   }
 }
 
-\relative c' {
-  a b c d a b c d \break
-  c d e f c d e f R1*4
-  \repeat unfold 15 {d4 e f g} \break
-  c d e f c d e f R1*2 \bar "||" R1*2
-  \repeat unfold 15 {d4 e f g}
+\book {
+
+  \paper {
+    #(define page-breaking ly:page-turn-breaking)
+    paper-height = #65
+    auto-first-page-number = ##t
+    print-page-number = ##t
+    print-first-page-number = ##t
+  }
+
+  \score {
+    \relative c' {
+      a b c d a b c d \break
+      c d e f c d e f R1*4
+      \repeat unfold 15 {d4 e f g} \break
+      c d e f c d e f R1*2 \bar "||" R1*2
+      \repeat unfold 15 {d4 e f g}
+    }
+  }
 }
 
index 0922a8d27a2689673d0380fb99598ec042ee935d..bcbd3aa8eb6ce42d08e88ba2de06b0f5583a0f68 100644 (file)
@@ -15,7 +15,8 @@ texts accordingly.
 
 vone =  \relative a' { R1 a2    r4 r a a a a }
 vtwo =  \relative a' { R1 f4 f4 f4 f f f a a  }
-comm = { s1 s2 s4_"expect: solo 2" s4 s2 s4_"expect: a2" s4 }
+comm = { s1 s2 s4_\markup { \small "expect: solo 2" }
+        s4 s2 s4_\markup { \small "expect: a2"  } s4 } 
 \new Staff <<
     \partcombine \vone \vtwo
     \comm
diff --git a/input/regression/part-combine-tuplet-end.ly b/input/regression/part-combine-tuplet-end.ly
new file mode 100644 (file)
index 0000000..b6bf597
--- /dev/null
@@ -0,0 +1,19 @@
+\header {
+  
+  texidoc = "End tuplets events are sent to the starting context, so
+even after a switch, a tuplet ends correctly."
+  
+}
+
+\version "2.10.8"
+
+\new Staff <<
+  \partcombine
+  \relative c'' {
+    r2
+    \times 2/3 { g8[ g g] }
+    \times 2/3 { g[ g g] } g1
+  }
+  \relative c'' { R1 g1 }
+>>
+
diff --git a/input/regression/part-combine-tuplet-single.ly b/input/regression/part-combine-tuplet-single.ly
new file mode 100644 (file)
index 0000000..879e163
--- /dev/null
@@ -0,0 +1,22 @@
+
+\header {
+  texidoc = "Tuplets in combined parts only print one bracket."
+  }
+
+\paper { ragged-right = ##T }
+
+\version "2.10.10"
+
+\score {
+  <<
+    \new Staff {
+      \partcombine
+      \relative c'' {
+        \times 2/3 { d4 d d ~ } d2
+      }
+      \relative c'' {
+        \times 2/3 { b4 a g ~ } g2
+      }
+    }
+  >>
+}
diff --git a/input/regression/profile-property-access.ly b/input/regression/profile-property-access.ly
new file mode 100644 (file)
index 0000000..39a4151
--- /dev/null
@@ -0,0 +1,47 @@
+% -*- Scheme -*-
+
+\header {
+  texidoc = "This file profiles property accesses; the log file shows the top properties examined."
+}
+
+
+#(ly:set-option 'profile-property-accesses #t)
+
+\version "2.10.8"
+
+\include "../../input/typography-demo.ly"
+%\book { \score { {c4 } } }
+
+#(define (prop-stats>?  x y)
+  (cond
+   ((> (cdr x) (cdr y)) #t)
+   ((= (cdr x) (cdr y))
+    (symbol<? (car x) (car y)))
+   (else #f)))
+
+#(define (display-stats what)
+  (let*
+   ((count 50)
+    (rnd 10)
+    (round-to (lambda (x) (* rnd (inexact->exact (round (/ x rnd))))))
+    (alist (map (lambda (entry) (cons (car entry) (round-to (cdr entry)))) (hash-table->alist (ly:property-lookup-stats what))))
+    (total (apply + (map cdr alist)))
+   )
+
+  (set! alist (acons 'TOTAL total alist))
+   
+  (ly:progress "\n\n~A properties, top ~a rounded to ~a\n\n~a"
+   what count rnd
+   (string-join
+    (map (lambda (x) (format "~30a: ~6@a" (car x) (cdr x)))
+     (ly:truncate-list! 
+    (sort alist prop-stats>?) count))
+    "\n"))))
+   
+
+                                
+#(display-stats 'prob)
+#(display-stats 'context)
+#(display-stats 'grob)
+
+  
index 42045c5f73658f689423c31396024721ee2d1fa5..347838151fe28136fcdd5cd18ff8754200c8253f 100644 (file)
@@ -11,14 +11,14 @@ last note."
 
 }
 
-\version "2.10.0"
+\version "2.11.10"
 \layout {
   ragged-right = ##t
 }
 
 quoteMe = \relative c' { fis4 r16  a8.-> b4(-\ff~  b16 c8.  b) }
 
-\addquote quoteMe \quoteMe 
+\addQuote quoteMe \quoteMe 
 
 original = \relative c'' {
   c8 d
index 26332e3ebe26bdc4fefafb8e002127c49d57ea70..9cc47d370a4f4f35084bf15f715415f9e833101c 100644 (file)
@@ -6,13 +6,13 @@ example, there are notes with each full-bar rest."
          
  
 }
-\version "2.10.0"
+\version "2.11.10"
 
 A = \relative c' { c4 d e f | \cueDuring #"qB" #1 { R1 } | }
 B = \relative c' { \cueDuring #"qA" #1 { R1 } | f4 e d c  | }
 
-\addquote "qA" \A
-\addquote "qB" \B
+\addQuote "qA" \A
+\addQuote "qB" \B
 
 \layout { ragged-right = ##t }
 
index 4b2549ba00cebaefc77bf030977c313962efb22d..d17d80d4c50b700fb25409b42a60b77eef2cf40e 100644 (file)
@@ -8,7 +8,7 @@ quoted. In this example, a 16th rests is not quoted, since
 @code{rest-event} is not in @code{quotedEventTypes}."
 
 }
-\version "2.10.0"
+\version "2.11.10"
 \layout {
     ragged-right = ##t
 }
@@ -16,7 +16,7 @@ quoted. In this example, a 16th rests is not quoted, since
 
 quoteMe = \relative c' { fis4 r16  a8.-> b4-\ff c }
 
-\addquote quoteMe \quoteMe 
+\addQuote quoteMe \quoteMe 
 original = \relative c'' { c8 d s2 es8 gis8 }
 
 <<
index 718134d6115ee89ac65dcfaeab1507882910f2b0..e612aeac3c58ab0f24626c273b6b302c583bda85 100644 (file)
@@ -7,13 +7,13 @@
 }
 \paper { ragged-right= ##t }
 
-\version "2.10.0"
+\version "2.11.10"
 quoted = \relative c'' {
   R1
   \grace g16 f4 \grace a16 bes4 \grace b16 c4 c4
 }
 
-\addquote quoted \quoted
+\addQuote quoted \quoted
 
 
 <<
index e9584de11435d395a2208747ddd2d3fc699cd273..50cb66e27589e1dcd1f5877d61bd10d0695b4e44 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.10.0"
+\version "2.11.10"
 
 \header {
 
@@ -15,12 +15,12 @@ to the 2nd note. "
 cueI = \relative c'' {
   a1 ~ | a | a |
 }
-\addquote "cueI" { \cueI }
+\addQuote "cueI" { \cueI }
 
 cueII = \relative c' {
   R1 | e | a |
 }
-\addquote "cueII" { \cueII }
+\addQuote "cueII" { \cueII }
 
 \new Staff {
   \cueDuring "cueI" #UP { R1 } |
index ef700dd87139768f05bb005c2fdee290d228910d..ceecc579d460e84052afbc36d76eb3dda3f748c8 100644 (file)
@@ -10,12 +10,12 @@ quoted ones) will transposed as well.  "
 
 }
 
-\version "2.10.0"
+\version "2.11.10"
 
 \layout { ragged-right = ##t }
 
 
-\addquote clarinet  {
+\addQuote clarinet  {
     \transposition bes
     d'16 d'16 d'8 
     d'16 d'16 d'8 
@@ -23,7 +23,7 @@ quoted ones) will transposed as well.  "
     d'16 d'16 d'8 
 }
 
-\addquote sax  {
+\addQuote sax  {
     \transposition es'
     a8 a a a a a  a a 
 }
diff --git a/input/regression/quote-tuplet-end.ly b/input/regression/quote-tuplet-end.ly
new file mode 100644 (file)
index 0000000..cbf4752
--- /dev/null
@@ -0,0 +1,22 @@
+\header
+{
+  texidoc  ="Tuplet bracket ends properly when quoting."
+}
+
+\version "2.11.10"
+
+\paper { ragged-right = ##t }
+
+\addQuote x {
+   \times 2/3 { a'8 a' a' } a'4 a'2 |
+}
+
+\new Staff <<
+   \set Staff.quotedEventTypes = #'(note-event tuplet-span-event)
+   \new Voice = "cue" { s1 }
+   \new Voice {
+       \cueDuring #"x" #1 { r4 }
+       c'4
+       \cueDuring #"x" #1 { r2 }
+   }
+>>
index 0579d4fde66db6710e01ec21fe022bd67057680e..a96249540f21ce68ac3674e6214bfa7b3c7b3f15 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.10.0"
+\version "2.11.10"
 
 \header {
 
@@ -12,7 +12,7 @@ foo = \relative {
   \times 2/3 { c4 c c } \times 2/3 { c4 c c }
 }
 
-\addquote "foo" { \foo }
+\addQuote "foo" { \foo }
 
 \paper {
   ragged-right = ##t
index 4d61ee608bad45bff62d905748239239c22df684..1f29585f3c06829f71ad84b682525c47e561c5e5 100644 (file)
@@ -7,7 +7,7 @@ things are quoted. In this example, a 16th rests is not quoted, since
 @code{rest-event} is not in @code{quotedEventTypes}."
 
 }
-\version "2.10.0"
+\version "2.11.10"
 \layout {
     ragged-right = ##t
 }
@@ -15,7 +15,7 @@ things are quoted. In this example, a 16th rests is not quoted, since
 
 quoteMe = \relative c' { fis4 r16  a8.-> b4-\ff c }
 
-\addquote quoteMe \quoteMe 
+\addQuote quoteMe \quoteMe 
 original = \relative c'' { c8 d s2 es8 gis8 }
 
 <<
diff --git a/input/regression/relative-repeat.ly b/input/regression/relative-repeat.ly
new file mode 100644 (file)
index 0000000..5f0c613
--- /dev/null
@@ -0,0 +1,10 @@
+\header {
+  texidoc = "Relative mode for repeats uses order of entry."
+  }
+\version "2.10.8"
+
+\relative {
+  \repeat "unfold" 3
+  { f2 bes2 }
+  \alternative { a1 e b } 
+}
diff --git a/input/regression/rest-collision-beam-note.ly b/input/regression/rest-collision-beam-note.ly
new file mode 100644 (file)
index 0000000..d8bdcb1
--- /dev/null
@@ -0,0 +1,17 @@
+
+\header {
+
+  texidoc = "Beam/rest collision resolution and normal rest/note
+collisions can be combined."
+
+}
+
+\version "2.10.7"
+
+\layout { ragged-right=##t }
+
+\new Staff \relative
+<<
+  {  s8 f4 } \\
+  {  <f, a>8[ r <a d>] }
+>>
diff --git a/input/regression/rest-collision-beam-quantized.ly b/input/regression/rest-collision-beam-quantized.ly
new file mode 100644 (file)
index 0000000..95f1e85
--- /dev/null
@@ -0,0 +1,19 @@
+\header {
+  texidoc = "Rests under beams moved by whole staff spaces."
+}
+
+\layout {
+  ragged-right = ##t
+}
+
+\version "2.10.0"
+
+fig =   \relative c' {
+  <a c e>8[
+    r <c e a> r <e a c> r <a c e>]
+    r |
+}
+
+\relative c' \new Staff {
+  \transpose c c,  \fig
+}
diff --git a/input/regression/rest-collision-beam-restdir.ly b/input/regression/rest-collision-beam-restdir.ly
new file mode 100644 (file)
index 0000000..cd595d8
--- /dev/null
@@ -0,0 +1,18 @@
+\header {
+  texidoc = "Beam/rest collision takes offset due to @code{Rest #'direction} into
+account properly."
+}
+
+\version "2.10.7"
+\paper {
+  ragged-right = ##t
+}
+
+
+\relative c''' {
+  \override Rest #'direction = #UP
+  \stemDown b8[ r b]
+  \override Rest #'direction = #DOWN
+  \stemDown b8[ r b]
+}
+
index 7e0e2f5fffe902ed69665cb7e71acfb4fa9c34aa..6a38e581bd564144e990bde0b9e176a918d7f05a 100644 (file)
@@ -1,40 +1,16 @@
 \header {
-  texidoc = "Rests under beams are only moved if necessary."
-}
-
-\layout {
-  ragged-right = ##t
-}
 
-\version "2.10.0"
+  texidoc = "Rests under beams are shifted upon
+collision."
 
-fig =   \relative c' {
-  <a c e>8[ r <c e a> r <e a c> r <a c e>]
-           r |
 }
-
+\version "2.10.7"
+\paper {
+  ragged-right = ##t
+}
   
-
-  \relative c' \new Staff {
-    \fig 
-    \transpose c c,  \fig
-    \new Voice { \stemUp \transpose c f  \fig }
-    <<
-      \\
-      \transpose f c \fig
-    >>
-    
-    <<
-      { \transpose c c' \fig }
-      \\
-      {} 
-    >>
-    
-    << \transpose c c' \fig \\
-       \transpose f c \fig
-     >>
-  }
-
-
-
+\relative c''' {
+  \stemDown b8[ r b]
+  \stemUp b,,8[ r b] 
+}
 
diff --git a/input/regression/safe.ly b/input/regression/safe.ly
new file mode 100644 (file)
index 0000000..760d60f
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.10.0"
+
+"expect-error" = ##t
+
+% Ugh - this affects other files too.
+#(ly:set-option 'protected-scheme-parsing #t)
+#(ly:set-option 'safe #t)
+
+"force-finish" = ##t  
+
+\header{
+    texidoc = "This should not survive lilypond --safe-mode"
+
+    #(open-file "w")
+}
+
+
+#(open-file "/tmp/safe-guile.scm")
+
+\include "this-should-fail.ly"
+
diff --git a/input/regression/semi-tie-manual-direction.ly b/input/regression/semi-tie-manual-direction.ly
new file mode 100644 (file)
index 0000000..bfa4410
--- /dev/null
@@ -0,0 +1,16 @@
+
+\header {
+  texidoc = "Semi tie directions may be forced from the input."
+}
+
+\version "2.10.0"
+
+\layout{
+  ragged-right=##t
+}
+
+{
+  r4
+  c'^\laissezVibrer^\repeatTie
+  r4
+} 
diff --git a/input/regression/skiptypesetting-bar-check.ly b/input/regression/skiptypesetting-bar-check.ly
new file mode 100644 (file)
index 0000000..e418183
--- /dev/null
@@ -0,0 +1,17 @@
+\version "2.10.0"
+
+\header {
+
+texidoc = "skipTypesetting doesn't affect bar checks."
+
+}
+
+\relative {
+  c4
+  \set Score.skipTypesetting = ##t
+  c4 c4
+  |
+  c4 c4
+  \set Score.skipTypesetting = ##f
+  d
+}
diff --git a/input/regression/skyline-debug.ly b/input/regression/skyline-debug.ly
new file mode 100644 (file)
index 0000000..0180d04
--- /dev/null
@@ -0,0 +1,20 @@
+\header {
+  texidoc = "@code{-ddebug-skyline} draws the outline of the skyline used."
+  }
+\version "2.11.10"
+
+#(set-default-paper-size "a6" )
+
+\header {
+  tagline = ##f
+}
+
+#(ly:set-option 'debug-skylines #t)
+\book {
+  \score {
+    {
+      a,,1 | a'4 b' c'' d'' \break
+      \repeat unfold 2 {a' b' c'' d''} | b''''1
+    }
+  }
+}
index c230f6e55a00c0816b3a1b73c4ea0e62718b53d3..1103dfbde658a81a119ab3e2fc4f161760fc6e00 100644 (file)
@@ -8,4 +8,4 @@
 }
 \version "2.10.0"
 
-\new Staff { \clef bass c4^( \clef "G" g'4) c''1_( f'') } 
+\new Staff { \clef bass c4^( \clef "G" g'4) s2 c''1_( f'') } 
index bb35666906ac036510f3dd6c875311cb20d6abed..8399155a527327cdb6ad8422d36d408952ea6023 100644 (file)
@@ -8,6 +8,9 @@ run through noteheads or stems.
 "
 }
 
+\layout{
+  line-width = 120.\mm
+}
 
 \relative c''{
   \time 3/4
@@ -19,8 +22,3 @@ run through noteheads or stems.
   \stemNeutral c ( \stemUp c \stemNeutral  c) c ( a  c) c( d,  c') c( f,  c')
   \stemDown c( f,  c')
 }
-\layout{
-  line-width = 120.\mm
-}
-
-
diff --git a/input/regression/spacing-bar-accidental.ly b/input/regression/spacing-bar-accidental.ly
new file mode 100644 (file)
index 0000000..5a34a10
--- /dev/null
@@ -0,0 +1,23 @@
+
+\header {
+  texidoc = "An accidental following a bar gets space so
+ the left edge of the acc is at 0.3 - 0.6 staff space of the bar line"
+}
+
+
+\version "2.11.10"
+\layout{
+  ragged-right = ##t 
+}
+
+
+\relative c'' {
+  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn #'layer = #2
+  
+  \time 1/4
+  \stemUp
+  s4
+  c4 
+  cis4 
+}
diff --git a/input/regression/spacing-bar-arpeggio.ly b/input/regression/spacing-bar-arpeggio.ly
new file mode 100644 (file)
index 0000000..fd84be5
--- /dev/null
@@ -0,0 +1,16 @@
+\header{
+  texidoc = "An arpeggio following a bar gets space"
+
+}
+
+\version "2.10.10"
+
+\layout{ragged-right=##t}
+\new Staff {
+
+  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn #'layer = #1
+  
+  s1
+  <b' c'' c'>1\arpeggio
+}
index d5801605075e946d3f7a1c2253b244c28fd6c96f..59b8fa956a0a5fecbb2c41757e518b4cb3700116 100644 (file)
@@ -1,26 +1,27 @@
 
-\version "2.10.0"
 \header {
   texidoc = "Downstem notes following a barline are
 printed with some extra space. This is an optical correction similar
 to juxtaposed stems.
 
-Accidentals after the barline get some space as well.
-"
+The bar upstem should be approx 1.1 staff space, the bar downstem 1.3
+to 1.5 staff space."
 }
 
-\layout { ragged-right = ##t}
 
-\relative c''
-{
-
-  %%\override Staff.StaffSpacing  #'stem-spacing-correction = #10
-  %%\override Staff.NoteSpacing  #'stem-spacing-correction = #10
-
-  \time 1/4 \stemDown c4 \stemUp c4
-  \stemDown c4 \stemUp c4
-  \stemDown f c,4  c'4 cis4 \stemUp c4
+\version "2.11.10"
+\layout{
+  ragged-right = ##t 
 }
 
 
-
+\relative c'' {
+  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn #'layer = #2
+  
+  \time 2/4
+  \stemDown
+  s2
+  e4 s4 
+  e,4 s4
+}
diff --git a/input/regression/spacing-bar-whole-measure.ly b/input/regression/spacing-bar-whole-measure.ly
new file mode 100644 (file)
index 0000000..f2bbb62
--- /dev/null
@@ -0,0 +1,22 @@
+\header{
+  texidoc = "Notes that fill a whole measure are preceded by extra space. "
+  
+  }
+
+\version "2.11.10"
+
+\layout{
+  ragged-right=##t
+}
+
+\new Staff \relative {
+  \override Score.NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+  \override Score.NonMusicalPaperColumn #'layer = #1
+  
+  \time 4/4
+  s1
+  c2. c4
+  \time 3/4
+  s2.
+  c2.
+}
diff --git a/input/regression/spacing-folded-clef-cross-staff.ly b/input/regression/spacing-folded-clef-cross-staff.ly
new file mode 100644 (file)
index 0000000..8616fd8
--- /dev/null
@@ -0,0 +1,22 @@
+\version "2.10.7"
+\header {
+    texidoc = "Clefs are also folded under cross staff constructs."
+}
+
+\layout { ragged-right = ##t}
+
+\context PianoStaff <<
+  \new Staff = "up"
+  \relative c'' <<
+    {
+      \stemDown
+      f16[ \change Staff = down \stemUp
+      \clef treble g,]
+
+    } \\
+  >>
+  \new Staff = "down" {
+    \time 3/8 \clef bass s8
+  }
+>>
+
diff --git a/input/regression/spacing-loose-grace-error.ly b/input/regression/spacing-loose-grace-error.ly
new file mode 100644 (file)
index 0000000..94a3968
--- /dev/null
@@ -0,0 +1,19 @@
+\header
+{
+  
+texidoc = "Even in case of incorrect contexts (eg. shortlived
+  contexts) that break linking of columns through spacing wishes,
+  @code{strict-note-spacing} defaults to a robust solution."
+
+}
+
+\version "2.11.2"
+
+
+%% \new Staff cause shortlived, disconnected Voice contexts
+%% breaking spacing-wishes links.
+\new Staff {
+  \override Score.SpacingSpanner #'strict-note-spacing = ##t
+  \afterGrace c'4 {c'32 c'32 }
+  c'4
+}
diff --git a/input/regression/spacing-loose-grace-linebreak.ly b/input/regression/spacing-loose-grace-linebreak.ly
new file mode 100644 (file)
index 0000000..e9fab41
--- /dev/null
@@ -0,0 +1,39 @@
+\header{
+  texidoc = "If a floating grace spacing section attaches to a note
+across a line break, it gets attached to the end of line."
+}
+
+
+\version "2.10.7"
+
+\new Score \with {
+  \override SpacingSpanner #'strict-grace-spacing = ##t
+  \override PaperColumn #'used = ##t 
+} <<
+
+  \new Staff <<
+
+    \new Voice {
+      \time 6/4    s2
+      s2 \bar "" \break
+      s2
+    }
+
+    \new Voice {
+      b'4
+      \afterGrace c''4 {b'16}
+      s4
+      s4
+      c''4
+    }
+    \new Voice {
+      c'4
+      c'8.
+      r16
+      c'4
+      c'4
+      c'4
+    }
+  >>
+>>
+
diff --git a/input/regression/spacing-mark-width.ly b/input/regression/spacing-mark-width.ly
new file mode 100644 (file)
index 0000000..b0b4614
--- /dev/null
@@ -0,0 +1,18 @@
+\header {
+
+  texidoc = "Width of marks does not affect spacing."
+
+}
+
+\version "2.10.7"
+
+\paper {
+  ragged-right = ##t
+}
+
+\relative c''
+{
+  \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
+  c1
+  \mark "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
+}
index 87e14f00c698b22ed59d226f4d24832de0a21c95..3288f3cef563edf283ec271759259572276ed386 100644 (file)
@@ -10,19 +10,17 @@ space. This is an optical correction similar to juxtaposed stems.
 
 \layout { ragged-right = ##t}
 
+
 \relative e'
 {
+  \override Score.PaperColumn #'layer = #1
+  \override Score.PaperColumn #'stencil = #ly:paper-column::print
 
-                               %%\override Staff.StaffSpacing  #'stem-spacing-correction = #0.5
-                               %%\override Staff.NoteSpacing  #'stem-spacing-correction = #0.5
-
-  \time 3/8
+  
+  \time 2/8
   \stemUp
-  e8 e e
-  f f f
-  a a a
-  c c c
-  e e e
+  e8[ e]
+  e'[ e]
 }
 
 
index 7408bd11aed9699eaead7531134ea89b0862128f..6926256fddd69ea47cac842c6237d7478d5b2638 100644 (file)
@@ -8,13 +8,13 @@ prefatory matter."
 
 }
 
-\version "2.10.0"
+\version "2.11.10"
 
 \paper { ragged-right = ##t }
 
 \relative c'' {
   \override Beam #'break-overshoot = #'(1.0 . 2.0)
   \override TupletBracket #'break-overshoot = #'(1.0 . 2.0)
-  \set allowBeamBreak = ##t
+  \override Beam #'breakable = ##t
   c2.. \times 2/3 { c8.[ \break c8.] }
 }
index 72024b3ac2bbf3f1fe713af8f41b0df9bee4dabe..d1d7cc502176c0f206f2bf789dccc0a89f39a878 100644 (file)
@@ -7,7 +7,7 @@ large on smaller staves."
 
 }
 
-\version "2.10.0"
+\version "2.11.11"
 
 \layout {
   #(layout-set-staff-size 6)
index 346eac519c098f490126ed51d4f07e99203dc679..25c029ecbcca51d53d41b7b95583c20edd55ea7d 100644 (file)
@@ -19,6 +19,8 @@
   \stemNeutral
   \stemUp a b c d e f g a
   \stemNeutral
+  s4 |
+  
   <g, e'>2 <b e g> <c e g> <d f g>
   
 } 
diff --git a/input/regression/stem-tremolo-forced-dir.ly b/input/regression/stem-tremolo-forced-dir.ly
new file mode 100644 (file)
index 0000000..146dd62
--- /dev/null
@@ -0,0 +1,8 @@
+
+\version "2.10.2"
+\layout { ragged-right = ##t }
+\relative c 
+{
+        \clef bass
+       \stemUp f4 : 32
+}
index 88414a86f4e4d685b417eed5476ce90b0738a5c5..865ff4fc48b15f2c99d42c1ed5ee251cdb2836e8 100644 (file)
@@ -3,7 +3,7 @@
 \header {
 
   texidoc = "System separators maybe defined as markups in the
-@code{systemSeparator} field of the bookpaper block. They are centered
+@code{systemSeparator} field of the paper block. They are centered
 between the boundary staffs of each system. "
 
 }
diff --git a/input/regression/tie-accidental.ly b/input/regression/tie-accidental.ly
new file mode 100644 (file)
index 0000000..2f1ec24
--- /dev/null
@@ -0,0 +1,19 @@
+\header { texidoc = "
+  lilypond should flip the tie's direction
+  to avoid a collision with the sharp.
+" }
+
+
+\version "2.11.11"
+
+\paper {
+  debug-tie-scoring = ##t
+  ragged-right = ##t
+}
+
+\relative c'' {
+  \override Tie #'layer = #2
+  a ~ <fis a>
+}
+
+% EOF
index 51f9708a3cf99aaf6929e73db149ca52385ebd65..2d3739e5ec7223ad4db120b1d33b9fe41c10683d 100644 (file)
@@ -8,13 +8,13 @@ has a @code{minimum-length} of 5."
 
 }
 
+\paper {
+  indent = 0.0\mm
+  line-width = 40.0\mm
+}
+
 \relative {
   \override Tie #'minimum-length = #5
   f2. f16  f  f  f ~ | \break
   f1
 }
-
-\paper {
-  indent = 0.0\mm
-  line-width = 40.0\mm
-}
diff --git a/input/regression/tie-broken-other-staff.ly b/input/regression/tie-broken-other-staff.ly
new file mode 100644 (file)
index 0000000..0bfca6a
--- /dev/null
@@ -0,0 +1,15 @@
+\header {
+  texidoc = "Broken tie lengths are not affected by clefs
+in other staves."
+}
+
+\version "2.10.0"
+
+\layout {
+  ragged-right = ##t
+}
+
+<<
+  \new Staff \relative c'''{ e1 ~ \break e }
+  \new Staff \relative c{ \clef bass a \clef treble cis }
+>>
diff --git a/input/regression/tie-direction-manual.ly b/input/regression/tie-direction-manual.ly
new file mode 100644 (file)
index 0000000..898ccb2
--- /dev/null
@@ -0,0 +1,16 @@
+\header
+{
+  texidoc = "Tie directions can be set with @code{_} and @code{^}.
+This makes correction in complex chords easier."
+
+}
+\version "2.10.4"
+\paper
+{
+  ragged-right= ##t
+}
+
+\relative c' {
+  <f^~ d'>(  <e f c'>)
+}
+
diff --git a/input/regression/tie-manual-vertical-tune.ly b/input/regression/tie-manual-vertical-tune.ly
new file mode 100644 (file)
index 0000000..ed631d9
--- /dev/null
@@ -0,0 +1,23 @@
+\header {
+
+
+  texidoc = "If using integers, the tie will vertically tuned for
+staff line avoidance. If using a floating point number, this is taken
+as the exact location."
+
+}
+
+\version "2.11.11"
+
+\layout {
+  ragged-right = ##t
+}
+
+\version "2.10.0"
+\relative c'' {
+  \override Tie #'staff-position = #3
+  d4 ~
+  \override Tie #'staff-position = #3.0
+  d ~
+  d
+ }
diff --git a/input/regression/tie-single-chord.ly b/input/regression/tie-single-chord.ly
new file mode 100644 (file)
index 0000000..c6160ab
--- /dev/null
@@ -0,0 +1,17 @@
+\header {
+
+  texidoc = "Tie directions are also scored. In hairy configurations,
+  the default rule for tie directions is overruled."
+
+}
+
+\version "2.11.11"
+
+\paper
+{
+  ragged-right = ##t
+}
+
+\relative c' {
+  <f d'>~ <e f c'>
+}
index c085a7208b4eb3011d0aba24facfe7b1bc675546..0187dfbd0caac97638d75cf7c00b33dce9d89cc9 100644 (file)
@@ -18,4 +18,7 @@ specifying their @code{direction} and/or @code{staff-position}."
   c'4 ~ c'
   \override Tie #'staff-position = #-7.5
   c'4 ~ c'
+  \revert Tie #'staff-position
+  \override Tie #'direction = #UP
+  c'4 ~ c'
 }
diff --git a/input/regression/to-xml.ly b/input/regression/to-xml.ly
new file mode 100644 (file)
index 0000000..0a3cc4a
--- /dev/null
@@ -0,0 +1,16 @@
+\version "2.10.0"
+
+testMusic =  { << c''4 \\ g'4 >> }
+
+#(use-modules (scm to-xml))
+
+#(ly:progress "\nXML:\n\n~A\n" (call-with-output-string (lambda (p) (music-to-xml testMusic p))))
+
+
+\header {
+  texidoc =
+  "The input representation is generic, and may be translated to XML. "
+}
+
+
+{ \testMusic }
index 60da5995fc471c335b1b7db1894ce355b28fce81..110da8a63b61175e251a43666be782d8d4c43f92 100644 (file)
@@ -5,14 +5,14 @@
 start of the next non-tuplet note.  "
 
 }
-\version "2.10.0"
+\version "2.11.10"
 
 \paper { ragged-right = ##t
 indent = 0.0 }
 
 \relative c'' \new Voice \with {
   \remove  Forbid_line_break_engraver
-  allowBeamBreak = ##t
+  \override Beam #'breakable = ##t
 }
 {
   \set tupletFullLength = ##t
diff --git a/input/regression/tuplet-nest-beam.ly b/input/regression/tuplet-nest-beam.ly
new file mode 100644 (file)
index 0000000..d7dc560
--- /dev/null
@@ -0,0 +1,17 @@
+\header {
+
+  texidoc = "Nested tuplets do collision resolution, also when they
+  span beams."
+  
+}
+
+\version "2.10.8"
+\paper{
+  ragged-right=##t
+}
+
+{
+  \times 4/7 {
+    \times 4/5 { c'8 d' e' f' g' } a' b' c''
+  }
+}
index 5b4a605361f06414d1ef8f2ac26e303f5dcd3779..abd4227671ac18f736a69a72be1f1717063c6d07 100644 (file)
@@ -47,9 +47,12 @@ japanese = \lyricmode {
 
 % "a legal song to you"
 portuguese = \lyricmode { 
-  à vo cê uma can ção legal
+  à vo -- cê uma can -- ção legal
 }
 
+\paper {
+  ragged-right = ##T
+}
 
 \relative  { 
   c2 d e f g f e
diff --git a/input/regression/warn-conflicting-key-signatures.ly b/input/regression/warn-conflicting-key-signatures.ly
new file mode 100644 (file)
index 0000000..4b9756e
--- /dev/null
@@ -0,0 +1,11 @@
+\version "2.10.0"
+%If you specify two different key sigs at one point, a
+%warning is printed.
+
+\score { 
+\context Voice <<
+ { \key cis \major cis4 \key bes \major bes4 }
+ { \key cis \major fis4 \key es \major g4 }  
+>>
+}
+
diff --git a/input/test/ancient-accidentals.ly b/input/test/ancient-accidentals.ly
deleted file mode 100644 (file)
index 10c5ab7..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-\header {
-texidoc = "@cindex Ancient Accidentals
-Accidentals are available in different ancient styles, which all
-are collected here.
-"
-}
-
-\version "2.10.0"
-
-\relative c'' {
-      \time 5/4
-      \override Staff.Accidental  #'style = #'default
-      cisis^\markup { \typewriter default } cis c ces ceses 
-      \override Staff.Accidental  #'style = #'hufnagel
-      cisis^\markup { \typewriter hufnagel } cis c ces ceses 
-      \override Staff.Accidental  #'style = #'medicaea
-      cisis^\markup { \typewriter medicaea } cis c ces ceses 
-      \override Staff.Accidental  #'style = #'vaticana
-      cisis^\markup { \typewriter vaticana } cis c ces ceses 
-      \override Staff.Accidental  #'style = #'mensural
-      cisis^\markup { \typewriter mensural } cis c ces ceses 
-}
index baaf9eb93cfdace94a02d763ec8aac22b5ba62bf..6ac44816938579f82f67ac5c4173a73b6e146252 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.10.0"
+\version "2.11.6"
 % TODO: split ancient-font into seperate files; possibly in
 % different locations.
 \header {
@@ -17,8 +17,8 @@ upperStaff = \new GregorianStaff =  "upperStaff" <<
     \override Staff.StaffSymbol  #'line-count = #4
 
      \transpose c c {
-       \override Staff.KeySignature  #'style = #'vaticana
-       \override Staff.Accidental  #'style = #'vaticana
+       \override Staff.KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+       \override Staff.Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
        \override NoteHead  #'style = #'vaticana.punctum
        \key es \major
        \clef "vaticana-fa2"
@@ -58,8 +58,8 @@ upperStaff = \new GregorianStaff =  "upperStaff" <<
        \override NoteHead  #'style = #'vaticana.cephalicus
        es f
 
-       \override Staff.KeySignature  #'style = #'medicaea
-       \override Staff.Accidental  #'style = #'medicaea
+       \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+       \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
        \override Staff.Custos  #'style = #'medicaea
        \override NoteHead  #'style = #'medicaea.punctum
        \clef "medicaea-fa2"
@@ -81,8 +81,8 @@ upperStaff = \new GregorianStaff =  "upperStaff" <<
        \override NoteHead  #'style = #'medicaea.rvirga
        e! des! ces!
 
-       \override Staff.KeySignature  #'style = #'hufnagel
-       \override Staff.Accidental  #'style = #'hufnagel
+       \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+       \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
        \override Staff.Custos  #'style = #'hufnagel
        \override NoteHead  #'style = #'hufnagel.punctum
        \clef "hufnagel-fa2"
@@ -258,8 +258,8 @@ lowerStaff = \new MensuralStaff =  "lowerStaff" <<
            \accepts MensuralVoice
            \consists Custos_engraver
            \override TimeSignature #'style = #'mensural
-           \override KeySignature #'style = #'mensural
-           \override Accidental #'style = #'mensural
+           \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+           \override Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
            \override Custos #'style = #'mensural
            \override Custos #'neutral-position = #3
            \override Custos #'neutral-direction = #down
@@ -276,8 +276,8 @@ lowerStaff = \new MensuralStaff =  "lowerStaff" <<
            \remove Time_signature_engraver
            \override StaffSymbol #'thickness = #2.0
            \override StaffSymbol #'line-count = #4
-           \override KeySignature #'style = #'vaticana
-           \override Accidental #'style = #'vaticana
+           \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+           \override Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
            \override Custos #'style = #'vaticana
            \override Custos #'neutral-position = #4
            \override Custos #'neutral-direction = #down
index 525c5a776b27d2ed3d41e196da0d87a0910acdba..a74b0baa8b94229ec85a632cc172631acbed73d3 100644 (file)
@@ -12,20 +12,16 @@ compound time.
 
 \layout{ragged-right = ##t}
 
-#(define (compound-time grob one two num)
-  (interpret-markup
-   (ly:grob-layout grob)
-   '(((baseline-skip . 2)
-      (word-space . 2)
-      (font-family . number)))
-   (markup
-    #:line ( #:column (one num) #:lower 1 "+" #:column (two num)))))
+#(define (compound-time one two num)
+  (markup #:override '(baseline-skip . 0) #:number 
+   (#:line ((#:column (one num)) #:vcenter "+" (#:column (two num))))))
+
 
 \relative {
   %% compound time signature hack
   \time 5/8
-  \override Staff.TimeSignature  #'stencil
-  = #(lambda (grob) (compound-time grob "2" "3" "8"))
+  \override Staff.TimeSignature #'stencil = #ly:text-interface::print
+  \override Staff.TimeSignature #'text = #(compound-time "2" "3" "8" )
   #(override-auto-beam-setting '(end 1 8 5 8) 1 4)
   c8 c c8 c c
 }
index c4199cb643fedce3ea7ef5e9417c56d8eced6119..1fdb502d1cf0e68098bf78b5375e03b4f6a386e6 100644 (file)
@@ -105,7 +105,6 @@ MyVoice = \context {
   \consists "Chord_tremolo_engraver"
   \consists "Percent_repeat_engraver"
   \consists "Slash_repeat_engraver"
-  \consists "Melisma_translator"
 
 %{
   Must come before text_engraver, but after note_column engraver.
diff --git a/input/test/makam.ly b/input/test/makam.ly
new file mode 100644 (file)
index 0000000..549df76
--- /dev/null
@@ -0,0 +1,158 @@
+\header {
+
+  texidoc = "Makam is Turkish type of melody that uses 1/9 tone
+  microtonal alterations."
+
+}
+
+
+\version "2.11.6"
+
+%{
+
+Define 1/9 alterations.
+
+%}
+
+
+#(define-public KOMA 1/9)
+#(define-public BAKIYE 4/9)
+#(define-public KUCUK 5/9)
+#(define-public BUYUKMUCENNEB 8/9)
+
+%{
+
+Define pitch names
+
+%}
+
+makamPitchNames = #`(
+  (c . ,(ly:make-pitch -1 0 NATURAL))
+  (d . ,(ly:make-pitch -1 1 NATURAL))
+  (e . ,(ly:make-pitch -1 2 NATURAL))
+  (f . ,(ly:make-pitch -1 3 NATURAL))
+  (g . ,(ly:make-pitch -1 4 NATURAL))
+  (a . ,(ly:make-pitch -1 5 NATURAL))
+  (b . ,(ly:make-pitch -1 6 NATURAL))
+  
+  (cc . ,(ly:make-pitch -1 0 KOMA))
+  (dc . ,(ly:make-pitch -1 1 KOMA))
+  (ec . ,(ly:make-pitch -1 2 KOMA))
+  (fc . ,(ly:make-pitch -1 3 KOMA))
+  (gc . ,(ly:make-pitch -1 4 KOMA))
+  (ac . ,(ly:make-pitch -1 5 KOMA))
+  (bc . ,(ly:make-pitch -1 6 KOMA))
+
+  (cb . ,(ly:make-pitch -1 0 BAKIYE))
+  (db . ,(ly:make-pitch -1 1 BAKIYE))
+  (eb . ,(ly:make-pitch -1 2 BAKIYE))
+  (fb . ,(ly:make-pitch -1 3 BAKIYE))
+  (gb . ,(ly:make-pitch -1 4 BAKIYE))
+  (ab . ,(ly:make-pitch -1 5 BAKIYE))
+  (bb . ,(ly:make-pitch -1 6 BAKIYE))
+
+  (ck . ,(ly:make-pitch -1 0 KUCUK))
+  (dk . ,(ly:make-pitch -1 1 KUCUK))
+  (ek . ,(ly:make-pitch -1 2 KUCUK))
+  (fk . ,(ly:make-pitch -1 3 KUCUK))
+  (gk . ,(ly:make-pitch -1 4 KUCUK))
+  (ak . ,(ly:make-pitch -1 5 KUCUK))
+  (bk . ,(ly:make-pitch -1 6 KUCUK))
+
+  (cbm . ,(ly:make-pitch -1 0 BUYUKMUCENNEB))
+  (dbm . ,(ly:make-pitch -1 1 BUYUKMUCENNEB))
+  (ebm . ,(ly:make-pitch -1 2 BUYUKMUCENNEB))
+  (fbm . ,(ly:make-pitch -1 3 BUYUKMUCENNEB))
+  (gbm . ,(ly:make-pitch -1 4 BUYUKMUCENNEB))
+  (abm . ,(ly:make-pitch -1 5 BUYUKMUCENNEB))
+  (bbm . ,(ly:make-pitch -1 6 BUYUKMUCENNEB))
+
+  ;; f for flat.
+  (cfc . ,(ly:make-pitch -1 0 (- KOMA)))
+  (dfc . ,(ly:make-pitch -1 1 (- KOMA)))
+  (efc . ,(ly:make-pitch -1 2 (- KOMA)))
+  (ffc . ,(ly:make-pitch -1 3 (- KOMA)))
+  (gfc . ,(ly:make-pitch -1 4 (- KOMA)))
+  (afc . ,(ly:make-pitch -1 5 (- KOMA)))
+  (bfc . ,(ly:make-pitch -1 6 (- KOMA)))
+  
+  (cfb . ,(ly:make-pitch -1 0 (- BAKIYE)))
+  (dfb . ,(ly:make-pitch -1 1 (- BAKIYE)))
+  (efb . ,(ly:make-pitch -1 2 (- BAKIYE)))
+  (ffb . ,(ly:make-pitch -1 3 (- BAKIYE)))
+  (gfb . ,(ly:make-pitch -1 4 (- BAKIYE)))
+  (afb . ,(ly:make-pitch -1 5 (- BAKIYE)))
+  (bfb . ,(ly:make-pitch -1 6 (- BAKIYE)))
+
+  (cfk . ,(ly:make-pitch -1 0 (- KUCUK)))
+  (dfk . ,(ly:make-pitch -1 1 (- KUCUK)))
+  (efk . ,(ly:make-pitch -1 2 (- KUCUK)))
+  (ffk . ,(ly:make-pitch -1 3 (- KUCUK)))
+  (gfk . ,(ly:make-pitch -1 4 (- KUCUK)))
+  (afk . ,(ly:make-pitch -1 5 (- KUCUK)))
+  (bfk . ,(ly:make-pitch -1 6 (- KUCUK)))
+
+  (cfbm . ,(ly:make-pitch -1 0 (- BUYUKMUCENNEB)))
+  (dfbm . ,(ly:make-pitch -1 1 (- BUYUKMUCENNEB)))
+  (efbm . ,(ly:make-pitch -1 2 (- BUYUKMUCENNEB)))
+  (ffbm . ,(ly:make-pitch -1 3 (- BUYUKMUCENNEB)))
+  (gfbm . ,(ly:make-pitch -1 4 (- BUYUKMUCENNEB)))
+  (afbm . ,(ly:make-pitch -1 5 (- BUYUKMUCENNEB)))
+  (bfbm . ,(ly:make-pitch -1 6 (- BUYUKMUCENNEB)))
+
+)
+
+
+%% set pitch names.
+pitchnames = \makamPitchNames 
+#(ly:parser-set-note-names parser makamPitchNames)
+
+\paper
+{
+  ragged-right = ##t
+}
+
+
+makamGlyphs = #'((1 . "accidentals.doublesharp")
+       (8/9 . "accidentals.sharp.slashslashslash.stemstem")
+       (5/9 . "accidentals.sharp.slashslashslash.stem")
+       (4/9 . "accidentals.sharp")
+       (1/9 . "accidentals.sharp.slashslash.stem")
+       (0 . "accidentals.natural")
+       (-1/9 . "accidentals.mirroredflat")
+       (-4/9 . "accidentals.flat.slash")
+       (-5/9 . "accidentals.flat")
+       (-8/9 . "accidentals.flat.slashslash")
+       (-1 . "accidentals.flatflat")
+       )
+
+\relative {
+
+  %{ define alteration <-> symbol mapping. The following glyphs are available.
+
+  accidentals.sharp 
+  accidentals.sharp.slashslash.stem 
+  accidentals.sharp.slashslashslash.stemstem 
+  accidentals.sharp.slashslashslash.stem 
+  accidentals.sharp.slashslash.stemstemstem 
+  accidentals.natural 
+  accidentals.flat 
+  accidentals.flat.slash 
+  accidentals.flat.slashslash 
+  accidentals.mirroredflat.flat 
+  accidentals.mirroredflat 
+  accidentals.flatflat 
+  accidentals.flatflat.slash 
+  accidentals.doublesharp 
+
+  %}
+
+  \override Accidental #'glyph-name-alist =  \makamGlyphs
+  
+  \override Staff.KeySignature #'glyph-name-alist = \makamGlyphs
+  \set Staff.keySignature =  #'(
+    (3 .  4/9)
+    (6 . -1/9))
+  
+  c cc db fk gbm gfc gfb efk dfbm
+}
index 9d671c11e610a0e34420ca703689247d4ba382ef..351ab2045a035df90825c9ce8edd99c973b05d8f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Modified 2001--2002 by Rune Zedeler <rz@daimi.au.dk>
 */
 
@@ -51,9 +51,9 @@ Accidental_entry::Accidental_entry ()
 class Accidental_engraver : public Engraver
 {
   int get_bar_number ();
-  void update_local_key_signature ();
+  void update_local_key_signature (SCM new_signature);
   void create_accidental (Accidental_entry *entry, bool, bool);
-  Grob *make_standard_accidental (Stream_event *note, Grob *note_head, Engraver *trans);
+  Grob *make_standard_accidental (Stream_event *note, Grob *note_head, Engraver *trans, bool);
   Grob *make_suggested_accidental (Stream_event *note, Grob *note_head, Engraver *trans);
 
 protected:
@@ -66,19 +66,14 @@ protected:
   void acknowledge_finger (Grob_info);
 
   void stop_translation_timestep ();
-  virtual void initialize ();
   void process_acknowledged ();
+  
   virtual void finalize ();
   virtual void derived_mark () const;
 
 public:
-  SCM last_keysig_;    // ugh.
+  SCM last_keysig_;
 
-  /*
-    Urgh. Since the accidentals depend on lots of variables, we have
-    to store all information before we can really create the
-    accidentals.
-  */
   vector<Grob*> left_objects_;
   vector<Grob*> right_objects_;
 
@@ -89,12 +84,8 @@ public:
 };
 
 /*
-  TODO:
-
-  ugh, it is not clear what properties are mutable and which
-  aren't. eg. localKeySignature is changed at runtime, which means
-  that references in grobs should always store ly_deep_copy ()s of
-  those.
+  localKeySignature is changed at runtime, which means that references
+  in grobs should always store ly_deep_copy ()s of those.
 */
 
 
@@ -111,30 +102,26 @@ Accidental_engraver::derived_mark () const
 }
 
 void
-Accidental_engraver::update_local_key_signature ()
+Accidental_engraver::update_local_key_signature (SCM new_sig)
 {
-  last_keysig_ = get_property ("keySignature");
+  last_keysig_ = new_sig;
   set_context_property_on_children (context (),
                                    ly_symbol2scm ("localKeySignature"),
-                                   last_keysig_);
+                                   new_sig);
 
   Context *trans = context ()->get_parent_context ();
 
-  /* Huh. Don't understand what this is good for. --hwn.  */
+  /* Reset parent contexts so that e.g. piano-accidentals won't remember old
+     cross-staff accidentals after key-sig-changes */
 
   SCM val;
-  while (trans && trans->where_defined (ly_symbol2scm ("localKeySignature"), &val))
+  while (trans && trans->where_defined (ly_symbol2scm ("localKeySignature"), &val)==trans)
     {
       trans->set_property ("localKeySignature", ly_deep_copy (last_keysig_));
       trans = trans->get_parent_context ();
     }
 }
 
-void
-Accidental_engraver::initialize ()
-{
-  update_local_key_signature ();
-}
 
 /** Calculate the number of accidentals on basis of the current local key
     sig (passed as argument)
@@ -155,49 +142,70 @@ recent_enough (int bar_number, SCM alteration_def, SCM laziness)
   return (bar_number <= scm_to_int (scm_cdr (alteration_def)) + scm_to_int (laziness));
 }
 
-static int
+static Rational
 extract_alteration (SCM alteration_def)
 {
   if (scm_is_number (alteration_def))
-    return scm_to_int (alteration_def);
+    return ly_scm2rational (alteration_def);
   else if (scm_is_pair (alteration_def))
-    return scm_to_int (scm_car (alteration_def));
+    return ly_scm2rational (scm_car (alteration_def));
   else if (alteration_def == SCM_BOOL_F)
-    return 0;
+    return Rational (0);
   else
     assert (0);
-  return 0;
+  return Rational (0);
 }
 
 bool
 is_tied (SCM alteration_def)
 {
-  return (alteration_def == SCM_BOOL_T)
-    || (scm_is_pair (alteration_def) && scm_car (alteration_def) == SCM_BOOL_T);
+  SCM tied = ly_symbol2scm ("tied");
+  return (alteration_def == tied
+         || (scm_is_pair (alteration_def) && scm_car (alteration_def) == tied));
 }
 
-static int
-number_accidentals_from_sig (bool *different, SCM sig, Pitch *pitch,
-                            int bar_number, SCM laziness, bool ignore_octave)
+struct Accidental_result
 {
-  int n = pitch->get_notename ();
-  int o = pitch->get_octave ();
+  bool need_acc;
+  bool need_restore;
+
+  Accidental_result () {
+    need_restore = need_acc = false;
+  }
+
+  int score () const {
+    return need_acc ? 1 : 0
+      + need_restore ? 1 : 0;
+  }
+};
+
+Accidental_result
+check_pitch_against_signature (SCM key_signature, Pitch const &pitch,
+                              int bar_number, SCM laziness, bool ignore_octave)
+{
+  Accidental_result result;
+  int n = pitch.get_notename ();
+  int o = pitch.get_octave ();
 
   SCM previous_alteration = SCM_BOOL_F;
 
   SCM from_same_octave = ly_assoc_get (scm_cons (scm_from_int (o),
-                                                scm_from_int (n)), sig, SCM_BOOL_F);
-  SCM from_key_signature = ly_assoc_get (scm_from_int (n), sig, SCM_BOOL_F);
+                                                scm_from_int (n)), key_signature, SCM_BOOL_F);
+  SCM from_key_signature = ly_assoc_get (scm_from_int (n), key_signature, SCM_BOOL_F);
   SCM from_other_octaves = SCM_BOOL_F;
-  for (SCM s = sig; scm_is_pair (s); s = scm_cdr (s))
+  for (SCM s = key_signature; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM entry = scm_car (s);
       if (scm_is_pair (scm_car (entry))
          && scm_cdar (entry) == scm_from_int (n))
-       from_other_octaves = scm_cdr (entry);
+       {
+         from_other_octaves = scm_cdr (entry);
+         break;
+       }
     }
 
-  if (from_same_octave != SCM_BOOL_F
+  if (!ignore_octave
+      && from_same_octave != SCM_BOOL_F
       && recent_enough (bar_number, from_same_octave, laziness))
     previous_alteration = from_same_octave;
   else if (ignore_octave
@@ -207,65 +215,63 @@ number_accidentals_from_sig (bool *different, SCM sig, Pitch *pitch,
   else if (from_key_signature != SCM_BOOL_F)
     previous_alteration = from_key_signature;
 
-  int num = 1;
   if (is_tied (previous_alteration))
     {
-      num = 1;
-      *different = true;
+      result.need_acc = true;
     }
   else
     {
-      int prev = extract_alteration (previous_alteration);
-      int alter = pitch->get_alteration ();
-
-      if (alter == prev)
-       num = 0;
-      else if ((abs (alter) < abs (prev)
-               || prev * alter < 0) && alter != 0)
-       num = 2;
-      *different = (alter != prev);
+      Rational prev = extract_alteration (previous_alteration);
+      Rational alter = pitch.get_alteration ();
+
+      if (alter != prev)
+        {
+         result.need_acc = true;
+         if (alter.sign ()
+             && (alter.abs () < prev.abs ()
+                 || (prev * alter).sign () < 0))
+           result.need_restore = true;
+       }
     }
-  return num;
+
+  return result;
 }
 
-static int
-number_accidentals (bool *different,
-                   Pitch *pitch, Context *origin,
-                   SCM accidentals, int bar_number)
+static
+Accidental_result
+check_pitch_against_rules (Pitch const &pitch, Context *origin,
+                                SCM rules, int bar_number)
 {
-  int number = 0;
-
-  *different = false;
-  if (scm_is_pair (accidentals) && !scm_is_symbol (scm_car (accidentals)))
+  Accidental_result result;
+  if (scm_is_pair (rules) && !scm_is_symbol (scm_car (rules)))
     warning (_f ("accidental typesetting list must begin with context-name: %s",
-                ly_scm2string (scm_car (accidentals)).c_str ()));
+                ly_scm2string (scm_car (rules)).c_str ()));
 
-  for (; scm_is_pair (accidentals) && origin;
-       accidentals = scm_cdr (accidentals))
+  for (; scm_is_pair (rules) && origin;
+       rules = scm_cdr (rules))
     {
-      // If pair then it is a new accidentals typesetting rule to be checked
-      SCM rule = scm_car (accidentals);
+      SCM rule = scm_car (rules);
       if (scm_is_pair (rule))
        {
          SCM type = scm_car (rule);
          SCM laziness = scm_cdr (rule);
          SCM localsig = origin->get_property ("localKeySignature");
 
-         bool same_octave_b
-           = scm_is_eq (ly_symbol2scm ("same-octave"), type);
-         bool any_octave_b
-           = scm_is_eq (ly_symbol2scm ("any-octave"), type);
+         bool same_octave
+           = (ly_symbol2scm ("same-octave") == type);
+         bool any_octave
+           = (ly_symbol2scm ("any-octave") == type);
 
-         if (same_octave_b || any_octave_b)
+         if (same_octave || any_octave)
            {
-             bool d = false;
-             int n = number_accidentals_from_sig
-               (&d, localsig, pitch, bar_number, laziness, any_octave_b);
-             *different = *different || d;
-             number = max (number, n);
+             Accidental_result rule_result = check_pitch_against_signature
+               (localsig, pitch, bar_number, laziness, any_octave);
+
+             result.need_acc |= rule_result.need_acc;
+             result.need_restore |= rule_result.need_restore;
            }
          else
-           warning (_f ("ignoring unknown accidental: %s",
+           warning (_f ("ignoring unknown accidental rule: %s",
                         ly_symbol2string (type).c_str ()));
        }
 
@@ -285,7 +291,7 @@ number_accidentals (bool *different,
                     ly_scm2string (rule).c_str ()));
     }
 
-  return number;
+  return result;
 }
 
 int
@@ -308,8 +314,8 @@ Accidental_engraver::process_acknowledged ()
 {
   if (accidentals_.size () && !accidentals_.back ().done_)
     {
-      SCM accidentals = get_property ("autoAccidentals");
-      SCM cautionaries = get_property ("autoCautionaries");
+      SCM accidental_rules = get_property ("autoAccidentals");
+      SCM cautionary_rules = get_property ("autoCautionaries");
       int barnum = get_bar_number ();
 
       for (vsize i = 0; i < accidentals_.size (); i++)
@@ -325,35 +331,29 @@ Accidental_engraver::process_acknowledged ()
          if (!pitch)
            continue;
 
-         bool different = false;
-         bool different_caut = false;
-
-         int num = number_accidentals (&different,
-                                       pitch, origin,
-                                       accidentals, barnum);
-         int num_caut = number_accidentals (&different_caut,
-                                            pitch, origin,
-                                            cautionaries, barnum);
-
+         Accidental_result acc = check_pitch_against_rules (*pitch, origin,
+                                                            accidental_rules, barnum);
+         Accidental_result caut = check_pitch_against_rules (*pitch, origin,
+                                                             cautionary_rules, barnum);
 
          bool cautionary = to_boolean (note->get_property ("cautionary"));
-         if (num_caut > num)
+         if (caut.score () > acc.score ())
            {
-             num = num_caut;
-             different = different_caut;
+             acc.need_acc |= caut.need_acc; 
+             acc.need_restore |= caut.need_restore; 
+
              cautionary = true;
            }
 
          bool forced = to_boolean (note->get_property ("force-accidental"));
-         if (num == 0 && forced)
-           num = 1;
+         if (!acc.need_acc && forced)
+           acc.need_acc = true;
 
          /* Cannot look for ties: it's not guaranteed that they reach
             us before the notes. */
-         if (num
+         if (acc.need_acc
              && !note->in_event_class ("trill-span-event"))
-           create_accidental (&accidentals_[i], num > 1, cautionary);
-
+           create_accidental (&accidentals_[i], acc.need_restore, cautionary);
 
          if (forced || cautionary)
            accidentals_[i].accidental_->set_property ("forced", SCM_BOOL_T);
@@ -368,44 +368,40 @@ Accidental_engraver::create_accidental (Accidental_entry *entry,
 {
   Stream_event *note = entry->melodic_;
   Grob *support = entry->head_;
-  Pitch *pitch = unsmob_pitch (note->get_property ("pitch"));
-
   bool as_suggestion = to_boolean (entry->origin_->get_property ("suggestAccidentals"));
   Grob *a = 0;
   if (as_suggestion)
     a = make_suggested_accidental (note, support, entry->origin_engraver_);
   else
-    a = make_standard_accidental (note, support, entry->origin_engraver_);
+    a = make_standard_accidental (note, support, entry->origin_engraver_, cautionary);
 
-  SCM accs = scm_cons (scm_from_int (pitch->get_alteration ()),
-                      SCM_EOL);
   if (restore_natural)
     {
       if (to_boolean (get_property ("extraNatural")))
-       accs = scm_cons (scm_from_int (0), accs);
+       a->set_property ("restore-first", SCM_BOOL_T);
     }
 
-  /* TODO: add cautionary option in accidental. */
-  if (cautionary)
-    a->set_property ("cautionary", SCM_BOOL_T);
-
-  a->set_property ("accidentals", accs);
   entry->accidental_ = a;
 }
 
 Grob *
 Accidental_engraver::make_standard_accidental (Stream_event *note,
                                               Grob *note_head,
-                                              Engraver *trans)
+                                              Engraver *trans,
+                                              bool cautionary)
 {
-
   (void)note;
+
   /*
     We construct the accidentals at the originating Voice
     level, so that we get the property settings for
     Accidental from the respective Voice.
   */
-  Grob *a = trans->make_item ("Accidental", note_head->self_scm ());
+  Grob *a = 0;
+  if (cautionary)
+    a = trans->make_item ("AccidentalCautionary", note_head->self_scm ());
+  else
+    a = trans->make_item ("Accidental", note_head->self_scm ());
 
   /*
     We add the accidentals to the support of the arpeggio,
@@ -417,9 +413,6 @@ Accidental_engraver::make_standard_accidental (Stream_event *note,
        Side_position_interface::add_support (left_objects_[i], a);
     }
 
-  /*
-    Hmm. Junkme? 
-   */
   for (vsize i = 0; i < right_objects_.size (); i++)
     Side_position_interface::add_support (a, right_objects_[i]);
 
@@ -431,7 +424,7 @@ Accidental_engraver::make_standard_accidental (Stream_event *note,
   Accidental_placement::add_accidental (accidental_placement_, a);
 
   note_head->set_object ("accidental-grob", a->self_scm ());
-
+  
   return a;
 }
 
@@ -441,6 +434,7 @@ Accidental_engraver::make_suggested_accidental (Stream_event *note,
                                                Engraver *trans)
 {
   (void) note;
+
   Grob *a = trans->make_item ("AccidentalSuggestion", note_head->self_scm ());
 
   Side_position_interface::add_support (a, note_head);
@@ -489,7 +483,7 @@ Accidental_engraver::stop_translation_timestep ()
 
       int n = pitch->get_notename ();
       int o = pitch->get_octave ();
-      int a = pitch->get_alteration ();
+      Rational a = pitch->get_alteration ();
       SCM key = scm_cons (scm_from_int (o), scm_from_int (n));
 
       SCM localsig = SCM_EOL;
@@ -503,8 +497,8 @@ Accidental_engraver::stop_translation_timestep ()
                Remember an alteration that is different both from
                that of the tied note and of the key signature.
              */
-             localsig = ly_assoc_front_x
-               (localsig, key, scm_cons (SCM_BOOL_T, scm_from_int (barnum)));
+             localsig = ly_assoc_prepend_x (localsig, key, scm_cons (ly_symbol2scm ("tied"),
+                                                                     scm_from_int (barnum)));
 
              change = true;
            }
@@ -514,8 +508,8 @@ Accidental_engraver::stop_translation_timestep ()
                not really really correct if there are more than one
                noteheads with the same notename.
              */
-             localsig = ly_assoc_front_x (localsig, key,
-                                          scm_cons (scm_from_int (a),
+             localsig = ly_assoc_prepend_x (localsig, key,
+                                          scm_cons (ly_rational2scm (a),
                                                     scm_from_int (barnum)));
              change = true;
            }
@@ -544,9 +538,8 @@ Accidental_engraver::acknowledge_rhythmic_head (Grob_info info)
       /*
        string harmonics usually don't have accidentals.
       */
-      if (to_boolean (get_property ("harmonicAccidentals"))
-         || !ly_is_equal (info.grob ()->get_property ("style"),
-                          ly_symbol2scm ("harmonic")))
+      if (info.grob ()->get_property ("style") != ly_symbol2scm ("harmonic")
+         || to_boolean (get_property ("harmonicAccidentals")))
        {
          Accidental_entry entry;
          entry.head_ = info.grob ();
@@ -581,10 +574,8 @@ void
 Accidental_engraver::process_music ()
 {
   SCM sig = get_property ("keySignature");
-  /* Detect key sig changes.
-     Update all parents and children.  */
   if (last_keysig_ != sig)
-    update_local_key_signature ();
+    update_local_key_signature (sig);
 }
 
 ADD_ACKNOWLEDGER (Accidental_engraver, arpeggio);
@@ -599,12 +590,18 @@ ADD_TRANSLATOR (Accidental_engraver,
                "This engraver usually lives at Staff level, but "
                "reads the settings for Accidental at @code{Voice} level, "
                "so you can @code{\\override} them at @code{Voice}. ",
-               "Accidental AccidentalSuggestion",
 
+               /* grobs */
+               "Accidental "
+               "AccidentalCautionary "
+               "AccidentalSuggestion ",
+
+               /* props */
                "autoAccidentals "
                "autoCautionaries "
                "internalBarNumber "
                "extraNatural "
                "harmonicAccidentals "
-               "localKeySignature",
-               "localKeySignature");
+               "localKeySignature ",
+               "localKeySignature "
+               );
index 6aaf49b2e6ea12c11ab32370de72453f9a9f85ed..323fa7d6f3d23764d361df92707fbe7f97772eee 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
@@ -406,7 +406,7 @@ Accidental_placement::calc_positioning_done (SCM smob)
     {
       Real offset = -apes[i]->right_skyline_.distance (left_skyline);
       if (isinf (offset))
-       offset = (i < apes.size () - 1) ? apes[i + 1]->offset_ : 0.0;
+       offset = (i + 1 < apes.size ()) ? apes[i + 1]->offset_ : 0.0;
       else
        offset -= padding;
 
index 060c97849dcc6dc7ad37924368580512b8c3c8c2..46db4f4f2f0bf51af1694c30dfc0fe3827d014e2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "accidental-interface.hh"
 #include "international.hh"
 #include "item.hh"
 #include "output-def.hh"
+#include "paper-column.hh"
 #include "pitch.hh"
 #include "stencil.hh"
 
-/*
-  TODO: insert support for smaller cautionaries, tie-break-reminders.
-  Either here or in new-accidental-engraver.
-
-  'accidentals should go, for a single 'accidental property -- see
-  accidental-placement.cc
-*/
 Stencil
 parenthesize (Grob *me, Stencil m)
 {
@@ -31,236 +25,167 @@ parenthesize (Grob *me, Stencil m)
   Stencil close
     = font->find_by_name ("accidentals.rightparen");
 
-  m.add_at_edge (X_AXIS, LEFT, Stencil (open), 0, 0);
-  m.add_at_edge (X_AXIS, RIGHT, Stencil (close), 0, 0);
+  m.add_at_edge (X_AXIS, LEFT, Stencil (open), 0);
+  m.add_at_edge (X_AXIS, RIGHT, Stencil (close), 0);
 
   return m;
 }
 
-/*
-  Hmm. Need separate callback, or perhaps #'live bool property.
- */
-MAKE_SCHEME_CALLBACK (Accidental_interface, after_line_breaking, 1);
+
+/* This callback exists for the sole purpose of allowing us to override
  its pure equivalent to accidental-interface::pure-height */
+MAKE_SCHEME_CALLBACK (Accidental_interface, height, 1);
 SCM
-Accidental_interface::after_line_breaking (SCM smob)
+Accidental_interface::height (SCM smob)
 {
-  Grob *me = unsmob_grob (smob);
-  Grob *tie = unsmob_grob (me->get_object ("tie"));
+  return Grob::stencil_height (smob);
+}
 
-  if (tie && !tie->original ()
-      && !to_boolean (me->get_property ("forced")))
-    {
-      me->suicide ();
-    }
-  return SCM_UNSPECIFIED;
+MAKE_SCHEME_CALLBACK (Accidental_interface, pure_height, 3);
+SCM
+Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
+{
+  Item *me = dynamic_cast<Item*> (unsmob_grob (smob));
+  int start = scm_to_int (start_scm);
+  int rank = me->get_column ()->get_rank ();
+
+  bool visible = to_boolean (me->get_property ("forced"))
+    || !unsmob_grob (me->get_object ("tie"))
+    || rank != start + 1; /* we are in the middle of a line */
+
+  return visible ? Grob::stencil_height (smob) : ly_interval2scm (Interval ());
 }
 
 vector<Box>
-Accidental_interface::accurate_boxes (Grob *a, Grob **common)
+Accidental_interface::accurate_boxes (Grob *me, Grob **common)
 {
   Box b;
-  b[X_AXIS] = a->extent (a, X_AXIS);
-  b[Y_AXIS] = a->extent (a, Y_AXIS);
+  b[X_AXIS] = me->extent (me, X_AXIS);
+  b[Y_AXIS] = me->extent (me, Y_AXIS);
 
   vector<Box> boxes;
 
-  bool parens = false;
-  if (to_boolean (a->get_property ("cautionary")))
-    {
-      SCM cstyle = a->get_property ("cautionary-style");
-      parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
-    }
+  bool parens = to_boolean (me->get_property ("parenthesized"));
 
-  SCM accs = a->get_property ("accidentals");
-  SCM scm_style = a->get_property ("style");
+  SCM scm_style = me->get_property ("style");
   if (!scm_is_symbol (scm_style)
-      && !parens
-      && scm_ilength (accs) == 1)
+      && !to_boolean (me->get_property ("restore-first"))
+      && !parens)
     {
-      switch (scm_to_int (scm_car (accs)))
+      Rational alteration = ly_scm2rational (me->get_property ("alteration"));
+      if (alteration == FLAT_ALTERATION)
        {
-       case FLAT:
-         {
-           Box stem = b;
-           Box bulb = b;
-
-           /*
-             we could make the stem thinner, but that places the flats
-             really close.
-           */
-           stem[X_AXIS][RIGHT] *= .5;
+         Box stem = b;
+         Box bulb = b;
 
-           /*
-             To prevent vertical alignment for 6ths
-           */
-           stem[Y_AXIS] *= 1.1;
-           bulb[Y_AXIS][UP] *= .35;
-
-           boxes.push_back (bulb);
-           boxes.push_back (stem);
-         }
-         break;
-       case NATURAL:
-         {
-           Box lstem = b;
-           Box rstem = b;
-           Box belly = b;
-
-           lstem[Y_AXIS] *= 1.1;
-           rstem[Y_AXIS] *= 1.1;
+         /*
+           we could make the stem thinner, but that places the flats
+           really close.
+         */
+         stem[X_AXIS][RIGHT] *= .5;
 
-           belly[Y_AXIS] *= 0.75;
-           lstem[X_AXIS][RIGHT] *= .33;
-           rstem[X_AXIS][LEFT] = rstem[X_AXIS].linear_combination (1.0 / 3.0);
-           lstem[Y_AXIS][DOWN] = belly[Y_AXIS][DOWN];
-           rstem[Y_AXIS][UP] = belly[Y_AXIS][UP];
-           boxes.push_back (belly);
-           boxes.push_back (lstem);
-           boxes.push_back (rstem);
-         }
-         break;
          /*
-           TODO: add support for, double flat.
+           To prevent vertical alignment for 6ths
          */
+         stem[Y_AXIS] *= 1.1;
+         bulb[Y_AXIS][UP] *= .35;
+
+         boxes.push_back (bulb);
+         boxes.push_back (stem);
+       }
+      else if (alteration == NATURAL_ALTERATION)
+       {
+         Box lstem = b;
+         Box rstem = b;
+         Box belly = b;
+
+         lstem[Y_AXIS] *= 1.1;
+         rstem[Y_AXIS] *= 1.1;
+
+         belly[Y_AXIS] *= 0.75;
+         lstem[X_AXIS][RIGHT] *= .33;
+         rstem[X_AXIS][LEFT] = rstem[X_AXIS].linear_combination (1.0 / 3.0);
+         lstem[Y_AXIS][DOWN] = belly[Y_AXIS][DOWN];
+         rstem[Y_AXIS][UP] = belly[Y_AXIS][UP];
+         boxes.push_back (belly);
+         boxes.push_back (lstem);
+         boxes.push_back (rstem);
        }
+      /*
+       TODO: add support for, double flat.
+      */
     }
 
   if (!boxes.size ())
     boxes.push_back (b);
 
-  Offset o (a->relative_coordinate (common[X_AXIS], X_AXIS),
-           a->relative_coordinate (common[Y_AXIS], Y_AXIS));
+  Offset o (me->relative_coordinate (common[X_AXIS], X_AXIS),
+           me->relative_coordinate (common[Y_AXIS], Y_AXIS));
+
   for (vsize i = boxes.size (); i--;)
     boxes[i].translate (o);
 
   return boxes;
 }
 
-/*
- * Some styles do not provide all flavours of accidentals, e.g. there
- * is currently no sharp accidental in vaticana style.  In these cases
- * this function falls back to one of the other styles.
- */
-
-/*
-  todo: this sort of stuff in Scheme. --hwn.
-*/
-string
-Accidental_interface::get_fontcharname (string style, int alteration)
-{
-  if (alteration == DOUBLE_FLAT
-      || alteration == DOUBLE_SHARP)
-    return to_string (alteration);
-
-  if (style == "hufnagel")
-    switch (alteration)
-      {
-      case FLAT: return "hufnagel-1";
-      case 0: return "vaticana0";
-      case SHARP: return "mensural1";
-      }
-  if (style == "medicaea")
-    switch (alteration)
-      {
-      case FLAT: return "medicaea-1";
-      case 0: return "vaticana0";
-      case SHARP: return "mensural1";
-      }
-  if (style == "vaticana")
-    switch (alteration)
-      {
-      case FLAT: return "vaticana-1";
-      case 0: return "vaticana0";
-      case SHARP: return "mensural1";
-      }
-  if (style == "mensural")
-    switch (alteration)
-      {
-      case FLAT: return "mensural-1";
-      case 0: return "vaticana0";
-      case SHARP: return "mensural1";
-      }
-
-  if (style == "neomensural")
-    style = ""; // currently same as default
-  if (style == "default")
-    style = "";
-  return style + to_string (alteration);
-}
-
 MAKE_SCHEME_CALLBACK (Accidental_interface, print, 1);
 SCM
 Accidental_interface::print (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
-  bool smaller = false;
-  bool parens = false;
+  Grob *tie = unsmob_grob (me->get_object ("tie"));
 
-  bool caut = to_boolean (me->get_property ("cautionary"));
-  if (caut)
+  if (tie && !tie->original ()
+      && !to_boolean (me->get_property ("forced")))
     {
-      SCM cstyle = me->get_property ("cautionary-style");
-      parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
-      smaller = ly_is_equal (cstyle, ly_symbol2scm ("smaller"));
+      me->suicide ();
+      return SCM_EOL;
     }
-
-  SCM scm_style = me->get_property ("style");
-  string style;
-  if (scm_is_symbol (scm_style))
-    style = ly_symbol2string (scm_style);
-  else
-    /*
-      preferably no name for the default style.
-    */
-    style = "";
-
-  Font_metric *fm = 0;
-  if (smaller)
+  
+  Font_metric *fm = Font_interface::get_default_font (me);
+
+  SCM alist = me->get_property ("glyph-name-alist");
+  SCM alt = me->get_property ("alteration");
+  SCM glyph_name = ly_assoc_get (alt, alist, SCM_BOOL_F);
+  
+  if (!scm_is_string (glyph_name))
     {
-      SCM ac = Font_interface::music_font_alist_chain (me);
-      /*
-       TODO: should calc font-size by adding -2 to current font-size
-      */
-      ac = scm_cons (scm_list_1 (scm_cons
-                                (ly_symbol2scm ("font-size"),
-                                 scm_from_int (-2))),
-                    ac);
-      fm = select_font (me->layout (), ac);
+      me->warning (_f ("Could not find glyph-name for alteration %s",
+                      ly_scm2rational (alt).to_string ().c_str ()));
+      return SCM_EOL;
     }
-  else
-    fm = Font_interface::get_default_font (me);
-
-  Stencil mol;
-  for (SCM s = me->get_property ("accidentals");
-       scm_is_pair (s); s = scm_cdr (s))
+  
+  Stencil mol (fm->find_by_name (scm_i_string_chars (glyph_name)));
+  if (to_boolean (me->get_property ("restore-first")))
     {
-      int alteration = scm_to_int (scm_car (s));
-      string font_char = get_fontcharname (style, alteration);
-      Stencil acc (fm->find_by_name ("accidentals." + font_char));
+      /*
+       this isn't correct for ancient accidentals, but they don't
+       use double flats/sharps anyway.
+       */
+      Stencil acc (fm->find_by_name ("accidentals.natural"));
 
       if (acc.is_empty ())
-       me->warning (_f ("accidental `%s' not found", font_char));
+       me->warning (_ ("natural alteration glyph not found"));
       else
-       mol.add_at_edge (X_AXIS, RIGHT, acc, 0.1, 0);
+       mol.add_at_edge (X_AXIS, LEFT, acc, 0.1);
     }
-
-  if (parens)
+  
+  if (to_boolean (me->get_property ("parenthesized")))
     mol = parenthesize (me, mol);
 
   return mol.smobbed_copy ();
 }
 
-/*
-  TODO: should move avoid-slur into item?
-*/
+  
 ADD_INTERFACE (Accidental_interface,
               "a single accidental",
-              "accidentals "
+              
+              /* props */
+              "alteration "
               "avoid-slur "
-              "cautionary "
-              "cautionary-style "
               "forced "
-              "style "
+              "parenthesized "
+              "restore-first "
+              "glyph-name-alist "
               "tie "
               );
index 2f23220c5a1bfe518f3b5998b8c063101eb54835..e52e8f69ff7c1891609d153ce0e2025097a5469d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "align-interface.hh"
@@ -14,7 +14,9 @@
 #include "hara-kiri-group-spanner.hh"
 #include "grob-array.hh"
 #include "international.hh"
+#include "system.hh"
 #include "warn.hh"
+#include "paper-column.hh"
 
 /*
   TODO: for vertical spacing, should also include a rod & spring
@@ -60,7 +62,7 @@ Align_interface::stretch_after_break (SCM grob)
       for (vsize i = 0; i < elems.size (); i++)
        elems[i]->relative_coordinate (common, Y_AXIS);
 
-      SCM details =  me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+      SCM details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
       SCM extra_space_handle = scm_assoc (ly_symbol2scm ("fixed-alignment-extra-space"), details);
       
       Real extra_space = robust_scm2double (scm_is_pair (extra_space_handle)
@@ -138,15 +140,38 @@ get_skylines (Grob *me,
              bool pure, int start, int end,
              vector<Skyline_pair> *const ret)
 {
-  Grob *other_axis_common = common_refpoint_of_array (*elements, me, other_axis (a));
+  /* each child's skyline was calculated according to the common refpoint of its
+     elements. Here we need all the skylines to be positioned with respect to
+     a single refpoint, so we need the common refpoint of the common refpoints
+     of the elements of the children */
+  vector<Grob*> child_refpoints;
+  for (vsize i = 0; i < elements->size (); i++)
+    {
+      Grob *elt = (*elements)[i];
+      Grob *child_common = unsmob_grob ((a == Y_AXIS)
+                                       ? elt->get_object ("X-common")
+                                       : elt->get_object ("Y-common"));
+      
+      if (!child_common)
+       {
+         extract_grob_set (elt, "elements", child_elts);
+         child_common = common_refpoint_of_array (child_elts, elt, other_axis (a));
+       }
+      
+      child_refpoints.push_back (child_common);
+    }
+  Grob *common_refpoint = common_refpoint_of_array (child_refpoints, me, other_axis (a));
+  
   for (vsize i = elements->size (); i--;)
     {
       Grob *g = (*elements)[i];
       Interval extent = g->maybe_pure_extent (g, a, pure, start, end);
       Interval other_extent = pure ? Interval (-infinity_f, infinity_f)
-       : g->extent (other_axis_common, other_axis (a));
-      Box b = (a == X_AXIS) ? Box (extent, other_extent) : Box (other_extent, extent);
-      
+       : g->extent (common_refpoint, other_axis (a));
+      Box b;
+      b[a] = extent;
+      b[other_axis (a)] = other_extent;
+
       if (extent.is_empty ())
        {
          elements->erase (elements->begin () + i);
@@ -179,8 +204,9 @@ get_skylines (Grob *me,
              b[a] = ly_scm2interval (min_extent);
              skylines.insert (b, 0, other_axis (a));
            }
-         Real offset = g->relative_coordinate (other_axis_common, other_axis (a));
-         skylines.shift (-offset);
+
+         Real offset = child_refpoints[i]->relative_coordinate (common_refpoint, other_axis (a));
+         skylines.shift (offset);
        }
 
 
@@ -201,7 +227,10 @@ Align_interface::get_extents_aligned_translates (Grob *me,
   SCM line_break_details = SCM_EOL;
   if (a == Y_AXIS && me_spanner)
     {
-      line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
+      if (pure)
+       line_break_details = get_root_system (me)->column (start)->get_property ("line-break-system-details");
+      else
+       line_break_details = me_spanner->get_bound (LEFT)->get_property ("line-break-system-details");
 
       if (!me->get_system () && !pure)
        me->warning (_ ("vertical alignment called before line-breaking.\n"
@@ -234,7 +263,7 @@ Align_interface::get_extents_aligned_translates (Grob *me,
       else
        dy = skylines[j-1][stacking_dir].distance (skylines[j][-stacking_dir]);
 
-      where += stacking_dir * (dy + padding + extra_space / elems.size ());
+      where += stacking_dir * max (0.0, dy + padding + extra_space / elems.size ());
       translates.push_back (where);
     }
 
@@ -274,8 +303,29 @@ Align_interface::align_elements_to_extents (Grob *me, Axis a)
 
   vector<Real> translates = get_extents_aligned_translates (me, all_grobs, a, false, 0, 0);
   if (translates.size ())
-      for (vsize j = 0; j < all_grobs.size (); j++)
-       all_grobs[j]->translate_axis (translates[j], a);
+    for (vsize j = 0; j < all_grobs.size (); j++)
+      all_grobs[j]->translate_axis (translates[j], a);
+}
+
+/* After we have already determined the y-offsets of our children, we may still
+   want to stretch them a little. */
+void
+Align_interface::stretch (Grob *me, Real amount, Axis a)
+{
+  extract_grob_set (me, "elements", elts);
+  Real non_empty_elts = 0.0;
+  for (vsize i = 0; i < elts.size (); i++)
+    non_empty_elts += !elts[i]->extent (me, a).is_empty ();
+
+  Real offset = 0.0;
+  Direction dir = robust_scm2dir (me->get_property ("stacking-dir"), DOWN);
+  for (vsize i = 0; i < elts.size (); i++)
+    {
+      elts[i]->translate_axis (dir * offset, a);
+      if (!elts[i]->extent (me, a).is_empty ())
+       offset += amount / non_empty_elts;
+    }
+  me->flush_extent_cache (Y_AXIS);
 }
 
 Real
@@ -311,7 +361,7 @@ Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, in
        return 0;
     }
 
-  programming_error (_ ("tried to get a translation for something that isn't my child"));
+  programming_error (_ ("tried to get a translation for something that is no child of mine"));
   return 0;
 }
 
@@ -347,6 +397,31 @@ Align_interface::set_ordered (Grob *me)
   ga->set_ordered (true);
 }
 
+MAKE_SCHEME_CALLBACK (Align_interface, calc_max_stretch, 1)
+SCM
+Align_interface::calc_max_stretch (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  Spanner *spanner_me = dynamic_cast<Spanner*> (me);
+  Real ret = 0;
+
+  if (spanner_me)
+    {
+      Paper_column *left = dynamic_cast<Paper_column*> (spanner_me->get_bound (LEFT));
+      Real height = me->extent (me, Y_AXIS).length ();
+      SCM line_break_details = left->get_property ("line-break-system-details");
+      SCM fixed_offsets = scm_assq (ly_symbol2scm ("alignment-offsets"),
+                                   line_break_details);
+
+      /* if there are fixed offsets, we refuse to stretch */
+      if (fixed_offsets != SCM_BOOL_F)
+       ret = 0;
+      else
+       ret = height * height / 80.0; /* why this, exactly? -- jneem */
+    }
+  return scm_from_double (ret);
+}
+
 /*
   Find Y-axis parent of G that has a #'forced-distance property. This
   has the effect of finding the piano-staff given an object in that
index bf2aadd4bb057cc6252538665fe756f2fb9b6b67..f8da4b2ecdf4ef205e0989baa64b83f85b0ba76c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "all-font-metrics.hh"
@@ -65,15 +65,10 @@ All_font_metrics::All_font_metrics (All_font_metrics const &)
 #if HAVE_PANGO_FT2
 
 Pango_font *
-All_font_metrics::find_pango_font (PangoFontDescription *description,
-                                  Real magnification,
+All_font_metrics::find_pango_font (PangoFontDescription const *description,
                                   Real output_scale
                                   )
 {
-  pango_font_description_set_size (description,
-                                  gint (magnification *
-                                        pango_font_description_get_size (description)));
-
   gchar *pango_fn = pango_font_description_to_filename (description);
   SCM key = ly_symbol2scm (pango_fn);
 
@@ -104,37 +99,12 @@ All_font_metrics::find_pango_font (PangoFontDescription *description,
 
 #endif
 
-string
-kpathsea_find_file (string name, string ext)
-{
-  name += "." + ext;
-  string path = global_path.find (name);
-  if (path.length () > 0)
-    return path;
-
-  static SCM proc;
-  if (!proc)
-    {
-      SCM module = scm_c_resolve_module ("scm kpathsea");
-      proc = scm_c_module_lookup (module, "ly:kpathsea-find-file");
-      proc = scm_variable_ref (proc);
-    }
-
-  if (ly_is_procedure (proc))
-    {
-      SCM kp_result = scm_call_1 (proc, scm_makfrom0str (name.c_str ()));
-      if (scm_is_string (kp_result))
-       return ly_scm2string (kp_result);
-    }
-
-  return "";
-}
 
 Open_type_font *
 All_font_metrics::find_otf (string name)
 {
   SCM sname = ly_symbol2scm (name.c_str ());
-  SCM name_string = scm_makfrom0str (name.c_str ());
+  SCM name_string = ly_string2scm (name);
   SCM val;
   if (!otf_dict_->try_retrieve (sname, &val))
     {
@@ -170,7 +140,7 @@ All_font_metrics::find_font (string name)
 
   if (!f)
     {
-      error (_f ("can't find font: `%s'", name.c_str ()));
+      error (_f ("cannot find font: `%s'", name.c_str ()));
     }
 
   return f;
index 5946b91c6d7c7c1f42226f0726272f0c8db8ac1b..0e4e2d949b8006bfb899909b10837a1d9176e0f5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 
   Han-Wen Nienhuys <hanwen@xs4all.nl
 */
@@ -148,8 +148,8 @@ Ambitus_engraver::finalize ()
            handle = scm_assoc (scm_from_int (p.get_notename ()),
                                start_key_sig_);
 
-         int sig_alter = (handle != SCM_BOOL_F)
-           ? scm_to_int (scm_cdr (handle)) : 0;
+         Rational sig_alter = (handle != SCM_BOOL_F)
+           ? ly_scm2rational (scm_cdr (handle)) : Rational (0);
 
          if (sig_alter == p.get_alteration ())
            {
@@ -158,8 +158,7 @@ Ambitus_engraver::finalize ()
            }
          else
            {
-             SCM l = scm_list_1 (scm_from_int (p.get_alteration ()));
-             accidentals_[d]->set_property ("accidentals", l);
+             accidentals_[d]->set_property ("alteration", ly_rational2scm (p.get_alteration ()));
            }
        }
       while (flip (&d) != DOWN);
index 1e6da083bc1d13ae654c0858d5a06aa1cd5b4a3c..a584834f496a5d127af8f008caa3065052bf81cf 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "ambitus.hh"
@@ -24,7 +24,7 @@ Ambitus::print (SCM smob)
   Item *me = (Item *) unsmob_grob (smob);
   Stencil stencil;
 
-  // join heads
+  // FIXME : should be Ambitus_line join heads
   extract_grob_set (me, "note-heads", heads);
   if (to_boolean (me->get_property ("join-heads"))
       && heads.size () > 1)
index adf708da35259234ec376c6414ebc904d1110d33..adccbeea13d0f8e48a70af7a483a1d81e34b2bc5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
index 0086d121e79362616f2b0dbf998271a8cf384e2b..0528f71d9f576b644c3cd730c17e26b6903e5fee 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "engraver.hh"
index d9e9e80636854617517438444c42014b8ccad75b..234dbc44e3bd2575b9ffc5b87f9284ad49d7c4dc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "arpeggio.hh"
@@ -84,11 +84,11 @@ Arpeggio::print (SCM smob)
 
   for (Real y = heads[LEFT]; y < heads[RIGHT];
        y += squiggle.extent (Y_AXIS).length ())
-    mol.add_at_edge (Y_AXIS, UP, squiggle, 0.0, 0);
+    mol.add_at_edge (Y_AXIS, UP, squiggle, 0.0);
 
   mol.translate_axis (heads[LEFT], Y_AXIS);
   if (dir)
-    mol.add_at_edge (Y_AXIS, dir, arrow, 0, 0);
+    mol.add_at_edge (Y_AXIS, dir, arrow, 0);
 
   return mol.smobbed_copy ();
 }
index d0a36518a573584bcee77c14d75fa0b75a78a5c5..d052c4e8cc43821632e1490fe3a92ecf99dd9576 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "audio-column.hh"
@@ -11,9 +11,9 @@
 #include "audio-item.hh"
 #include "performance.hh"
 
-Audio_column::Audio_column (Moment at_mom)
+Audio_column::Audio_column (Moment when)
 {
-  at_mom_ = at_mom;
+  when_ = when;
 }
 
 void
@@ -24,14 +24,21 @@ Audio_column::add_audio_item (Audio_item *l)
 }
 
 Moment
-Audio_column::at_mom () const
+Audio_column::when () const
 {
-  return at_mom_;
+  return when_;
+}
+
+int
+Audio_column::ticks () const
+{
+  return int (moment_to_ticks (when_));
 }
 
 void
-Audio_column::offset_at_mom (Moment m)
+Audio_column::offset_when (Moment m)
 {
-  at_mom_ += m;
+  when_ += m;
 }
 
+
index 877828bb9422ebc78a4ff7ea76b22a598fedac63..bcae088b678bca9f3c4dfeda561d5f26c8bd6426 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "audio-element-info.hh"
index f61a356e8bb36b5b59dfc9ce4a98596676f3d51a..8d3a3e39534384768a34ae87f2de82df9ea8b66e 100644 (file)
@@ -3,8 +3,9 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
+#include <cassert> 
 
 #include "audio-element.hh"
 
index fe8c5539e1c6e593a339553132a0abbd889e7277..41381458f6e4f474a6d5c3167254d465c387d791 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "audio-item.hh"
@@ -16,17 +16,28 @@ Audio_instrument::Audio_instrument (string instrument_string)
   str_ = instrument_string;
 }
 
+void
+Audio_item::render ()
+{
+}
+
+Audio_column *
+Audio_item::get_column () const
+{
+  return audio_column_;
+}
+
 Audio_item::Audio_item ()
 {
   audio_column_ = 0;
 }
 
-Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i)
+Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposing)
 {
   pitch_ = p;
   length_mom_ = m;
   tied_ = 0;
-  transposing_ = transposing_i;
+  transposing_ = transposing;
   tie_event_ = tie_event;
 }
 
@@ -47,14 +58,93 @@ Audio_key::Audio_key (int acc, bool major)
   major_ = major;
 }
 
-Audio_dynamic::Audio_dynamic (Real volume)
+Audio_dynamic::Audio_dynamic ()
+{
+  volume_ = -1;
+}
+
+Audio_span_dynamic::Audio_span_dynamic ()
 {
-  volume_ = volume;
+  grow_dir_ = CENTER;
 }
 
-Audio_tempo::Audio_tempo (int per_minute_4_i)
+void
+Audio_span_dynamic::add_absolute (Audio_dynamic *d)
+{
+  assert (d);
+  dynamics_.push_back (d);
+}
+
+Moment
+remap_grace_duration (Moment m)
+{
+  return Moment (m.main_part_ + Rational (9,40) * m.grace_part_,
+                Rational (0));
+}
+
+Real
+moment_to_real (Moment m)
+{
+  return remap_grace_duration (m).main_part_.to_double ();
+}
+
+int
+moment_to_ticks (Moment m)
+{
+  return int (moment_to_real (m) * 384 * 4);
+}
+
+void
+Audio_span_dynamic::render ()
+{
+  if (dynamics_.size () <= 1)
+    return ;
+
+  assert (dynamics_[0]->volume_ >= 0);
+
+  while  (dynamics_.back ()->volume_ > 0
+         && dynamics_.size () > 1
+         && sign (dynamics_.back ()->volume_ - dynamics_[0]->volume_) != grow_dir_)
+    {
+      dynamics_.erase (dynamics_.end () - 1);
+    }
+
+  if (dynamics_.size () <= 1)
+    {
+      programming_error ("(de)crescendo on items with specified volume.");
+      return ;
+    }
+  
+  Real delta_v = grow_dir_ * 0.1;
+  
+  Real start_v = dynamics_[0]->volume_;
+  if (dynamics_.back ()->volume_ < 0)
+    dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, 1.0), 0.0);
+
+  delta_v = dynamics_.back ()->volume_ - dynamics_[0]->volume_;
+
+  Moment start = dynamics_[0]->get_column ()->when ();
+
+  Real total_t = moment_to_real (dynamics_.back ()->get_column ()->when () - start);
+  
+  for (vsize i = 1; i < dynamics_.size(); i ++)
+    {
+      Moment dt_moment = dynamics_[i]->get_column ()->when ()
+       - start;
+
+      Real dt =  moment_to_real (dt_moment);
+      
+      Real v = start_v + delta_v *  (dt / total_t);
+
+      dynamics_[i]->volume_ = v;       
+    }
+}
+
+
+
+Audio_tempo::Audio_tempo (int per_minute_4)
 {
-  per_minute_4_ = per_minute_4_i;
+  per_minute_4_ = per_minute_4;
 }
 
 Audio_time_signature::Audio_time_signature (int beats, int one_beat)
index 1616ceb3c83cb9354f6c3226b194948f792f43d5..120313ef6455c2505e7af243992a8960590eb1df 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "audio-staff.hh"
@@ -28,10 +28,11 @@ Audio_staff::output (Midi_stream &midi_stream, int channel)
 {
   Midi_track midi_track;
   midi_track.number_ = channel;
-  
-  for (Midi_walker i (this, &midi_track, channel); i.ok (); i++)
+
+  Midi_walker i (this, &midi_track, channel);
+  for (; i.ok (); i++)
     i.process ();
   
-  midi_stream << midi_track;
+  midi_stream.write (midi_track);
 }
 
index 48766e7e5245573324613f59e929431db0a4f31e..4ff8d9d2b7c88e7632907e0651f02483ac90c55e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "bar-line.hh"
@@ -186,8 +186,7 @@ Auto_beam_engraver::create_beam ()
     Can't use make_spanner_from_properties() because we have to use
     beam_settings_.
   */
-  Spanner *beam = new Spanner (beam_settings_,
-                              context ()->get_grob_key ("Beam"));
+  Spanner *beam = new Spanner (beam_settings_);
 
   for (vsize i = 0; i < stems_->size (); i++)
     Beam::add_stem (beam, (*stems_)[i]);
@@ -238,8 +237,12 @@ Auto_beam_engraver::end_beam ()
   else
     {
       finished_beam_ = create_beam ();
+      
       if (finished_beam_)
-       finished_grouping_ = grouping_;
+       {
+         announce_end_grob (finished_beam_, SCM_EOL);
+         finished_grouping_ = grouping_;
+       }
       delete stems_;
       stems_ = 0;
       grouping_ = 0;
@@ -427,5 +430,11 @@ ADD_TRANSLATOR (Auto_beam_engraver,
                "@ref{Stem_engraver} properties @code{stemLeftBeamCount} and "
                "@code{stemRightBeamCount}. ",
                /* create */ "Beam",
-               /* read */ "autoBeaming autoBeamSettings beatLength subdivideBeams",
+
+               /* read */
+               "autoBeaming "
+               "autoBeamSettings "
+               "beatLength "
+               "subdivideBeams ",
+               
                /* write */ "");
index a935bfc05a98081c34e72db0e62375555e4d2ddc..04ed126556cc7b53d8620a13e47da5bbeeccd6db 100644 (file)
@@ -60,7 +60,7 @@ Auto_change_iterator::change_to (Music_iterator *it, SCM to_type_sym,
   if (current && current->id_string () == to_id)
     {
       string msg;
-      msg += _f ("can't change, already in translator: %s", to_id);
+      msg += _f ("cannot change, already in translator: %s", to_id);
     }
 
   if (current)
index e6ad51e6836a53ce9614a675fe6626c04646682e..3d83349526d399449ec06cf26ff6e5024fab8730 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "axis-group-engraver.hh"
index bc1449f8da1f34db0e0f8633131f14e44d46f7b8..d0470b5a75c1ffad648d8ba1f8d6865d787540ea 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "axis-group-interface.hh"
index 4319bb8b92cd0594311142bed40928dddeec28ae..e87a108e7a200e9a7bb8247432290bab164b6f21 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "axis-group-interface.hh"
@@ -68,6 +68,14 @@ Axis_group_interface::relative_group_extent (vector<Grob*> const &elts,
   return r;
 }
 
+
+/*
+  FIXME: pure extent handling has a lot of ad-hoc caching.
+  This should be done with grob property callbacks.
+
+  --hwn
+*/
+
 Interval
 Axis_group_interface::cached_pure_height (Grob *me,
                                          vector<Grob*> const &elts,
@@ -101,7 +109,7 @@ Axis_group_interface::cached_pure_height (Grob *me,
   if (!scm_is_vector (extents))
     {
       extents = scm_c_make_vector (breaks.size () - 1, SCM_EOL);
-      for (vsize i = 0; i < breaks.size () - 1; i++)
+      for (vsize i = 0; i + 1 < breaks.size (); i++)
        {
          int st = Paper_column::get_rank (cols[breaks[i]]);
          int ed = Paper_column::get_rank (cols[breaks[i+1]]);
@@ -177,6 +185,17 @@ Axis_group_interface::pure_height (SCM smob, SCM start_scm, SCM end_scm)
   int end = robust_scm2int (end_scm, INT_MAX);
   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 */
+  System *system = dynamic_cast<System*> (me);
+  if (system)
+    {
+      SCM line_break_details = system->column (start)->get_property ("line-break-system-details");
+      SCM system_y_extent = scm_assq (ly_symbol2scm ("system-Y-extent"), line_break_details);
+      if (scm_is_pair (system_y_extent))
+       return scm_cdr (system_y_extent);
+    }
+
   return pure_group_height (me, start, end);
 }
 
@@ -235,44 +254,73 @@ Axis_group_interface::generic_group_extent (Grob *me, Axis a)
   return ly_interval2scm (r - my_coord);
 }
 
-SCM
-Axis_group_interface::pure_group_height (Grob *me, int start, int end)
+
+Grob *
+Axis_group_interface::calc_pure_elts_and_common (Grob *me)
 {
-  Grob *common = unsmob_grob (me->get_object ("common-refpoint-of-elements"));
+  if (Grob *c = unsmob_grob (me->get_object ("pure-Y-common")))
+    return c;
+  
+  extract_grob_set (me, "elements", elts);
+
+  vector<Grob*> relevant_elts;
+  SCM pure_relevant_p = ly_lily_module_constant ("pure-relevant?");
 
-  if (!common)
+  for (vsize i = 0; i < elts.size (); i++)
     {
-      extract_grob_set (me, "elements", elts);
+      if (to_boolean (scm_apply_1 (pure_relevant_p, elts[i]->self_scm (), SCM_EOL)))
+       relevant_elts.push_back (elts[i]);
 
-      vector<Grob*> relevant_elts;
-      SCM is_relevant = ly_lily_module_constant ("pure-relevant");
+      Item *it = dynamic_cast<Item*> (elts[i]);
+      Direction d = LEFT;
+      if (it)
+       do
+         {
+           Item *piece = it->find_prebroken_piece (d);
+           if (piece && to_boolean (scm_apply_1 (pure_relevant_p, piece->self_scm (), SCM_EOL)))
+             relevant_elts.push_back (piece);
+         }
+       while (flip (&d) != LEFT);
+    }
 
-      for (vsize i = 0; i < elts.size (); i++)
-       {
-         if (to_boolean (scm_apply_1 (is_relevant, elts[i]->self_scm (), SCM_EOL)))
-           relevant_elts.push_back (elts[i]);
-
-         Item *it = dynamic_cast<Item*> (elts[i]);
-         Direction d = LEFT;
-         if (it)
-           do
-             {
-               Item *piece = it->find_prebroken_piece (d);
-               if (piece && to_boolean (scm_apply_1 (is_relevant, piece->self_scm (), SCM_EOL)))
-                 relevant_elts.push_back (piece);
-             }
-           while (flip (&d) != LEFT);
-       }
+  Grob *common = common_refpoint_of_array (relevant_elts, me, Y_AXIS);
+  me->set_object ("pure-Y-common", common->self_scm ());
+  
+  SCM ga_scm = Grob_array::make_array ();
+  Grob_array *ga = unsmob_grob_array (ga_scm);
+  ga->set_array (relevant_elts);
+  me->set_object ("pure-relevant-elements", ga_scm);
 
-      common = common_refpoint_of_array (relevant_elts, me, Y_AXIS);
-      me->set_object ("common-refpoint-of-elements", common->self_scm ());
+  return common;
+}
 
-      SCM ga_scm = Grob_array::make_array ();
-      Grob_array *ga = unsmob_grob_array (ga_scm);
-      ga->set_array (relevant_elts);
-      me->set_object ("pure-relevant-elements", ga_scm);
-    }
+MAKE_SCHEME_CALLBACK(Axis_group_interface,calc_x_common, 1);
+SCM
+Axis_group_interface::calc_x_common (SCM grob)
+{
+  Grob *me = unsmob_grob (grob);
+
+  extract_grob_set (me, "elements", elts);
+  Grob *common = common_refpoint_of_array (elts, me, X_AXIS);
+  return common->self_scm ();
+}
+
+MAKE_SCHEME_CALLBACK(Axis_group_interface,calc_y_common, 1);
+SCM
+Axis_group_interface::calc_y_common (SCM grob)
+{
+  Grob *me = unsmob_grob (grob);
+
+  extract_grob_set (me, "elements", elts);
+  Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
+  return common->self_scm ();
+}
 
+SCM
+Axis_group_interface::pure_group_height (Grob *me, int start, int end)
+{
+  Grob *common = calc_pure_elts_and_common (me);
+       
   extract_grob_set (me, "pure-relevant-elements", elts);
   Real my_coord = me->relative_coordinate (common, Y_AXIS);
   Interval r (relative_pure_height (me, elts, common, start, end, true));
@@ -398,6 +446,10 @@ add_grobs_of_one_priority (Skyline_pair *const skylines,
              elements[i]->set_property ("outside-staff-priority", SCM_BOOL_F);
              last_affected_position[dir] = b[X_AXIS][RIGHT];
            }
+
+         /*
+           Ugh: quadratic. --hwn
+          */
          elements.erase (elements.begin () + i);
        }
     }
@@ -425,7 +477,7 @@ Axis_group_interface::skyline_spacing (Grob *me, vector<Grob*> elements)
       SCM priority = elements[i]->get_property ("outside-staff-priority");
       vector<Grob*> current_elts;
       current_elts.push_back (elements[i]);
-      while (i < elements.size () - 1
+      while (i + 1 < elements.size () 
             && scm_eq_p (elements[i+1]->get_property ("outside-staff-priority"), priority))
        current_elts.push_back (elements[++i]);
 
@@ -434,14 +486,32 @@ Axis_group_interface::skyline_spacing (Grob *me, vector<Grob*> elements)
   return skylines;
 }
 
+MAKE_SCHEME_CALLBACK (Axis_group_interface, calc_max_stretch, 1)
+SCM
+Axis_group_interface::calc_max_stretch (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  Real ret = 0;
+  extract_grob_set (me, "elements", elts);
+
+  for (vsize i = 0; i < elts.size (); i++)
+    if (Axis_group_interface::has_interface (elts[i]))
+      ret += robust_scm2double (elts[i]->get_property ("max-stretch"), 0.0);
+
+  return scm_from_double (ret);
+}
+
 ADD_INTERFACE (Axis_group_interface,
 
               "An object that groups other layout objects.",
 
               /* properties */
+              "X-common "
+              "Y-common "
               "axes "
               "elements "
-              "common-refpoint-of-elements "
+              "max-stretch "
+              "pure-Y-common "
               "pure-relevant-elements "
               "skylines "
               "cached-pure-extents "
index 9db33d90d167318db4a18df7f708c2a3f9c92bd8..6239b9e31c9ed0c8038368973b71f95f0bbb1d3d 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
index 065d61c159432bbc3737015e1dbe16836909b6a7..739fffcaf77ece7a1c6fa1bcbd5a8fb78397deca 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "text-interface.hh"
index 9f9f20fee0587b335ab88ff0dc540f6d912943da..fb3ebd341f7e9a2318afa8f76dd12c82c0e1c56c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
index ce456c8963cf5bf4571adc039ca37866854db659..57457c37770fa061ca0bd34c7399c81fa8c3bc0b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 840a1de15d352a19c1773707da83d5deed88f39e..75dbc6c1be36779ab174971dd9a7cafc6f46aca4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "bar-line.hh"
@@ -78,37 +78,37 @@ Bar_line::compound_barline (Grob *me, string str, Real h,
     return thin;
   else if (str == "|." || (h == 0 && str == ":|"))
     {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern, 0);
+      m.add_at_edge (X_AXIS, LEFT, thick, 0);
+      m.add_at_edge (X_AXIS, LEFT, thin, kern);
     }
   else if (str == ".|" || (h == 0 && str == "|:"))
     {
-      m.add_at_edge (X_AXIS, RIGHT, thick, 0, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thin, kern, 0);
+      m.add_at_edge (X_AXIS, RIGHT, thick, 0);
+      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
     }
   else if (str == ":|")
     {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern, 0);
-      m.add_at_edge (X_AXIS, LEFT, colon, kern, 0);
+      m.add_at_edge (X_AXIS, LEFT, thick, 0);
+      m.add_at_edge (X_AXIS, LEFT, thin, kern);
+      m.add_at_edge (X_AXIS, LEFT, colon, kern);
     }
   else if (str == "|:")
     {
-      m.add_at_edge (X_AXIS, RIGHT, thick, 0, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thin, kern, 0);
-      m.add_at_edge (X_AXIS, RIGHT, colon, kern, 0);
+      m.add_at_edge (X_AXIS, RIGHT, thick, 0);
+      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
+      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
     }
   else if (str == ":|:")
     {
-      m.add_at_edge (X_AXIS, LEFT, thick, thinkern, 0);
-      m.add_at_edge (X_AXIS, LEFT, colon, kern, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thick, kern, 0);
-      m.add_at_edge (X_AXIS, RIGHT, colon, kern, 0);
+      m.add_at_edge (X_AXIS, LEFT, thick, thinkern);
+      m.add_at_edge (X_AXIS, LEFT, colon, kern);
+      m.add_at_edge (X_AXIS, RIGHT, thick, kern);
+      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
     }
   else if (str == ".|.")
     {
-      m.add_at_edge (X_AXIS, LEFT, thick, thinkern, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thick, kern, 0);
+      m.add_at_edge (X_AXIS, LEFT, thick, thinkern);
+      m.add_at_edge (X_AXIS, RIGHT, thick, kern);
     }
   else if (str == "||")
     {
@@ -116,8 +116,8 @@ Bar_line::compound_barline (Grob *me, string str, Real h,
        should align to other side? this never appears
        on the system-start?
       */
-      m.add_at_edge (X_AXIS, RIGHT, thin, 0, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thin, thinkern, 0);
+      m.add_at_edge (X_AXIS, RIGHT, thin, 0);
+      m.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
     }
   else if (str == ":")
     {
index 88055cb0bbf00702476370ef8155e012d62627e2..f53cfd6f269075b54109c39e6eebac3d27dbc48d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-column.hh"
index ee351d0a26739d2fba275b4615cd108b3bfad33b..e703f9e9f796c62a837fe36843584c32fe70c461 100644 (file)
@@ -23,7 +23,7 @@ is_concave_single_notes (vector<int> const &positions, Direction beam_dir)
   /*
     notes above and below the interval covered by 1st and last note.
   */
-  for (vsize i = 1; i < positions.size () - 1; i++)
+  for (vsize i = 1; i + 1 < positions.size (); i++)
     {
       above = above || (positions[i] > covering[UP]);
       below = below || (positions[i] < covering[DOWN]);
@@ -36,7 +36,7 @@ is_concave_single_notes (vector<int> const &positions, Direction beam_dir)
   */
   int dy = positions.back () - positions[0];
   int closest = max (beam_dir * positions.back (), beam_dir * positions[0]);
-  for (vsize i = 2; !concave && i < positions.size () - 1; i++)
+  for (vsize i = 2; !concave && i + 1 < positions.size (); i++)
     {
       int inner_dy = positions[i] - positions[i - 1];
       if (sign (inner_dy) != sign (dy)
@@ -46,7 +46,7 @@ is_concave_single_notes (vector<int> const &positions, Direction beam_dir)
     }
 
   bool all_closer = true;
-  for (vsize i = 1; all_closer && i < positions.size () - 1; i++)
+  for (vsize i = 1; all_closer && i + 1 < positions.size (); i++)
     {
       all_closer = all_closer
        && (beam_dir * positions[i] > closest);
@@ -62,7 +62,7 @@ calc_positions_concaveness (vector<int> const &positions, Direction beam_dir)
   Real dy = positions.back () - positions[0];
   Real slope = dy / Real (positions.size () - 1);
   Real concaveness = 0.0;
-  for (vsize i = 1; i < positions.size () - 1; i++)
+  for (vsize i = 1; i + 1 < positions.size (); i++)
     {
       Real line_y = slope * i + positions[0];
 
@@ -96,17 +96,17 @@ Beam::calc_concaveness (SCM smob)
   Direction beam_dir = CENTER;
   for (vsize i = stems.size (); i--;)
     {
-      if (Stem::is_invisible (stems[i]))
-       stems.erase (stems.begin () + i);
-      else
+      if (Stem::is_normal_stem (stems[i]))
        {
          if (Direction dir = get_grob_direction (stems[i]))
            beam_dir = dir;
        }
+      else
+       stems.erase (stems.begin () + i);
     }
 
   if (stems.size () <= 2)
-    return SCM_UNSPECIFIED;
+    return scm_from_int (0);
 
   vector<int> close_positions;
   vector<int> far_positions;
index cad443299c789b79f8402e937238e6a28d80c20c..288a47494149b9077187d17902b224a791905be3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "beam.hh"
@@ -27,6 +27,7 @@ class Beam_engraver : public Engraver
 public:
   DECLARE_ACKNOWLEDGER (stem);
   DECLARE_ACKNOWLEDGER (rest);
+
 protected:
   Stream_event *start_ev_;
 
@@ -34,7 +35,7 @@ protected:
   Spanner *beam_;
   Stream_event *prev_start_ev_;
 
-  Stream_event *now_stop_ev_;
+  Stream_event *stop_ev_;
 
   Beaming_pattern *beam_info_;
   Beaming_pattern *finished_beam_info_;
@@ -90,7 +91,7 @@ Beam_engraver::Beam_engraver ()
   finished_beam_ = 0;
   finished_beam_info_ = 0;
   beam_info_ = 0;
-  now_stop_ev_ = 0;
+  stop_ev_ = 0;
   start_ev_ = 0;
   prev_start_ev_ = 0;
 }
@@ -104,7 +105,7 @@ Beam_engraver::listen_beam (Stream_event *ev)
   if (d == START && valid_start_point ())
     ASSIGN_EVENT_ONCE (start_ev_, ev);
   else if (d == STOP && valid_end_point ())
-    ASSIGN_EVENT_ONCE (now_stop_ev_, ev);
+    ASSIGN_EVENT_ONCE (stop_ev_, ev);
 }
 
 void
@@ -118,9 +119,6 @@ Beam_engraver::set_melisma (bool ml)
 void
 Beam_engraver::process_music ()
 {
-  if (beam_ && !to_boolean (get_property ("allowBeamBreak")))
-    context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
-
   if (start_ev_)
     {
       if (beam_)
@@ -140,6 +138,10 @@ Beam_engraver::process_music ()
       beam_info_ = new Beaming_pattern;
       /* urg, must copy to Auto_beam_engraver too */
     }
+
+  typeset_beam ();
+  if (stop_ev_ && beam_)
+    announce_end_grob (beam_, stop_ev_->self_scm ());
 }
 
 void
@@ -173,13 +175,12 @@ Beam_engraver::start_translation_timestep ()
 void
 Beam_engraver::stop_translation_timestep ()
 {
-  typeset_beam ();
-  if (now_stop_ev_)
+  if (stop_ev_)
     {
       finished_beam_ = beam_;
       finished_beam_info_ = beam_info_;
 
-      now_stop_ev_ = 0;
+      stop_ev_ = 0;
       beam_ = 0;
       beam_info_ = 0;
       typeset_beam ();
@@ -243,7 +244,7 @@ Beam_engraver::acknowledge_stem (Grob_info info)
   int durlog = unsmob_duration (ev->get_property ("duration"))->duration_log ();
   if (durlog <= 2)
     {
-      ev->origin ()->warning (_ ("stem doesn't fit in beam"));
+      ev->origin ()->warning (_ ("stem does not fit in beam"));
       prev_start_ev_->origin ()->warning (_ ("beam was started here"));
       /*
        don't return, since
@@ -321,7 +322,7 @@ Grace_beam_engraver::listen_beam (Stream_event *ev)
   if (d == START && valid_start_point ())
     start_ev_ = ev;
   else if (d == STOP && valid_end_point ())
-    now_stop_ev_ = ev;
+    stop_ev_ = ev;
 }
 
 
@@ -340,7 +341,6 @@ ADD_TRANSLATOR (Grace_beam_engraver,
                /* read */
                "beamMelismaBusy "
                "beatLength "
-               "allowBeamBreak "
                "subdivideBeams "
                ,
                /* write */ "");
index 9ef23055fba435b38126479f1bc79aa441d6f0f0..544dbfb3b128e6bad82de4c3d86bf1341d62f928 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
index a0a1528597b83af52fcfde7cb641685a5e2e9e87..695cb80b6eb2b8a950758b403b7e3bc3cb021507 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -37,15 +37,17 @@ Beam_quant_parameters::fill (Grob *him)
 {
   SCM details = him->get_property ("details");
 
+  /*
+    TODO: put in define-grobs.scm
+   */
   INTER_QUANT_PENALTY = get_detail (details, ly_symbol2scm ("inter-quant-penalty"), 1000.0);
   SECONDARY_BEAM_DEMERIT = get_detail (details, ly_symbol2scm ("secondary-beam-demerit"), 10.0);
   STEM_LENGTH_DEMERIT_FACTOR = get_detail (details, ly_symbol2scm ("stem-length-demerit-factor"), 5);
   REGION_SIZE = get_detail (details, ly_symbol2scm ("region-size"), 2);
   BEAM_EPS = get_detail (details, ly_symbol2scm ("beam-eps"), 1e-3);
-
-  // possibly ridiculous, but too short stems just won't do
   STEM_LENGTH_LIMIT_PENALTY = get_detail (details, ly_symbol2scm ("stem-length-limit-penalty"), 5000);
   DAMPING_DIRECTION_PENALTY = get_detail (details, ly_symbol2scm ("damping-direction-penalty"), 800);
+  HINT_DIRECTION_PENALTY = get_detail (details, ly_symbol2scm ("hint-direction-penalty"), 20);
   MUSICAL_DIRECTION_FACTOR = get_detail (details, ly_symbol2scm ("musical-direction-factor"), 400);
   IDEAL_SLOPE_FACTOR = get_detail (details, ly_symbol2scm ("ideal-slope-factor"), 10);
   ROUND_TO_ZERO_SLOPE = get_detail (details, ly_symbol2scm ("round-to-zero-slope"), 0.02);
@@ -152,8 +154,8 @@ Beam::quanting (SCM smob, SCM posns)
   for (int a = 2; a--;)
     common[a] = common_refpoint_of_array (stems, me, Axis (a));
 
-  Grob *fvs = first_visible_stem (me);
-  Grob *lvs = last_visible_stem (me);
+  Grob *fvs = first_normal_stem (me);
+  Grob *lvs = last_normal_stem (me);
   Real xl = fvs ? fvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0;
   Real xr = fvs ? lvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0;
 
@@ -297,7 +299,7 @@ Beam::quanting (SCM smob, SCM posns)
            }
        }
       if (mindist > 1e5)
-       programming_error ("can't find quant");
+       programming_error ("cannot find quant");
     }
 #endif
 
@@ -321,7 +323,7 @@ Beam::quanting (SCM smob, SCM posns)
 
       // debug quanting
       me->set_property ("quant-score",
-                       scm_makfrom0str (qscores[best_idx].score_card_.c_str ()));
+                       ly_string2scm (qscores[best_idx].score_card_));
     }
 #endif
 
@@ -401,10 +403,19 @@ Beam::score_slopes_dy (Real yl, Real yr,
     TODO: find a way to incorporate the complexity of the beam in this
     penalty.
   */
-  if (fabs (dy / dx) > parameters->ROUND_TO_ZERO_SLOPE
-      && sign (dy_damp) != sign (dy))
-    dem += parameters->DAMPING_DIRECTION_PENALTY;
-
+  if (sign (dy_damp) != sign (dy))
+    {
+      if (!dy)
+       {
+         if (fabs (dy_damp / dx) > parameters->ROUND_TO_ZERO_SLOPE)
+           dem += parameters->DAMPING_DIRECTION_PENALTY;
+         else
+           dem += parameters->HINT_DIRECTION_PENALTY;
+       }
+      else
+       dem += parameters->DAMPING_DIRECTION_PENALTY;
+    }
+  
   dem += parameters->MUSICAL_DIRECTION_FACTOR
     * max (0.0, (fabs (dy) - fabs (dy_mus)));
 
index d0204833527507b2e40b0e0f0a2bf4e558b8c9ad..ecc9d0b5a6ea979dcec6546bb7078fe44cf8ebac 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -41,6 +41,7 @@
 #include "staff-symbol-referencer.hh"
 #include "stem.hh"
 #include "warn.hh"
+#include "grob-array.hh"
 
 #if DEBUG_BEAM_SCORING
 #include "text-interface.hh" // debug output.
@@ -119,6 +120,21 @@ Beam::get_beam_count (Grob *me)
   return m;
 }
 
+MAKE_SCHEME_CALLBACK (Beam, calc_normal_stems, 1);
+SCM
+Beam::calc_normal_stems (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  
+  extract_grob_set (me, "stems", stems);
+  SCM val = Grob_array::make_array ();
+  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]);
+  
+  return val;  
+}
 
 MAKE_SCHEME_CALLBACK (Beam, calc_direction, 1);
 SCM
@@ -135,7 +151,7 @@ Beam::calc_direction (SCM smob)
 
   Direction dir = CENTER;
 
-  int count = visible_stem_count (me);
+  int count = normal_stem_count (me);
   if (count < 2)
     {
       extract_grob_set (me, "stems", stems);
@@ -148,7 +164,7 @@ Beam::calc_direction (SCM smob)
        }
       else 
        {
-         Grob *stem = first_visible_stem (me);
+         Grob *stem = first_normal_stem (me);
 
          /*
            ugh: stems[0] case happens for chord tremolo.
@@ -265,6 +281,9 @@ Beam::calc_beaming (SCM smob)
        }
       else
        {
+         /*
+           FIXME: what's this for? 
+          */
          SCM s = scm_cdr (this_beaming);
          for (; scm_is_pair (s); s = scm_cdr (s))
            {
@@ -298,7 +317,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common)
 {
   /* ugh, this has a side-effect that we need to ensure that
      Stem #'beaming is correct */
-  (void) me_grob->get_property ("quantized-positions");
+  (void) me_grob->get_property ("beaming");
 
   Spanner *me = dynamic_cast<Spanner*> (me_grob);
 
@@ -385,10 +404,14 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common)
          Direction event_dir = LEFT;
          do
            {
-             Drul_array<bool> on_bound (j == 0 && event_dir==LEFT,
-                                        j == segs.size() - 1 && event_dir==RIGHT);
-             Drul_array<bool> inside (j > 0, j < segs.size()-1);
-             bool event = on_bound[event_dir]
+             bool on_bound = (event_dir == LEFT) ? j == 0 :
+               j == segs.size() - 1;
+
+             bool inside_stem = (event_dir == LEFT)
+                       ? segs[j].stem_index_ > 0
+                       : segs[j].stem_index_ + 1  < stems.size () ;
+                     
+             bool event = on_bound
                || abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1
                || (abs (vertical_count) >= segs[j].max_connect_
                    || abs (vertical_count) >= segs[j + event_dir].max_connect_);
@@ -400,7 +423,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common)
              current.horizontal_[event_dir] = segs[j].stem_x_;
              if (segs[j].dir_ == event_dir)
                {
-                 if (on_bound[event_dir]
+                 if (on_bound
                      && me->get_bound (event_dir)->break_status_dir ())
                    {
                      current.horizontal_[event_dir]
@@ -413,12 +436,16 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common)
                        Stem::duration_log (segs[j].stem_) == 1
                        ? 1.98
                        : 1.32; // URG.
-                     
-                     if (inside[event_dir])
-                       notehead_width = min (notehead_width,
-                                             fabs (segs[j+ event_dir].stem_x_
-                                                   - segs[j].stem_x_)/2);
-                     
+
+
+                     if (inside_stem)
+                       {
+                         Grob *neighbor_stem = stems[segs[j].stem_index_ + event_dir];
+                         Real neighbor_stem_x = neighbor_stem->relative_coordinate (commonx, X_AXIS);
+
+                         notehead_width = min (notehead_width,
+                                               fabs (neighbor_stem_x - segs[j].stem_x_)/2);
+                       }
                      current.horizontal_[event_dir] += event_dir * notehead_width;
                    }
                }
@@ -452,10 +479,10 @@ Beam::print (SCM grob)
   vector<Beam_segment> segments = get_beam_segments (me, &commonx);
 
   Interval span;
-  if (visible_stem_count (me))
+  if (normal_stem_count (me))
     {
-      span[LEFT] = first_visible_stem (me)->relative_coordinate (commonx, X_AXIS);
-      span[RIGHT] = last_visible_stem (me)->relative_coordinate (commonx, X_AXIS);
+      span[LEFT] = first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
+      span[RIGHT] = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
     }
   else
     {
@@ -527,7 +554,7 @@ Beam::print (SCM grob)
                                    (me->layout ()->self_scm (), properties, quant_score));
 
       if (!score.is_empty ())
-       the_beam.add_at_edge (Y_AXIS, stem_dir, score, 1.0, 0);
+       the_beam.add_at_edge (Y_AXIS, stem_dir, score, 1.0);
     }
 #endif
 
@@ -646,7 +673,7 @@ Beam::consider_auto_knees (Grob *me)
 
   gaps.set_full ();
 
-  extract_grob_set (me, "stems", stems);
+  extract_grob_set (me, "normal-stems", stems);
 
   Grob *common = common_refpoint_of_array (stems, me, Y_AXIS);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
@@ -655,8 +682,6 @@ Beam::consider_auto_knees (Grob *me)
   for (vsize i = 0; i < stems.size (); i++)
     {
       Grob *stem = stems[i];
-      if (Stem::is_invisible (stem))
-       continue;
 
       Interval head_extents = Stem::head_positions (stem);
       if (!head_extents.is_empty ())
@@ -716,9 +741,6 @@ Beam::consider_auto_knees (Grob *me)
       for (vsize i = 0; i < stems.size (); i++)
        {
          Grob *stem = stems[i];
-         if (Stem::is_invisible (stem))
-           continue;
-
          Interval head_extents = head_extents_array[j++];
 
          Direction d = (head_extents.center () < max_gap.center ())
@@ -781,7 +803,7 @@ Beam::calc_stem_shorten (SCM smob)
     return scm_from_int (0);
 
   Real forced_fraction = 1.0 * forced_stem_count (me)
-    / visible_stem_count (me);
+    / normal_stem_count (me);
 
   int beam_count = get_beam_count (me);
 
@@ -817,27 +839,27 @@ Beam::calc_least_squares_positions (SCM smob, SCM posns)
   
   Grob *me = unsmob_grob (smob);
 
-  int count = visible_stem_count (me);
+  int count = normal_stem_count (me);
   Interval pos (0,0);
   if (count < 1)
     return ly_interval2scm (pos);
 
   vector<Real> x_posns;
-  extract_grob_set (me, "stems", stems);
+  extract_grob_set (me, "normal-stems", stems);
   Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
   Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
 
   Real my_y = me->relative_coordinate (commony, Y_AXIS);
 
-  Grob *fvs = first_visible_stem (me);
-  Grob *lvs = last_visible_stem (me);
+  Grob *fvs = first_normal_stem (me);
+  Grob *lvs = last_normal_stem (me);
 
   Interval ideal (Stem::get_stem_info (fvs).ideal_y_
                  + fvs->relative_coordinate (commony, Y_AXIS) - my_y,
                  Stem::get_stem_info (lvs).ideal_y_
                  + lvs->relative_coordinate (commony, Y_AXIS) - my_y);
 
-  Real x0 = first_visible_stem (me)->relative_coordinate (commonx, X_AXIS);
+  Real x0 = first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
   for (vsize i = 0; i < stems.size (); i++)
     {
       Grob *s = stems[i];
@@ -845,7 +867,7 @@ Beam::calc_least_squares_positions (SCM smob, SCM posns)
       Real x = s->relative_coordinate (commonx, X_AXIS) - x0;
       x_posns.push_back (x);
     }
-  Real dx = last_visible_stem (me)->relative_coordinate (commonx, X_AXIS) - x0;
+  Real dx = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS) - x0;
 
   Real y = 0;
   Real slope = 0;
@@ -853,8 +875,8 @@ Beam::calc_least_squares_positions (SCM smob, SCM posns)
   Real ldy = 0.0;
   if (!ideal.delta ())
     {
-      Interval chord (Stem::chord_start_y (first_visible_stem (me)),
-                     Stem::chord_start_y (last_visible_stem (me)));
+      Interval chord (Stem::chord_start_y (stems[0]),
+                     Stem::chord_start_y (stems.back ()));
 
       /* Simple beams (2 stems) on middle line should be allowed to be
         slightly sloped.
@@ -886,8 +908,6 @@ Beam::calc_least_squares_positions (SCM smob, SCM posns)
       for (vsize i = 0; i < stems.size (); i++)
        {
          Grob *s = stems[i];
-         if (Stem::is_invisible (s))
-           continue;
          ideals.push_back (Offset (x_posns[i],
                               Stem::get_stem_info (s).ideal_y_
                               + s->relative_coordinate (commony, Y_AXIS)
@@ -933,7 +953,7 @@ Beam::shift_region_to_valid (SCM grob, SCM posns)
   Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
   Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
 
-  Grob *fvs = first_visible_stem (me);
+  Grob *fvs = first_normal_stem (me);
 
   if (!fvs)
     return posns;
@@ -947,7 +967,7 @@ Beam::shift_region_to_valid (SCM grob, SCM posns)
       x_posns.push_back (x);
     }
 
-  Grob *lvs = last_visible_stem (me);
+  Grob *lvs = last_normal_stem (me);
   if (!lvs)
     return posns;
 
@@ -1024,7 +1044,7 @@ Beam::slope_damping (SCM smob, SCM posns)
   Grob *me = unsmob_grob (smob);
   Drul_array<Real> pos = ly_scm2interval (posns);
 
-  if (visible_stem_count (me) <= 1)
+  if (normal_stem_count (me) <= 1)
     return posns;
 
   
@@ -1044,13 +1064,13 @@ Beam::slope_damping (SCM smob, SCM posns)
 
       Real dy = pos[RIGHT] - pos[LEFT];
 
-      Grob *fvs = first_visible_stem (me);
-      Grob *lvs = last_visible_stem (me);
+      Grob *fvs = first_normal_stem (me);
+      Grob *lvs = last_normal_stem (me);
 
       Grob *commonx = fvs->common_refpoint (lvs, X_AXIS);
 
-      Real dx = last_visible_stem (me)->relative_coordinate (commonx, X_AXIS)
-       - first_visible_stem (me)->relative_coordinate (commonx, X_AXIS);
+      Real dx = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS)
+       - first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
 
       Real slope = dy && dx ? dy / dx : 0;
 
@@ -1164,8 +1184,8 @@ Beam::set_stem_lengths (SCM smob)
       thick = get_thickness (me);
     }
 
-  Grob *fvs = first_visible_stem (me);
-  Grob *lvs = last_visible_stem (me);
+  Grob *fvs = first_normal_stem (me);
+  Grob *lvs = last_normal_stem (me);
 
   Real xl = fvs ? fvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0;
   Real xr = lvs ? lvs->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0;
@@ -1217,7 +1237,7 @@ Beam::set_beaming (Grob *me, Beaming_pattern const *beaming)
            {
              int count = beaming->beamlet_count (i, d);
              if (i > 0
-                 && i < stems.size () -1
+                 && i + 1 < stems.size ()
                  && Stem::is_invisible (stem))
                count = min (count, beaming->beamlet_count (i,-d));
 
@@ -1237,16 +1257,13 @@ Beam::set_beaming (Grob *me, Beaming_pattern const *beaming)
 int
 Beam::forced_stem_count (Grob *me)
 {
-  extract_grob_set (me, "stems", stems);
+  extract_grob_set (me, "normal-stems", stems);
 
   int f = 0;
   for (vsize i = 0; i < stems.size (); i++)
     {
       Grob *s = stems[i];
 
-      if (Stem::is_invisible (s))
-       continue;
-
       /* I can imagine counting those boundaries as a half forced stem,
         but let's count them full for now. */
       Direction defdir = to_dir (s->get_property ("default-direction"));
@@ -1260,42 +1277,24 @@ Beam::forced_stem_count (Grob *me)
 }
 
 int
-Beam::visible_stem_count (Grob *me)
+Beam::normal_stem_count (Grob *me)
 {
-  extract_grob_set (me, "stems", stems);
-  int c = 0;
-  for (vsize i = stems.size (); i--;)
-    {
-      if (!Stem::is_invisible (stems[i]))
-       c++;
-    }
-  return c;
+  extract_grob_set (me, "normal-stems", stems);
+  return stems.size ();
 }
 
 Grob *
-Beam::first_visible_stem (Grob *me)
+Beam::first_normal_stem (Grob *me)
 {
-  extract_grob_set (me, "stems", stems);
-
-  for (vsize i = 0; i < stems.size (); i++)
-    {
-      if (!Stem::is_invisible (stems[i]))
-       return stems[i];
-    }
-  return 0;
+  extract_grob_set (me, "normal-stems", stems);
+  return stems.size () ? stems[0] : 0;
 }
 
 Grob *
-Beam::last_visible_stem (Grob *me)
+Beam::last_normal_stem (Grob *me)
 {
-  extract_grob_set (me, "stems", stems);
-
-  for (vsize i = stems.size (); i--;)
-    {
-      if (!Stem::is_invisible (stems[i]))
-       return stems[i];
-    }
-  return 0;
+  extract_grob_set (me, "normal-stems", stems);
+  return stems.size () ? stems.back () : 0;
 }
 
 /*
@@ -1325,15 +1324,11 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
   Grob *beam = unsmob_grob (stem->get_object ("beam"));
   if (!beam
       || !Beam::has_interface (beam)
-      || !Beam::visible_stem_count (beam))
+      || !Beam::normal_stem_count (beam))
     return scm_from_double (0.0);
 
-  Drul_array<Real> pos (0, 0);
-  SCM s = beam->get_property ("positions");
-  if (scm_is_pair (s) && scm_is_number (scm_car (s)))
-    pos = ly_scm2interval (s);
-  else
-    programming_error ("positions property should always be pair of numbers.");
+  Drul_array<Real> pos (robust_scm2drul (beam->get_property ("positions"),
+                                        Drul_array<Real> (0,0)));
 
   Real staff_space = Staff_symbol_referencer::staff_space (rest);
 
@@ -1341,8 +1336,8 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
 
   Real dy = pos[RIGHT] - pos[LEFT];
 
-  Drul_array<Grob*> visible_stems (first_visible_stem (beam),
-                                  last_visible_stem (beam));
+  Drul_array<Grob*> visible_stems (first_normal_stem (beam),
+                                  last_normal_stem (beam));
   extract_grob_set (beam, "stems", stems);
   
   Grob *common = common_refpoint_of_array (stems, beam, X_AXIS);
@@ -1369,6 +1364,11 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
   Real beam_y = stem_y - d * height_of_my_beams;
 
   Grob *common_y = rest->common_refpoint (beam, Y_AXIS);
+
+  /*
+    TODO: this is dubious, because this call needs the info we're
+    computing right now.
+   */
   Interval rest_extent = rest->extent (common_y, Y_AXIS);
   rest_extent.translate (offset);
   
@@ -1377,7 +1377,7 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
     = staff_space * (robust_scm2double (stem->get_property ("stemlet-length"), 0.0)
                     + robust_scm2double (rest->get_property ("minimum-distance"), 0.0));
 
-  Real shift = d * min (((beam_y - d * minimum_distance) - rest_dim) * d, 0.0);
+  Real shift = d * min (d * (beam_y - d * minimum_distance - rest_dim), 0.0);
 
   shift /= staff_space;
   Real rad = Staff_symbol_referencer::line_count (rest) * staff_space / 2;
@@ -1392,7 +1392,7 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
       < rad)
     shift = ceil (fabs (shift)) * sign (shift);
 
-  return scm_from_double (staff_space * shift);
+  return scm_from_double (offset + staff_space * shift);
 }
 
 bool
@@ -1467,6 +1467,7 @@ ADD_INTERFACE (Beam,
               "length-fraction "
               "least-squares-dy "
               "neutral-direction "
+              "normal-stems "
               "positions "
               "quant-score "
               "quantized-positions "
index 8966657e4813f37b1e55343cf9efcb64ef0fd29f..542ce8e455c61f6191a48c7a4d040948abd61285 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "beaming-pattern.hh"
@@ -30,8 +30,7 @@ Beam_rhythmic_element::de_grace ()
 {
   if (start_moment_.grace_part_)
     {
-      start_moment_.main_part_ = 
-       start_moment_.grace_part_; 
+      start_moment_.main_part_ = start_moment_.grace_part_; 
       start_moment_.grace_part_ = 0;
     }
 }
@@ -160,13 +159,13 @@ Beaming_pattern::beamify (Context *context)
   vsize k = 0;
   for (vsize i = 0; i  < infos_.size(); i++)
     {
-      while (j < group_starts.size() - 1
+      while (j + 1 < group_starts.size()
             && group_starts[j+1] <= infos_[i].start_moment_)
        j++;
 
       infos_[i].group_start_ = group_starts[j];
       infos_[i].beat_length_ = beat_length;  
-      while (k < beat_starts.size() - 1
+      while (k + 1 < beat_starts.size() 
             && beat_starts[k+1] <= infos_[i].start_moment_)
        k++;
 
diff --git a/lily/bend-engraver.cc b/lily/bend-engraver.cc
new file mode 100644 (file)
index 0000000..4287084
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+  bend-engraver.cc -- implement Bend_engraver
+
+  (c) 2006--2007 Han-Wen Nienhuys
+
+  
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "moment.hh"
+#include "spanner.hh"
+#include "stream-event.hh"
+
+#include "translator.icc"
+
+class Bend_engraver : public Engraver
+{
+public:
+  TRANSLATOR_DECLARATIONS (Bend_engraver);
+  DECLARE_ACKNOWLEDGER (note_head);
+
+protected:
+  DECLARE_TRANSLATOR_LISTENER (bend_after);
+  void process_music ();
+  void stop_translation_timestep ();
+  void start_translation_timestep ();
+  void stop_fall ();
+  
+private:
+  Moment stop_moment_;
+  Stream_event *fall_event_;
+  Spanner *fall_;
+  Grob *note_head_;
+};
+
+void
+Bend_engraver::stop_fall ()
+{
+  bool bar = scm_is_string (get_property ("whichBar"));
+  
+  
+  fall_->set_bound (RIGHT, unsmob_grob (bar
+                                       ? get_property ("currentCommandColumn")
+                                       : get_property ("currentMusicalColumn")));
+  fall_ = 0;
+  note_head_ = 0;
+  fall_event_ = 0;
+}
+
+void
+Bend_engraver::stop_translation_timestep ()
+{
+  if (fall_ && !fall_->get_bound (LEFT)) 
+    {
+      fall_->set_bound (LEFT, note_head_);
+      fall_->set_parent (note_head_,  Y_AXIS);
+    }
+}
+
+void
+Bend_engraver::start_translation_timestep ()
+{
+  if (fall_ && now_mom ().main_part_ >= stop_moment_.main_part_)
+    {
+      stop_fall ();
+    }
+}
+
+void
+Bend_engraver::acknowledge_note_head (Grob_info info)
+{
+  if (!fall_event_)
+    return;
+  
+  if (note_head_ && fall_)
+    {
+      stop_fall ();
+    }
+
+  note_head_ = info.grob ();
+  stop_moment_ = now_mom () + get_event_length (info.event_cause ());
+}
+
+Bend_engraver::Bend_engraver ()
+{
+  fall_ = 0;
+  note_head_ = 0;
+  fall_event_ = 0;
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Bend_engraver, bend_after);
+void
+Bend_engraver::listen_bend_after (Stream_event *ev)
+{
+  ASSIGN_EVENT_ONCE (fall_event_, ev);
+}
+
+void
+Bend_engraver::process_music ()
+{
+  if (fall_event_ && !fall_)
+    {
+      fall_ = make_spanner ("BendAfter", fall_event_->self_scm ());
+      fall_->set_property ("delta-position",
+                          scm_from_double (robust_scm2double (fall_event_->get_property ("delta-step"), 0)));
+    }
+}
+
+ADD_ACKNOWLEDGER (Bend_engraver, note_head);
+
+ADD_TRANSLATOR (Bend_engraver,
+               /* doc */ "Create fall spanners.",
+               /* create */ "BendAfter",
+               /* read */ "",
+               /* write */ "");
index d9510704eef33f1955c9b79934bb1a1f26d9d369..ccb27d58ea7f76e61cb1f4e00d3718d2821d12e6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "misc.hh"
index 77f3949992cbf1fb6eaa380245d190aa3da3ec47..1808821029595f95bd707a31d9aff26ef087984f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "bezier.hh"
@@ -14,21 +14,6 @@ Real binomial_coefficient_3[] = {
   1, 3, 3, 1
 };
 
-Real
-binomial_coefficient (Real over, int under)
-{
-  Real x = 1.0;
-
-  while (under)
-    {
-      x *= over / Real (under);
-
-      over -= 1.0;
-      under--;
-    }
-  return x;
-}
-
 void
 scale (vector<Offset> *array, Real x, Real y)
 {
index 750917187f65a86612d86fe0d21b2959010be73e..23237dbb0d7559e9cfa877d85f7a28596835a3d8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "book.hh"
@@ -64,3 +64,33 @@ LY_DEFINE (ly_parser_print_book, "ly:book-process",
   return SCM_UNSPECIFIED;
 }
 
+
+LY_DEFINE (ly_parser_print_book_to_systems, "ly:book-process-to-systems",
+          4, 0, 0, (SCM book_smob,
+                    SCM default_paper,
+                    SCM default_layout,
+                    SCM output),
+          "Print book. @var{output} is passed to the backend unchanged. "
+          "Eg. it may be "
+          "a string (for file based outputs) or a socket (for network based "
+          "output).")
+{
+  Book *book = unsmob_book (book_smob);
+
+  SCM_ASSERT_TYPE (book, book_smob, SCM_ARG1, __FUNCTION__, "Book");
+  SCM_ASSERT_TYPE (unsmob_output_def (default_paper),
+                  default_layout, SCM_ARG2, __FUNCTION__, "\\paper block");
+  SCM_ASSERT_TYPE (unsmob_output_def (default_layout),
+                  default_layout, SCM_ARG3, __FUNCTION__, "\\layout block");
+
+  Paper_book *pb = book->process (unsmob_output_def (default_paper),
+                                 unsmob_output_def (default_layout));
+  if (pb)
+    {
+      pb->classic_output (output);
+      pb->unprotect ();
+    }
+
+  return SCM_UNSPECIFIED;
+}
+
index 44f7ee4ef933f7f206c151c1b4738c72aece689c..f4d4dd790e1310b31cc53223b3e23f4b6f4e9404 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "book.hh"
@@ -11,7 +11,6 @@
 #include <cstdio>
 using namespace std;
 
-#include "lilypond-key.hh"
 #include "main.hh"
 #include "music.hh"
 #include "output-def.hh"
@@ -44,13 +43,17 @@ Book::Book (Book const &s)
   smobify_self ();
 
   if (s.paper_)
-    paper_ = s.paper_->clone ();
+    {
+      paper_ = s.paper_->clone ();
+      paper_->unprotect ();
+    }
   
   input_location_ = make_input (*s.origin ());
+
   header_ = ly_make_anonymous_module (false);
   if (ly_is_module (s.header_))
     ly_module_copy (header_, s.header_);
-
+  
   SCM *t = &scores_;
   for (SCM p = s.scores_; scm_is_pair (p); p = scm_cdr (p))
     {
@@ -126,9 +129,6 @@ Book::process (Output_def *default_paper,
   Real scale = scm_to_double (paper->c_variable ("output-scale"));
   Output_def *scaled_bookdef = scale_output_def (paper, scale);
 
-  Object_key *key = new Lilypond_general_key (0, user_key_, 0);
-  SCM scm_key = key->unprotect ();
-
   paper_book->paper_ = scaled_bookdef;
   scaled_bookdef->unprotect ();
 
@@ -140,7 +140,7 @@ Book::process (Output_def *default_paper,
       if (Score *score = unsmob_score (scm_car (s)))
        {
          SCM outputs = score
-           ->book_rendering (paper_book->paper_, default_layout, key);
+           ->book_rendering (paper_book->paper_, default_layout);
 
          while (scm_is_pair (outputs))
            {
@@ -164,7 +164,6 @@ Book::process (Output_def *default_paper,
        assert (0);
     }
 
-  scm_remember_upto_here_1 (scm_key);
   return paper_book;
 }
 
index 93356ac4827fa9e0f8b091534bd9e5cbcd3edf24..e44f166dbce2800bd31ce04aa21b3fb079c6894c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "box.hh"
index dcce285bdfa0492fe61b2081c9c26d0b0fe8000f..899fee3c61cbb566bc4de0796d979f4e83c32801 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #include "engraver.hh"
 #include "protected-scm.hh"
index 37eae382978e3d53ea8dddc6ef7724f6f2ffcce7..61eca90ab6b3611ef98d0a0c63fa5bf752519241 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
 #include "warn.hh"
 
 
-MAKE_SCHEME_CALLBACK (Break_alignment_interface, self_align_callback, 1);
-SCM
-Break_alignment_interface::self_align_callback (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-
-  Item *item = dynamic_cast<Item *> (me);
-  Direction bsd = item->break_status_dir ();
-  if (bsd == LEFT)
-    me->set_property ("self-alignment-X", scm_from_int (RIGHT));
-
-  /*
-    Force break alignment itself to be done first, in the case
-  */
-  return Self_alignment_interface::aligned_on_self (me, X_AXIS);
-}
 
 /*
   This is tricky: we cannot modify 'elements, since callers are
@@ -233,7 +217,7 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
       else
        {
          extra_right_space = distance;
-         if (idx < offsets.size() - 1)
+         if (idx + 1 < offsets.size ())
            offsets[idx+1] = extents[idx][RIGHT] + distance;
        }
 
index 4885c6ed7255607900aa70de689cb84b65c360c1..f283010303ae2be12956e40229d51d96661bcff1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cstdio>
index f24d85541f1c9e9ded778c75864bab72f7a6ad83..02d4c0942db29e882b9a8c543d01c3250241e1b3 100644 (file)
@@ -1,7 +1,7 @@
 /*
   breathing_sign-engraver.cc -- implement Breathing_sign_engraver
 
-  (c) 1999--2006 Michael Krause
+  (c) 1999--2007 Michael Krause
 
   written for the GNU LilyPond music typesetter
 
index d0acbcea05e6f29a8bcb95c7b2a682b5d12ad3c4..3c32a766d22b30ea83458efb79e93a087694364e 100644 (file)
@@ -1,13 +1,13 @@
 /*
   breathing_sign.cc -- implement Breathing_sign
 
-  (c) 1999--2006 Michael Krause
+  (c) 1999--2007 Michael Krause
 
   written for the GNU LilyPond music typesetter
 
   TODO: --> see breathing-sign-engraver.cc
 
-  Extensions for ancient notation (c) 2003--2006 by Juergen Reuter
+  Extensions for ancient notation (c) 2003--2007 by Juergen Reuter
 */
 
 #include "breathing-sign.hh"
@@ -41,14 +41,9 @@ Breathing_sign::divisio_minima (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
-  Real staff_size;
 
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
-  if (Staff_symbol_referencer::get_staff_symbol (me))
-    staff_size = (Staff_symbol_referencer::line_count (me) - 1) * staff_space;
-  else
-    staff_size = 0.0;
 
   Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
 
index 55099a855e4552cdeec205cad488e6ce86c33125..8b8f191006f90e4470d3c84831632fa7965b39d8 100644 (file)
@@ -20,7 +20,7 @@ Change_iterator::error (string reason)
   string to_type = ly_symbol2string (get_music ()->get_property ("change-to-type"));
   string to_id = ly_scm2string (get_music ()->get_property ("change-to-id"));
 
-  string warn1 = _f ("can't change `%s' to `%s'", to_type, to_id)
+  string warn1 = _f ("cannot change `%s' to `%s'", to_type, to_id)
     + ": " + reason;
 
   /*
@@ -58,7 +58,7 @@ Change_iterator::process (Moment m)
   if (current && current->id_string () == to_id)
     {
       string msg;
-      msg += _f ("can't change, already in translator: %s", to_id);
+      msg += _f ("cannot change, already in translator: %s", to_id);
     }
 
   if (current)
@@ -79,7 +79,7 @@ Change_iterator::process (Moment m)
          }
        else
          /* FIXME: constant error message.  */
-         get_music ()->origin ()->warning (_ ("can't find context to switch to"));
+         get_music ()->origin ()->warning (_ ("cannot find context to switch to"));
       }
     else
       {
index ec7efd9fcc41ba63991e0c0c4fa02a0358a1eb8f..274e3ec3904cc71810bf2ba4bbe343d37d8c1296 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "chord-name.hh"
index 959898e3a74f085264cf2844b3e1d74e7c937b1b..8ff3ffe763cbba2389e835da0e962d2d6290c1cb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "chord-name.hh"
index bd380facc7da61a06524a6c13724737e1018e383..805cb52554a864eb5e50bb8a71085314e492883d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
                 Erik Sandberg <mandolaerik@gmail.com>
 */
 
@@ -108,6 +108,7 @@ Chord_tremolo_engraver::finalize ()
   if (beam_)
     {
       repeat_->origin ()->warning (_ ("unterminated chord tremolo"));
+      announce_end_grob (beam_, SCM_EOL);
       beam_->suicide ();
     }
 }
@@ -125,8 +126,11 @@ Chord_tremolo_engraver::acknowledge_stem (Grob_info info)
        beam_->set_property ("gap-count", scm_from_int (flags_ - expected_beam_count_));
 
       if (beam_dir_ == RIGHT)
-        beam_dir_ = LEFT;
-
+       {
+         beam_dir_ = LEFT;
+         announce_end_grob (beam_, s->self_scm ());
+       }
+      
       if (info.ultimate_event_cause ()->in_event_class ("rhythmic-event"))
        Beam::add_stem (beam_, s);
       else
index 45ddbc443d65121fc4b1b7fcadf009fb67fef568..05e56e24a52f6b8d34919afdccbbcb1474f13f2f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
                 Erik Sandberg <mandolaerik@gmail.com>
 */
 
@@ -29,7 +29,9 @@ Chord_tremolo_iterator::get_music_list () const
 
   int elt_count = body_is_sequential ? scm_ilength (body->get_property ("elements")) : 1;
 
-  if (body_is_sequential && elt_count != 2)
+  if (body_is_sequential &&
+      (elt_count != 2
+       && elt_count != 1))
     mus->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count));
 
   if (elt_count <= 0)
index 258b0473970ec76f03ae16ac74012a60224d51d6..d9b2e27dea3d9cd544d7ccd831c757217028a9bb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>,
 
   Mats Bengtsson <matsb@s3.kth.se>
 */
index 36427055f525f4522af68132732fba502de4edc5..90b5480087bfa0433de2f57270518b7d17a48e42 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "clef.hh"
@@ -31,7 +31,7 @@ Clef::calc_glyph_name (SCM smob)
          str += "_change";
        }
 
-      return scm_makfrom0str (str.c_str ());
+      return ly_string2scm (str);
     }
 
   s->suicide ();
index c1cb5a40258384e2e1c960684d183c281ddd6f0d..e5ed481f6a53d8e32820f4d96ff4ac424717291f 100644 (file)
@@ -1,7 +1,7 @@
 /*
   cluster-engraver.cc -- implement Cluster_engraver
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
@@ -122,8 +122,11 @@ Cluster_spanner_engraver::acknowledge_note_column (Grob_info info)
 
 ADD_ACKNOWLEDGER (Cluster_spanner_engraver, note_column);
 ADD_TRANSLATOR (Cluster_spanner_engraver,
-               /* doc */       "Engraves a cluster using Spanner notation ",
-               /* create */    "ClusterSpanner ClusterSpannerBeacon",
+               /* doc */
+               "Engraves a cluster using Spanner notation ",
+               /* create */
+               "ClusterSpanner "
+               "ClusterSpannerBeacon ",
                /* read */      "",
                /* write */     "");
 
index 90c2adcf5054a15f9f8151e878ec8220590890ca..54b45ab862b91b8b8ee84a7b4b8832af976a8037 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
@@ -164,32 +164,22 @@ Cluster::print (SCM smob)
   /*
     Across a line break we anticipate on the next pitches.
   */
-  if (spanner->original ())
+  if (Spanner *next = spanner->broken_neighbor (RIGHT))
     {
-      Spanner *orig = dynamic_cast<Spanner *> (spanner->original ());
-
-      if (spanner->get_break_index () < orig->broken_intos_.size () - 1)
+      extract_grob_set (next, "columns", next_cols);
+      if (next_cols.size () > 0)
        {
-         Spanner *next = orig->broken_intos_[spanner->get_break_index () + 1];
-         vector<Grob*> const &next_cols = extract_grob_array (next, "columns");
-         if (next_cols.size () > 0)
-           {
-             Grob *next_commony = common_refpoint_of_array (next_cols, next, Y_AXIS);
-             Grob *col = next_cols[0];
-
-             Interval v = col->extent (next_commony, Y_AXIS);
-             Real x = right_bound->relative_coordinate (commonx, X_AXIS) - left_coord;
-
-             bottom_points.insert (bottom_points.begin (),
-                                   Offset (x, v[DOWN]));
-             top_points.insert (top_points.begin (), Offset (x, v[UP]));
-           }
+         Grob *next_commony = common_refpoint_of_array (next_cols, next, Y_AXIS);
+         Grob *col = next_cols[0];
+
+         Interval v = col->extent (next_commony, Y_AXIS);
+         Real x = right_bound->relative_coordinate (commonx, X_AXIS) - left_coord;
+
+         bottom_points.push_back (Offset (x, v[DOWN]));
+         top_points.push_back (Offset (x, v[UP]));
        }
     }
 
-  reverse (bottom_points);
-  reverse (top_points);
-
   Stencil out = brew_cluster_piece (me, bottom_points, top_points);
   out.translate_axis (- me->relative_coordinate (commony, Y_AXIS), Y_AXIS);
   return out.smobbed_copy ();
@@ -203,9 +193,12 @@ ADD_INTERFACE (Cluster,
               "The property @code{style} controls the shape of cluster segments.  Valid values "
               "include @code{leftsided-stairs}, @code{rightsided-stairs}, @code{centered-stairs}, "
               "and @code{ramp}.\n",
+
+              /* props */
               "style "
               "padding "
-              "columns ");
+              "columns "
+              );
 
 struct Cluster_beacon
 {
index 198b954b98f3ce3426378af513d5f1ca1eafbb62..004cf8d78e42d82b3026fd2b75cdc3ca290579fc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "coherent-ligature-engraver.hh"
index 32dddc1d7ae36c91e3079b7c840856307c6e6b64..7bff5a8cd4a9d0cebbfddb04d17ba89b7efb9c82 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -46,6 +46,9 @@ Collision_engraver::acknowledge_note_column (Grob_info i)
       if (Note_column::has_rests (i.grob ()) || i.grob ()->get_parent (X_AXIS))
        return;
 
+      if (to_boolean (i.grob ()->get_property ("ignore-collision")))
+       return;
+      
       note_columns_.push_back (i.grob ());
     }
 }
index 51eebbed23182148949ebf60ebf8bcbf4f815630..52a95d65ddd26d30e354804a535d6d321b6fd35d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "column-x-positions.hh"
index 66e31aaf52da8b541c31160f86930a0f25154dc8..cb4471528623ed66c9a7ce5ded3c4b708a533fc9 100644 (file)
@@ -1,7 +1,7 @@
 /*
   completion-note-heads-engraver.cc -- Completion_heads_engraver
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cctype>
index 52ed127306de3699aed50107bb1cff0d4ac58ed3..931e4c4ceced84a8c9479976ead96cdebfa52a82 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "constrained-breaking.hh"
@@ -109,16 +109,6 @@ Constrained_breaking::calc_subproblem (vsize start, vsize sys, vsize brk)
   return found_something;
 }
 
-vector<Column_x_positions>
-Constrained_breaking::solve ()
-{
-  if (!systems_)
-    return get_best_solution (0, VPOS);
-
-  resize (systems_);
-  return get_solution(0, VPOS, systems_);
-}
-
 Column_x_positions
 Constrained_breaking::space_line (vsize i, vsize j)
 {
@@ -156,7 +146,7 @@ Constrained_breaking::resize (vsize systems)
 }
 
 vector<Column_x_positions>
-Constrained_breaking::get_solution (vsize start, vsize end, vsize sys_count)
+Constrained_breaking::solve (vsize start, vsize end, vsize sys_count)
 {
   vsize start_brk = starting_breakpoints_[start];
   vsize end_brk = prepare_solution (start, end, sys_count);
@@ -173,7 +163,7 @@ Constrained_breaking::get_solution (vsize start, vsize end, vsize sys_count)
             {
               if (brk != end_brk)
                 {
-                  warning (_ ("couldn't find line breaking that satisfies constraints" ));
+                  warning (_ ("cannot find line breaking that satisfies constraints" ));
                   ret.push_back (space_line (brk, end_brk));
                 }
               /* build up the good solution */
@@ -190,16 +180,16 @@ Constrained_breaking::get_solution (vsize start, vsize end, vsize sys_count)
         }
     }
   /* if we get to here, just put everything on one line */
-  warning (_ ("couldn't find line breaking that satisfies constraints" ));
+  warning (_ ("cannot find line breaking that satisfies constraints" ));
   ret.push_back (space_line (0, end_brk));
   return ret;
 }
 
 vector<Column_x_positions>
-Constrained_breaking::get_best_solution (vsize start, vsize end)
+Constrained_breaking::best_solution (vsize start, vsize end)
 {
-  vsize min_systems =  get_min_systems (start, end);
-  vsize max_systems = get_max_systems (start, end);
+  vsize min_systems =  min_system_count (start, end);
+  vsize max_systems = max_system_count (start, end);
   Real best_demerits = infinity_f;
   vector<Column_x_positions> best_so_far;
 
@@ -211,11 +201,11 @@ Constrained_breaking::get_best_solution (vsize start, vsize end)
       if (dem < best_demerits)
        {
          best_demerits = dem;
-         best_so_far = get_solution (start, end, i);
+         best_so_far = solve (start, end, i);
        }
       else
        {
-         vector<Column_x_positions> cur = get_solution (start, end, i);
+         vector<Column_x_positions> cur = solve (start, end, i);
          bool too_many_lines = true;
          
          for (vsize j = 0; j < cur.size (); j++)
@@ -230,11 +220,11 @@ Constrained_breaking::get_best_solution (vsize start, vsize end)
     }
   if (best_so_far.size ())
     return best_so_far;
-  return get_solution (start, end, max_systems);
+  return solve (start, end, max_systems);
 }
 
 std::vector<Line_details>
-Constrained_breaking::get_details (vsize start, vsize end, vsize sys_count)
+Constrained_breaking::line_details (vsize start, vsize end, vsize sys_count)
 {
   vsize brk = prepare_solution (start, end, sys_count);
   Matrix<Constrained_break_node> const &st = state_[start];
@@ -250,7 +240,7 @@ Constrained_breaking::get_details (vsize start, vsize end, vsize sys_count)
 }
 
 int
-Constrained_breaking::get_min_systems (vsize start, vsize end)
+Constrained_breaking::min_system_count (vsize start, vsize end)
 {
   vsize sys_count;
   vsize brk = prepare_solution (start, end, 1);
@@ -272,7 +262,7 @@ Constrained_breaking::get_min_systems (vsize start, vsize end)
 }
 
 int
-Constrained_breaking::get_max_systems (vsize start, vsize end)
+Constrained_breaking::max_system_count (vsize start, vsize end)
 {
   vsize brk = (end >= start_.size ()) ? breaks_.size () - 1 : starting_breakpoints_[end];
   return brk - starting_breakpoints_[start];
@@ -322,20 +312,23 @@ Constrained_breaking::initialize ()
       
   Output_def *l = pscore_->layout ();
   System *sys = pscore_->root_system ();
-  Real padding = robust_scm2double (l->c_variable ("page-breaking-between-system-padding"), 0);
   Real space = robust_scm2double (l->c_variable ("ideal-system-space"), 0);
+  SCM padding_scm = l->c_variable ("page-breaking-between-system-padding");
+  if (!scm_is_number (padding_scm))
+    padding_scm = l->c_variable ("between-system-padding");
+  Real padding = robust_scm2double (padding_scm, 0.0);
 
   Interval first_line = line_dimensions_int (pscore_->layout (), 0);
   Interval other_lines = line_dimensions_int (pscore_->layout (), 1);
   /* do all the rod/spring problems */
   breaks_ = pscore_->find_break_indices ();
-  all_ = pscore_->root_system ()->columns ();
+  all_ = pscore_->root_system ()->used_columns ();
   lines_.resize (breaks_.size (), breaks_.size (), Line_details ());
   vector<Real> forces = get_line_forces (all_,
                                         other_lines.length (),
                                         other_lines.length () - first_line.length (),
                                         ragged_right_);
-  for (vsize i = 0; i < breaks_.size () - 1; i++)
+  for (vsize i = 0; i + 1 < breaks_.size (); i++)
     {
       Real max_ext = 0;
       for (vsize j = i + 1; j < breaks_.size (); j++)
@@ -373,7 +366,7 @@ Constrained_breaking::initialize ()
   for (vsize i = 0; i < start_.size (); i++)
     {
       vsize j;
-      for (j = 0; j < breaks_.size () - 1 && breaks_[j] < start_[i]; j++)
+      for (j = 0; j + 1 < breaks_.size () && breaks_[j] < start_[i]; j++)
        ;
       starting_breakpoints_.push_back (j);
       start_[i] = breaks_[j];
index c3a2a6c293b88594989b633393bb7f340103f629..a5c13305d42f574c48e561cb6c81c601c4ec9867 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 /* TODO: should junk this class an replace by
@@ -261,9 +261,9 @@ Context_def::get_translator_names (SCM user_mod) const
 }
 
 Context *
-Context_def::instantiate (SCM ops, Object_key const *key)
+Context_def::instantiate (SCM ops)
 {
-  Context *context = new Context (key);
+  Context *context = new Context ();
 
   context->definition_ = self_scm ();
   context->definition_mods_ = ops;
index 80aa6a1a2f94978c7ac4b36d4a2d547c9f17198e..065a74f2d42ab3fbdc35400c1c402ecad84debd4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context-handle.hh"
diff --git a/lily/context-key-manager.cc b/lily/context-key-manager.cc
deleted file mode 100644 (file)
index 2f1fbe3..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-  context-key-manager.cc -- implement Context_key_manager 
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#include "context-key-manager.hh"
-#include "object-key.hh"
-#include "lilypond-key.hh"
-#include "main.hh"
-
-Context_key_manager::Context_key_manager (Object_key const *key)
-{
-  key_ = key;
-}
-
-void
-Context_key_manager::unprotect () const
-{
-  if (key_)
-    ((Object_key *)key_)->unprotect ();
-}
-
-
-Object_key const *
-Context_key_manager::get_context_key (Moment now, string type, string id)
-{
-  if (!use_object_keys)
-    return 0;
-
-  string now_key = type + "@" + id;
-
-  int disambiguation_count = 0;
-  if (context_counts_.find (now_key) != context_counts_.end ())
-    disambiguation_count = context_counts_[now_key];
-
-  context_counts_[now_key] = disambiguation_count + 1;
-
-  return new Lilypond_context_key (key (),
-                                  now,
-                                  type, id,
-                                  disambiguation_count);
-}
-
-
-Object_key const *
-Context_key_manager::get_grob_key (Moment m, string name)
-{
-  if (!use_object_keys)
-    return 0;
-
-  return create_grob_key (m, name);
-}
-
-/*
-  We want to have a key for some objects anyway, so we can invent a
-  unique identifier for each (book,score) tuple.
-*/
-Object_key const *
-Context_key_manager::create_grob_key (Moment now, string name)
-{
-  int disambiguation_count = 0;
-  if (grob_counts_.find (name) != grob_counts_.end ())
-    disambiguation_count = grob_counts_[name];
-  grob_counts_[name] = disambiguation_count + 1;
-
-  Object_key *k = new Lilypond_grob_key (key (),
-                                        now,
-                                        name,
-                                        disambiguation_count);
-
-  return k;
-}
-
-void
-Context_key_manager::gc_mark () const
-{
-  if (key_)
-    scm_gc_mark (key_->self_scm ());
-
-}
-
-void
-Context_key_manager::clear ()
-{
-  if (!use_object_keys)
-    return;
-
-  grob_counts_.clear ();
-  context_counts_.clear ();
-}
-
-Context_key_manager::Context_key_manager (Context_key_manager const &src)
-{
-  (void)src;
-  assert (false);
-}
index 9496518a235dc46d5a2a64a309927248bc4dbe41..d2210b3e104501becfb5c17dd3cf4121f9a51e67 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
index 9827c8bd417161bb65539c9ec46b249a35598e5b..a6ee973a1c3adc37164f4157ea54ba07c7b628c5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -20,7 +20,7 @@ LY_DEFINE (ly_context_id, "ly:context-id",
   Context *tr = unsmob_context (context);
   SCM_ASSERT_TYPE (tr, context, SCM_ARG1, __FUNCTION__, "Context");
 
-  return scm_makfrom0str (tr->id_string ().c_str ());
+  return ly_string2scm (tr->id_string ());
 }
 
 LY_DEFINE (ly_context_name, "ly:context-name",
index 59b3ba907c9c58bf4e09968d7fa7aa420567feaf..fc4f35d666d11a6d55d38ee4084db131abd35e96 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-wrapper-iterator.hh"
index d4177e77bfa040018e57a085a68740085c915204..15bd3c5fb84a0a8c03deae29d0a9119fe8bf3a05 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
@@ -47,8 +47,8 @@ Context::check_removal ()
 }
 
 Context::Context (Context const &src)
-  : key_manager_ (src.key_manager_)
 {
+  (void) src;
   assert (false);
 }
 
@@ -69,8 +69,7 @@ Context::add_context (Context *child)
 }
 
 
-Context::Context (Object_key const *key)
-  : key_manager_ (key)
+Context::Context ()
 {
   daddy_context_ = 0;
   aliases_ = SCM_EOL;
@@ -92,12 +91,6 @@ Context::Context (Object_key const *key)
   event_source_->unprotect ();
   events_below_ = new Dispatcher ();
   events_below_->unprotect ();
-
-  /*
-    UGH UGH
-    const correctness.
-  */
-  key_manager_.unprotect();
 }
 
 /* TODO:  this shares code with find_create_context ().  */
@@ -148,7 +141,7 @@ Context::create_unique_context (SCM name, string id, SCM operations)
     ret = daddy_context_->create_unique_context (name, id, operations);
   else
     {
-      warning (_f ("can't find or create new `%s'",
+      warning (_f ("cannot find or create new `%s'",
                   ly_symbol2string (name).c_str ()));
       ret = 0;
     }
@@ -210,7 +203,7 @@ Context::find_create_context (SCM n, string id, SCM operations)
     ret = daddy_context_->find_create_context (n, id, operations);
   else
     {
-      warning (_f ("can't find or create `%s' called `%s'",
+      warning (_f ("cannot find or create `%s' called `%s'",
                   ly_symbol2string (n).c_str (), id));
       ret = 0;
     }
@@ -267,7 +260,6 @@ Context::create_context_from_event (SCM sev)
   SCM ops = ev->get_property ("ops");
   SCM type_scm = ev->get_property ("type");
   string type = ly_symbol2string (type_scm);
-  Object_key const *key = key_manager_.get_context_key (now_mom(), type, id);
   
   vector<Context_def*> path
     = unsmob_context_def (definition_)->path_to_acceptable_context (type_scm, get_output_def ());
@@ -278,7 +270,7 @@ Context::create_context_from_event (SCM sev)
     }
   Context_def *cdef = path[0];
   
-  Context *new_context = cdef->instantiate (ops, key);
+  Context *new_context = cdef->instantiate (ops);
 
   new_context->id_string_ = id;
   
@@ -337,7 +329,7 @@ Context::create_context (Context_def *cdef,
   send_stream_event (this, "CreateContext", 0,
                      ly_symbol2scm ("ops"), ops,
                      ly_symbol2scm ("type"), cdef->get_context_name (),
-                     ly_symbol2scm ("id"), scm_makfrom0str (id.c_str ()));
+                     ly_symbol2scm ("id"), ly_string2scm (id));
   event_source_->
     remove_listener (GET_LISTENER (acknowledge_infant),
                      ly_symbol2scm ("AnnounceNewContext"));
@@ -385,7 +377,7 @@ Context::get_default_interpreter ()
       Context_def *t = unsmob_context_def (st);
       if (!t)
        {
-         warning (_f ("can't find or create: `%s'", name.c_str ()));
+         warning (_f ("cannot find or create: `%s'", name.c_str ()));
          t = unsmob_context_def (this->definition_);
        }
 
@@ -629,23 +621,10 @@ Context::print_smob (SCM s, SCM port, scm_print_state *)
   return 1;
 }
 
-Object_key const *
-Context::get_grob_key (string name)
-{
-  return key_manager_.get_grob_key (now_mom (), name);
-}
-
-Object_key const *
-Context::get_context_key (string name, string id)
-{
-  return key_manager_.get_context_key (now_mom (), name, id);
-}
-
 SCM
 Context::mark_smob (SCM sm)
 {
   Context *me = (Context *) SCM_CELL_WORD_1 (sm);
-  me->key_manager_.gc_mark();
 
   scm_gc_mark (me->context_list_);
   scm_gc_mark (me->aliases_);
@@ -689,17 +668,6 @@ Context::get_parent_context () const
   return daddy_context_;
 }
 
-void
-Context::clear_key_disambiguations ()
-{
-  if (!use_object_keys)
-    return;
-
-  key_manager_.clear ();
-  for (SCM s = context_list_; scm_is_pair (s); s = scm_cdr (s))
-    unsmob_context (scm_car (s))->clear_key_disambiguations ();
-}
-
 /*
   Ugh. Where to put this?
 */
index 847c552566827ff22968e695b385cdce08cee1f6..94bc4910ce24336c5260a91afea5a4edf57d8e3c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Juergen Reuter <reuter@ipd.uka.de>,
+  (c) 2000--2007 Juergen Reuter <reuter@ipd.uka.de>,
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
index 7a3c09bbfa16d826b9dc274296659c3075adec09..3ed96f6a992ec4ec59f533cca3b5c1cacf1cb8bf 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2000--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 /* TODO:
index 4e65fe6c838510f4d60e95810263eaebdaaada1e..d96110e87bee5ad2bb2ff2a4c73012fe9fa87e79 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 1a98ab2a43d9b186b7363ce0676a61c7b8af3f8b..d1290939365541a09e922d2f90fc3d4cba49721a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
index 106eb05c23906253725003873c75d5e4ed27b304..0d6ed607f75eab756d499e74e55d2b36b6bc2401 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "lily-guile.hh"
index d8285449773f23fb74edc846d4b35f93cc171827..fdfe6d13419b49db9045c485320244a9cf54714f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "directional-element-interface.hh"
index 2a2720656c888e082a44adaaa1320781fbf2723a..9e491e0a9abc185795c01e1c1be5091dd32998da 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Erik Sandberg  <mandolaerik@gmail.com>
+  (c) 2006--2007 Erik Sandberg  <mandolaerik@gmail.com>
 */
 
 #include "dispatcher.hh"
@@ -38,10 +38,11 @@ LY_DEFINE (ly_add_listener, "ly:add-listener",
   SCM_ASSERT_TYPE (l, list, SCM_ARG1, __FUNCTION__, "listener");
   SCM_ASSERT_TYPE (d, disp, SCM_ARG2, __FUNCTION__, "dispatcher");
   
-  for (int arg=SCM_ARG3; scm_is_pair (cl); cl = scm_cdr (cl), arg++)
+  for (int arg = SCM_ARG3; scm_is_pair (cl); cl = scm_cdr (cl), arg++)
     {
-      SCM_ASSERT_TYPE (scm_symbol_p (cl), cl, arg, __FUNCTION__, "symbol");
-      d->add_listener (*l, scm_car (cl));
+      SCM sym = scm_car (cl);
+      SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, arg, __FUNCTION__, "symbol");
+      d->add_listener (*l, sym);
     }
 
   return SCM_UNDEFINED;
index ede002049f7358318fe54954fe430a0567c91a7f..3f2982df746607dfc7d0a10aad4a4fecf0d5f676 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "rhythmic-head.hh"
@@ -16,7 +16,6 @@
 class Dot_column_engraver : public Engraver
 {
   Grob *dotcol_;
-  vector<Item*> heads_;
 public:
   TRANSLATOR_DECLARATIONS (Dot_column_engraver);
 
@@ -36,7 +35,6 @@ void
 Dot_column_engraver::stop_translation_timestep ()
 {
   dotcol_ = 0;
-  heads_.clear ();
 }
 
 void
index a07dfcde116c132bd7aa1e64958ca22896da9dd2..173a9ad981f3add800a0295f074f56a343b9bfc4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "dot-column.hh"
@@ -256,6 +256,10 @@ Dot_column::calc_positioning_done (SCM smob)
        }
 
       int p = Staff_symbol_referencer::get_rounded_position (dp.dot_);
+
+      /* icky, since this should go via a Staff_symbol_referencer
+        offset callback but adding a dot overwrites Y-offset. */
+      p += (int) robust_scm2double (dp.dot_->get_property ("staff-position"), 0.0);
       dp.pos_ = p;
 
       if (dp.extremal_head_)
index 7850b907e7ab9d16b0a864beb39aa7a9a7f99ed0..16a5b0a29052added4ee785540438be093ed4f90 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
index afa82868a83f95afb6a4b8fc86462593f93ab087..97ac61128e8e0ffe20901b1ec5ccec4313c6dd25 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "dots.hh"
@@ -13,7 +13,6 @@
 #include "font-interface.hh"
 #include "lookup.hh"
 #include "staff-symbol-referencer.hh"
-#include "directional-element-interface.hh"
 #include "international.hh"
 
 MAKE_SCHEME_CALLBACK (Dots, print, 1);
@@ -53,7 +52,7 @@ Dots::print (SCM d)
       for (int i = scm_to_int (c); i--;)
        {
          d.translate_axis (2 * dw, X_AXIS);
-         mol.add_at_edge (X_AXIS, RIGHT, d, dw, 0);
+         mol.add_at_edge (X_AXIS, RIGHT, d, dw);
        }
     }
   return mol.smobbed_copy ();
index fc1b77a0342870c520b767f1325f1d53a546f3ce..1db3e611f9c2f447a24e500fce59be412331b9a3 100644 (file)
@@ -1,7 +1,7 @@
 /*
   drum-note-engraver.cc
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cctype>
@@ -132,6 +132,8 @@ Drum_notes_engraver::stop_translation_timestep ()
 
 ADD_ACKNOWLEDGER (Drum_notes_engraver, stem);
 ADD_ACKNOWLEDGER (Drum_notes_engraver, note_column);
+
+
 ADD_TRANSLATOR (Drum_notes_engraver,
                /* doc */ "Generate noteheads.",
                /* create */
index 7aa463b5767f6af2aad4193fccc26a356dcef13c..c81fca04825bcfb2de26d93eb13ecaa646378753 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
@@ -64,8 +64,16 @@ Drum_note_performer::process_music ()
                 tie_event = ev;
             }
 
-         Audio_note *p = new Audio_note (*pit, get_event_length (n), 
-                                          tie_event, 0);
+         Moment len = get_event_length (n);
+         if (now_mom().grace_part_)
+           {
+             len.grace_part_ = len.main_part_;
+             len.main_part_ = Rational (0);
+           }
+             
+
+         Audio_note *p = new Audio_note (*pit, len,
+                                          tie_event, Pitch (0, 0, 0));
          Audio_element_info info (p, n);
          announce_element (info);
          notes_.push_back (p);
index fb4bb102632b9946286d07abc048dfb4308b306a..4b8c4605c0e19e40c984c4b1e4fe424a7b112d0c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -53,13 +53,13 @@ LY_DEFINE (ly_make_duration, "ly:make-duration",
           "(whole, half, quarter, etc.) and a number of augmentation\n"
           "dots. \n")
 {
-  SCM_ASSERT_TYPE (scm_integer_p (length) == SCM_BOOL_T,
+  SCM_ASSERT_TYPE (scm_is_integer (length),
                   length, SCM_ARG1, __FUNCTION__, "integer");
 
   int dots = 0;
   if (dotcount != SCM_UNDEFINED)
     {
-      SCM_ASSERT_TYPE (scm_integer_p (dotcount) == SCM_BOOL_T,
+      SCM_ASSERT_TYPE (scm_is_integer (dotcount),
                       dotcount, SCM_ARG2, __FUNCTION__, "integer");
       dots = scm_to_int (dotcount);
     }
@@ -121,6 +121,14 @@ LY_DEFINE (ly_duration_length, "ly:duration-length",
   return Moment (unsmob_duration (dur)->get_length ()).smobbed_copy ();
 }
 
+LY_DEFINE (ly_duration2string, "ly:duration->string",
+          1, 0, 0, (SCM dur),
+          "Convert @var{dur} to string.")
+{
+  SCM_ASSERT_TYPE (unsmob_duration (dur), dur, SCM_ARG1, __FUNCTION__, "duration");
+  return ly_string2scm (unsmob_duration (dur)->to_string ());
+}
+
 LY_DEFINE (ly_duration_factor, "ly:duration-factor",
           1, 0, 0, (SCM dur),
           "Extract the compression factor from @var{dur}. Return as a pair.")
index 413ac889ec497e7447b5e443c8e783b3704513dd..1618489027dd7d74c53c9e4952fb4a6b0fce4be3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -91,7 +91,7 @@ Duration::print_smob (SCM s, SCM port, scm_print_state *)
   Duration *r = (Duration *) SCM_CELL_WORD_1 (s);
 
   scm_puts ("#<Duration ", port);
-  scm_display (scm_makfrom0str (r->to_string ().c_str ()), port);
+  scm_display (ly_string2scm (r->to_string ()), port);
   scm_puts (" >", port);
 
   return 1;
index 8f64db11363add6c9653bacb8efed2f7cc0a9254..8df7f8fccc0b39e840c38f7ccbcdf58c2c6daca2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "axis-group-interface.hh"
@@ -183,7 +183,7 @@ Dynamic_engraver::process_music ()
        }
       else if (accepted_spanevents_drul_[STOP])
        {
-         accepted_spanevents_drul_[STOP]->origin ()->warning (_ ("can't find start of (de)crescendo"));
+         accepted_spanevents_drul_[STOP]->origin ()->warning (_ ("cannot find start of (de)crescendo"));
          stop_ev = 0;
        }
     }
@@ -261,7 +261,7 @@ Dynamic_engraver::process_music ()
              if (scm_is_string (s) || scm_is_pair (s))
                {
                  cresc_->set_property ("edge-text",
-                                       scm_cons (s, scm_makfrom0str ("")));
+                                       scm_cons (s, scm_from_locale_string ("")));
                  context ()->set_property ((start_type + "Text").c_str (),
                                            SCM_EOL);
                }
@@ -390,7 +390,6 @@ Dynamic_engraver::typeset_all ()
     }
 }
 
-
 void
 Dynamic_engraver::acknowledge_accidental (Grob_info info)
 {
@@ -398,7 +397,6 @@ Dynamic_engraver::acknowledge_accidental (Grob_info info)
     Side_position_interface::add_support (line_spanner_, info.grob ());
 }
 
-
 void
 Dynamic_engraver::acknowledge_stem_tremolo (Grob_info info)
 {
@@ -406,7 +404,6 @@ Dynamic_engraver::acknowledge_stem_tremolo (Grob_info info)
     Side_position_interface::add_support (line_spanner_, info.grob ());
 }
 
-
 void
 Dynamic_engraver::acknowledge_slur (Grob_info info)
 {
@@ -414,7 +411,6 @@ Dynamic_engraver::acknowledge_slur (Grob_info info)
     Side_position_interface::add_support (line_spanner_, info.grob ());
 }
 
-
 void
 Dynamic_engraver::acknowledge_note_column (Grob_info info)
 {
index 0dd455606095a99c8326f447d3b30b245ede81ab..fc85166f727718139fd783bd0ca950d2848c6f82 100644 (file)
@@ -3,22 +3,15 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
-
 #include "audio-item.hh"
 #include "stream-event.hh"
-#include "translator.icc"
-
-/*
-  TODO:
 
-  handle multiple events
+#include "translator.icc"
 
-  perform absolute (text) dynamics
-*/
 class Dynamic_performer : public Performer
 {
 public:
@@ -26,87 +19,169 @@ public:
 protected:
   void stop_translation_timestep ();
   void process_music ();
+  Real equalize_volume (Real);
 
+  DECLARE_TRANSLATOR_LISTENER (decrescendo);
+  DECLARE_TRANSLATOR_LISTENER (crescendo);
   DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
 private:
   Stream_event *script_event_;
-  Audio_dynamic *audio_;
+  Drul_array<Stream_event*> span_events_; 
+  Drul_array<Direction> grow_dir_; 
+  Real last_volume_;
+  Audio_dynamic *absolute_;
+  Audio_span_dynamic *span_dynamic_;
+  Audio_span_dynamic *finished_span_dynamic_;
 };
 
 Dynamic_performer::Dynamic_performer ()
 {
+  last_volume_ = 0.5;
   script_event_ = 0;
-  audio_ = 0;
+  absolute_ = 0;
+  span_events_[LEFT] = 
+    span_events_[RIGHT] = 0;
+  span_dynamic_ = 0;
+  finished_span_dynamic_ = 0;
 }
 
-void
-Dynamic_performer::process_music ()
+Real
+Dynamic_performer::equalize_volume (Real volume)
 {
-  if (script_event_)
+  /*
+    properties override default equaliser setting
+  */
+  SCM min = get_property ("midiMinimumVolume");
+  SCM max = get_property ("midiMaximumVolume");
+  if (scm_is_number (min) || scm_is_number (max))
+    {
+      Interval iv (0, 1);
+      if (scm_is_number (min))
+       iv[MIN] = scm_to_double (min);
+      if (scm_is_number (max))
+       iv[MAX] = scm_to_double (max);
+      volume = iv[MIN] + iv.length () * volume;
+    }
+  else
     {
-      SCM proc = get_property ("dynamicAbsoluteVolumeFunction");
+      /*
+       urg, code duplication:: staff_performer
+      */
+      SCM s = get_property ("midiInstrument");
 
-      SCM svolume = SCM_EOL;
-      if (ly_is_procedure (proc))
-       {
-         // urg
-         svolume = scm_call_1 (proc, script_event_->get_property ("text"));
-       }
+      if (!scm_is_string (s))
+       s = get_property ("instrumentName");
 
-      Real volume = robust_scm2double (svolume, 0.5);
+      if (!scm_is_string (s))
+       s = scm_from_locale_string ("piano");
 
-      /*
-       properties override default equaliser setting
-      */
-      SCM min = get_property ("midiMinimumVolume");
-      SCM max = get_property ("midiMaximumVolume");
-      if (scm_is_number (min) || scm_is_number (max))
+      SCM eq = get_property ("instrumentEqualizer");
+      if (ly_is_procedure (eq))
+       s = scm_call_1 (eq, s);
+
+      if (is_number_pair (s))
        {
-         Interval iv (0, 1);
-         if (scm_is_number (min))
-           iv[MIN] = scm_to_double (min);
-         if (scm_is_number (max))
-           iv[MAX] = scm_to_double (max);
+         Interval iv = ly_scm2interval (s);
          volume = iv[MIN] + iv.length () * volume;
        }
-      else
-       {
-         /*
-           urg, code duplication:: staff_performer
-         */
-         SCM s = get_property ("midiInstrument");
+    }
+  return volume;
+}
+
+
+void
+Dynamic_performer::process_music ()
+{
+  if (span_events_[STOP] || script_event_)
+    {
+      finished_span_dynamic_ = span_dynamic_;
+      span_dynamic_ = 0;
+    }
 
-         if (!scm_is_string (s))
-           s = get_property ("instrumentName");
+  if (span_events_[START])
+    {
+      span_dynamic_ = new Audio_span_dynamic();
+      announce_element (Audio_element_info (span_dynamic_, span_events_[START]));
 
-         if (!scm_is_string (s))
-           s = scm_makfrom0str ("piano");
+      span_dynamic_->grow_dir_ = grow_dir_[START];
+    }
 
-         SCM eq = get_property ("instrumentEqualizer");
-         if (ly_is_procedure (eq))
-           s = scm_call_1 (eq, s);
+  if (script_event_
+      || span_dynamic_
+      || finished_span_dynamic_)
+    {
+      absolute_ = new Audio_dynamic ();
 
-         if (is_number_pair (s))
+      if (script_event_)
+       {
+         SCM proc = get_property ("dynamicAbsoluteVolumeFunction");
+
+         SCM svolume = SCM_EOL;
+         if (ly_is_procedure (proc))
            {
-             Interval iv = ly_scm2interval (s);
-             volume = iv[MIN] + iv.length () * volume;
+             // urg
+             svolume = scm_call_1 (proc, script_event_->get_property ("text"));
            }
-       }
 
-      audio_ = new Audio_dynamic (volume);
-      Audio_element_info info (audio_, script_event_);
+         Real volume = robust_scm2double (svolume, 0.5);
+
+         last_volume_
+           = absolute_->volume_ = equalize_volume (volume);
+       }
+      
+      Audio_element_info info (absolute_, script_event_);
       announce_element (info);
-      script_event_ = 0;
     }
+
+
+  if (span_dynamic_)
+    span_dynamic_->add_absolute (absolute_);
+
+  if (finished_span_dynamic_)
+    finished_span_dynamic_->add_absolute (absolute_);
 }
 
 void
 Dynamic_performer::stop_translation_timestep ()
 {
-  if (audio_)
+  if (finished_span_dynamic_)
+    {
+      finished_span_dynamic_->render ();
+      finished_span_dynamic_ = 0;
+    }
+
+  
+  if (absolute_ && absolute_->volume_ < 0)
+    {
+      absolute_->volume_ = last_volume_;
+    }
+  else if (absolute_)
     {
-      audio_ = 0;
+      last_volume_ = absolute_->volume_;
     }
+  
+  absolute_ = 0;
+  script_event_ = 0;
+  span_events_[LEFT] = 
+    span_events_[RIGHT] = 0;
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_performer, decrescendo);
+void
+Dynamic_performer::listen_decrescendo (Stream_event *r)
+{
+  Direction d = to_dir (r->get_property ("span-direction"));
+  span_events_[d] = r;
+  grow_dir_[d] = SMALLER;
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_performer, crescendo);
+void
+Dynamic_performer::listen_crescendo (Stream_event *r)
+{
+  Direction d = to_dir (r->get_property ("span-direction"));
+  span_events_[d] = r;
+  grow_dir_[d] = BIGGER;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_performer, absolute_dynamic);
index ff6eac541e4dd76e1833b57c715a337dbd09acca..e6a9f336a1870cfb6c209dcc6ee014729b4ff354 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 
   Revised over good by Han-Wen.
 */
index c6ecb0e20f4539a48301f0e959ac96f2240374c4..34c0a97f781823f9936ae4e625f68ad7e7c3f2d0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "note-head.hh"
@@ -47,7 +47,7 @@ Note_head::brew_ez_stencil (SCM smob)
       char s[2] = "a";
       s[0] = (pit->get_notename () + 2) % 7 + 'a';
       s[0] = toupper (s[0]);
-      charstr = scm_makfrom0str (s);
+      charstr = scm_from_locale_string (s);
     }
 
   SCM letter
index 60e98f0944e9131c89023620f53d8a30bdbf5b62..ef2dd18b6bd08a14bc8786dd68b7e3533e85ef89 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -85,7 +85,11 @@ Enclosing_bracket::print (SCM grob)
 
   Grob *common_x = common_refpoint_of_array (elements, me, X_AXIS); 
   Interval xext = Axis_group_interface::relative_group_extent (elements, common_x, X_AXIS);
-
+  if (xext.is_empty ())
+    {
+      me->programming_error ("elements have no X extent.");
+      xext = Interval (0, 0);
+    }
 
   Stencil left_br = Horizontal_bracket::make_enclosing_bracket (me, me, elements,
                                                                Y_AXIS, LEFT);
index 4c5a5864c3badc0553ed13588a35b64a3fd93b85..0158c532cd892dbcaf1635539e1695a3f57e6389 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
index c8eb805638d4619ba378968f103c815842f162b4..ac74d5e93064f9c808dccf6358fc95fae9465cc3 100644 (file)
@@ -3,14 +3,13 @@
 
   Sourcefile of GNU LilyPond music type setter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
 
 #include "context.hh"
 #include "international.hh"
-#include "lilypond-key.hh"
 #include "music.hh"
 #include "paper-column.hh"
 #include "score-engraver.hh"
@@ -112,21 +111,21 @@ Engraver::internal_make_grob (SCM symbol, SCM cause, char const *name, char cons
   (void) file;
   (void) fun;
   (void) line;
+  (void) name;
   
   SCM props = updated_grob_properties (context (), symbol);
 
-  Object_key const *key = context ()->get_grob_key (name);
   Grob *grob = 0;
 
   SCM handle = scm_sloppy_assq (ly_symbol2scm ("meta"), props);
   SCM klass = scm_cdr (scm_sloppy_assq (ly_symbol2scm ("class"), scm_cdr (handle)));
 
   if (klass == ly_symbol2scm ("Item"))
-    grob = new Item (props, key);
+    grob = new Item (props);
   else if (klass == ly_symbol2scm ("Spanner"))
-    grob = new Spanner (props, key);
+    grob = new Spanner (props);
   else if (klass == ly_symbol2scm ("Paper_column"))
-    grob = new Paper_column (props, key);
+    grob = new Paper_column (props);
 
   assert (grob);
   announce_grob (grob, cause);
@@ -134,8 +133,8 @@ Engraver::internal_make_grob (SCM symbol, SCM cause, char const *name, char cons
 #ifndef NDEBUG
   if (ly_is_procedure (creation_callback))
     scm_apply_0 (creation_callback,
-                scm_list_n (grob->self_scm (), scm_makfrom0str (file),
-                            scm_from_int (line), scm_makfrom0str (fun), SCM_UNDEFINED));
+                scm_list_n (grob->self_scm (), scm_from_locale_string (file),
+                            scm_from_int (line), scm_from_locale_string (fun), SCM_UNDEFINED));
 #endif
 
   return grob;
index ea1a105ea4c7083ffbad7b52b5415361704c4892..08ee9b620e410a38683df548fd667f1dd566b2e8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "event-chord-iterator.hh"
index 9f3b353c50c1e29bad3fb7de53e667affb77a848..89dbe0b6efdf9a8ea24086a46ede44f4d6ec45ed 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "event-iterator.hh"
index efea867822abf2b12ebab55865b6d5a5b266a2e1..efbb82d05c433b299044b52c005fc8e10c353b4b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Glen Prideaux <glenprideaux@iname.com>,
+  (c) 1999--2007 Glen Prideaux <glenprideaux@iname.com>,
   Han-Wen Nienhuys <hanwen@xs4all.nl>,
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
@@ -98,7 +98,15 @@ Extender_engraver::stop_translation_timestep ()
                                                 ly_symbol2scm ("heads"), h);
            }
        }
-
+      else
+       {
+         if (pending_extender_)
+           {
+             completize_extender (pending_extender_);
+             pending_extender_ = 0;
+           }
+         
+       }
       if (extender_)
        {
          pending_extender_ = extender_;
index 08ca8e15e8c3c94c6b5d6975717a6fc6e6cc9841..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,116 +0,0 @@
-/*
-  fall-engraver.cc -- implement Bend_after_engraver
-
-  (c) 2006 Han-Wen Nienhuys
-
-  
-*/
-
-#include "engraver.hh"
-#include "item.hh"
-#include "moment.hh"
-#include "spanner.hh"
-#include "stream-event.hh"
-
-#include "translator.icc"
-
-class Bend_after_engraver : public Engraver
-{
-public:
-  TRANSLATOR_DECLARATIONS (Bend_after_engraver);
-  DECLARE_ACKNOWLEDGER (note_head);
-
-protected:
-  DECLARE_TRANSLATOR_LISTENER (bend_after);
-  void process_music ();
-  void stop_translation_timestep ();
-  void start_translation_timestep ();
-  void stop_fall ();
-  
-private:
-  Moment stop_moment_;
-  Stream_event *fall_event_;
-  Spanner *fall_;
-  Grob *note_head_;
-};
-
-void
-Bend_after_engraver::stop_fall ()
-{
-  bool bar = scm_is_string (get_property ("whichBar"));
-  
-  
-  fall_->set_bound (RIGHT, unsmob_grob (bar
-                                       ? get_property ("currentCommandColumn")
-                                       : get_property ("currentMusicalColumn")));
-  fall_ = 0;
-  note_head_ = 0;
-  fall_event_ = 0;
-}
-
-void
-Bend_after_engraver::stop_translation_timestep ()
-{
-  if (fall_ && !fall_->get_bound (LEFT)) 
-    {
-      fall_->set_bound (LEFT, note_head_);
-      fall_->set_parent (note_head_,  Y_AXIS);
-    }
-}
-
-void
-Bend_after_engraver::start_translation_timestep ()
-{
-  if (fall_ && now_mom ().main_part_ >= stop_moment_.main_part_)
-    {
-      stop_fall ();
-    }
-}
-
-void
-Bend_after_engraver::acknowledge_note_head (Grob_info info)
-{
-  if (!fall_event_)
-    return;
-  
-  if (note_head_ && fall_)
-    {
-      stop_fall ();
-    }
-
-  note_head_ = info.grob ();
-  stop_moment_ = now_mom () + get_event_length (info.event_cause ());
-}
-
-Bend_after_engraver::Bend_after_engraver ()
-{
-  fall_ = 0;
-  note_head_ = 0;
-  fall_event_ = 0;
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (Bend_after_engraver, bend_after);
-void
-Bend_after_engraver::listen_bend_after (Stream_event *ev)
-{
-  ASSIGN_EVENT_ONCE (fall_event_, ev);
-}
-
-void
-Bend_after_engraver::process_music ()
-{
-  if (fall_event_ && !fall_)
-    {
-      fall_ = make_spanner ("BendAfter", fall_event_->self_scm ());
-      fall_->set_property ("delta-position",
-                          scm_from_double (robust_scm2double (fall_event_->get_property ("delta-step"), 0)));
-    }
-}
-
-ADD_ACKNOWLEDGER (Bend_after_engraver, note_head);
-
-ADD_TRANSLATOR (Bend_after_engraver,
-               /* doc */ "Create fall spanners.",
-               /* create */ "BendAfter",
-               /* read */ "",
-               /* write */ "");
index 0020b11e7ffeabe83e840cd7115a2201afb849e0..2f97de6dac069d389ae0fd3362427138a7170d9c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 025f7de6edd0590e97f4c8b1853be99424bc626c..5fe9624041c428109284624d048d73f217c3c476 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -286,7 +286,7 @@ Figured_bass_engraver::add_brackets ()
 void
 Figured_bass_engraver::process_music ()
 {
-  if (!to_boolean (get_property ("useBassFigureExtenders")))
+  if (alignment_ && !to_boolean (get_property ("useBassFigureExtenders")))
     clear_spanners ();
         
   if (rest_event_)
index caab84bf4a7d9dd37b2ae93944221700b3e1e726..a3ed1528f9592d462e06682955dbbb99d02a6644 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index c5c168bc140a2c38a5b4376f3337c369a6b45aba..2521d9717597860e7c63c10999c763a187800e5c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <map>
index b5f36ef79b6ed94c5145c5686e8d47fefaead13a..874771f77485b86ddf036f0426f6ef7ba512a19e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 79bfcb2fc797aba35c884da3950c06c9f6f2b299..f22e8b879b323ab82fe45694bf526e805115202c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "folded-repeat-iterator.hh"
index 482a240c9f0b084f0f9f9486790af1c9be5925d5..5d734899b2b8a3cf95ba7a91d4a7ec19dc0c0bd2 100644 (file)
@@ -3,18 +3,21 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
 #include "lily-guile.hh"
-#include "std-string.hh"
+#include "string-convert.hh"
+#include "warn.hh"
 
 #include <fontconfig/fontconfig.h>
 
-void
+string
 display_fontset (FcFontSet *fs)
 {
+  string retval;
+  
   int j;
   for (j = 0; j < fs->nfont; j++)
     {
@@ -23,36 +26,42 @@ display_fontset (FcFontSet *fs)
 
       font = FcNameUnparse (fs->fonts[j]);
       if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &str) == FcResultMatch)
-       printf ("FILE %s\n", str);
+       retval += String_convert::form_string ("FILE %s\n", str);
       if (FcPatternGetString (fs->fonts[j], FC_FAMILY, 0, &str) == FcResultMatch)
-       printf ("family %s\n ", str);
+       retval += String_convert::form_string ("family %s\n ", str);
       if (FcPatternGetString (fs->fonts[j],
                              "designsize", 0, &str) == FcResultMatch)
-       printf ("designsize %s\n ", str);
+       retval += String_convert::form_string ("designsize %s\n ", str);
       
-      printf ("%s\n", (const char*) font);
+      retval += String_convert::form_string ("%s\n", (const char*) font);
       free (font);
     }
+  
+  return retval;
 }
 
-void
+string
 display_strlist (char const*what, FcStrList *slist)
 {
+  string retval;
   while (FcChar8 *dir = FcStrListNext (slist))
     {
-      printf("%s: %s\n", what, dir);
+      retval += String_convert::form_string ("%s: %s\n", what, dir);
     }
+  return retval;
 }
 
-void
+string
 display_config (FcConfig *fcc)
 {
-  display_strlist ("Config files", FcConfigGetConfigFiles(fcc));
-  display_strlist ("Config dir", FcConfigGetConfigDirs(fcc));
-  display_strlist ("Font dir", FcConfigGetFontDirs(fcc));
+  string retval;
+  retval += display_strlist ("Config files", FcConfigGetConfigFiles(fcc));
+  retval +=  display_strlist ("Config dir", FcConfigGetConfigDirs(fcc));
+  retval +=  display_strlist ("Font dir", FcConfigGetFontDirs(fcc));
+  return retval;
 }
 
-void
+string
 display_list (FcConfig *fcc)
 {
   FcPattern*pat = FcPatternCreate ();
@@ -66,11 +75,13 @@ display_list (FcConfig *fcc)
   if (pat)
     FcPatternDestroy (pat);
 
+  string retval;
   if (fs)
     {
-      display_fontset (fs);
+      retval = display_fontset (fs);
       FcFontSetDestroy (fs);
     }
+  return retval;
 }
 
 
@@ -98,7 +109,7 @@ LY_DEFINE (ly_font_config_get_font_file, "ly:font-config-get-font-file", 1, 0, 0
   pat = FcFontMatch(NULL, pat, &result);
   FcChar8 *str = 0;
   if (FcPatternGetString (pat, FC_FILE, 0, &str) == FcResultMatch)
-    scm_result = scm_makfrom0str ((char const*) str);
+    scm_result = scm_from_locale_string ((char const*) str);
 
   FcPatternDestroy (pat);
 
@@ -109,8 +120,10 @@ LY_DEFINE (ly_font_config_display_fonts, "ly:font-config-display-fonts", 0, 0, 0
           (),
           "Dump a list of all fonts visible to FontConfig.")
 {
-  display_list (NULL);
-  display_config (NULL);
+  string str = display_list (NULL);
+  str += display_config (NULL);
+
+  progress_indication (str);
   
   return SCM_UNSPECIFIED;
 }
index cbf77c7944d012c9186e50edb1c1dd7143a1f034..ab530eabfdea9221866841d9c0902176055ecc8a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "config.hh"
index 482f91af7a72a02b2ba743e1f1c2be504c11a68d..5dc2129c147696a34ea86738624ebf427167f0a7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "font-interface.hh"
index d04d1eab8ad8c7213a1cdb3468b2f5310a357bda..18edb7513a060344de7036c85cb641ae29376493 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "font-metric.hh"
@@ -122,7 +122,7 @@ LY_DEFINE (ly_font_name, "ly:font-name",
   Font_metric *fm = unsmob_metrics (font);
 
   SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "font-metric");
-  return scm_makfrom0str (fm->font_name ().c_str ());
+  return ly_string2scm (fm->font_name ());
 }
 
 LY_DEFINE (ly_font_magnification, "ly:font-magnification", 1, 0, 0,
index 03625cc946b6bd9c405bb157611c82d2a0fbbf41..2f61d53f3fb821746b6a64e29b98d6a867b1cbdd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   Mats Bengtsson <matsb@s3.kth.se> (the ugly TeX parsing in text_dimension)
 */
@@ -40,7 +40,7 @@ Font_metric::find_by_name (string s) const
     {
       expr = scm_list_3 (ly_symbol2scm ("named-glyph"),
                         self_scm (),
-                        scm_makfrom0str (s.c_str ()));
+                        ly_string2scm (s));
       b = get_indexed_char (idx);
     }
 
@@ -187,12 +187,9 @@ Font_metric::word_stencil (string str) const
 Stencil
 Font_metric::text_stencil (string str) const
 {
-  SCM lst = scm_list_3 (ly_symbol2scm ("text"),
-                       this->self_scm (),
-                       scm_makfrom0str (str.c_str ()));
-
-  Box b = text_dimension (str);
-  return Stencil (b, lst);
+  (void) str;
+  assert (false);
+  return Stencil (Box (), SCM_EOL);
 }
 
 Box
index 2765aa8c1491f1226a4426df4479fa8adcd747c1..a5445853f5d6a9bac61f6def8e275fad97590201 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
index 9e740964a9aca5fd444dab3ad1721c978b2ebfef..39b36586bad1c58ef3c7efd25b3974f79cd7fdf5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grob.hh"
index 4ee2acb60f9757449325d848c1c6d74f5ec94699..18882125d64c48f9e1073ab81688a940240524c0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "freetype.hh"
@@ -16,6 +16,6 @@ init_freetype ()
 {
   int errorcode = FT_Init_FreeType (&freetype2_library);
   if (errorcode)
-    error ("can't initialize FreeType");
+    error ("cannot initialize FreeType");
 }
 
index 5081d7eb58592dc082eabe6af715e3d000225dbc..7e450528ae13e65813f26cbbd6baeba9fa61a6ef 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cstring>
@@ -29,8 +29,8 @@ void ly_add_function_documentation (SCM func,
     + "\n" + doc;
 
   scm_set_procedure_property_x (func, ly_symbol2scm ("documentation"),
-                               scm_makfrom0str (s.c_str ()));
-  SCM entry = scm_cons (scm_makfrom0str (varlist), scm_makfrom0str (doc));
+                               ly_string2scm (s));
+  SCM entry = scm_cons (scm_from_locale_string (varlist), scm_from_locale_string (doc));
   scm_hashq_set_x (doc_hash_table, ly_symbol2scm (fname), entry);
 }
 
index 142e7c2befa8179363c96a2ff10ea261faf655c1..c52bc54ece2a7b7e9391d2357809a3fff536083c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -22,6 +22,8 @@ using namespace std;
 #include "dimensions.hh"
 #include "main.hh"
 #include "file-path.hh"
+#include "relocate.hh"
+#include "file-name.hh"
 
 LY_DEFINE (ly_find_file, "ly:find-file",
           1, 0, 0, (SCM name),
@@ -35,7 +37,7 @@ LY_DEFINE (ly_find_file, "ly:find-file",
   if (file_name.empty ())
     return SCM_BOOL_F;
 
-  return scm_makfrom0str (file_name.c_str ());
+  return ly_string2scm (file_name);
 }
 
 /*
@@ -48,7 +50,7 @@ LY_DEFINE (ly_gulp_file, "ly:gulp-file",
           "The file is looked up using the search path. ")
 {
   SCM_ASSERT_TYPE (scm_is_string (name), name, SCM_ARG1, __FUNCTION__, "string");
-  int sz = -1;
+  int sz = INT_MAX;
   if (size != SCM_UNDEFINED)
     {
       SCM_ASSERT_TYPE (scm_is_number (size), size, SCM_ARG2, __FUNCTION__, "number");
@@ -135,15 +137,29 @@ LY_DEFINE (ly_assoc_get, "ly:assoc-get",
           "(or #f if not specified).")
 {
   SCM handle = scm_assoc (key, alist);
-
+  if (scm_is_pair (handle))
+    return scm_cdr (handle);
+  
   if (default_value == SCM_UNDEFINED)
     default_value = SCM_BOOL_F;
 
-  if (scm_is_pair (handle))
-    return scm_cdr (handle);
   return default_value;
 }
 
+LY_DEFINE (ly_string_substitute, "ly:string-substitute",
+          3, 0, 0, (SCM a, SCM b, SCM s),
+          "Replace @var{a} by @var{b} in @var{s}.")
+{
+  SCM_ASSERT_TYPE (scm_is_string (a), s, SCM_ARG1, __FUNCTION__, "string");
+  SCM_ASSERT_TYPE (scm_is_string (b), s, SCM_ARG2, __FUNCTION__, "string");
+  SCM_ASSERT_TYPE (scm_is_string (s), s, SCM_ARG3, __FUNCTION__, "string");
+
+  string ss = ly_scm2string (s);
+  replace_all (ss, string (scm_i_string_chars (a)),
+                  string (scm_i_string_chars (b)));
+  return ly_string2scm (ss);
+}
+  
 LY_DEFINE (ly_number2string, "ly:number->string",
           1, 0, 0, (SCM s),
           "Convert @var{num} to a string without generating many decimals.")
@@ -163,12 +179,12 @@ LY_DEFINE (ly_number2string, "ly:number->string",
            r = 0.0;
          }
 
-      snprintf (str, sizeof (str), "%08.4f", r);
+      snprintf (str, sizeof (str), "%.4f", r);
     }
   else
     snprintf (str, sizeof (str), "%d", int (scm_to_int (s)));
 
-  return scm_makfrom0str (str);
+  return scm_from_locale_string (str);
 }
 
 LY_DEFINE (ly_version, "ly:version", 0, 0, 0, (),
@@ -182,7 +198,7 @@ LY_DEFINE (ly_version, "ly:version", 0, 0, 0, (),
 LY_DEFINE (ly_unit, "ly:unit", 0, 0, 0, (),
           "Return the unit used for lengths as a string.")
 {
-  return scm_makfrom0str (INTERNAL_UNIT);
+  return scm_from_locale_string (INTERNAL_UNIT);
 }
 
 LY_DEFINE (ly_dimension_p, "ly:dimension?", 1, 0, 0, (SCM d),
@@ -208,14 +224,14 @@ LY_DEFINE (ly_gettext, "ly:gettext",
 {
   SCM_ASSERT_TYPE (scm_is_string (string), string, SCM_ARG1,
                   __FUNCTION__, "string");
-  return scm_makfrom0str (_ (scm_i_string_chars (string)).c_str ());
+  return ly_string2scm (_ (scm_i_string_chars (string)));
 }
 
 LY_DEFINE (ly_output_backend, "ly:output-backend",
           0, 0, 0, (),
           "Return name of output backend.")
 {
-  return scm_makfrom0str (output_backend_global.c_str ());
+  return ly_string2scm (output_backend_global);
 }
 
 LY_DEFINE (ly_output_formats, "ly:output-formats",
@@ -228,7 +244,7 @@ LY_DEFINE (ly_output_formats, "ly:output-formats",
   SCM lst = SCM_EOL;
   int output_formats_count = output_formats.size ();
   for (int i = 0; i < output_formats_count; i++)
-    lst = scm_cons (scm_makfrom0str (output_formats[i].c_str ()), lst);
+    lst = scm_cons (ly_string2scm (output_formats[i]), lst);
 
   return lst;
 }
@@ -265,14 +281,14 @@ LY_DEFINE (ly_wchar_to_utf_8, "ly:wide-char->utf-8",
     }
   *p = 0;
 
-  return scm_makfrom0str (buf);
+  return scm_from_locale_string (buf);
 }
 
 LY_DEFINE (ly_effective_prefix, "ly:effective-prefix",
           0, 0, 0, (),
           "Return effective prefix.")
 {
-  return scm_makfrom0str (prefix_directory.c_str ());
+  return ly_string2scm (prefix_directory);
 }
 
 LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get",
@@ -292,18 +308,21 @@ LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get",
   return dfault == SCM_UNDEFINED ? SCM_BOOL_F : dfault;
 }
 
+
 LY_DEFINE (ly_stderr_redirect, "ly:stderr-redirect",
           1, 1, 0, (SCM file_name, SCM mode),
           "Redirect stderr to FILE-NAME, opened with MODE.")
 {
-  SCM_ASSERT_TYPE (scm_string_p (file_name), file_name, SCM_ARG1,
+  SCM_ASSERT_TYPE (scm_is_string (file_name), file_name, SCM_ARG1,
                   __FUNCTION__, "file_name");
-  char const *m = "w";
+
+  string m = "w";
   if (mode != SCM_UNDEFINED && scm_string_p (mode))
-    m = ly_scm2newstr (mode, 0);
+    m = ly_scm2string (mode);
   /* dup2 and (fileno (current-error-port)) do not work with mingw'c
      gcc -mwindows.  */
-  freopen (ly_scm2newstr (file_name, 0), m, stderr);
+  fflush (stderr); 
+  freopen (ly_scm2string (file_name).c_str (), m.c_str (), stderr);
   return SCM_UNSPECIFIED;
 }
 
@@ -339,3 +358,38 @@ LY_DEFINE (ly_camel_case_to_lisp_identifier, "ly:camel-case->lisp-identifier",
 
   return ly_symbol2scm (result.c_str ());
 }
+
+LY_DEFINE (ly_expand_environment, "ly:expand-environment",
+          1, 0, 0, (SCM str),
+          "Expand $VAR and $@{VAR@} in @var{str}.")
+{
+  SCM_ASSERT_TYPE(scm_is_string (str), str,
+                 SCM_ARG1, __FUNCTION__, "string");
+
+  return ly_string2scm (expand_environment_variables (ly_scm2string (str)));
+}
+                
+
+LY_DEFINE (ly_truncate_list_x, "ly:truncate-list!",
+          2, 0, 0, (SCM lst, SCM i),
+          "Take at most the first @var{i} of list @var{lst}")
+{
+  SCM_ASSERT_TYPE(scm_is_integer (i), i,
+                 SCM_ARG1, __FUNCTION__, "integer");
+
+  int k = scm_to_int (i);
+  if (k == 0)
+    lst = SCM_EOL;
+  else
+    {
+      SCM s = lst;
+      k--;
+      for (; scm_is_pair (s) && k--; s = scm_cdr (s))
+       ;
+
+      if (scm_is_pair (s))
+       scm_set_cdr_x (s, SCM_EOL);
+    }
+  return lst;
+}
+
index 4c506df38d14efc8d4e9e47cdc327bea35a8f72e..ff918886770bc2547fbaa16c6c83cee9e9c4cb59 100644 (file)
@@ -3,15 +3,17 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "engraver.hh"
+
 #include "international.hh"
 #include "rhythmic-head.hh"
 #include "spanner.hh"
 #include "stream-event.hh"
 #include "warn.hh"
+#include "item.hh"
 
 #include "translator.icc"
 
@@ -65,15 +67,19 @@ Glissando_engraver::acknowledge_rhythmic_head (Grob_info info)
     line_->set_bound (LEFT, g);
 
   if (last_line_)
-    last_line_->set_bound (RIGHT, g);
+    {
+      last_line_->set_bound (RIGHT, g);
+      announce_end_grob (last_line_, g->self_scm ());
+    }      
 }
 
 void
 Glissando_engraver::stop_translation_timestep ()
 {
   if (last_line_ && last_line_->get_bound (RIGHT))
-    last_line_ = 0;
-
+    {
+      last_line_ = 0;
+    }
   if (line_)
     {
       if (last_line_)
index 219dc267c1d3762f0a0c19f314f415833001f976..c5f4d561f9966487c647527f8d189809ef0a8d6b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #include "cpu-timer.hh"
 #include "global-context.hh"
@@ -12,7 +12,6 @@
 #include "music-iterator.hh"
 #include "music-output.hh"
 #include "music.hh"
-#include "object-key.hh"
 #include "output-def.hh"
 #include "translator-group.hh"
 #include "warn.hh"
@@ -50,20 +49,18 @@ LY_DEFINE (ly_make_global_translator, "ly:make-global-translator",
 }
 
 LY_DEFINE (ly_make_global_context, "ly:make-global-context",
-          1, 1, 0, (SCM output_def, SCM key),
+          1, 0, 0, (SCM output_def),
           "Set up a global interpretation context, using the output\n"
           "block @var{output_def}.\n"
           "The context is returned.\n"
-
-          "\n\nOptionally, this routine takes an Object-key to\n"
-          "to uniquely identify the Score block containing it.\n")
+          )
 {
   Output_def *odef = unsmob_output_def (output_def);
 
   SCM_ASSERT_TYPE (odef, output_def, SCM_ARG1, __FUNCTION__,
                   "Output definition");
 
-  Global_context *glob = new Global_context (odef, unsmob_key (key));
+  Global_context *glob = new Global_context (odef);
 
   if (!glob)
     {
@@ -123,7 +120,7 @@ LY_DEFINE (ly_interpret_music_expression, "ly:interpret-music-expression",
 }
 
 LY_DEFINE (ly_run_translator, "ly:run-translator",
-          2, 1, 0, (SCM mus, SCM output_def, SCM key),
+          2, 1, 0, (SCM mus, SCM output_def),
           "Process @var{mus} according to @var{output_def}. \n"
           "An interpretation context is set up,\n"
           "and @var{mus} is interpreted with it.  \n"
@@ -132,7 +129,7 @@ LY_DEFINE (ly_run_translator, "ly:run-translator",
           "Optionally, this routine takes an Object-key to\n"
           "to uniquely identify the Score block containing it.\n")
 {
-  SCM glob = ly_make_global_context (output_def, key);
+  SCM glob = ly_make_global_context (output_def);
   ly_make_global_translator (glob);
   ly_interpret_music_expression (mus, glob);
   return glob;
index 6e0e1c4379af9b971a00944e2e964414b850742a..f4aff0398eeaa977015b2142e212c88985aa7fa8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "global-context.hh"
@@ -14,16 +14,13 @@ using namespace std;
 #include "context-def.hh"
 #include "dispatcher.hh"
 #include "international.hh"
-#include "lilypond-key.hh"
 #include "music-iterator.hh"
 #include "music.hh"
 #include "output-def.hh"
 #include "warn.hh"
 
-Global_context::Global_context (Output_def *o, Object_key *key)
-  : Context (new Lilypond_context_key (key,
-                                      Moment (0),
-                                      "Global", "", 0))
+Global_context::Global_context (Output_def *o)
+  : Context ()
 {
   output_def_ = o;
   definition_ = find_context_def (o, ly_symbol2scm ("Global"));
@@ -92,8 +89,6 @@ Global_context::prepare (SCM sev)
   else
     prev_mom_ = now_mom_;
   now_mom_ = *mom;
-  
-  clear_key_disambiguations ();
 }
 
 Moment
index dd340e9941fd327642c58e83d80ac71328d05cfb..8ce294bbe19955fd7dbc5899c964bcd4d659d6c4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "global-ctor.hh"
index b23b168d6951358b90598e11a1aa36b26eccad03..5be9307f08fe11dd8e967d334b5f7a68422ca8ed 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -81,7 +81,7 @@ Grace_engraver::consider_change_grace_settings ()
            }
          else
            {
-             programming_error ("can't find context");
+             programming_error ("cannot find context: ");
              scm_display (context_name, scm_current_error_port ());
            }
        }
index f0dd19063a2440d902f4325c0ad4c2d4f5bbab05..237ebc81eeecb9b69b4cf697af1d8c224d6b63f1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grace-iterator.hh"
index 51ea066f1a46756a0a1cacbed782b8d08c033860..f92d4ebb8c960548f99fb018cc2743f5c62d3109 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
index 0e1f8740c54ac847f094dadc58ba9f7dcb290c3c..689f76212f28e1e3b3c612e019352f9c760c3e11 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen <hanwen@lilypond.org>
 
 */
 
@@ -51,6 +51,11 @@ Grace_spacing_engraver::process_music ()
                                         column);
 
       column->set_object ("grace-spacing", grace_spacing_->self_scm ());
+
+      if (!grace_spacing_->get_bound (LEFT))
+       grace_spacing_->set_bound (LEFT, column);
+      else
+       grace_spacing_->set_bound (RIGHT, column);
     }
 }
 
index 9a7efcb4a5a328e622c2e7fea26bc0d6ae0cc44e..3f08b7131cf91ee6309c0dded54bb8cdc22b4048 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "gregorian-ligature-engraver.hh"
@@ -209,7 +209,7 @@ provide_context_info (vector<Grob_info> primitives)
 
       if (prefix_set & PES_OR_FLEXA)
        if (!i) // ligature may not start with 2nd head of pes or flexa
-         primitive->warning (_ ("can't apply `\\~' on first head of ligature"));
+         primitive->warning (_ ("cannot apply `\\~' on first head of ligature"));
        else if (pitch > prev_pitch) // pes
          {
            prev_context_info |= PES_LOWER;
@@ -221,7 +221,7 @@ provide_context_info (vector<Grob_info> primitives)
            context_info |= FLEXA_RIGHT;
          }
        else // (pitch == prev_pitch)
-         primitive->warning (_ ("can't apply `\\~' on heads with identical pitch"));
+         primitive->warning (_ ("cannot apply `\\~' on heads with identical pitch"));
       if (prev_prefix_set & DEMINUTUM)
        context_info |= AFTER_DEMINUTUM;
 
index fa790b368ea61bf821b7a5637a6f97b33d96d788..0bfdde3efaec88fc3e5a5cab61fb5785c33d9a8f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "gregorian-ligature.hh"
index f24f96829f8445c6c470439d0880afc8854b58e4..409c4e8ff495d39f2e556e96ab4f64e340e1d8af 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grid-line-interface.hh"
index 8bcc8a3f6a0c4f920d14deb7bdfb18af5c1d6287..ede6afdf424337f1fd6645a8a939484e21de4cba 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 8cd53cbe893f9bf3017ee6ba6d22d97a4e773a84..1a3641717b0d62e186f9e3436f25be08429ff4b8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index d9f7d20e98145ff20d1466c467b9323e741b3c1e..b242addf9b82ff162260eea895f2dff8f921a998 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index bf85be414c7fc82ec8c73e516f0a075c63fe83b4..b89325bdedc55fffe1f39e6aee2d8c301731102e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grob-array.hh"
index 62af8f32562a8864ceb500b69838111eb1dac592..45bacb9bb907285b6061817ff74606c0b9e35b2a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
@@ -19,6 +19,11 @@ Grob_info::Grob_info (Translator *t, Grob *g)
   origin_trans_ = t;
   grob_ = g;
   start_end_ = START;
+
+  /*
+    assert here, because this is easier to debug.
+  */
+  assert (g);
 }
 
 Grob_info::Grob_info ()
index e8e9e9200c558f5dad211a3f9fbb33d5faa60c85..5d5947cbb7a88faac1028dc0f52a6a08249a319c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "lily-guile.hh"
index c47937db0f2737ef292f8a5ffba97583a4b5c73e..73cf230de7603b91b47d7ac2c482abe27cc57cf8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grob-interface.hh"
@@ -26,7 +26,7 @@ SCM add_interface (char const *cxx_name,
     lispy_name += suffix;
 
   SCM s = ly_symbol2scm (lispy_name.c_str ());
-  SCM d = scm_makfrom0str (descr);
+  SCM d = scm_from_locale_string (descr);
   SCM l = parse_symbol_list (vars);
 
   ly_add_interface (s, d, l);
diff --git a/lily/grob-pitch-tuple.cc b/lily/grob-pitch-tuple.cc
deleted file mode 100644 (file)
index eb72a36..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-  grob-pitch-tuple.cc -- implement Grob_pitch_tuple
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "grob-pitch-tuple.hh"
-
-#include "music.hh"
-
-int compare (Grob_pitch_tuple const &a, Grob_pitch_tuple const &b)
-{
-  return Grob_pitch_tuple::time_compare (a, b);
-}
-
-Grob_pitch_tuple::Grob_pitch_tuple ()
-{
-  head_ = 0;
-  end_ = 0;
-}
-
-Grob_pitch_tuple::Grob_pitch_tuple (Grob *h, Music *m, Moment mom)
-{
-  head_ = h;
-  pitch_ = *unsmob_pitch (m->get_property ("pitch"));
-  end_ = mom;
-}
-
-/*
-  signed compare, should use pitch<?
-*/
-int
-Grob_pitch_tuple::pitch_compare (Grob_pitch_tuple const &h1,
-                                Grob_pitch_tuple const &h2)
-{
-  return Pitch::compare (h1.pitch_, h2.pitch_);
-}
-
-int
-Grob_pitch_tuple::time_compare (Grob_pitch_tuple const &h1,
-                               Grob_pitch_tuple const &h2)
-{
-  return Moment::compare (h1.end_, h2.end_);
-}
index 70a0e7d217e57a82d75a95d8a3cf83a533dd5f62..476cae950ca61cece500a96b27fd0f510742ca77 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
@@ -32,7 +32,8 @@ protected:
   DECLARE_ACKNOWLEDGER (grob);
   void start_translation_timestep ();
   void stop_translation_timestep ();
-
+  void process_acknowledged ();
+  
   vector<Grob_pq_entry> started_now_;
 };
 
@@ -88,14 +89,8 @@ Grob_pq_engraver::acknowledge_grob (Grob_info gi)
 }
 
 void
-Grob_pq_engraver::stop_translation_timestep ()
+Grob_pq_engraver::process_acknowledged ()
 {
-  Moment now = now_mom ();
-  SCM start_busy = get_property ("busyGrobs");
-  SCM busy = start_busy;
-  while (scm_is_pair (busy) && *unsmob_moment (scm_caar (busy)) == now)
-    busy = scm_cdr (busy);
-
   vector_sort (started_now_, less<Grob_pq_entry> ());
   SCM lst = SCM_EOL;
   SCM *tail = &lst;
@@ -107,12 +102,24 @@ Grob_pq_engraver::stop_translation_timestep ()
       tail = SCM_CDRLOC (*tail);
     }
 
+  SCM busy = get_property ("busyGrobs");
   busy = scm_merge_x (lst, busy, ly_grob_pq_less_p_proc);
   context ()->set_property ("busyGrobs", busy);
 
   started_now_.clear ();
 }
 
+void
+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) && *unsmob_moment (scm_caar (busy)) == now)
+    busy = scm_cdr (busy);
+
+}
+
 void
 Grob_pq_engraver::start_translation_timestep ()
 {
index f1242994d53fb696133cbedfc6e6b2bc1b9336ce..5e49d8e8ec4747e765c567d9629073bc68bd8c17 100644 (file)
@@ -53,8 +53,8 @@ Grob::get_property_alist_chain (SCM def) const
 
 extern void check_interfaces_for_property (Grob const *me, SCM sym);
 
-void
 #ifndef NDEBUG
+void
 Grob::internal_set_property (SCM sym, SCM v, char const *file, int line, char const *fun)
 {
   SCM grob_p = ly_lily_module_constant ("ly:grob?");
@@ -68,11 +68,32 @@ Grob::internal_set_property (SCM sym, SCM v, char const *file, int line, char co
       scm_display (scm_list_2 (sym, type), scm_current_output_port ());
       assert (0);
     }
+  
+  internal_set_value_on_alist (&mutable_property_alist_,
+                              sym, v);
+
+
+  if (ly_is_procedure (modification_callback))
+    scm_apply_0 (modification_callback,
+                scm_list_n (self_scm (),
+                            scm_from_locale_string (file),
+                            scm_from_int (line),
+                            scm_from_locale_string (fun),
+                            sym, v, SCM_UNDEFINED));
+}
 #else
+void
 Grob::internal_set_property (SCM sym, SCM v)
 {
+  internal_set_value_on_alist (&mutable_property_alist_,
+                              sym, v);
+
+}
 #endif
 
+void
+Grob::internal_set_value_on_alist (SCM *alist, SCM sym, SCM v)
+{
   /* Perhaps we simply do the assq_set, but what the heck. */
   if (!is_live ())
     return;
@@ -81,26 +102,15 @@ Grob::internal_set_property (SCM sym, SCM v)
     {
       if (!ly_is_procedure (v)
          && !is_simple_closure (v)
-         && v != ly_symbol2scm ("calculation-in-progress") 
-         && !type_check_assignment (sym, v, ly_symbol2scm ("backend-type?")))
-       abort ();
+         && v != ly_symbol2scm ("calculation-in-progress"))
+       type_check_assignment (sym, v, ly_symbol2scm ("backend-type?"));
+
       check_interfaces_for_property (this, sym);
     }
 
-#ifndef NDEBUG
-  if (ly_is_procedure (modification_callback))
-      scm_apply_0 (modification_callback,
-                  scm_list_n (self_scm (),
-                              scm_makfrom0str (file),
-                              scm_from_int (line),
-                              scm_makfrom0str (fun),
-                              sym, v, SCM_UNDEFINED));
-#endif
-
-  mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, sym, v);
+  *alist = scm_assq_set_x (*alist, sym, v);
 }
 
-//#define PROFILE_PROPERTY_ACCESSES
 SCM
 Grob::internal_get_property_data (SCM sym) const
 {
@@ -118,11 +128,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)
-         && !is_simple_closure (val)
-         && !type_check_assignment (sym, val, 
-                                 ly_symbol2scm ("backend-type?")))
-       abort ();
+      if (!ly_is_procedure (val) && !is_simple_closure (val))
+       type_check_assignment (sym, val, ly_symbol2scm ("backend-type?"));
 
       check_interfaces_for_property (this, sym);
     }
@@ -137,7 +144,8 @@ Grob::internal_get_property (SCM sym) const
   if (ly_is_procedure (val)
       || is_simple_closure (val))
     {
-      val = ((Grob*)this)->try_callback (sym, val);
+      Grob *me = ((Grob*)this);
+      val = me->try_callback_on_alist (&me->mutable_property_alist_, sym, val);
     }
   
   return val;
@@ -151,15 +159,14 @@ bool debug_property_callbacks = 0;
 #endif
 
 SCM
-Grob::try_callback (SCM sym, SCM proc)
+Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
 {      
   SCM marker = ly_symbol2scm ("calculation-in-progress");
   /*
     need to put a value in SYM to ensure that we don't get a
     cyclic call chain.
   */
-  mutable_property_alist_
-    = scm_assq_set_x (mutable_property_alist_, sym, marker);
+  *alist = scm_assq_set_x (*alist, sym, marker);
 
 #ifndef NDEBUG
   if (debug_property_callbacks)
@@ -175,6 +182,7 @@ Grob::try_callback (SCM sym, SCM proc)
                                            simple_closure_expression (proc),
                                            false, 0, 0);
     }
+  
 #ifndef NDEBUG
   if (debug_property_callbacks)
     grob_property_callback_stack = scm_cdr (grob_property_callback_stack);
@@ -188,12 +196,13 @@ Grob::try_callback (SCM sym, SCM proc)
   if (value == SCM_UNSPECIFIED)
     {
       value = internal_get_property (sym);
+      assert (value == SCM_EOL || value == marker);
       if (value == marker)
-       mutable_property_alist_ = scm_assq_remove_x (mutable_property_alist_, marker);
+       *alist = scm_assq_remove_x (*alist, marker);
     }
   else
-    set_property (sym, value);
-         
+    internal_set_value_on_alist (alist, sym, value);
+  
   return value;
 }
 
@@ -216,13 +225,25 @@ Grob::internal_del_property (SCM sym)
 SCM
 Grob::internal_get_object (SCM sym) const
 {
-#ifdef PROFILE_PROPERTY_ACCESSES
-  note_property_access (&grob_property_lookup_table, sym);
-#endif
+  if (profile_property_accesses)
+    note_property_access (&grob_property_lookup_table, sym);
 
   SCM s = scm_sloppy_assq (sym, object_alist_);
+  
+  if (s != SCM_BOOL_F)
+    {
+      SCM val = scm_cdr (s);
+      if (ly_is_procedure (val)
+         || is_simple_closure (val))
+       {
+         Grob *me = ((Grob*)this);
+         val = me->try_callback_on_alist (&me->object_alist_, sym, val);
+       }
+      
+      return val;
+    }
 
-  return (s == SCM_BOOL_F) ? SCM_EOL : scm_cdr (s);
+  return SCM_EOL;
 }
 
 bool
index be431b7e10cd62192c3c39ba7ad0b77fd5258c57..8d3cc0b4a454ed8faf4ae9dbe8ecf315c16db2cf 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -87,16 +87,7 @@ LY_DEFINE (ly_grob_object, "ly:grob-object",
   return sc->internal_get_object (sym);
 }
 
-LY_DEFINE (ly_spanner_get_bound, "ly:spanner-bound",
-          2, 0, 0, (SCM slur, SCM dir),
-          "Get one of the bounds of @var{spanner}. @var{dir} is @code{-1} "
-          "for left, and @code{1} for right.")
-{
-  Spanner *sl = dynamic_cast<Spanner *> (unsmob_grob (slur));
-  SCM_ASSERT_TYPE (sl, slur, SCM_ARG1, __FUNCTION__, "spanner grob");
-  SCM_ASSERT_TYPE (is_direction (dir), slur, SCM_ARG2, __FUNCTION__, "dir");
-  return sl->get_bound (to_dir (dir))->self_scm ();
-}
+
 
 /* TODO: make difference between scaled and unscalead variable in
    calling (i.e different funcs.) */
@@ -257,20 +248,6 @@ LY_DEFINE (ly_grob_original, "ly:grob-original",
   return me->original () ? me->original ()->self_scm () : me->self_scm ();
 }
 
-/* TODO: maybe we should return a vector -- random access is more
-   logical for this list? */
-LY_DEFINE (ly_spanner_broken_into, "ly:spanner-broken-into",
-          1, 0, 0, (SCM spanner),
-          "Return broken-into list for @var{spanner}.")
-{
-  Spanner *me = dynamic_cast<Spanner *> (unsmob_grob (spanner));
-  SCM_ASSERT_TYPE (me, spanner, SCM_ARG1, __FUNCTION__, "spanner");
-
-  SCM s = SCM_EOL;
-  for (vsize i = me->broken_intos_.size (); i--;)
-    s = scm_cons (me->broken_intos_[i]->self_scm (), s);
-  return s;
-}
 
 LY_DEFINE (ly_grob_suicide_x, "ly:grob-suicide!",
           1, 0, 0, (SCM g),
@@ -296,27 +273,6 @@ LY_DEFINE (ly_grob_translate_axis_x, "ly:grob-translate-axis!",
   return SCM_UNSPECIFIED;
 }
 
-LY_DEFINE (ly_spanner_p, "ly:spanner?",
-          1, 0, 0, (SCM g),
-          "Is  @var{g} a spanner object?")
-{
-  Grob *me = unsmob_grob (g);
-  bool b = dynamic_cast<Spanner *> (me);
-
-  return ly_bool2scm (b);
-}
-
-LY_DEFINE (ly_grob_key, "ly:grob-key",
-          1, 0, 0,
-          (SCM grob),
-          "Return the object-key for @var{grob}.")
-{
-  Grob *me = unsmob_grob (grob);
-  SCM_ASSERT_TYPE (me, grob, SCM_ARG1, __FUNCTION__, "Grob");
-  
-  return me->key () ?  me->key ()->self_scm () : SCM_EOL;
-}
-
 LY_DEFINE (ly_grob_default_font, "ly:grob-default-font",
           1, 0, 0, (SCM grob),
           "Return the default font for grob @var{gr}.")
index 4fb42c9237d2a707fc0e0460d720e0de3cc57bc8..1011d47fdcf1f1a55441cfb31e6f703547880c56 100644 (file)
@@ -3,12 +3,13 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grob.hh"
 
 #include "paper-score.hh"
+#include "warn.hh"
 
 #include "ly-smobs.icc"
 
@@ -19,12 +20,11 @@ IMPLEMENT_TYPE_P (Grob, "ly:grob?");
 SCM
 Grob::mark_smob (SCM ses)
 {
+  ASSERT_LIVE_IS_ALLOWED();
+  
   Grob *s = (Grob *) SCM_CELL_WORD_1 (ses);
   scm_gc_mark (s->immutable_property_alist_);
 
-  if (s->key_)
-    scm_gc_mark (s->key_->self_scm ());
-
   /* Do not mark the parents.  The pointers in the mutable
      property list form two tree like structures (one for X
      relations, one for Y relations).  Marking these can be done
index 139a387989393209390a7704246c87402d0b3295..01b2c7f3e313b33fdeb12e35de11ee33082752fe 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grob.hh"
 #include "ly-smobs.icc"
 
 Grob *
-Grob::clone (int count) const
+Grob::clone () const
 {
-  return new Grob (*this, count);
+  return new Grob (*this);
 }
 
-Grob::Grob (SCM basicprops,
-           Object_key const *key)
+Grob::Grob (SCM basicprops)        
 {
-  key_ = key;
   
   /* FIXME: default should be no callback.  */
   self_scm_ = SCM_EOL;
@@ -51,15 +49,18 @@ Grob::Grob (SCM basicprops,
      GC. After smobify_self (), they are.  */
   smobify_self ();
 
-  /*
-    We always get a new key object for a new grob.
-  */
-  if (key_)
-    ((Object_key *)key_)->unprotect ();
-
   SCM meta = get_property ("meta");
   if (scm_is_pair (meta))
-    interfaces_ = scm_cdr (scm_assq (ly_symbol2scm ("interfaces"), meta));
+    {
+      interfaces_ = scm_cdr (scm_assq (ly_symbol2scm ("interfaces"), meta));
+
+      SCM object_cbs = scm_assq (ly_symbol2scm ("object-callbacks"), meta);
+      if (scm_is_pair (object_cbs))
+       {
+         for (SCM s = scm_cdr (object_cbs); scm_is_pair (s); s = scm_cdr (s))
+           set_object (scm_caar (s), scm_cdar (s)); 
+       }
+    }
   
   if (get_property_data ("X-extent") == SCM_EOL)
     set_property ("X-extent", Grob::stencil_width_proc);
@@ -67,10 +68,9 @@ Grob::Grob (SCM basicprops,
     set_property ("Y-extent", Grob::stencil_height_proc);
 }
 
-Grob::Grob (Grob const &s, int copy_index)
+Grob::Grob (Grob const &s)
   : dim_cache_ (s.dim_cache_)
 {
-  key_ = (use_object_keys) ? new Copied_key (s.key_, copy_index) : 0;
   original_ = (Grob *) & s;
   self_scm_ = SCM_EOL;
 
@@ -82,8 +82,6 @@ Grob::Grob (Grob const &s, int copy_index)
   layout_ = 0;
 
   smobify_self ();
-  if (key_)
-    ((Object_key *)key_)->unprotect ();
 }
 
 Grob::~Grob ()
@@ -420,11 +418,11 @@ Grob::extent (Grob *refp, Axis a) const
 Interval
 Grob::pure_height (Grob *refp, int start, int end)
 {
-  SCM proc = get_property_data ( ly_symbol2scm ("Y-extent"));
-  Interval iv = robust_scm2interval (call_pure_function (proc,
-                                                        scm_list_1 (self_scm ()),
-                                                        start, end),
-                                    Interval (0, 0));
+  SCM proc = get_property_data (ly_symbol2scm ("Y-extent"));
+  SCM iv_scm = call_pure_function (proc,
+                                  scm_list_1 (self_scm ()),
+                                  start, end);
+  Interval iv = robust_scm2interval (iv_scm, Interval (0, 0));
   Real offset = pure_relative_y_coordinate (refp, start, end);
 
   SCM min_ext = get_property ("minimum-Y-extent");
@@ -633,15 +631,10 @@ ADD_INTERFACE (Grob,
               "transparent "
               );
 
-
-
-
-
 /****************************************************************
   CALLBACKS
 ****************************************************************/
 
-
 static SCM
 grob_stencil_extent (Grob *me, Axis a)
 {
diff --git a/lily/guile-init.cc b/lily/guile-init.cc
new file mode 100644 (file)
index 0000000..8f7cbd8
--- /dev/null
@@ -0,0 +1,54 @@
+/* 
+  guile-init.cc -- implement GUILE init routines.
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#include  "lily-guile.hh"
+#include  "main.hh"
+#include  "warn.hh"
+
+/*
+  INIT
+*/
+
+
+typedef void (*Void_fptr) ();
+vector<Void_fptr> *scm_init_funcs_;
+
+void add_scm_init_func (void (*f) ())
+{
+  if (!scm_init_funcs_)
+    scm_init_funcs_ = new vector<Void_fptr>;
+
+  scm_init_funcs_->push_back (f);
+}
+
+void
+ly_init_ly_module (void *)
+{
+  for (vsize i = scm_init_funcs_->size (); i--;)
+    (scm_init_funcs_->at (i)) ();
+
+  if (be_verbose_global)
+    {
+      progress_indication ("[");
+      scm_display (scm_c_eval_string ("(%search-load-path \"lily.scm\")"),
+                  scm_current_error_port ());
+      progress_indication ("]\n");
+    }
+
+  scm_primitive_load_path (scm_from_locale_string ("lily.scm"));
+}
+
+SCM global_lily_module;
+
+void
+ly_c_init_guile ()
+{
+  global_lily_module = scm_c_define_module ("lily", ly_init_ly_module, 0);
+  scm_c_use_module ("lily");
+}
index e0916cd99d98c4a0d524155d81fa57bf800b787a..20808956ae9607264d9ee84699bf778835e19cd2 100644 (file)
@@ -3,22 +3,21 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "hairpin.hh"
 
 #include "dimensions.hh"
-#include "font-interface.hh"
 #include "international.hh"
 #include "line-interface.hh"
-#include "lookup.hh"
 #include "output-def.hh"
 #include "paper-column.hh"
 #include "pointer-group-interface.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
 #include "text-interface.hh"
+#include "note-column.hh"
 #include "warn.hh"
 
 MAKE_SCHEME_CALLBACK (Hairpin, after_line_breaking, 1);
@@ -167,7 +166,12 @@ Hairpin::print (SCM smob)
                }
              else
                {
-                 x_points[d] = e[d];
+                 if (Note_column::has_interface (b)
+                     && Note_column::has_rests (b))
+                   x_points[d] = e[-d];
+                 else
+                   x_points[d] = e[d];
+                 
                  Item *bound = me->get_bound (d);
                  if (bound->is_non_musical (bound))
                    x_points[d] -=  d * padding;
@@ -242,7 +246,7 @@ Hairpin::print (SCM smob)
        don't add another circle the hairpin is broken
       */
       if (!broken[tip_dir])
-       mol.add_at_edge (X_AXIS, tip_dir, Stencil (circle), 0, 0);
+       mol.add_at_edge (X_AXIS, tip_dir, Stencil (circle), 0);
     }
 
   mol.translate_axis (x_points[LEFT]
index e899fdb8fdef8e517ad75bb1372636b0e486ec89..79fbd11f9d74f3d8442a6b043c7a1f5ffeed235f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "axis-group-engraver.hh"
index 90a06f145a9a0b0e7a05d0facf124d689792c2aa..81e2c7d9713f067377b7fe1a56379d6da5aa0c64 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -119,15 +119,6 @@ Hara_kiri_group_spanner::consider_suicide (Grob *me)
   We can't rely on offsets and dimensions of elements in a hara-kiri
   group. Use a callback to make sure that hara-kiri has been done
   before asking for offsets.  */
-MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, after_line_breaking, 1);
-SCM
-Hara_kiri_group_spanner::after_line_breaking (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  consider_suicide (me);
-  return SCM_UNSPECIFIED;
-}
-
 MAKE_SCHEME_CALLBACK (Hara_kiri_group_spanner, force_hara_kiri_callback, 1);
 SCM
 Hara_kiri_group_spanner::force_hara_kiri_callback (SCM smob)
index 57c368154a50a2a2790f6b3fe1ce2ef2f98a3cea..d7e453da1f1323d8777ab649418c9bb00484f654 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -56,7 +56,7 @@ Horizontal_bracket_engraver::listen_note_grouping (Stream_event *ev)
     {
       pop_count_++;
       if (pop_count_ > bracket_stack_.size ())
-       ev->origin ()->warning (_ ("don't have that many brackets"));
+       ev->origin ()->warning (_ ("do not have that many brackets"));
     }
   else
     {
index d2b016b49625419ee6a4a7c1005242e7842aaa13..9d92028ac4cc8806c66f8ab515f3749e57fefefb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "horizontal-bracket.hh"       
@@ -72,19 +72,25 @@ Horizontal_bracket::make_enclosing_bracket (Grob *me, Grob *refpoint,
   Grob *common = common_refpoint_of_array (grobs, refpoint, a);
   Interval ext = Axis_group_interface::relative_group_extent (grobs, common, a);
 
-  Stencil b = make_bracket (me, ext.length(), a, dir);
-  b.translate_axis (ext[LEFT] - refpoint->relative_coordinate (common, a), a);
+  if (ext.is_empty ())
+    {
+      me->programming_error ("Can't enclose empty extents with bracket");
+      return Stencil ();
+    }
+  else
+    {
+      Stencil b = make_bracket (me, ext.length(), a, dir);
+      b.translate_axis (ext[LEFT] - refpoint->relative_coordinate (common, a), a);
 
-  return b;
+      return b;
+    }
 }
 
-
 /*
   TODO:
 
   Support texts on the brackets?
 */
-
 MAKE_SCHEME_CALLBACK (Horizontal_bracket, print, 1);
 SCM
 Horizontal_bracket::print (SCM smob)
index 3a1a4291025b47d07ab4d86f9fde4f22f3622f4c..3e03d9b8e04199cd8fb42420ff23740282d081e9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Glen Prideaux <glenprideaux@iname.com>,
+  (c) 1999--2007 Glen Prideaux <glenprideaux@iname.com>,
   Han-Wen Nienhuys <hanwen@xs4all.nl>,
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
index f1ea027c49da55088ebc48e4f9680297fac4706b..cdfadd3dfc4c4930815eb359fafa129986cc707e 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "identifier-smob.hh"
index cb851575ba5740edd4bcf46c1f7176aad4b34a87..ee971d7cad75f523ffd901f3fc24c4a38b5b91dc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "includable-lexer.hh"
@@ -41,23 +41,16 @@ Includable_lexer::Includable_lexer ()
 #if HAVE_FLEXLEXER_YY_CURRENT_BUFFER
   yy_current_buffer = 0;
 #endif
-  allow_includes_b_ = true;
 }
 
 /** Set the new input file to NAME, remember old file.  */
 void
 Includable_lexer::new_input (string name, Sources *sources)
 {
-  if (!allow_includes_b_)
-    {
-      LexerError (_ ("include files are not allowed in safe mode").c_str ());
-      return;
-    }
-
   Source_file *file = sources->get_file (&name);
   if (!file)
     {
-      string msg = _f ("can't find file: `%s'", name);
+      string msg = _f ("cannot find file: `%s'", name);
       msg += "\n";
       msg += _f ("(search path: `%s')",
                 sources->path_->to_string ().c_str ());
index 8fd57a5fd91f6a7b9eab3390c9a0811c80f2aa67..a90680537f9a9eefeca52e8fdee1cc60a93a1c6e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ACCIDENTAL_INTERFACE_HH
@@ -19,7 +19,9 @@ class Accidental_interface
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
-  DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_stencils, (SCM));
+  DECLARE_SCHEME_CALLBACK (height, (SCM));
+  DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
   
   DECLARE_GROB_INTERFACE();
   static string get_fontcharname (string style, int alteration);
index 5d09bdc2df699cfbd555051536c434db5b39d589..f6c17621edb9f81c13143fb75bd49c3a79eb8301 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ACCIDENTAL_PLACEMENT_HH
index 54005bd986ef9216cafbdd9a8f2b613073a0a53a..0d0f0958468b5a69eca0cc96d9b57ef173d42b32 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ALIGN_INTERFACE_HH
@@ -17,6 +17,8 @@ struct Align_interface
 {
   DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
   DECLARE_SCHEME_CALLBACK (stretch_after_break, (SCM element));
+  DECLARE_SCHEME_CALLBACK (calc_max_stretch, (SCM));
+  static void stretch (Grob *, Real amount, Axis a);
   static void align_to_fixed_distance (Grob *, Axis a);
   static void align_elements_to_extents (Grob *, Axis a);
   static vector<Real> get_extents_aligned_translates (Grob *, vector<Grob*> const&,
index 34a05e701f21cb1a5ae16b276ceaa8122b0ab729..073b839d9a1ff874cd9b0f880a665468f82f9d32 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ALL_FONTS_HH
@@ -43,11 +43,8 @@ public:
   All_font_metrics (string search_path);
   ~All_font_metrics ();
 
-#if HAVE_PANGO_FT2
-  Pango_font *find_pango_font (PangoFontDescription *description,
-                              Real magnification,
+  Pango_font *find_pango_font (PangoFontDescription const *description,
                               Real scale);
-#endif
 
   Font_metric *find_font (string name);
   Open_type_font *find_otf (string name);
index d687e20be4cc8d2a451222926bc53446279be857..ba46111a60aae17454a9a1abdc79d515b85eff4e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2000--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #ifndef AMBITUS_HH
index 4d740dbc15bc2b2b8c0a77f45db5f674e1ca6ca0..b58fd9e299b6db645c8e3347510dc5a5f6dd3d7e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef ARPEGGIO_HH
index 1cc827a2767fff90abde602dbaf450f40af3f493..0b10c8bd4d479faf633458a7407db7dd0014c4ee 100644 (file)
@@ -1,7 +1,7 @@
 /*
   audio-column.hh -- declare Audio_column
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef AUDIO_COLUMN_HH
 class Audio_column : public Audio_element
 {
 public:
-  Audio_column (Moment at_mom);
+  Audio_column (Moment when);
 
   void add_audio_item (Audio_item *i);
-  Moment at_mom () const;
+  Moment when () const;
 
   vector<Audio_item*> audio_items_;
-
+  Moment when_;
+  int ticks () const ;
 protected:
-  void offset_at_mom (Moment m);
+  void offset_when (Moment m);
   friend class Score_performer;
 
-private:
-  Audio_column (Audio_column const &);
-
-  Moment at_mom_;
 };
 
 #endif // AUDIO_COLUMN_HH
index fd529bfde22f2244ad345526508a91d19de19d29..852867005289fb086bea9a751ce1806446b6260d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef AUDIO_ITEM_INFO_HH
index 2941c7d10530950ebdfe78009d48ff97fdbd4e40..dac7bddd549513ee2b5c13a0842083d141aea767 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef AUDIO_ELEMENT_HH
@@ -17,9 +17,8 @@ public:
   Audio_element ();
   virtual ~Audio_element ();
 
-  VIRTUAL_COPY_CONSTRUCTOR(Audio_element, Audio_element);
+  DECLARE_CLASSNAME(Audio_element);
   virtual char const *name () const;
-protected:
 };
 
 #endif // AUDIO_ELEMENT_HH
index 11f3cd31f5b90f2211578e0ed5f80c44968f415b..c02eba58c19cbe04b4f118956ec60c6bafb9729e 100644 (file)
@@ -1,7 +1,7 @@
 /*
   audio-item.hh -- declare Audio_items
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef AUDIO_ITEM_HH
@@ -21,7 +21,10 @@ class Audio_item : public Audio_element
 public:
   Audio_item ();
   Audio_column *audio_column_;
+  Audio_column *get_column () const;
 
+  virtual void render ();
+  
 private:
   Audio_item (Audio_item const &);
   Audio_item &operator = (Audio_item const &);
@@ -30,11 +33,24 @@ private:
 class Audio_dynamic : public Audio_item
 {
 public:
-  Audio_dynamic (Real volume);
+  Audio_dynamic ();
 
   Real volume_;
 };
 
+class Audio_span_dynamic : public Audio_element
+{
+public:
+  Direction grow_dir_;
+  vector<Audio_dynamic*> dynamics_;
+
+
+  virtual void render ();
+  void add_absolute (Audio_dynamic*);
+  Audio_span_dynamic ();
+};
+
+
 class Audio_key : public Audio_item
 {
 public:
@@ -55,13 +71,14 @@ public:
 class Audio_note : public Audio_item
 {
 public:
-  Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i);
+  Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition);
 
   void tie_to (Audio_note *);
 
   Pitch pitch_;
   Moment length_mom_;
-  int transposing_;
+  Pitch transposing_;
+  
   Audio_note *tied_;
   bool tie_event_;
 };
@@ -105,5 +122,9 @@ public:
   int one_beat_;
 };
 
+int moment_to_ticks (Moment);
+Real moment_to_real (Moment);
+Moment remap_grace_duration (Moment);
+
 #endif // AUDIO_ITEM_HH
 
index fa6e1b942942a5958d057a0c1456a11cec65e223..6c3da3b1b9bef4ed63ebc50076df296150e116a4 100644 (file)
@@ -1,7 +1,7 @@
 /*
   audio-staff.hh -- declare Audio_staff
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef AUDIO_STAFF_HH
index 42b4b8c35f67b56806d56c84b7d6896bbe5c9165..73388b8d2d86444480d3b4cab2843e72d573ce5a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef AXIS_GROUP_ENGRAVER_HH
index 4272b1a8901acaa2a8678dee0f5ebad2c00c070d..2f4f501cee8db919a9f7992f9d030c51f45a1f4e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef AXIS_GROUP_INTERFACE_HH
@@ -19,10 +19,13 @@ struct Axis_group_interface
   static SCM generic_group_extent (Grob *me, Axis a);
   static SCM pure_group_height (Grob *me, int start, int end);
   DECLARE_SCHEME_CALLBACK (width, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (calc_x_common, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (calc_y_common, (SCM smob));
   DECLARE_SCHEME_CALLBACK (height, (SCM smob));
   DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end));
   DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM smob));
   DECLARE_SCHEME_CALLBACK (combine_skylines, (SCM smob));
+  DECLARE_SCHEME_CALLBACK (calc_max_stretch, (SCM smob));
   static Interval relative_group_extent (vector<Grob*> const &list,
                                         Grob *common, Axis);
   static Interval relative_pure_height (Grob *me, vector<Grob*> const &list,
@@ -31,6 +34,7 @@ struct Axis_group_interface
   static Interval cached_pure_height (Grob *me, vector<Grob*> const &list,
                                      Grob *common, int, int);
 
+  static Grob *calc_pure_elts_and_common (Grob*);
   static Skyline_pair skyline_spacing (Grob *me, vector<Grob*> elements);
   static void add_element (Grob *me, Grob *);
   static void set_axes (Grob *, Axis, Axis);
index d7b51cbad9dce03bc7edcad611840e4b3a11e83e..d1b2625ae680df35e9cefe1291b7d82908aed0a2 100644 (file)
@@ -1,7 +1,7 @@
 /*
   bar.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef BAR_HH
index ee737a1beb3c97a05ad8a624729ea5686a783f10..72b2f1957fb65eecf677434f5e27fdfd98b273f1 100644 (file)
@@ -1,7 +1,7 @@
 /*
   bar.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef BAR_HH
index 9126bfbfec8e8051772978a29fe9d0a77255db6b..412540b076a30ce78cfd5c0be0c5a56ece5fa51c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -34,6 +34,7 @@ struct Beam_quant_parameters
   Real STEM_LENGTH_LIMIT_PENALTY;
   Real DAMPING_DIRECTION_PENALTY;
   Real MUSICAL_DIRECTION_FACTOR;
+  Real HINT_DIRECTION_PENALTY;
   Real IDEAL_SLOPE_FACTOR;
   Real ROUND_TO_ZERO_SLOPE;
 
@@ -55,7 +56,7 @@ struct Beam_stem_segment
   Real width_;
   Real stem_x_;
   int rank_;
-  int stem_index_;
+  vsize stem_index_;
   bool gapped_;
   Direction dir_;
   int max_connect_;
@@ -68,9 +69,9 @@ bool operator <(Beam_stem_segment const &a, Beam_stem_segment const &b);
 class Beam
 {
 public:
-  static int visible_stem_count (Grob *);
-  static Grob *first_visible_stem (Grob *);
-  static Grob *last_visible_stem (Grob *);
+  static int normal_stem_count (Grob *);
+  static Grob *first_normal_stem (Grob *);
+  static Grob *last_normal_stem (Grob *);
   DECLARE_GROB_INTERFACE();
   static void add_stem (Grob *, Grob *);
   static bool is_knee (Grob *);
@@ -89,6 +90,7 @@ public:
   DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_positions, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_least_squares_positions, (SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (calc_normal_stems, (SCM));  
   DECLARE_SCHEME_CALLBACK (calc_concaveness, (SCM));
   DECLARE_SCHEME_CALLBACK (set_stem_lengths, (SCM));
 
index 5e0c7c30ecd98004b776fc7fc40603772dae6d67..134c4488d5e4a986c0cb3ef317fe2e57d330b19d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef BEAMING_PATTERN_HH
index 94f207a33bd15397f38cab02f41880d3531aec38..98886105ee2e959699490f0455d13b1b69f08242 100644 (file)
@@ -1,7 +1,7 @@
 /*
   bezier.hh -- declare Bezier and Bezier_bow
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef BEZIER_HH
index ee0c4a15a389b1cb249ab4d0bcba399db8d77a33..919b0e8e42958f6416434ce14af7faf922271a47 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006  Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef BOOK_PAPER_DEF_HH
index 03553138d5e993a968d567dfc49c0dc8685d1c8b..cf478432388fea996d8a35224815a64d1a56de57 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef BOOK_HH
@@ -11,9 +11,9 @@
 
 #include "lily-proto.hh"
 #include "std-vector.hh"
-#include "object-key.hh"
 #include "std-string.hh"
 #include "virtual-methods.hh"
+#include "smobs.hh"
 
 class Book
 {
index 421043b24cc70dd05808a0e5768b19aaf5a6f925..ba68a874af481cfbb592f90a6e4eed838693b0e6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef BREAK_ALIGN_INTERFACE_HH
index 69d46e67a2a65ec6953d6432e996aaf4d4369275..449740d41810efce03345fbd26fe6443b301c95f 100644 (file)
@@ -1,7 +1,7 @@
 /*
   breathing-sign.hh
 
-  Copyright (c) 1999--2006 Michael Krause
+  Copyright (c) 1999--2007 Michael Krause
 
   written for the GNU LilyPond music typesetter
 */
index f5c805684fe66c186952e0792f32ddb66eac4199..2123ffa442334f76d3040d82182f95454841934a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef CHORD_NAME_HH
index d1d407dd1f002a7b05f807e835f434306013cc92..c6a40afc0e3eff961958670032eabc2632b55d4c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef CHORD_TREMOLO_ITERATOR_HH
index 6595fc468707432e152b3c695fbbf6845d77fa32..bc6550fe4e92b9129fc3c61313de2cbd93f5b80a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef CLEF_HH
index 75090102e6e2e4cb770dc3b55e8ac2c7724e1440..3081b1b093bb77aeff3f251614e5d4fc87385c62 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #ifndef CLUSTER_HH
index 89eb6b9e32fe78f56bf8cd073bd21208fdceef2e..4009f5704149850376044c44356cb2fbd07c821d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 #ifndef COHERENT_LIGATURE_ENGRAVER_HH
 #define COHERENT_LIGATURE_ENGRAVER_HH
index aeb3060048793c876c7568c69274dc0eabd834ce..a562235f9eb301718288802763aa4cc5d59265bf 100644 (file)
@@ -1,7 +1,7 @@
 /*
   column-x-positions.hh -- part of GNU LilyPond
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef COLUMN_X_POSITIONS_HH
index e1401f161479ef65436ee4bfb9d244b381d29d5f..2478afcacaa0281638fc1deed859a4b0ef7e8155 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef CONSTRAINED_BREAKING_HH
@@ -93,17 +93,15 @@ struct Constrained_break_node
 class Constrained_breaking
 {
 public:
-  vector<Column_x_positions> solve ();
+  vector<Column_x_positions> solve (vsize start, vsize end, vsize sys_count);
+  vector<Column_x_positions> best_solution (vsize start, vsize end);
+  vector<Line_details> line_details (vsize start, vsize end, vsize sys_count);
+
   Constrained_breaking (Paper_score *ps);
   Constrained_breaking (Paper_score *ps, vector<vsize> const &start_col_posns);
 
-  vector<Column_x_positions> get_solution (vsize start, vsize end, vsize sys_count);
-  vector<Column_x_positions> get_best_solution (vsize start, vsize end);
-  vector<Line_details> get_details (vsize start, vsize end, vsize sys_count);
-  int get_max_systems (vsize start, vsize end);
-  int get_min_systems (vsize start, vsize end);
-
-  void resize (vsize systems);
+  int max_system_count (vsize start, vsize end);
+  int min_system_count (vsize start, vsize end);
 
 private:
   Paper_score *pscore_;
@@ -127,6 +125,7 @@ private:
   vector<vsize> breaks_;
 
   void initialize ();
+  void resize (vsize systems);
 
   Column_x_positions space_line (vsize start_col, vsize end_col);
   vsize prepare_solution (vsize start, vsize end, vsize sys_count);
index ac7b776208f0e45772b1aa57c8ac258201c01137..dd4df4c802061b355fe7ae44b2c104b20c67753a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef CONTEXT_DEF_HH
@@ -50,7 +50,7 @@ public:
 
   vector<Context_def*> path_to_acceptable_context (SCM type_string,
                                                      Output_def *) const;
-  Context *instantiate (SCM extra_ops, Object_key const *);
+  Context *instantiate (SCM extra_ops);
 
   SCM to_alist () const;
   static SCM make_scm ();
index e32bc29cb7f8881b6d7589c4f622473396f5d8e9..98898ccb5043abbe4f18f2fea639997c4b6732c6 100644 (file)
@@ -3,16 +3,14 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
-#ifndef INTERPRETATION_CONTEXT_HANDLE_HH
-#define INTERPRETATION_CONTEXT_HANDLE_HH
+#ifndef CONTEXT_HANDLE_HH
+#define CONTEXT_HANDLE_HH
+
 #include "lily-proto.hh"
 
-/*
-  Rename me to Context_handle.
-*/
 
 class Context_handle
 {
@@ -32,5 +30,5 @@ private:
   void up (Context *);
 };
 
-#endif /* INTERPRETATION_CONTEXT_HANDLE_HH */
+#endif /* CONTEXT_HANDLE_HH */
 
diff --git a/lily/include/context-key-manager.hh b/lily/include/context-key-manager.hh
deleted file mode 100644 (file)
index db7078f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-  context-key-manager.hh -- declare Context_key_manager
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#ifndef CONTEXT_KEY_MANAGER_HH
-#define CONTEXT_KEY_MANAGER_HH
-
-#include "lily-proto.hh"
-
-#include <map>
-using namespace std;
-
-class Context_key_manager
-{
-  Object_key const *key_;
-  map<string, int> grob_counts_;
-  map<string, int> context_counts_;
-  
-
-protected:
-  friend class Context;
-  
-  Context_key_manager (Object_key const *);
-  Context_key_manager (Context_key_manager const &src);
-
-
-  void unprotect () const;
-  void gc_mark () const;
-  void clear ();
-  Object_key const *key () const { return key_; }
-  Object_key const *create_grob_key (Moment, string);
-  Object_key const *get_grob_key (Moment, string);
-  Object_key const *get_context_key (Moment, string, string);
-};
-
-#endif /* CONTEXT_KEY_MANAGER_HH */
-
-
index 8eba283027a8811e6bfa04b7396fe5b11c749d81..2cb0280ea128cb59076f7ce1d07463358fd007c2 100644 (file)
@@ -3,17 +3,18 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef CONTEXT_HH
 #define CONTEXT_HH
 
-#include "context-key-manager.hh"
 #include "listener.hh"
 #include "moment.hh"
 #include "std-vector.hh"
 #include "virtual-methods.hh"
+#include "scm-hash.hh"
+#include "lily-proto.hh"
 
 class Context
 {
@@ -37,7 +38,6 @@ protected:
   SCM definition_;
   /* Additions to the Context_def, given by \with */
   SCM definition_mods_;
-  Context_key_manager key_manager_;
   
   SCM properties_scm_;
   SCM context_list_;
@@ -59,15 +59,11 @@ protected:
   friend class Context_def;
   // UGH! initialises implementation_
   friend SCM ly_make_global_translator (SCM);
-  void clear_key_disambiguations ();
 
   DECLARE_LISTENER (set_property_from_event);
   DECLARE_LISTENER (unset_property_from_event);
   
 public:
-  Object_key const *get_grob_key (string name);
-  Object_key const *get_context_key (string name, string id);
-
   string id_string () const { return id_string_; }
   SCM children_contexts () const { return context_list_; }
   SCM default_child_context_name () const;
@@ -81,7 +77,7 @@ public:
 
   Translator_group *implementation () const { return implementation_; }
   Context *get_parent_context () const;
-  Context (Object_key const *);
+  Context ();
 
   /* properties:  */
   SCM internal_get_property (SCM name_sym) const;
index d1a26ab4a4f60b89cf6f191ce61701f2aeb95d46..2bb73fbe679c4670e19afed2881bcc4752b9965a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2000--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #ifndef CUSTOS_HH
index 37f860510f0ed513202c6eb6b11e0cad0fb683bd..719a9ea3dea4774d80101e01f815a04ca258dbe7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DIMENSION_CACHE_CALLBACK_HH
index fa9147838a620e3f7c6202577fec386f4cbd3d8f..b1e9aba043cc298d3393e3a880c8accac4a75a9f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DIMENSION_CACHE_HH
index 7da0eae62372abdd70593caa374ae5620fd437a0..7fd4169559f24969d3539988dfd88fcd81ba96fb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DIRECTIONAL_ELEMENT_HH
index 503b1425ae158fe1060998acd493aa53ea891e2e..8ef01bed2b3a11aad240e28b17d98f75bc3a14cd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DOT_COLUMN_HH
index df1d37289b131071289307697006df5788879c8e..cac34cbaf32a4ec8babee63a5b037686d4f8e5dc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef DOTS_HH
index b3e7841f08bedb50158e2b98ac31a049592e952b..e337ac58cb4fc5764c2175f1774645c8009ea97c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef DURATION_HH
index 3fa99e638e9cd703a58bb633f2d70bcad9914b76..8e67651af5dc9ec1d33ec753c4131a1e46dca8cd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ENGRAVER_GROUP_HH
index 493c9c98d870b70361c96d5364f716ed55d63434..5f74491e949fbe75be5e22a5813f91f371af5ca1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ENGRAVER_HH
index a252e871fe2af892bfd1de83f389a943eddf5d07..307f5ba0c61cf546ddcd3ae0b2b4a77135f05852 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef EVENT_CHORD_ITERATOR_HH
index ce2809c8ead9f8552fd92c8c2c452f1f03cb2762..2b8368b9849075857f48716c593f0a52cedbd73a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
           Erik Sandberg <mandolaerik@gmail.com>
 */
 
index 35697d753dd0158c1ef040c152f423f477c4cc14..74d96a28bf9253fc7bba91eebe72331f78a8a8db 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FILE_NAME_MAP_HH
index 239b7941f005aa8032a4f02d7f876cb3a14bf233..d32f77d57f90575889c3092280102c994c219575 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FOLDED_REPEAT_ITERATOR_HH
index cc68af60d7fd725e9e25f04d57e4b91d7e168a95..ec8f680f32a28f46743c431437194a39714d9ec0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FONT_INTERFACE_HH
index 1107ba9af8e4d08fd6231f60f7ed2279078cbd0d..f77d394599cb09b06cee3d5c3dbbd4c5134ee4b1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FONT_METRIC_HH
index 416c85984cef6e7623611996157de69f69b0a15a..2297d6c1d8bf716f046371715215613d6fd33980 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef FREETYPE_HH
index 75172595cc6471fd324a43f95df307115a6290b5..540d96654bb9296e3d9f2bdf934bd271d9afd998 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GLOBAL_CONTEXT_HH
@@ -21,7 +21,7 @@ class Global_context : public virtual Context
 
   friend class Output_def;
 public:
-  Global_context (Output_def *, Object_key *key);
+  Global_context (Output_def *);
   int get_moments_left () const;
   Moment sneaky_insert_extra_moment (Moment);
   void add_moment_to_process (Moment);
index 8a45bf582afa546ae982037a68b61ff586060227..7b10975331a167956880bb6015b5215a4f405606 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GLOBAL_CTOR_HH
index c8d8f850b92319b9a768f6bc75c0476fcb1f0c98..93491d163dd09ce4412b7204a9d7e3e049bd8711 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GRACE_FIXUP_HH
index 87fd730c7e4b3aebca862235aca96f1bcb345e73..f4e64de693597fb0bda67bb79991892125fd5940 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef NEWGRACE_ITERATOR_HH
index 1016993c4c9a058dddf0c39f5f20c355a8f14d6c..1a6ef77133980dd8c1003c9d759967d530709e83 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 #ifndef GREGORIAN_LIGATURE_ENGRAVER_HH
 #define GREGORIAN_LIGATURE_ENGRAVER_HH
index 07b0ba11efe8f9f4994efda2071205d86b459561..b874311c256425221f047869ad119ee3bfd7a9d2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #ifndef GREGORIAN_LIGATURE_HH
index abb02c948860a74771040762f4855073ee97c177..c0b8753379841f22ea19da7cdbf819688ac4c351 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GRID_LINE_INTERFACE_HH
index e5cee3d10d1bc52499913ee66402e9099ea6651b..f0eb32d01d44df6e6577402c0c630a323af0bf6b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GROB_ARRAY_HH
index b92f033718e48c3b1d44357ffea3ce2b1660c35a..01ae110b376fb2642804bc70951138fc8a3b4aee 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef STAFFELEMINFO_HH
index f6a92c0afed034a5859c8ff2a54d38d03e7c5746..fe1d5565d969d863931961a6aab5ca2881822ebc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef INTERFACE_HH
index 325e3fa0a4a7698838c7c30722734a43e3666f58..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,30 +0,0 @@
-/*
-  grob-pitch-tuple.hh -- declare Grob_pitch_tuple
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef GROB_PITCH_TUPLE_HH
-#define GROB_PITCH_TUPLE_HH
-
-#include "pitch.hh"
-#include "moment.hh"
-
-struct Grob_pitch_tuple
-{
-  Pitch pitch_;
-  Grob *head_;
-  Moment end_;
-
-  Grob_pitch_tuple ();
-  Grob_pitch_tuple (Grob *, Music *, Moment);
-  static int pitch_compare (Grob_pitch_tuple const &, Grob_pitch_tuple const &);
-  static int time_compare (Grob_pitch_tuple const &, Grob_pitch_tuple const &);
-};
-
-int compare (Grob_pitch_tuple const &, Grob_pitch_tuple const &);
-
-#endif /* GROB_PITCH_TUPLE_HH */
-
index 3a06afda205fe472ab318f3a7a7d8557e3fe2f03..c66c58f2ddddb2ce7cc6b8bd9c80aa5e13be4fc4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef GROB_HH
@@ -13,7 +13,6 @@
 #include "virtual-methods.hh"
 #include "dimension-cache.hh"
 #include "grob-interface.hh"
-#include "object-key.hh"
 
 class Grob
 {
@@ -28,7 +27,6 @@ protected:
   Dimension_cache dim_cache_[NO_AXES];
   Output_def *layout_;
   Grob *original_;
-  Object_key const *key_;
 
   /* SCM data */
   SCM immutable_property_alist_;
@@ -44,6 +42,9 @@ protected:
   void substitute_object_links (SCM, SCM);
   Real get_offset (Axis a) const;
   SCM try_callback (SCM, SCM);
+  SCM try_callback_on_alist (SCM *, SCM, SCM);
+  void internal_set_value_on_alist (SCM *alist, SCM sym, SCM val);
+
 public:
   
   /* friends */
@@ -62,12 +63,11 @@ public:
   Output_def *layout () const { return layout_; }
   Grob *original () const { return original_; }
   SCM interfaces () const { return interfaces_; }
-  Object_key const *key () const { return key_; }
 
   /* life & death */ 
-  Grob (SCM basic_props, Object_key const *);
-  Grob (Grob const &, int copy_count);
-  virtual Grob *clone (int count) const;
+  Grob (SCM basic_props);
+  Grob (Grob const &);
+  virtual Grob *clone () const;
 
   /* forced death */
   void suicide ();
index 67aa59a8b6088eb1fd176abf234716c7ce5f5fdf..7a428ee150ec2363f7ea1b3774eba55a61e809b1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef GROUP_INTERFACE_HH
index 0d7c92ff23d6f9c5f3af55ec81825679fd27516c..b9c538074be4141379f801c289b215983608676c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef HAIRPIN_HH
index 42692c73969f7d1a847408ae69c5219a7997d3ca..6505287a4d634b13b611a3aface80e7d0a08909a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef HARA_KIRI_VERTICAL_GROUP_SPANNER_HH
index d8cbef6c067ab225af1ee61a1141251e43d8868e..283ec637ea5dc73197d1079112c010a01cad9f22 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef HORIZONTAL_BRACKET_HH
index 0f83f6d85e91a1533db2b839447a5bcfb75af9bb..43260be8f44cd2db28d74520493c27b1c657fbbb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef IDENTIFIER_SMOB_HH
index 5f03e978548579351b15ebb57f1eeb6ff43dd014..768e759b54f1deb5be4646f3023fb119c80854e3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef INCLUDABLE_LEXER_HH
@@ -33,7 +33,6 @@ protected:
   vector<int> char_count_stack_;
 
 public:
-  bool allow_includes_b_;
 
   Includable_lexer ();
   ~Includable_lexer ();
@@ -42,9 +41,10 @@ public:
   vector<string> file_name_strings_;
 
   Source_file *get_source_file () const;
-  void new_input (string s, Sources *);
+  virtual void new_input (string s, Sources *);
+  
   void new_input (string name, string data, Sources *);
-
+  
   char const *here_str0 () const;
 };
 
index 15f54aef223f4c411acc65955eba61a86da78d23..d3cad3577871e376de45359377c04b21d4e0daff 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef INPUT_HH
index cb8c61523e6396440dd071b9a437c2113a8d1302..d00541a8bf26fe35a19e90f43f03515de50eaadd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #ifndef ITEM_HH
 #define ITEM_HH
@@ -22,10 +22,10 @@ class Item : public Grob
 
   DECLARE_CLASSNAME(Item);
 public:
-  Item (SCM, Object_key const *);
-  Item (Item const &, int count);
+  Item (SCM);
+  Item (Item const &);
 
-  virtual Grob *clone (int count) const;
+  virtual Grob *clone () const;
 
   static bool is_non_musical (Grob *);
   bool is_broken () const;
index ba4867204da0879d227715627ebecf183588073e..3a8a287f7ce418130c13baa2f355e36a1dd0bc34 100644 (file)
@@ -1,7 +1,7 @@
 /*
   keyword.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef KEYWORD_HH
index f71d8915376149fef719a9d781ad7268a18e118d..0e7c64d6cb4bbc39eca1d6861e30bc40927119cb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef KPATH_HH
index 49a5574f1fb0d9ae61ed66a16ab683c60397dcc3..9fcbee19fbe89f3df05b8264a9d9d942b268946e 100644 (file)
@@ -1,7 +1,7 @@
 /*
   leastsquare.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef LEASTSQUARE_HH
index 2ae5cb4fe963a0c539f1c6f30d9b1789d0b4bdf5..ccdcb452991376e538f4e7537a10d86c6daf7470 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #ifndef LIGATURE_ENGRAVER_HH
index d349cdb7c9dfdc3bde6f83c1982b8aff35c05b16..dec12d19bdf1942476c2f810d8159e342c3be082 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef LILY_GUILE_MACROS_HH
index 621849edc6a01344922a1f270e858581d7419df2..6eef555bf599cef61ca47dc41299d06e31cf4551 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef LILY_GUILE_HH
@@ -36,15 +36,15 @@ SCM ly_write2scm (SCM s);
 SCM ly_deep_copy (SCM);
 SCM ly_truncate_list (int k, SCM lst);
 
-SCM ly_to_string (SCM scm);
-SCM ly_to_symbol (SCM scm);
-
 extern SCM global_lily_module;
 
 string gulp_file_to_string (string fn, bool must_exist, int size);
 
+SCM ly_string2scm (string const &s);
 string ly_scm2string (SCM s);
 string ly_symbol2string (SCM);
+Rational ly_scm2rational (SCM);
+SCM ly_rational2scm (Rational);
 SCM ly_offset2scm (Offset);
 Offset ly_scm2offset (SCM);
 SCM ly_chain_assoc (SCM key, SCM achain);
@@ -79,13 +79,8 @@ SCM alist_to_hashq (SCM);
 SCM ly_alist_vals (SCM alist);
 SCM ly_hash2alist (SCM tab);
 SCM ly_hash_table_keys (SCM tab);
-int procedure_arity (SCM);
 
-/* inserts at front, removing dublicates */
-inline SCM ly_assoc_front_x (SCM alist, SCM key, SCM val)
-{
-  return scm_acons (key, val, scm_assoc_remove_x (alist, key));
-}
+SCM ly_assoc_prepend_x (SCM alist, SCM key, SCM val);
 inline bool ly_is_list (SCM x) { return SCM_NFALSEP (scm_list_p (x)); }
 inline bool ly_is_procedure (SCM x) { return SCM_NFALSEP (scm_procedure_p (x)); }
 inline bool ly_is_port (SCM x) { return SCM_NFALSEP (scm_port_p (x)); }
@@ -169,6 +164,10 @@ typedef SCM (*Scheme_function_2) (GUILE_ELLIPSIS);
 typedef SCM (*Scheme_function_3) (GUILE_ELLIPSIS);
 #endif
 
+
+/*
+  Inline these for performance reasons.
+ */
 #define scm_cdr ly_cdr
 #define scm_car ly_car
 
index 994d185f6f36a9b9ff07239e4912443054a44bd4..bfa36a5a83d0c5c33aae7c34bc549ed5419e37d5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MY_LILY_LEXER_HH
@@ -55,7 +55,7 @@ public:
   Lily_lexer (Sources *, Lily_parser *);
   Lily_lexer (Lily_lexer const &, Lily_parser *);
   int yylex ();
-
+  
   void add_lexed_char (int);
 
   void prepare_for_next_token ();
@@ -69,6 +69,9 @@ public:
 
   void start_main_input ();
 
+  virtual void new_input (string s, Sources *);
+  virtual void new_input (string s, string d, Sources *);
+
   SCM keyword_list () const;
   SCM lookup_identifier (string s);
   SCM lookup_identifier_symbol (SCM s);
index b07734769a1b747a29cf55ceb1cb2ded2d50cb06..e9a42109e0bb7dae12ea1d5bfa548de29b9b6789 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef LILY_PARSER_HH
@@ -57,6 +57,8 @@ public:
   void parser_error (string);
   void parser_error (Input const &, string);
   void set_yydebug (bool);
+
+  SCM make_scope () const; 
 };
 
 DECLARE_UNSMOB (Lily_parser, lily_parser);
index c3082aaddd429231183583e2b9cd009925b300e5..56c80f56654ec7fb67b4dbf25d278b8308084d39 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef LILY_PROTO_HH
@@ -135,6 +135,7 @@ class Property_iterator;
 class Rational;
 class Relative_octave_music;
 class Repeated_music;
+class Scale;
 class Scheme_hash_table;
 class Score;
 class Score_context;
index eab4462df26a1e3495c3997db10bdd6fa120ae56..7a97fbba592e0ee75c2e14c2ac9727314fd19678 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef LILY_VERSION_HH
diff --git a/lily/include/lilypond-key.hh b/lily/include/lilypond-key.hh
deleted file mode 100644 (file)
index 4196ffd..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-  lilypond-key.hh -- declare Lilypond_{grob, context}_key
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef LILYPOND_KEY_HH
-#define LILYPOND_KEY_HH
-
-#include "object-key.hh"
-#include "lily-proto.hh"
-#include "moment.hh"
-
-class Lilypond_grob_key : public Object_key
-{
-  Object_key const *context_;
-  Moment creation_moment_;
-  string grob_name_;
-  int disambiguation_count_;
-
-public:
-  Lilypond_grob_key (Object_key const *context,
-                    Moment start,
-                    string name, int);
-
-  static Object_key *from_scheme (SCM);
-protected:
-  virtual int get_type () const;
-  virtual void derived_mark () const;
-  virtual int do_compare (Object_key const *a) const;
-  virtual SCM as_scheme () const;
-};
-
-class Lilypond_context_key : public Object_key
-{
-  Object_key const *parent_context_;
-  Moment start_moment_;
-  string context_name_;
-  string id_;
-  int disambiguation_count_;
-
-public:
-  Lilypond_context_key (Object_key const *parent,
-                       Moment start,
-                       string type,
-                       string id,
-                       int count);
-
-  static Object_key *from_scheme (SCM);
-protected:
-  virtual int get_type () const;
-  virtual int do_compare (Object_key const *a) const;
-  virtual void derived_mark () const;
-  virtual SCM as_scheme () const;
-};
-
-class Lilypond_general_key : public Object_key
-{
-  Object_key const *parent_;
-  string name_;
-  int disambiguation_count_;
-public:
-  Lilypond_general_key (Object_key const *parent, string name,
-                       int count);
-
-  static Object_key *from_scheme (SCM);
-protected:
-  virtual int get_type () const;
-  virtual int do_compare (Object_key const *a) const;
-  virtual void derived_mark () const;
-  virtual SCM as_scheme () const;
-};
-
-#endif /* LILYPOND_KEY_HH */
-
index 12c4782205f5d828a58e4522a468cd318418b376..32ba91198d1f7db26173bd9adb607cffab4ed994 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef LILYPOND_VERSION_HH
index ec33ce93c6300f94869f29a0076f70cae7579c9e..7746a735e8ed9c0c8a297ff393bb200149f1345a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef LINE_INTERFACE_HH
index de1170b6b095c287ad2a248d3140b5688d8b0e95..ceff6f6a999a51ce259f62aa9282498461516804 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef LINE_SPANNER_HH
index db5f2d9cc78a631edcf8bcd480c695f35ed82448..ec8aeede49863aac272095760f1d72810fac4291 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -31,6 +31,7 @@ struct Lookup
   static Stencil repeat_slash (Real w, Real slope, Real th);
   static Stencil horizontal_line (Interval w, Real th);
   static Stencil triangle (Interval, Real, Real);
+  static Stencil points_to_line_stencil (Real thick, vector<Offset> const &points);
 };
 
 #endif // LOOKUP_HH
index f4aaabbd80e59545a999d21fac5d212f3f3904cd..17595408a71965ab102578136fa83c63d10a600c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #ifndef LY_MODULE_HH
 #define LY_MODULE_HH
index 99c09fc0435f3e51792fd3966bc507c88235d81d..a77da17fc82733cfa708c9fc33cd13e3c0007e69 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef LY_SMOBS_ICC
       This is local. We don't assign to self_scm_ directly, to assure  \
       that S isn't GC-ed from under us.                                        \
                                                                        \
-                                                                       We don't use smobbed_self () to ensure that mark_smob () doesn't have to \
-                                                                       deal half-initialized objects: scm_done_malloc ( ) might trigger GC. \
-                                                                       the warning in smobs.hh is just to be doubleplus goodly sure \
+      We don't use smobbed_self () to ensure that mark_smob () doesn't  \
+      have to deal half-initialized objects: scm_done_malloc ( ) might  \
+      trigger GC.the warning in smobs.hh is just to be doubleplus       \
+      goodly sure                                                       \
     */                                                                 \
     SCM s;                                                             \
     SCM_NEWSMOB (s, CL::smob_tag_, this);                              \
index 4d891f8c14f098fa04dfdc9d9a99175db6867b5e..d95060be9a45c1b1a95311b66fdf18bc67d38f09 100644 (file)
@@ -2,7 +2,7 @@
 /*
   extender-spanner.hh -- part of GNU LilyPond
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef EXTENDER_SPANNER_HH
index b5377ae82aee8b23699bf958e3f0a9047350dfc7..b6ac1dce827e7226c75a5c83a155ec09c5bfcdb5 100644 (file)
@@ -1,7 +1,7 @@
 /*
   hyphen-spanner.hh -- part of GNU LilyPond
 
-  (c) 1999--2006 Glen Prideaux <glenprideaux@iname.com>
+  (c) 1999--2007 Glen Prideaux <glenprideaux@iname.com>
 */
 
 #ifndef HYPHEN_SPANNER_HH
index 5369507628be787f6216590bff99c8895df420ff..69aa8899c7858d60a47bbeb01dd6a7f7977fbb1a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #ifndef MAIN_HH
 #define MAIN_HH
@@ -38,6 +38,9 @@ extern bool point_and_click_global;
 extern string prefix_directory;
 extern bool use_object_keys;
 extern bool strict_infinity_checking;
+extern string init_scheme_code_global;
+extern string init_scheme_variables_global;
+
 /*
   todo: collect in Output_option struct?
 */
index ef481714ee0a4b6d8bb54768896cc3da6012aa3e..443c06b91cb2ed7474f99a395d66e2c50fcd7aec 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MEASURE_GROUPING_SPANNER_HH
index 0b67613cfad609bec7996e706c27b0f071f7e090..7f20f8a343946136c7ac1156ff5e8c0c3ad86bb7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index afb04a2ef20519bd9702c632d4b4b97ea0e37372..2ef7f511b9f5564a7fe12ff41cddc429e16e48b6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>,
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>,
   Pal Benko <benkop@freestart.hu>
 */
 
index 6ec530f68cfd0d1a4dd85ce495618a2f13ade476..f7ea0e0585c07cce1551692ef714b1b78660bb7d 100644 (file)
@@ -1,7 +1,7 @@
 /*
   midi-item.hh -- declare Midi items
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef MIDI_ITEM_HH
@@ -37,8 +37,6 @@ public:
   int channel_;
   DECLARE_CLASSNAME(Midi_channel_item);
   Midi_channel_item ();
-  virtual const char *name () const { return "Midi_channel_item"; }
-  virtual ~Midi_channel_item ();
 };
 
 /**
@@ -47,9 +45,9 @@ public:
 class Midi_event
 {
 public:
-  Midi_event (Moment delta_mom, Midi_item *midi);
+  Midi_event (int delta, Midi_item *midi);
 
-  Moment delta_mom_;
+  int delta_ticks_;
   Midi_item *midi_;
   string to_string () const;
 };
@@ -125,17 +123,13 @@ public:
   int clocks_per_1_;
 };
 
-/**
-   Turn a note on.
-*/
 class Midi_note : public Midi_channel_item
 {
 public:
   Midi_note (Audio_note *);
   DECLARE_CLASSNAME(Midi_note);
 
-  Moment get_length () const;
-  int get_pitch () const;
+  int get_semitone_pitch () const;
   int get_fine_tuning () const;
   virtual string to_string () const;
 
@@ -146,9 +140,6 @@ public:
   Byte dynamic_byte_;
 };
 
-/**
-   Turn a note off
-*/
 class Midi_note_off : public Midi_note
 {
 public:
@@ -217,15 +208,12 @@ public:
   int number_;
   DECLARE_CLASSNAME(Midi_track);
 
-  /*
-    Compensate for starting grace notes.
-  */
   vector<Midi_event*> events_;
 
   Midi_track ();
   ~Midi_track ();
 
-  void add (Moment delta_time_mom, Midi_item *midi);
+  void add (int, Midi_item *midi);
   virtual string data_string () const;
 };
 
index 4f02d6cbca7a9f469ceb2317587aff3927750182..1d9066e8654b5de80e9ee713689fbf21924ace52 100644 (file)
@@ -1,7 +1,7 @@
 /*
   midi-stream.hh -- declare Midi_stream
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef MIDI_STREAM_HH
@@ -20,9 +20,9 @@ struct Midi_stream
   Midi_stream (string file_name_string);
   ~Midi_stream ();
 
-  Midi_stream &operator << (string str);
-  Midi_stream &operator << (Midi_item const &midi_c_r);
-  Midi_stream &operator << (int i);
+  void write (string);
+  void write (Midi_item const &);
+  void write (int);
 
   void open ();
 
index 2d17efbc6093290576400cdb7819accec5c213e1..69bf4c8a9b939589e41caf9fa62cc2390cd174a3 100644 (file)
@@ -1,7 +1,7 @@
 /*
   midi-walker.hh -- declare Midi_walker
 
-  (c) 1996--2006 Han-Wen Nienhuys  <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys  <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -12,9 +12,9 @@
 #include "lily-proto.hh"
 #include "moment.hh"
 
-struct Midi_note_event : PQueue_ent<Moment, Midi_note *>
+struct Midi_note_event : PQueue_ent<int, Midi_note *>
 {
-  bool ignore_b_;
+  bool ignore_;
   Midi_note_event ();
 };
 
@@ -36,16 +36,17 @@ public:
 
 private:
   void do_start_note (Midi_note *note);
-  void do_stop_notes (Moment now_mom);
-  void output_event (Moment now_mom, Midi_item *l);
-
+  void do_stop_notes (int);
+  void output_event (int, Midi_item *l);
+  
   int channel_;
   Midi_track *track_;
   Audio_staff *staff_;
   vsize index_;
-  vector<Audio_item*> *items_;
+  vector<Audio_item*> items_;
   PQueue<Midi_note_event> stop_note_queue;
-  Moment last_mom_;
+  int last_tick_;
+
 };
 
 #endif // MIDI_WALKER_HH
index efc69104921671637c6a09a0cccd42afcd35fef8..e7643c03e6b06300b4aeb2f03cf8cc51d2ed3964 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2005--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef MINGW_COMPATIBILITY_HH
index fa7555d0861ef6bde612b20967ef6404aaa50fbb..fad61b1ad381e33ddbdc3f164f08b0757935d6f6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MISC_HH
@@ -38,6 +38,7 @@ linear_interpolate (Real x, Real x1, Real x2, Real y1, Real y2)
 Real directed_round (Real f, Direction d);
 
 Real peak_around (Real epsilon,  Real threshold, Real x);
+Real convex_amplifier (Real standard_x, Real increase_factor, Real x);
 string camel_case_to_lisp_identifier (string in);
 
 #endif
index 7d1487d933885f4d532f287ed66836792f19e675..16a8afdd423980c390f4f57a48513e33a8bea4f8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MODIFIED_FONT_METRIC_HH
index ec84bc744840b6b5fa7d849dc91f4249865a2f43..a3b7544762b31079f3a8c005937d37ef33c3405f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MOMENT_HH
index dd0d4054ae1c4ca0c5d2e545f888133a821ec2f2..554a328b6ef5057fbb0fb7e0cf3c25a9773c6b74 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef MULTI_MEASURE_REST_HH
index 723472bd78d400b07f18f55149decfb2f3ddf55c..be3b98bcbe21f162e5717a3e2783c4e0baf476a0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_FUNCTION_HH
index 76ecbddce7997faac89d228d9ff11719a42f438f..261ccf128d704fd53b73150147238fa3a439cef5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_ITERATOR_HH
index 56178c80cbaab0847b898cdba3a76352de41060f..c7c3b82bd5af0d97bff020245de61aca16d91422 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_OUTPUT_HH
index dc1046aaa86278f1ab5a63fb9be7af5ed6c1638b..94784ca45ac08325fe7f46488e4875e56bff1495 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_SEQUENCE_HH
index ca118be037ad06b68f085625076514dff35e8b11..3abddfeccfeb5889bf26be403cb0aeab351d1683 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_WRAPPER_ITERATOR_HH
index cedbcf3017520fabe38de002eea8003df1f9bb9c..18d885f423b4902a4b1a84799c2603014a81a692 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_WRAPPER_HH
index f7e4407f3ba186ec45e1b58c1823791f040ffacf..ec6f98766cdc3d912f6f87ee74dbcc3c33a3f0eb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_HH
@@ -66,6 +66,6 @@ SCM ly_camel_case_to_lisp_identifier (SCM name_sym);
 extern SCM ly_music_p_proc;
 
 /* common transposition function for music and event */
-SCM transpose_mutable (SCM alist, Pitch delta);
+void transpose_mutable (SCM alist, Pitch delta);
 
 #endif /* MUSIC_HH */
index 7500ea45e980c646f54fdaa3a5cebebcce714c59..9390321e590fca3df3798cb5c09a8cce1c500a03 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef COLLISION_HH
index 73030a46d9d0a12b50b48c29a70bd2a08a36bcd2..60c2668890eef9f07aa3ea50a68484295f298042 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef NOTE_COLUMN_HH
index ff4e9a848aed3b34b47f0d425c00de9b2a756e81..0891b7da2b343037412b8f642ddb02a8c152deab 100644 (file)
@@ -1,7 +1,7 @@
 /*
   note-head.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef NOTEHEAD_HH
index dc8cbe4e0296608ef829f3321e0b5f549b847d29..af04260ceab39f07243c754a843efe938a7a3639 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef NOTE_SPACING_HH
diff --git a/lily/include/object-key-dumper.hh b/lily/include/object-key-dumper.hh
deleted file mode 100644 (file)
index 582199a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  object-key-dumper.hh -- declare Object_key_dumper
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef OBJECT_KEY_DUMPER_HH
-#define OBJECT_KEY_DUMPER_HH
-
-#include <map>
-using namespace std;
-
-#include "object-key.hh"
-
-typedef map<Object_key const *, Object_key const *, Object_key_less> Key_to_key_map;
-typedef map<Object_key const *, int> Pointer_to_int_map;
-typedef map<int, Object_key const *> Int_to_key_map;
-
-class Object_key_dumper
-{
-  SCM file_contents_;
-  Key_to_key_map serialized_keys_;
-  Pointer_to_int_map key_serial_numbers_;
-  int next_available_;
-
-  SCM key_serial (int);
-  SCM serialize_key (Object_key const *);
-  DECLARE_SMOBS (Object_key_dumper);
-public:
-  Object_key_dumper ();
-  SCM get_file_contents () const;
-  SCM dump_key (Object_key const *);
-};
-
-DECLARE_UNSMOB (Object_key_dumper, key_dumper);
-
-#endif /* OBJECT_KEY_DUMPER_HH */
-
diff --git a/lily/include/object-key-undumper.hh b/lily/include/object-key-undumper.hh
deleted file mode 100644 (file)
index f42d777..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  object-key-undumper.hh -- declare Object_key_undumper
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef OBJECT_KEY_UNDUMPER_HH
-#define OBJECT_KEY_UNDUMPER_HH
-
-#include <map>
-using namespace std;
-
-#include "object-key.hh"
-
-typedef map<int, Object_key const *> Int_to_key_map;
-
-struct Object_key_undumper
-{
-  DECLARE_SMOBS (Object_key_undumper);
-  Int_to_key_map keys_;
-public:
-  void parse_contents (SCM);
-  Object_key_undumper ();
-  Object_key const *get_key (int k);
-};
-DECLARE_UNSMOB (Object_key_undumper, key_undumper);
-
-#endif
diff --git a/lily/include/object-key.hh b/lily/include/object-key.hh
deleted file mode 100644 (file)
index c163d4c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-  object-key.hh -- declare Object_key
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef OBJECT_KEY_HH
-#define OBJECT_KEY_HH
-
-#include "smobs.hh"
-
-/*
-  Object_keys are read-only values, suitable for storing references to
-  transient objects (such as grobs or contexts) on disk.
-
-  In the future, they might also act as handles for external processes
-  requesting notation to be drawn.
-*/
-class Object_key
-{
-  DECLARE_SMOBS (Object_key);
-
-protected:
-  Object_key ();
-  virtual void derived_mark () const;
-  virtual int get_type () const;
-  virtual int do_compare (Object_key const *other) const;
-public:
-  virtual SCM as_scheme () const;
-  static Object_key *from_scheme (SCM);
-  static Object_key *undump (SCM);
-  int compare (Object_key const *other) const;
-  SCM dump () const;
-};
-
-enum Object_key_type
-  {
-    BASE_KEY,
-    COPIED_KEY,
-    GENERAL_KEY,
-    GROB_KEY,
-    CONTEXT_KEY,
-    KEY_COUNT,
-  };
-
-class Copied_key : public Object_key
-{
-
-private:
-  Object_key const *original_;
-  int copy_count_;
-
-protected:
-  virtual void derived_mark () const;
-  virtual int get_type () const;
-  virtual int do_compare (Object_key const *other) const;
-  virtual SCM as_scheme () const;
-public:
-  static Object_key *from_scheme (SCM);
-  Copied_key (Object_key const *, int);
-};
-
-DECLARE_UNSMOB (Object_key, key);
-
-struct Object_key_less
-{
-  bool operator () (Object_key const *const &t1, Object_key const *const &t2) const
-  {
-    return t1->compare (t2);
-  }
-};
-
-#endif /* OBJECT_KEY_HH */
index 9cd34497ab26240a7dbfb605af528d5370a42fbf..1ca5500446bf9e4f70bba567c3c29192340abf51 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef OPEN_TYPE_FONT_HH
index 8737e7e5a879856dbe9a5be99e294b32c51f11a0..79e160055cad76c2c4e87d7dfe6bda76a175063a 100644 (file)
@@ -5,7 +5,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef OPTIMAL_PAGE_BREAKING_HH
index 6a6165037efea772f25f0e869bc3734caf393976..cb4400d8ce874c4579f18e598d94227288c15879 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSIC_OUTPUT_DEF_HH
@@ -49,9 +49,6 @@ public:
   Input input_origin_;
   string user_key_;
 
-  Lily_parser *parser_;
-  Lily_parser *get_parser () const;
-  
   Output_def (Output_def const&);
   Output_def ();
 
index 7c2a99e3819203c760f4f91876c557dda3f78f18..b5b3e2411367b351a60499e492f91515a2e61ad9 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef PAGE_BREAKING_HH
index f64df2c8a2ae7a4751ace94d67d7f2ea9ca8e35c..e1fa582d922fa8013e7d9535945db9f33e0feba7 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef PAGE_SPACING_HH
index a109f1ff8f59cd93770a081320519851579dac96..74ed4e84bae4be7c18ae1bbc02535af7d74891da 100644 (file)
@@ -5,7 +5,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef PAGE_TURN_PAGE_BREAKING_HH
index 76b4d6c8eb684d0f1f7c6fb32e6c17c8b12f59ff..c0d6ff336863d7ff022005257a1276b2eb612a39 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PANGO_FONT_HH
@@ -31,7 +31,7 @@ class Pango_font : public Font_metric
 public:
   SCM physical_font_tab () const;
   Pango_font (PangoFT2FontMap *,
-             PangoFontDescription *,
+             PangoFontDescription const *,
              Real);
   ~Pango_font ();
 
index 16b349e0250555143da313646e395f08c510707f..4ea192794603b6fe9d021c911c21e36aed0bbb72 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006  Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 #ifndef PAPER_BOOK_HH
 #define PAPER_BOOK_HH
index 1dd227e2090adbb1a0aa44c7c19e0fd1be14a3e4..793d085e0cdaae1edf8c33762712f51545812e9d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PAPER_COLUMN_ENGRAVER_HH
index be6ab9378dbca9c3e4653160b974366c0564140d..0157eb6bb9a64079af671078cca25d0f2102e3a1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PAPER_COLUMN_HH
@@ -22,10 +22,10 @@ class Paper_column : public Item
   friend void set_loose_columns (System *which, Column_x_positions const *posns);
   friend class System;
 public:
-  Paper_column (SCM, Object_key const *);
-  Paper_column (Paper_column const &, int count);
+  Paper_column (SCM);
+  Paper_column (Paper_column const &);
 
-  virtual Grob *clone (int count) const;
+  virtual Grob *clone () const;
   virtual void do_break_processing ();
   virtual Paper_column *get_column () const;
   virtual System *get_system () const;
index 42b628f45375b9b9e54bb39c34f97ce8ad2a00d8..44c8b1bf57019a28ef58cf522e96248e299146b1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PAPER_OUTPUTTER_HH
index 7f79aeb54873d172dc878c7cc053d750352bd0a4..ac1b76208940b33386aacd5c4a39a960f36d98e8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PAPER_SCORE_HH
index 8c709c34647c838a621ef5bc8a39731bd77896f9..840c3caa750e29c2f405cd93c89868cbfc0fda1b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006  Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 #ifndef PAPER_SYSTEM_HH
 #define PAPER_SYSTEM_HH
index 0f48de2c533b6a384a04d359caca3b131d8b03f1..2939bc2f5c228702476732a828343257e8c586c9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PARSE_SCM_HH
index 83662b5d3d1579522246bb51c3c6165a4e1555e0..990a31873df92696d4ebbb3e4de45e8d67537e28 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PERCENT_REPEAT_ITEM_HH
index 90a825bb1d3ce3cb165a8217eba6ac7e7c01f3b4..7aa90ca511ae02727df7b08b642e0991c081b438 100644 (file)
@@ -1,7 +1,7 @@
 /*
   performance.hh -- declare Performance
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef PERFORMANCE_HH
@@ -19,12 +19,13 @@ public:
   DECLARE_CLASSNAME(Performance);
 
   void add_element (Audio_element *p);
-
-  void output (Midi_stream &midi_stream_r);
-  void output_header_track (Midi_stream &midi_stream_r);
+  virtual void process ();
+  void remap_grace_durations ();
+  void output (Midi_stream &midi_stream) const;
+  void output_header_track (Midi_stream &midi_stream) const;
 
   void print () const;
-  void write_output (string filename);
+  void write_output (string filename) const;
 
   vector<Audio_staff*> audio_staffs_;
   vector<Audio_element*> audio_elements_;
index 94eceaecdef90a245c46d1cfe3736696cf95061a..7eff9515e61f72128b641b357ae3abb162d9ba71 100644 (file)
@@ -1,7 +1,7 @@
 /*
   performer-group.hh -- declare Performer_group
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 4eab36a3323711616e0f7d1a469405daaa2b4281..38b876ae647308a283096a57c9ded5455723fd6b 100644 (file)
@@ -1,7 +1,7 @@
 /*
   performer.hh -- declare Performer
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index defa7a9e92defcfe7cca7ea3af4fd3d6e67b7447..ab8b51eddea35ec20853c5b4c2df9a89144eee67 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PITCH_INTERVAL_HH
index f50d2d531c69e8fe148c8ab1708c77982f5b3dab..e711fc0d579b138b91355414bf3b91d3e8134d4c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef MUSICAL_PITCH_HH
 
 #include "lily-proto.hh"
 #include "smobs.hh"
-
-#include "std-vector.hh"
-
-struct Scale
-{
-  vector<int> step_semitones_;
-  Scale ();
-  Scale (Scale const&);
-  DECLARE_SMOBS (Scale);
-};
+#include "rational.hh"
 
 
 /** A "tonal" pitch. This is a pitch used in diatonal western music
@@ -30,35 +21,27 @@ struct Scale
     Pitch is lexicographically ordered by (octave, notename,
     alteration).
 
-
-    TODO:
-
-    - add indeterminate octaves, so it can be used as a key in keySigature
 */
 class Pitch
 {
-private:                               // fixme
-  /*
-    TODO: use SCM
-  */
-
-  int notename_;
-  int alteration_;
+private:
   int octave_;
+  int notename_;
+  Rational alteration_;
   Scale *scale_;
-  
+
   void transpose (Pitch);
   void up_to (int);
   void down_to (int);
-  void normalise ();
+  void normalize ();
 
 public:
-
   int get_octave () const;
   int get_notename () const;
-  int get_alteration () const;
+  Rational get_alteration () const;
 
-  Pitch (int octave, int notename, int accidental);
+  Pitch (int octave, int notename, Rational accidental);
+  Pitch (int octave, int notename);
   Pitch ();
 
   Pitch transposed (Pitch) const;
@@ -67,26 +50,38 @@ public:
   static int compare (Pitch const &, Pitch const &);
 
   int steps () const;
-  int semitone_pitch () const;
-  int quartertone_pitch () const;
+  Rational tone_pitch () const;
+  int rounded_semitone_pitch () const;
+  int rounded_quartertone_pitch () const;
+  Pitch negated () const;
   string to_string () const;
 
   DECLARE_SCHEME_CALLBACK (less_p, (SCM a, SCM b));
   DECLARE_SIMPLE_SMOBS (Pitch);
 };
 
-enum
-  {
-    DOUBLE_FLAT = -4,
-    THREE_Q_FLAT,
-    FLAT,
-    SEMI_FLAT,
-    NATURAL,
-    SEMI_SHARP,
-    SHARP,
-    THREE_Q_SHARP,
-    DOUBLE_SHARP,
-  };
+
+enum {
+  DOUBLE_FLAT = -4,
+  THREE_Q_FLAT,
+  FLAT,
+  SEMI_FLAT,
+  NATURAL,
+  SEMI_SHARP,
+  SHARP,
+  THREE_Q_SHARP,
+  DOUBLE_SHARP,
+};
+
+extern Rational  DOUBLE_FLAT_ALTERATION;
+extern Rational  THREE_Q_FLAT_ALTERATION;
+extern Rational  FLAT_ALTERATION;
+extern Rational  SEMI_FLAT_ALTERATION;
+extern Rational  NATURAL_ALTERATION;
+extern Rational  SEMI_SHARP_ALTERATION;
+extern Rational  SHARP_ALTERATION;
+extern Rational  THREE_Q_SHARP_ALTERATION;
+extern Rational  DOUBLE_SHARP_ALTERATION;
 
 SCM ly_pitch_diff (SCM pitch, SCM root);
 SCM ly_pitch_transpose (SCM p, SCM delta);
@@ -96,7 +91,6 @@ INSTANTIATE_COMPARE (Pitch, Pitch::compare);
 
 extern SCM pitch_less_proc;
 Pitch pitch_interval (Pitch const &from, Pitch const &to);
-extern Scale *default_global_scale;
 
 #endif /* MUSICAL_PITCH_HH */
 
index 4238871b8e36cb1c61bd9909248db36007eb9e6b..d1c7d0e7c44c2e7ba3918e2707d31af2a3c4294a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef POINTER_GROUP_INTERFACE_HH
index 6c6f59be7c691eee8545d5d997adb9760933cb23..136dd3c9d6610833d03cb8353f42a3ef8a20f788 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006  Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef PROPERTY_OBJECT_HH
index fff7fa225cb6c2bacdb53a463d947ac867178c28..9a1961782be1825fd22ba9daf9d446246fa718ca 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PROFILE_HH
@@ -14,5 +14,7 @@
 void note_property_access (SCM *table, SCM sym);
 extern SCM context_property_lookup_table;
 extern SCM grob_property_lookup_table;
+extern SCM prob_property_lookup_table;
+extern bool profile_property_accesses;
 
 #endif /* PROFILE_HH */
index 55971a1fa16ba6a74e451ad6e5ed81cc0bd36783..66babd51a90376b0bdd7710230854c18561d8beb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2001--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 #ifndef SCM_OPTION_HH
 #define SCM_OPTION_HH
@@ -15,7 +15,6 @@ extern bool do_midi_debugging_global;
 extern int testing_level_global;
 extern bool lily_1_8_relative;
 extern bool lily_1_8_compatibility_used;
-extern bool profile_property_accesses;
 
 SCM ly_get_option (SCM);
 SCM ly_set_option (SCM, SCM);
index f2bc6d71521c4f5467b7fd325c13833f8701823a..2f70d027e01f54e42ccba09f27a757a2e5e877a8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PROPERTY_ITERATOR_HH
index e605a74e24c10aec900cbfe91455518bfc9275b2..d29e98c97393a3f994d0977a04e3029d4654ceef 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PROTECTED_SCM_HH
index e3af270a88e2c6d1bc9ab955abfa6c9bfc2cbb7f..d50614d78715c48d68fca43cc758ca4bd3dcbb5d 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  relocate.hh -- declare
+  relocate.hh -- declare relocation functions
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 787b76e1091b22b27bdc0aca5d7f76fdb83c2da9..92a278e90ce519d2b3a728d15041c1e33aa26c41 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef REPEATED_MUSIC_HH
index 5f2e165765aeb1eec429d7069b3b0b4040f38bc5..07d80ab144bb9dea80afbf0af4428e7c7b89821e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef REST_COLLISION_HH
index 20107120b7c411bef2f4fa8bbbb4441cf04140db..ed67c6310704bf855a68a0ac9d0a2aa26c02b7c9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef REST_HH
@@ -25,5 +25,6 @@ public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (width, (SCM));
   DECLARE_SCHEME_CALLBACK (height, (SCM));
+  DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
 };
 #endif // REST_HH
index 2fae285707052631190c135e129533fb757aa6e7..a1d722b6b99643301c0161bab5941223fad9fa92 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef RHYTHMIC_HEAD_HH
index 7bf58538de710522aef052db0f4110216d7f0d36..9ecf6e5fbaf56425593578e711453f1de3ae348c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ROD_HH
diff --git a/lily/include/scale.hh b/lily/include/scale.hh
new file mode 100644 (file)
index 0000000..ff8e6b2
--- /dev/null
@@ -0,0 +1,29 @@
+/* 
+  scale.hh -- declare Scale
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#ifndef SCALE_HH
+#define SCALE_HH
+
+#include "smobs.hh"
+#include "rational.hh"
+#include "std-vector.hh"
+
+struct Scale
+{
+  vector<Rational> step_tones_;
+  Scale ();
+  Scale (Scale const&);
+  DECLARE_SMOBS (Scale);
+};
+
+extern Scale *default_global_scale;
+
+#endif /* SCALE_HH */
+
+
index 1dc4c720e352431afeb99784a020915c6e945fbf..c95347202cd69c15716518e6a0bf5ddc5243c31a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Erik Sandberg  <mandolaerik@gmail.com>
+  (c) 2006--2007 Erik Sandberg  <mandolaerik@gmail.com>
 */
 
 #ifndef SCHEME_LISTENER_HH
index cbaef193be908bd50e34c7059258e3e8430037f8..6ced1f5e216e389a39f0cfed47939a8b342f00ac 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SCM_HASH_HH
index d2de464f6004b8cfa9c18000eb6801a346f382be..52b652235315b4a86273cdfe1d8a294cd93c5b02 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SCORE_ENGRAVER_HH
index 929853bba0d59baffb51d1d69107c94b5bf5b693..826abeec95b8c0ec8f314e6e6903da3182508637 100644 (file)
@@ -1,7 +1,7 @@
 /*
   score-performer.hh -- declare Score_performer
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 71b2037efb6e8035fee2a906baf9b957ea26be2c..d4f26da4d22c5227b87aae787cf2e0904dda3fb1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SCORE_HH
@@ -38,13 +38,12 @@ public:
   SCM get_music () const;
   void add_output_def (Output_def *def);
   void set_music (SCM music);
-  SCM book_rendering (Output_def *, Output_def *, Object_key *);
+  SCM book_rendering (Output_def *, Output_def *);
 };
 
 DECLARE_UNSMOB (Score, score);
 
-void default_rendering (SCM, SCM, SCM, SCM, SCM, SCM);
 SCM ly_render_output (SCM, SCM);
-SCM ly_run_translator (SCM, SCM, SCM);
+SCM ly_run_translator (SCM, SCM);
 
 #endif /* SCORE_HH */
index e36eb952bfb86543fe696abafb51e92bc95405f3..150c690c1753f50c706e55c97ed2a08323be39ce 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef Script_COLUMN_HH
index 6acbadc35b4339502e7255f6cf768fba738a62c4..39e0388331705c2bd550f9a033b9ab9099ef0496 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SCRIPT_INTERFACE_HH
index 4fe353fb97932febdf3cbd6a1752dca58d19f3b9..5dc85360bb67ddf229228e92463c32ced61a029c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SELF_ALIGNMENT_INTERFACE_HH
index 1671f7fc5f77cd847b559f0589d6b35ef757eaae..fb8e75e8b26c7bafc63452e116b6e19b6172fa76 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 83688ab01295a40401ecb1b4bfb74f707870dc13..35524e7b236cde335e30d81c18c5eeec947099cb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 1419d539718cb0e159eb6c1e25168a2ccbfd96ec..d48705c85914ef01b8fe7d99c99d57bb83a7a1c4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SEPARATING_GROUP_SPANNER_HH
index 4fb59b5e6209ed16549db80de4c0615fe71a025e..5bcb4e6e3ea5576cce909e7d9a4f630a9847d02b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SINGLE_MALT_GROUPING_ITEM_HH
index 124461d99728cc1ddd53a9b09399c07164929d9d..f749fd6933c75a8ad72a1a75f5c2e4457ea644b7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SEQUENTIAL_ITERATOR_HH
index e5a3aed78ac4610844f513b070df376e2dadbaea..82457c70c7fcfe128d64b272c93141444ef7e634 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index b77ad6ed4f08a3356c87f0702db5010d2c37eade..10d8e4690387f7e9df8533912c04d9e28d51b1d9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SIMPLE_MUSIC_ITERATOR_HH
index c8033487744343b048be924e2ff7b53e154c8c35..ae3206ac5f70c0c75ae452e27542872e7eb90136 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SIMPLE_SPACER_HH
@@ -49,6 +49,7 @@ public:
   vector<Real> spring_positions () const;
 
   Real force () const;
+  Real force_penalty (bool ragged) const;
   bool fits () const;
 
   DECLARE_SIMPLE_SMOBS (Simple_spacer);
index ae318f478bf5df3be3729cad6d03554ff056d754..790e96806aabf393593f7bfc6e71f4113f0f3bfa 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SIMULTANEOUS_MUSIC_ITERATOR_HH
index 36fd9d23e4aff9d2489602c4e8e5e808341abf86..a4ea033fdbab57af3c2e1c297bd751b9f484397d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef SKYLINE_HH
@@ -32,12 +32,17 @@ struct Building
   void print () const;
 
   Real height (Real x) const;
-  Real intersection (Building const &other) const;
+  Real intersection_x (Building const &other) const;
   void leading_part (Real chop);
   bool conceals_beginning (Building const &other) const;
   bool conceals (Building const &other) const;
   bool sane () const;
   Building sloped_neighbour (Real horizon_padding, Direction d) const;
+
+  bool operator< (Building const &other)
+  {
+    return iv_[LEFT] < other.iv_[LEFT];
+  }
 };
 
 class Skyline
@@ -48,8 +53,7 @@ private:
   
   void internal_merge_skyline (list<Building>*, list<Building>*,
                               list<Building> *const result);
-  void internal_build_skyline (list<Building>*, list<Building> *const result);
-  bool is_legal_skyline () const;
+  list<Building> internal_build_skyline (list<Building>*);
 
   DECLARE_SIMPLE_SMOBS(Skyline);
 public:
index 1db127238ac82aa1a1d09eeb595cec6f7732fb4b..35e1e4a414eb1c0669140eed90a8e1534751c68c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SLUR_CONFIGURATION_HH
index 936789b219a168052334541d49fa2d7569d43de9..5c3a3350682442f330a4b6a282aad5c5f8d4e9fa 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index c02fac2005363a066bc59a04b323c1dac97451f1..db03c1e36343e26c757445658ec044b2db89b399 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SLUR_SCORING_HH
index 0ec721d4d26f54c945367ede09bc4e2e6a7bd43e..20fb7030ce60c134b9b20801e2eea5a4e98cba96 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SLUR_HH
index da37b4f9e8004798ccc5fcfa9460146c25310fe3..5bd403bce45364763f307fb2014960034e146b58 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SMOBS_HH
@@ -142,12 +142,16 @@ void unprotect_smob (SCM smob, SCM *prot_cons);
 
 extern bool parsed_objects_should_be_dead;
 
+#ifndef NDEDUG
 #define ASSERT_LIVE_IS_ALLOWED()     \
   static bool passed_here_once;\
   if (parsed_objects_should_be_dead && !passed_here_once) { \
-    programming_error (string ("Parsed object should be dead: ")  + __PRETTY_FUNCTION__ ); \
+    ::programming_error (string ("Parsed object should be dead: ")  + __PRETTY_FUNCTION__ ); \
     passed_here_once = true;\
   }    
+#else
+#define ASSERT_LIVE_IS_ALLOWED()
+#endif
 
 #endif /* SMOBS_HH */
 
index 71ae366a8552500a6a044b629fea43e8217176b0..502783a6b483e73b0bfb526b36823440efc46fa6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef SOURCE_FILE_HH
index b06266b4fc8df483db94779bf6dd823ccc0901bf..9cc52192c6b79a5e1dcb14e22b77c4e1786adffa 100644 (file)
@@ -1,7 +1,7 @@
 /*
   source.hh -- part of LilyPond
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef SOURCE_HH
index cb1217bf6f02d317820e845f27e5f96323a5e777..5625bfd61e7e66d2d7319aba512b79eef813c999 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SPACEABLE_GROB_HH
@@ -20,7 +20,6 @@ struct Spaceable_grob
   static void get_spring (Grob *me, Grob *other, Real *dist, Real *inv_strength);
 
   DECLARE_GROB_INTERFACE();
-  static void remove_interface (Grob *);
   static SCM get_minimum_distances (Grob *);
   static SCM get_ideal_distances (Grob *);
 };
index 1d7665bbb51b9f9d0948aabf6e3703e107838bc0..b558ede709aa46f9a69ad54f9fc910c564c79938 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #include "grob-interface.hh"
 #include "lily-proto.hh"
index faebb55489e7d2eb0ba934c84d7c64ca3d7e41db..0b2d30b6640c255360ab9af752e84c52e3801ef4 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
 
 #include "lily-proto.hh"
 #include "rational.hh"
+#include "std-vector.hh"
+
+/*
+  Various options for spacing. Usually inited from SpacingSpanner, but sometimes
+  from GraceSpacing.
+ */
 
 struct Spacing_options
 {
@@ -22,7 +28,7 @@ struct Spacing_options
   Rational global_shortest_;
   Real increment_;
   Real shortest_duration_space_;
-
+  
   Spacing_options();
   void init_from_grob (Grob *me);
   Real get_duration_space (Rational d, bool *) const;
index 3dace37510894ae0154fe1c0c2b908a78f0c762f..3018cadebcfffdc4a375a4d6cdcd05edf8bda39d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SPACING_SPANNER_HH
 #include "std-vector.hh"
 #include "grob-interface.hh"
 
-/*
-  TODO: prune to public interface.
-*/
 class Spacing_spanner
 {
-public:
+private:
+  static void set_distances_for_loose_col (Grob *me, Grob *c, Drul_array<Item *> next_door, Spacing_options const *);
   static void generate_pair_spacing (Grob *me,
                                     Paper_column *l, Paper_column *r,
                                     Paper_column *nextr,
                                     Spacing_options const *options);
-  static void standard_breakable_column_spacing (Grob *me, Item *l, Item *r,
-                                                Real *fixed, Real *space,
-                                                Spacing_options const *);
   static Real default_bar_spacing (Grob *, Grob *, Grob *, Moment);
-  static Real note_spacing (Grob *, Grob *, Grob *, Spacing_options const *, bool *);
   static Real get_duration_space (Moment dur, Spacing_options const *, bool *);
   static Rational effective_shortest_duration (Grob *me, vector<Grob*> const &all);
   static void breakable_column_spacing (Grob *, Item *l, Item *r, Spacing_options const *);
-  static void prune_loose_columns (Grob *, vector<Grob*> *cols, Spacing_options const *);
+  static void prune_loose_columns (Grob *, vector<Grob*> *cols, Spacing_options  *);
   static void set_explicit_neighbor_columns (vector<Grob*> const &cols);
   static void set_implicit_neighbor_columns (vector<Grob*> const &cols);
   static void generate_springs (Grob *me, vector<Grob*> const &cols, Spacing_options const *);
   static void musical_column_spacing (Grob *, Item *, Item *, Spacing_options const *);
-  static vector<Grob*> get_columns (Spanner *me);
-
+  static bool fills_measure (Grob *, Item *, Item *);
+public:
+  static vector<Grob*> get_columns (Grob *me);
+  static Real note_spacing (Grob *, Grob *, Grob *, Spacing_options const *, bool *);
+  static void standard_breakable_column_spacing (Grob *me, Item *l, Item *r,
+                                                Real *fixed, Real *space,
+                                                Spacing_options const *);
+  
   DECLARE_SCHEME_CALLBACK (set_springs, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_common_shortest_duration, (SCM));
   DECLARE_GROB_INTERFACE();
index 449f8bca3d91ec0d54e5c9f4587c2143e32445e1..4f2faf110e25226b70ab7c556cf367087017f57e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SPAN_BAR_HH
index b90d1995168aa92158b6300969299e4f0eb28571..e4a09cc0cf8395e6dc0ec5da6a2c3926230a43d6 100644 (file)
@@ -1,7 +1,7 @@
 /*
   spanner.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef SPANNER_HH
@@ -35,6 +35,7 @@ class Spanner : public Grob
 
 public:
   DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
+  DECLARE_SCHEME_CALLBACK (bounds_width, (SCM));
 
   vector<Spanner*> broken_intos_;
 
@@ -50,8 +51,8 @@ public:
   void set_bound (Direction d, Grob *);
   Item *get_bound (Direction d) const;
 
-  Spanner (SCM, Object_key const *);
-  Spanner (Spanner const &, int copy_count);
+  Spanner (SCM);
+  Spanner (Spanner const &);
   bool is_broken () const;
   void do_break ();
   Real spanner_length () const;
@@ -65,7 +66,7 @@ public:
 
 protected:
   void set_my_columns ();
-  virtual Grob *clone (int count) const;
+  virtual Grob *clone () const;
   virtual void do_break_processing ();
 };
 
index 8813caff92602031d365b39b1b7ea227a43ee5f3..11989b3ad03c6735fdf21e26afb4fb29a3f76578 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SPRING_HH
index af6d394ead586b0d438f8dabb581f11ec81788b9..b4241f2800b323363efc57cd57cc7d0a44b8dae4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef STAFF_SPACING_HH
@@ -15,8 +15,8 @@
 class Staff_spacing
 {
 public:
-  static void next_notes_correction (Grob *, Grob *, Real *, Real *);
-  static void next_note_correction (Grob *, Grob *, Interval, Real*, Real *);
+  static void next_notes_correction (Grob *, Grob *, Real, Real, Real *, Real *);
+  static void next_note_correction (Grob *, Grob *, Interval, Real, Real, Real*, Real *, int *);
   DECLARE_GROB_INTERFACE();
   static void get_spacing_params (Grob *, Real *, Real *);
 
index e6d4ceeec5bad67f570099ab1431612e12a07181..4a43a94e037e46d221bd60d68eb9fba8703f1b05 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef STAFF_SYMBOL_REFERENCER_HH
@@ -39,6 +39,7 @@ public:
   static Real get_position (Grob *);
   static Real staff_radius (Grob *);
   static int get_rounded_position (Grob *);
+  static Interval extent_in_staff (Grob *); 
 };
 
 int compare_position (Grob *const &, Grob *const &);\
index af532014d9bf1226d3a0caf1e76da7e6d3a65bf7..4dacde8b5353d4c6f49a3ef046b8351aead4e1f4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef STAFF_SYMBOL_HH
index 2551c1b094ed759af948ab186e47d35ba362e60a..59f80ace9f43a9a95d309cc193d36341b5f228de 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef STEM_INFO_HH
index 75946a34ee1fb3d2633ddc6ab8ac74eefb095c1c..36cb146efec3ca588f9d9b0cf3efca54963fd43b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef ABBREV_HH
@@ -24,7 +24,9 @@ public:
   DECLARE_SCHEME_CALLBACK (calc_style, (SCM));
   static Stencil raw_stencil (Grob *, Real slope, Direction stemdir);
   static Stencil translated_stencil (Grob*, Real slope);
+  static Stencil untranslated_stencil (Grob*, Real slope);
   static Real get_beam_translation (Grob *me);
+  static Real vertical_length (Grob *me);
 };
 
 #endif /* ABBREV_HH */
index 8808d16665576eec2b82a9786684e911945cd78e..d022175a7c2fbf2430265dd8cc0f9818d7742e8b 100644 (file)
@@ -1,7 +1,7 @@
 /*
   stem.hh -- declare Stem
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef STEM_HH
@@ -33,6 +33,7 @@ public:
   static Real thickness (Grob *);
   static int head_count (Grob *);
   static bool is_invisible (Grob *);
+  static bool is_normal_stem (Grob *);
   static Interval head_positions (Grob *);
   static Real stem_end_position (Grob *);
   static Stencil flag (Grob *);
index b80bcc1c3d77a281212a9701fe4ca66c926acb84..445e461380b61550241da5920d200926b324561e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #ifndef STENCIL_HH
 #define STENCIL_HH
@@ -46,12 +46,6 @@ using namespace std;
 */
 class Stencil
 {
-  /*
-    This provides the reference point of the symbol, for example with
-    characters, it is on the base line of the character. Usually,
-    ORIGIN is inside DIM_
-  */
-  Offset origin_;
   Box dim_;
   SCM expr_;
 
@@ -60,19 +54,15 @@ public:
   Stencil (Box, SCM s);
   Stencil ();
 
-  Offset origin () const;
   SCM expr () const;
 
   /**
      Set dimensions to empty, or to (Interval (0, 0), Interval (0, 0) */
   void set_empty (bool);
-  Stencil moved_to_edge (Axis a, Direction d, const Stencil &m, Real padding,
-                        Real minimum) const;
-
-  void add_at_edge (Axis a, Direction d, const Stencil &m, Real padding,
-                   Real minimum);
+  void add_at_edge (Axis a, Direction d, const Stencil &m, Real padding);
   void add_stencil (Stencil const &m);
   void translate (Offset);
+  Stencil translated (Offset) const;
   void rotate (Real, Offset);
   void align_to (Axis a, Real x);
   void translate_axis (Real, Axis);
@@ -95,6 +85,5 @@ void register_stencil_head (SCM symbol);
 bool is_stencil_head (SCM symbol);
 SCM all_stencil_heads ();
 
-Stencil points_to_line_stencil (vector<Offset> points);
 
 #endif /* STENCIL_HH */
index 4e1688f6f466a7fa3436b3ebfd082f67845f1181..9f226f48db8d66017bcac533c21f06655a17ecdc 100644 (file)
@@ -18,15 +18,16 @@ class Stream_event : public Prob
 public:
   Stream_event ();
   VIRTUAL_COPY_CONSTRUCTOR (Stream_event, Stream_event);
-  // todo: remove unneeded constructors
+
   Stream_event (SCM event_class, SCM mutable_props=SCM_EOL);
   Stream_event (SCM class_name, Input *);
-  Stream_event (Stream_event *ev);
 
   Input *origin () const;
   void set_spot (Input *i);
   bool internal_in_event_class (SCM class_name);
 
+  virtual SCM copy_mutable_properties () const;
+
   DECLARE_SCHEME_CALLBACK (undump, (SCM));
   DECLARE_SCHEME_CALLBACK (dump, (SCM));
 
@@ -36,5 +37,6 @@ public:
 
 Stream_event *unsmob_stream_event (SCM);
 DECLARE_TYPE_P (Stream_event);
+SCM ly_event_deep_copy (SCM);
 
 #endif /* STREAM_EVENT_HH */
index 4c938da6856a0ced1b122a4226adad4058127dc6..0d981a97c45ef0ee0daa4a26fad721cf1f1e7227 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef STREAM_HH
index 672caf863b1619ea937fdd04800580ac7ecd4a43..8016529e4d74c576d23e4a23fca1c215f54f0ef6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SWALLOW_PERF_HH
index f04cde76f64f63c584eaa581e69bb0322f8dbf91..d66bb24d9c46aebd6553f7d6ffd89f19259ddba8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef SYSTEM_START_DELIMITER_HH
index e1a91bf4fa24fe5c8bc41690c1ff4ff13fa1abb9..3a5b39ad4e75104cec0d141affe71dd26c78486b 100644 (file)
@@ -1,8 +1,7 @@
-
 /*
-  line-of-score.hh -- part of GNU LilyPond
+  system.hh -- part of GNU LilyPond
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef SYSTEM_HH
@@ -21,7 +20,7 @@ class System : public Spanner
 {
   int rank_;
   Grob_array *all_elements_;
-  Drul_array<Skyline> skylines_;
+  Skyline_pair skylines_;
   void build_skylines ();
   void init_elements ();
   friend class Paper_score;    // ugh.
@@ -30,12 +29,14 @@ class System : public Spanner
 public:
   Paper_score *paper_score () const;
   int get_rank () const;
+  void do_break_substitution_and_fixup_refpoints ();
   void post_processing ();
   SCM get_paper_system ();
   SCM get_paper_systems ();
+  SCM get_broken_system_grobs ();
 
-  System (SCM, Object_key const *);
-  System (System const &, int);
+  System (SCM);
+  System (System const &);
 
   int element_count () const;
   int spanner_count () const;
@@ -44,7 +45,8 @@ public:
   DECLARE_GROB_INTERFACE();
 
   vector<Item*> broken_col_range (Item const *, Item const *) const;
-  vector<Grob*> columns () const;
+  vector<Grob*> used_columns () const;
+  Paper_column *column (vsize i) const;
 
   void add_column (Paper_column *);
   void typeset_grob (Grob *);
@@ -52,7 +54,7 @@ public:
 
 protected:
   virtual void derived_mark () const;
-  virtual Grob *clone (int count) const;
+  virtual Grob *clone () const;
 };
 
 void set_loose_columns (System *which, Column_x_positions const *posns);
index 187e73715e7813b9415e0bd3af6a9f3fd4ce3bb1..3f8685b15ec2a169098e93a76a62a63e497cfb5b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 030a9ad34413e68c62ec9d3b1188762897978fa7..fa4dac15135b308edf4105e545468ae9ab5359c7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TEXT_METRICS_HH
index 06034b1870f91d51e6711fcf4d5ebf0cb914a181..3af69d63445c56ee6c861290786efc9e95463dc3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef TEXT_SPANNER_HH
index 3206e3203f07ccc29460dbbf1ed0da25df72d3c1..37e0900282d7b900a4a5d4d91958c15f089c1ebb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 77d6d68a7809e86874dc02c92a889377f1d6abc6..07f166f17b32e83509874af9d7dc4191c03b604e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TIE_COLUMN_HH
index 95fd15b01c883ad139798cd3e9944316d8da2fd8..d65604c1dc195f34264eeceebca5229db629fbe9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -68,6 +68,8 @@ public:
   void reset_score ();
   string card () const; 
   string tie_card (int i) const { return tie_score_cards_[i]; }
+  string complete_tie_card (vsize i) const;
+  string complete_score_card () const; 
 };
 
 #endif /* TIE_CONFIGURATION_HH */
index 0e74d3497a791d88d39852bff94903812bfcb729..18b9127d1e83937c31f6395d504275117892c2a9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -21,8 +21,10 @@ struct Tie_details
   Real stem_gap_; 
   Real between_length_limit_;
   Real wrong_direction_offset_penalty_;
+  Real same_dir_as_stem_penalty_;
   Real min_length_penalty_factor_;
   Real min_length_;
+  Real skyline_padding_;
   Real tip_staff_line_clearance_;
   Real center_staff_line_clearance_;
   Real staff_line_collision_penalty_;
index 2b1e2b6230533cc8e8f99b6855a5eb3b09ee0c2a..ebee98877fd69b4c9f03686ff008fbb250028149 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
 #include "skyline.hh"
 #include "tie-configuration.hh"
 #include "tie-details.hh"
+#include "tie-specification.hh"
 #include "tuple.hh"
 
 #include <map>
 #include <set>
 
 typedef map< Tuple<int,4>, Tie_configuration *> Tie_configuration_map;
-
-struct Tie_specification
-{
-  int position_;
-  Drul_array<Grob*> note_head_drul_;
-  Drul_array<int> column_ranks_;
-  
-  bool has_manual_position_;
-  bool has_manual_dir_;
-  
-  Real manual_position_;
-  Direction manual_dir_;
-  
-  Tie_specification ();
-  int column_span () const;
-  void get_tie_manual_settings (Grob *);
-};
-
 struct Tie_configuration_variation
 {
   int index_;
@@ -47,11 +30,13 @@ struct Tie_configuration_variation
 
 typedef map < Tuple<int, 2>, Skyline> Chord_outline_map;
 typedef map < Tuple<int, 2>, Box> Column_extent_map;
+typedef map <int, Slice> Position_extent_map;
 class Tie_formatting_problem
 {
   Chord_outline_map chord_outlines_;
   Column_extent_map stem_extents_;
   Column_extent_map head_extents_;
+  Position_extent_map head_positions_;
   
   set<int> dot_positions_;
   Interval dot_x_;
@@ -62,11 +47,13 @@ class Tie_formatting_problem
   Grob *x_refpoint_;
 
   
-  Tie_configuration *get_configuration (int position, Direction dir, Drul_array<int> cols) const;
-  Tie_configuration *generate_configuration (int position, Direction dir, Drul_array<int> cols) const;
+  Tie_configuration *get_configuration (int position, Direction dir, Drul_array<int> cols, bool tune_y) const;
+  Tie_configuration *generate_configuration (int position, Direction dir, Drul_array<int> cols, bool tune_y) const;
+
   vector<Tie_configuration_variation> generate_collision_variations (Ties_configuration const &ties) const;
   vector<Tie_configuration_variation> generate_extremal_tie_variations (Ties_configuration const &ties) const;
-
+  vector<Tie_configuration_variation> generate_single_tie_variations (Ties_configuration const &ties) const;
+  
   void score_configuration (Tie_configuration *) const;
   Real score_aptitude (Tie_configuration *, Tie_specification const &,
                       Ties_configuration *, int) const;
@@ -75,9 +62,10 @@ class Tie_formatting_problem
   void set_ties_config_standard_directions (Ties_configuration *tie_configs_ptr);
   void score_ties (Ties_configuration *) const;
   
+  Slice head_positions_slice (int) const;
   Ties_configuration generate_base_chord_configuration ();
   Ties_configuration find_best_variation (Ties_configuration const &base,
-                                         vector<Tie_configuration_variation> vars);
+                                         vector<Tie_configuration_variation> const &vars);
 
 public:
   Tie_details details_;
@@ -91,9 +79,8 @@ public:
   ~Tie_formatting_problem ();
 
   Tie_specification get_tie_specification (int) const;
-  Ties_configuration generate_optimal_chord_configuration ();
+  Ties_configuration generate_optimal_configuration ();
   Ties_configuration generate_ties_configuration (Ties_configuration const &);
-  Tie_configuration find_optimal_tie_configuration (Tie_specification const &) const;
 
   void from_ties (vector<Grob*> const &ties);
   void from_tie (Grob *tie);
@@ -103,6 +90,7 @@ public:
   void set_manual_tie_configuration (SCM);
   Interval get_attachment (Real, Drul_array<int>) const;
   Grob *common_x_refpoint () const;
+  void set_debug_scoring (Ties_configuration const &);
 };
 
 #endif /* TIE_FORMATTING_PROBLEM_HH */
diff --git a/lily/include/tie-specification.hh b/lily/include/tie-specification.hh
new file mode 100644 (file)
index 0000000..0a437d3
--- /dev/null
@@ -0,0 +1,37 @@
+/* 
+  tie-specification.hh -- declare  Tie_specification
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#ifndef TIE_SPECIFICATION_HH
+#define TIE_SPECIFICATION_HH
+
+#include "lily-proto.hh"
+#include "drul-array.hh"
+
+struct Tie_specification
+{
+  int position_;
+  Drul_array<Grob*> note_head_drul_;
+  Drul_array<int> column_ranks_;
+  Grob *tie_grob_;
+  
+  bool has_manual_position_;
+  bool has_manual_dir_;
+  bool has_manual_delta_y_;
+  bool has_accidental_;
+  
+  Real manual_position_;
+  Direction manual_dir_;
+  
+  Tie_specification ();
+  int column_span () const;
+  void from_grob (Grob *);
+};
+
+#endif /* TIE_SPECIFICATION_HH */
+
index 35d3d9596cb54767190fa8c4ec2ef7e85c530836..c47a93306c6cc40f99b477772a5a9237111bdab1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TIE_HH
@@ -25,10 +25,10 @@ public:
   static int get_column_rank (Grob *, Direction);
   static int get_position (Grob *);
   static Direction get_default_dir (Grob *);  
-  static void set_control_points (Grob *, Grob *,
-                                 Tie_configuration const&,
-                                 Tie_details const&);
-  static void set_default_control_points (Grob *);
+  static SCM get_control_points (Grob *, Grob *,
+                                Tie_configuration const&,
+                                Tie_details const&);
+  static SCM get_default_control_points (Grob *);
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
index f2b3d0bd180efb5a2a1a7c4a888f639b826985b3..bf48452130ba4647c533de179f05d108268ca087 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>,
                  Erik Sandberg <mandolaerik@gmail.com>
 */
 
index d25843252e248f003546b67f32eacd602f2ab541..5c77a2cff92e1572e2fc2b3e89e5e9411b431791 100644 (file)
@@ -1,7 +1,7 @@
 /*
   time_signature.hh -- declare Time_signature
 
-  (c) 1996--2006 Han-Wen Nienhuys
+  (c) 1996--2007 Han-Wen Nienhuys
 */
 
 #ifndef METER_HH
index 3ed20422b7a1869c4daad72625bebe8a2b224551..7963440ca82c18128a6130c55c9f5178ffff563e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TIMING_TRANSLATOR_HH
index 3a543052353f431373b205ca841fcf39169cd54f..687431cb8fd4cd763236d6070810b4dfa6113b27 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TRANSLATOR_DISPATCH_LIST_HH
index 72481b5da394298f9adc8544d2bab2b67f810699..a777ba26307961c7b57005f8cf80c27a5489fdae 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TRANSLATOR_GROUP_HH
@@ -57,7 +57,6 @@ public:
 public:
   virtual void connect_to_context (Context *c);
   virtual void disconnect_from_context ();
-  virtual Translator_group *get_daddy_translator ()const;
   virtual SCM get_simple_trans_list ();
   virtual void initialize ();
   virtual void finalize ();
index eee42e5b7d87a0bef620663df1c1ddabf165207a..6145cae05253a849438fc2e2c4a93e95505f7b5d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TRANSLATOR_HH
index 708089b30afcd25809dc96e18cdce178a163bcb5..2a7eeccc235e2884a96acbc37e29f39bf19e3369 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef TRANSLATOR_ICC
index b60c417c19f953cad1aed2b7c65b7691b77148cc..2097e98d58dd79934b7d326a0f866ba7e06d2329 100644 (file)
@@ -1,7 +1,7 @@
 /*
   tuplet-bracket.hh -- part of GNU LilyPond
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef Tuplet_bracket_HH
diff --git a/lily/include/tweak-registration.hh b/lily/include/tweak-registration.hh
deleted file mode 100644 (file)
index a7c1ad8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-  tweak-registration.hh -- declare
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef TWEAK_REGISTRATION_HH
-#define TWEAK_REGISTRATION_HH
-
-#include <map>
-using namespace std;
-
-#include "lily-proto.hh"
-#include "object-key.hh"
-
-typedef map<Object_key const *, SCM, Object_key_less> Tweak_map;
-
-class Tweak_registry
-{
-  Tweak_map tweaks_;
-  Object_key_undumper *undumper_;
-
-  DECLARE_SMOBS (Tweak_registry);
-
-public:
-  Tweak_registry ();
-
-  Object_key_undumper *undumper () const;
-  void clear ();
-  void insert_grob_tweak (Grob *, SCM);
-  void replace_grob_tweak (Grob *, SCM);
-  SCM get_tweaks (Grob *);
-  SCM list_tweaks ();
-  void insert_tweak_from_file (SCM);
-};
-
-extern Tweak_registry *global_registry_;
-
-DECLARE_UNSMOB (Tweak_registry, tweak_registry);
-
-#endif /* TWEAK_REGISTRATION_HH */
index 637c68878b15126f75357f6bc781e11c5132a6b9..fd631e91d611edacd282599692519b92f77477d6 100644 (file)
@@ -1,13 +1,13 @@
 /*
-  type-swallow-engraver.hh -- declare Type_swallow_translator
+  type-swallow-translator.hh -- declare Type_swallow_translator
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
-#ifndef TYPESWALLOW_GRAV_HH
-#define TYPESWALLOW_GRAV_HH
+#ifndef TYPESWALLOW_TRANSLATOR_HH
+#define TYPESWALLOW_TRANSLATOR_HH
 
 #include "translator.hh"
 
@@ -40,5 +40,5 @@ public:
                  "",                                                   \
                  "");
 
-#endif // TYPESWALLOW_GRAV_HH
+#endif // TYPESWALLOW_TRANSLATOR_HH
 
index f20fccf28fa17e44a7c8e10a0c0c28d13e1ccdf0..13cdf6d65710ea6e2805b58ebad74494005ea1cb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #ifndef VATICANA_LIGATURE_HH
index 687439cc7f8078e8bf7aa0a6e8cdb7a5f7b7741b..4cc75a6ba5c017d7ba2330feb240e263edec28fd 100644 (file)
@@ -1,7 +1,7 @@
 /*
   volta-spanner.hh -- part of GNU LilyPond
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #ifndef VOLTA_SPANNER_HH
index c24d2ed1b0d3e0cddfe8786daa81b6a0bb63c56f..2ff7bf500762d7496efe533ed80bf1a728e701b4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "std-string.hh"
@@ -47,7 +47,7 @@ LY_DEFINE (ly_input_file_line_column,
   int ch = 0;
   int col = 0;
   ip->get_counts (&l, &ch, &col);
-  return scm_list_4 (scm_makfrom0str (ip->file_string ().c_str ()),
+  return scm_list_4 (ly_string2scm (ip->file_string ()),
                     scm_from_int (l),
                     scm_from_int (ch),
                     scm_from_int (col));
@@ -61,7 +61,7 @@ LY_DEFINE (ly_input_both_locations,
 {
   Input *ip = unsmob_input (sip);
   SCM_ASSERT_TYPE (ip, sip, SCM_ARG1, __FUNCTION__, "input location");
-  return scm_list_5 (scm_makfrom0str (ip->file_string ().c_str ()),
+  return scm_list_5 (ly_string2scm (ip->file_string ()),
                     scm_from_int (ip->line_number ()),
                     scm_from_int (ip->column_number ()),
                     scm_from_int (ip->end_line_number ()),
index 1b66e9935f32a66b1f89838cf2a4807ce5475fb4..0f928a67b763776ea024941b4b14db7a425b8ee9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "input.hh"
index 14b281fbb87baadb49e10b2b1032d1a4c776bbaa..3d998b384e6d806761ce122ede378e69cf200c8e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "input.hh"
index a256b8beb19b4e48cc44778e4f780a55613c0c3a..d280913e53941da4a8c33486e373b71d79c12556 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -98,7 +98,7 @@ Instrument_name_engraver::start_spanner ()
   if (system)
     Axis_group_interface::add_element (system, text_spanner_);
   else
-    text_spanner_->programming_error ("can't find root system");
+    text_spanner_->programming_error ("cannot find root system");
 }
 
 
index fe30a0423ce6eaf85368605a4574f1845072d92f..a3694f075574ad8ffef4399426dd1ccd07ac0ace 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
 
 */
 
@@ -31,6 +31,9 @@ Instrument_switch_engraver::Instrument_switch_engraver ()
   text_ = 0;
 }
 
+/*
+  TODO: should use an event.
+ */
 void
 Instrument_switch_engraver::process_music ()
 {
index 6baf4af6af363056d319d36c294fcb848cf1ab4a..0ebbc2832de9a65663a665e7e39a847a23c3c317 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 173df20ed87fd7b19451d2f4b212ea9c0dc18eea..c6ca1b2c6939778a77f096ba2671bac0ad0ecdd0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "item.hh"
 #include "pointer-group-interface.hh"
 
 Grob *
-Item::clone (int count) const
+Item::clone () const
 {
-  return new Item (*this, count);
+  return new Item (*this);
 }
 
-Item::Item (SCM s, Object_key const *key)
-  : Grob (s, key)
+Item::Item (SCM s)
+  : Grob (s)
 {
   broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] = 0;
 }
@@ -31,8 +31,8 @@ Item::Item (SCM s, Object_key const *key)
 /**
    Item copy ctor.  Copy nothing: everything should be a elt property
    or a special purpose pointer (such as broken_to_drul_[]) */
-Item::Item (Item const &s, int copy_count)
-  : Grob (s, copy_count)
+Item::Item (Item const &s)
+  : Grob (s)
 {
   broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] = 0;
 }
@@ -66,10 +66,9 @@ Item::copy_breakable_items ()
 {
   Drul_array<Item *> new_copies;
   Direction i = LEFT;
-  int count = 0;
   do
     {
-      Grob *dolly = clone (count++);
+      Grob *dolly = clone ();
       Item *item = dynamic_cast<Item *> (dolly);
       get_root_system (this)->typeset_grob (item);
       new_copies[i] = item;
@@ -233,5 +232,6 @@ ADD_INTERFACE (Item,
 
               /* properties */
               "break-visibility "
-              "no-spacing-rods "
+              "extra-spacing-width "
+              "infinite-spacing-height "
               "non-musical")
index 26b3985e4e31fcb760a08701ec92f4f72cc2ac74..c086f3d250198c6ce37431a81e70952825e8e5a3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "bar-line.hh"
 
 #include "translator.icc"
 
-/*
-  TODO: The representation  of key sigs is all fucked.
-*/
-
-/**
-   Make the key signature.
-*/
 class Key_engraver : public Engraver
 {
   void create_key (bool);
@@ -59,6 +52,7 @@ Key_engraver::Key_engraver ()
   cancellation_ = 0;
 }
 
+
 void
 Key_engraver::create_key (bool is_default)
 {
@@ -72,6 +66,7 @@ Key_engraver::create_key (bool is_default)
 
       SCM last = get_property ("lastKeySignature");
       SCM key = get_property ("keySignature");
+      bool extranatural = to_boolean(get_property("extraNatural"));
 
       if ((to_boolean (get_property ("printKeyCancellation"))
           || key == SCM_EOL)
@@ -81,10 +76,13 @@ Key_engraver::create_key (bool is_default)
          SCM *tail = &restore;
          for (SCM s = last; scm_is_pair (s); s = scm_cdr (s))
            {
-             if (scm_assoc (scm_caar (s), key) == SCM_BOOL_F)
+             SCM new_alter_pair = scm_assoc (scm_caar (s), key);
+             Rational old_alter = ly_scm2rational (scm_cdar (s));
+             if (new_alter_pair == SCM_BOOL_F
+                 || extranatural
+                 && (ly_scm2rational (scm_cdr (new_alter_pair)) - old_alter)*old_alter < Rational (0))
                {
-                 *tail = scm_acons (scm_caar (s),
-                                    scm_from_int (0), *tail);
+                 *tail = scm_cons (scm_car (s), *tail);
                  tail = SCM_CDRLOC (*tail);
                }
            }
@@ -94,12 +92,13 @@ Key_engraver::create_key (bool is_default)
              cancellation_ = make_item ("KeyCancellation",
                                         key_event_
                                         ? key_event_->self_scm () : SCM_EOL);
-         
+             
              cancellation_->set_property ("alteration-alist", restore);
              cancellation_->set_property ("c0-position",
                                           get_property ("middleCPosition"));
            }
        }
+
       item_->set_property ("alteration-alist", key);
     }
 
@@ -107,8 +106,6 @@ Key_engraver::create_key (bool is_default)
     {
       SCM visibility = get_property ("explicitKeySignatureVisibility");
       item_->set_property ("break-visibility", visibility);
-      if (cancellation_)
-       cancellation_->set_property ("break-visibility", visibility);
     }
 }
 
@@ -162,22 +159,36 @@ Key_engraver::read_event (Stream_event const *r)
   if (!scm_is_pair (p))
     return;
 
-  SCM n = scm_list_copy (p);
   SCM accs = SCM_EOL;
-  for (SCM s = get_property ("keyAlterationOrder");
-       scm_is_pair (s); s = scm_cdr (s))
+
+  SCM alist = scm_list_copy (p);
+  SCM order = get_property ("keyAlterationOrder");
+  for (SCM s = order;
+       scm_is_pair (s) && scm_is_pair (alist); s = scm_cdr (s))
     {
-      if (scm_is_pair (scm_member (scm_car (s), n)))
+      SCM head = scm_member (scm_car (s), alist);
+      
+      if (scm_is_pair (head))
        {
-         accs = scm_cons (scm_car (s), accs);
-         n = scm_delete_x (scm_car (s), n);
+         accs = scm_cons (scm_car (head), accs);
+         alist = scm_delete_x (scm_car (head), alist);
        }
     }
 
-  for (SCM s = n; scm_is_pair (s); s = scm_cdr (s))
-    if (scm_to_int (scm_cdar (s)))
-      accs = scm_cons (scm_car (s), accs);
-
+  if (scm_is_pair (alist))
+    {
+      bool warn = false;
+      for (SCM s = alist; scm_is_pair (s); s = scm_cdr (s))
+       if (ly_scm2rational (scm_cdar (s)))
+         {
+           warn = true;
+           accs = scm_cons (scm_car (s), accs);
+         }
+
+      if (warn)
+       r->origin ()->warning ("No ordering for key signature alterations");      
+    }
+  
   context ()->set_property ("keySignature", accs);
   context ()->set_property ("tonic",
                            r->get_property ("tonic"));
@@ -203,9 +214,9 @@ ADD_TRANSLATOR (Key_engraver,
                /* read */
                "createKeyOnClefChange "
                "explicitKeySignatureVisibility "
+               "extraNatural "
                "keyAlterationOrder "
                "keySignature "
-               "keySignature "
                "lastKeySignature "
                "printKeyCancellation "
                ,
index 61e3592630577e782c5edc3478c177df7aa1b6bd..32f94a632ed1356aaa48394432237f901ce9d28c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "audio-item.hh"
@@ -52,7 +52,7 @@ Key_performer::process_music ()
 
       Pitch key_do (0,
                    scm_to_int (scm_caar (pitchlist)),
-                   scm_to_int (scm_cdar (pitchlist)));
+                   ly_scm2rational (scm_cdar (pitchlist)));
 
       Pitch c_do (0, 0, 0);
 
@@ -66,8 +66,8 @@ Key_performer::process_music ()
       SCM third = scm_assoc (scm_from_int (2),
                             c_pitchlist);
       bool minor = (scm_is_pair (third)
-                   && scm_is_integer (scm_cdr (third))
-                   && scm_to_int (scm_cdr (third)) == FLAT);
+                   && scm_is_number (scm_cdr (third))
+                   && ly_scm2rational (scm_cdr (third)) == FLAT_ALTERATION);
 
       audio_ = new Audio_key (scm_to_int (acc),
                              !minor);
@@ -96,5 +96,7 @@ Key_performer::listen_key_change (Stream_event *ev)
 }
 
 ADD_TRANSLATOR (Key_performer,
-               "", "",
-               "", "");
+               "",
+               "",
+               "",
+               "");
index 60a11db86ab831cbc0db12dd035ec20bc3773f96..7c88268b624b9a70d1542932e354b3bab760f73e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   keyplacement by Mats Bengtsson
 */
 #include "lookup.hh"
 #include "output-def.hh"
 #include "staff-symbol-referencer.hh"
+#include "rational.hh"
 
 struct Key_signature_interface
 {
   DECLARE_SCHEME_CALLBACK (print, (SCM));
-
   DECLARE_GROB_INTERFACE();
 };
 
-/*
-  FIXME: too much hardcoding here.
-*/
-const int FLAT_TOP_PITCH = 2; /* fes, ges, as and bes typeset in lower octave */
-const int SHARP_TOP_PITCH = 4; /*  ais and bis typeset in lower octave */
-
-/*
-  TODO: look this up. I'm not sure where the naturals ought to go.
-*/
-const int NATURAL_TOP_PITCH = 4;
-
-/*
-  FIXME: key-item should just get a list of (position, acc), and leave
-  the thinking to other parties.
-
-  - TODO: put this in Scheme
-
-  TODO: can  we do without c0pos? it's partly musical.
-*/
-int
-alteration_pos (SCM what, int alter, int c0p)
-{
-  if (scm_is_pair (what))
-    return scm_to_int (scm_car (what)) * 7 + scm_to_int (scm_cdr (what)) + c0p;
-
-  int p = scm_to_int (what);
-
-  // Find the c in the range -4 through 2
-  int from_bottom_pos = c0p + 4;
-  from_bottom_pos = from_bottom_pos % 7;
-  from_bottom_pos = (from_bottom_pos + 7) % 7; // Precaution to get positive.
-  int c0 = from_bottom_pos - 4;
-
-  if ((alter < 0 && ((p > FLAT_TOP_PITCH) || (p + c0 > 4)) && (p + c0 > 1))
-      || (alter > 0 && ((p > SHARP_TOP_PITCH) || (p + c0 > 5)) && (p + c0 > 2))
-      || (alter == 0 && ((p > NATURAL_TOP_PITCH) || (p + c0 > 5)) && (p + c0 > 2)))
-    {
-      p -= 7; /* Typeset below c_position */
-    }
-
-  /* Provide for the four cases in which there's a glitch
-     it's a hack, but probably not worth
-     the effort of finding a nicer solution.
-     --dl. */
-  if (c0 == 2 && alter > 0 && p == 3)
-    p -= 7;
-  if (c0==-3 && alter > 0 && p ==-1)
-    p += 7;
-  if (c0==-4 && alter < 0 && p ==-1)
-    p += 7;
-  if (c0==-2 && alter < 0 && p ==-3)
-    p += 7;
-
-  return p + c0;
-}
 
 /*
   TODO
@@ -98,13 +43,12 @@ Key_signature_interface::print (SCM smob)
   else
     style = "";
 
-  SCM newas = me->get_property ("alteration-alist");
   Stencil mol;
 
   SCM c0s = me->get_property ("c0-position");
-  int c0p = 0;
-  if (scm_is_number (c0s))
-    c0p = scm_to_int (c0s);
+
+  bool is_cancellation = me->internal_has_interface
+    (ly_symbol2scm ("key-cancellation-interface"));
 
   /*
     SCM lists are stacks, so we work from right to left, ending with
@@ -113,19 +57,33 @@ Key_signature_interface::print (SCM smob)
 
   int last_pos = -1000;
   Font_metric *fm = Font_interface::get_default_font (me);
-  for (SCM s = newas; scm_is_pair (s); s = scm_cdr (s))
+  SCM alist = me->get_property ("glyph-name-alist");
+
+  for (SCM s = me->get_property ("alteration-alist"); scm_is_pair (s); s = scm_cdr (s))
     {
-      int alteration = scm_to_int (scm_cdar (s));
-      string font_char
-       = Accidental_interface::get_fontcharname (style, alteration);
-      Stencil acc (fm->find_by_name ("accidentals." + font_char));
+      SCM alt = is_cancellation
+       ? scm_from_int (0)
+       : scm_cdar (s);
+
+      SCM glyph_name = ly_assoc_get (alt, alist, SCM_BOOL_F);
+      if (!scm_is_string (glyph_name))
+       {
+         me->warning (_f ("No glyph found for alteration: %s",
+                          ly_scm2rational (alt).to_string ().c_str ()));
+         continue;
+       }
+      
+      Stencil acc (fm->find_by_name (ly_scm2string (glyph_name)));
 
       if (acc.is_empty ())
-       me->warning (_f ("accidental `%s' not found", font_char));
+       me->warning (_ ("alteration not found"));
       else
        {
          SCM what = scm_caar (s);
-         int pos = alteration_pos (what, alteration, c0p);
+
+         SCM proc = ly_lily_module_constant ("key-signature-interface::alteration-position");
+
+         int pos = scm_to_int (scm_call_3 (proc, what, scm_cdar (s), c0s));
          acc.translate_axis (pos * inter, Y_AXIS);
 
          /*
@@ -134,12 +92,12 @@ Key_signature_interface::print (SCM smob)
            needed to prevent collisions.
          */
          Real padding = 0.0;
-         if (alteration == 0
+         if (is_cancellation
              && last_pos < pos + 2
              && last_pos > pos - 6)
            padding = 0.3;
 
-         mol.add_at_edge (X_AXIS, LEFT, acc, padding, 0);
+         mol.add_at_edge (X_AXIS, LEFT, acc, padding);
          last_pos = pos;
        }
     }
@@ -151,4 +109,9 @@ Key_signature_interface::print (SCM smob)
 
 ADD_INTERFACE (Key_signature_interface,
               "A group of accidentals, to be printed as signature sign.",
-              "style c0-position alteration-alist");
+
+              "alteration-alist "
+              "c0-position "
+              "glyph-name-alist "
+              "style "
+              );
index 96dd9bbdd0b10fb426114194b9d2de97902193ab..a6a4bd0e2b98ed3ca226e43d3e144b966a854e46 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -60,12 +60,20 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf)
     {
       lv_column_ = make_item ("LaissezVibrerTieColumn", event_->self_scm ());
     }
-  
-  Grob *lv_tie = make_item ("LaissezVibrerTie", event_->self_scm ());
+
+  SCM cause = event_->self_scm ();
+  Grob *lv_tie = make_item ("LaissezVibrerTie", cause);
   lv_tie->set_object ("note-head", inf.grob ()->self_scm ());
   
   Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"),
                                     lv_tie);
+
+  if (is_direction (unsmob_stream_event (cause)->get_property ("direction")))
+    {
+      Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction"));
+      lv_tie->set_property ("direction", scm_from_int (d)); 
+    }
+  
   lv_tie->set_parent (lv_column_, Y_AXIS);
 
   lv_ties_.push_back (lv_tie);
@@ -77,6 +85,6 @@ ADD_TRANSLATOR (Laissez_vibrer_engraver,
                
                /* create */
                "LaissezVibrerTie "
-               "LaissezVibrerTieColumn",
+               "LaissezVibrerTieColumn ",
                /* read */ "",
                /* write */ "");
index 2e0bcab3c61a8e6fb7bcd36a903db2a6244882be..d95279a54e0d801420b28b6348f3b0f76f2583d1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "least-squares.hh"
index e5bd582a07317f67c4b9cced82ac62c1da39d41c..ecff48a7b86bcc457c9f41725a6b61caacd5126c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "pointer-group-interface.hh"
index ea0fa43d4ef35a018a95dab11c0f0ee1bf8f8e1c..62d52b64c19dbc7afc31c0c00ee8d839a9704d22 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <map>
index 9cb2cac0c667baae3b1f24a893ab34acaaf3032b..66457f4b9e75b6b1b3b850c0912080de01cfc040 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
            Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -236,7 +236,7 @@ BOM_UTF8    \357\273\277
        progress_indication ("\n");
        scm_module_define (scm_car (scopes_),
                     ly_symbol2scm ("input-file-name"),
-                    scm_makfrom0str (s.c_str ()));
+                    ly_string2scm (s));
 
 }
 
@@ -271,7 +271,7 @@ BOM_UTF8    \357\273\277
        }
        <<EOF>>         {
                LexerError (_ ("EOF found inside a comment").c_str ());
-               is_main_input_ = false;
+               is_main_input_ = false; // should be safe , can't have \include in --safe.
                if (! close_input ()) 
                  yyterminate (); // can't move this, since it actually rets a YY_NULL
        }
@@ -323,7 +323,7 @@ BOM_UTF8    \357\273\277
 }
 <chords,notes,figures>{RESTNAME}       {
        char const *s = YYText ();
-       yylval.scm = scm_makfrom0str (s);
+       yylval.scm = scm_from_locale_string (s);
        return RESTNAME;
 }
 <chords,notes,figures>R                {
@@ -427,7 +427,7 @@ BOM_UTF8    \357\273\277
 
                /* yylval is union. Must remember STRING before setting SCM*/
                string *sp = yylval.string;
-               yylval.scm = scm_makfrom0str (sp->c_str ());
+               yylval.scm = ly_string2scm (*sp);
                delete sp;
                return is_lyric_state () ? LYRICS_STRING : STRING;
        }
@@ -464,7 +464,7 @@ BOM_UTF8    \357\273\277
                if (c == '{' ||  c == '}') // brace open is for not confusing dumb tools.
                        here_input ().warning (
                                _ ("Brace found at end of lyric.  Did you forget a space?"));
-               yylval.scm = scm_makfrom0str (s.c_str ());
+               yylval.scm = ly_string2scm (s);
 
 
                return LYRICS_STRING;
@@ -557,7 +557,7 @@ BOM_UTF8    \357\273\277
                if (c == '{' ||  c == '}')
                        here_input ().warning (
                                _ ("Brace found at end of markup.  Did you forget a space?"));
-               yylval.scm = scm_makfrom0str (s.c_str ());
+               yylval.scm = ly_string2scm (s);
 
 
                return STRING;
@@ -570,7 +570,11 @@ BOM_UTF8   \357\273\277
 <*><<EOF>> {
        if (is_main_input_)
        {
-               is_main_input_ = false;
+               /* 2 = init.ly + current file.
+                  > because we're before closing, but is_main_input_ should
+                  reflect after.
+               */ 
+               is_main_input_ = include_stack_.size () > 2;
                if (!close_input ())
                /* Returns YY_NULL */
                        yyterminate ();
@@ -774,7 +778,7 @@ Lily_lexer::scan_escaped_word (string str)
        string msg (_f ("unknown escaped string: `\\%s'", str));        
        LexerError (msg.c_str ());
 
-       yylval.scm = scm_makfrom0str (str.c_str ());
+       yylval.scm = ly_string2scm (str);
 
        return STRING;
 }
@@ -802,7 +806,7 @@ Lily_lexer::scan_bare_word (string str)
                }
        }
 
-       yylval.scm = scm_makfrom0str (str.c_str ());
+       yylval.scm = ly_string2scm (str);
        return STRING;
 }
 
@@ -937,7 +941,7 @@ SCM
 lookup_markup_command (string s)
 {
        SCM proc = ly_lily_module_constant ("lookup-markup-command");
-       return scm_call_1 (proc, scm_makfrom0str (s.c_str ()));
+       return scm_call_1 (proc, ly_string2scm (s));
 }
 
 /* Shut up lexer warnings.  */
index 6e8dd9a22a9469cb878996252023b332b5d3e6a0..85cd473ecd21ee4e0ffbb5bdd7a281bd9c687700 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "ligature-engraver.hh"
@@ -81,6 +81,7 @@ Ligature_bracket_engraver::acknowledge_rest (Grob_info info)
 
 ADD_ACKNOWLEDGER (Ligature_bracket_engraver, rest);
 ADD_ACKNOWLEDGER (Ligature_bracket_engraver, note_column);
+
 ADD_TRANSLATOR (Ligature_bracket_engraver,
                /* doc */ "Handles Ligature_events by engraving Ligature brackets.",
                /* create */ "TupletBracket",
index ab7dfebadb2e4829bf2d8fa7b4d9b922b52f48c2..e73098abe4543f2a05672c959bc8603734c80eb1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "ligature-engraver.hh"
@@ -90,7 +90,7 @@ Ligature_engraver::process_music ()
     {
       if (!ligature_)
        {
-         events_drul_[STOP]->origin ()->warning (_ ("can't find start of ligature"));
+         events_drul_[STOP]->origin ()->warning (_ ("cannot find start of ligature"));
          return;
        }
 
index d57a9f5730e7e936fdd7b2307aa49dc9359e20ea..a1a635961c02cc9e46bc4587ce32e1cc3ef76241 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -30,28 +30,10 @@ using namespace std;
 #include "version.hh"
 #include "warn.hh"
 
-// #define TEST_GC
-
-SCM
-ly_to_symbol (SCM scm)
-{
-  return scm_string_to_symbol (ly_to_string (scm));
-}
-
-SCM
-ly_to_string (SCM scm)
-{
-  return scm_call_3 (ly_lily_module_constant ("format"), SCM_BOOL_F,
-
-                    scm_makfrom0str ("~S"), scm);
-}
-
-SCM
-ly_last (SCM list)
-{
-  return scm_car (scm_last_pair (list));
-}
 
+/*
+  symbols/strings.
+ */
 SCM
 ly_write2scm (SCM s)
 {
@@ -91,7 +73,7 @@ gulp_file_to_string (string fn, bool must_exist, int size)
     {
       if (must_exist)
        {
-         string e = _f ("can't find file: `%s'", fn);
+         string e = _f ("cannot find file: `%s'", fn);
          e += " ";
          e += _f ("(load path: `%s')", global_path.to_string ());
          error (e);
@@ -122,6 +104,9 @@ extern "C" {
   }
 };
 
+/*
+  STRINGS
+ */
 string
 ly_scm2string (SCM str)
 {
@@ -130,6 +115,14 @@ ly_scm2string (SCM str)
                 (int) scm_i_string_length (str));
 }
 
+SCM
+ly_string2scm (string const &str)
+{
+  return scm_from_locale_stringn (str.c_str(),
+                                 str.length ());
+}
+
+
 char *
 ly_scm2newstr (SCM str, size_t *lenp)
 {
@@ -149,6 +142,10 @@ ly_scm2newstr (SCM str, size_t *lenp)
   return 0;
 }
 
+
+/*
+  PAIRS
+*/
 SCM
 index_get_cell (SCM s, Direction d)
 {
@@ -174,77 +171,62 @@ is_number_pair (SCM p)
     && scm_is_number (scm_car (p)) && scm_is_number (scm_cdr (p));
 }
 
-typedef void (*Void_fptr) ();
-vector<Void_fptr> *scm_init_funcs_;
 
-void add_scm_init_func (void (*f) ())
+unsigned int
+ly_scm_hash (SCM s)
 {
-  if (!scm_init_funcs_)
-    scm_init_funcs_ = new vector<Void_fptr>;
-
-  scm_init_funcs_->push_back (f);
+  return scm_ihashv (s, ~1u);
 }
 
-void
-ly_init_ly_module (void *)
-{
-  for (vsize i = scm_init_funcs_->size (); i--;)
-    (scm_init_funcs_->at (i)) ();
 
-  if (be_verbose_global)
+bool
+is_axis (SCM s)
+{
+  if (scm_is_number (s))
     {
-      progress_indication ("[");
-      scm_display (scm_c_eval_string ("(%search-load-path \"lily.scm\")"),
-                  scm_current_error_port ());
-      progress_indication ("]\n");
+      int i = scm_to_int (s);
+      return i == 0 || i == 1;
     }
-
-  scm_primitive_load_path (scm_makfrom0str ("lily.scm"));
+  return false;
 }
 
-SCM global_lily_module;
-
-void
-ly_c_init_guile ()
+bool
+to_boolean (SCM s)
 {
-  global_lily_module = scm_c_define_module ("lily", ly_init_ly_module, 0);
-  scm_c_use_module ("lily");
+  return scm_is_bool (s) && ly_scm2bool (s);
 }
 
-unsigned int
-ly_scm_hash (SCM s)
+/*
+  DIRECTIONS
+ */
+Direction
+to_dir (SCM s)
 {
-  return scm_ihashv (s, ~1u);
+  return scm_is_integer (s) ? (Direction) scm_to_int (s) : CENTER;
 }
 
-bool
-is_direction (SCM s)
+Direction
+robust_scm2dir (SCM d, Direction def)
 {
-  if (scm_is_number (s))
-    {
-      int i = scm_to_int (s);
-      return i >= -1 && i <= 1;
-    }
-  return false;
+  if (is_direction (d))
+    def = to_dir (d);
+  return def;
 }
 
 bool
-is_axis (SCM s)
+is_direction (SCM s)
 {
   if (scm_is_number (s))
     {
       int i = scm_to_int (s);
-      return i == 0 || i == 1;
+      return i >= -1 && i <= 1;
     }
   return false;
 }
 
-Direction
-to_dir (SCM s)
-{
-  return scm_is_integer (s) ? (Direction) scm_to_int (s) : CENTER;
-}
-
+/*
+  INTERVALS
+ */
 Interval
 ly_scm2interval (SCM p)
 {
@@ -264,32 +246,40 @@ ly_interval2scm (Drul_array<Real> i)
   return scm_cons (scm_from_double (i[LEFT]), scm_from_double (i[RIGHT]));
 }
 
-bool
-to_boolean (SCM s)
+
+Interval
+robust_scm2interval (SCM k, Drul_array<Real> v)
 {
-  return scm_is_bool (s) && ly_scm2bool (s);
+  Interval i;
+  i[LEFT] = v[LEFT];
+  i[RIGHT] = v[RIGHT];
+  if (is_number_pair (k))
+    i = ly_scm2interval (k);
+  return i;
 }
 
-/* Appendable list L: the cdr contains the list, the car the last cons
-   in the list.  */
-SCM
-appendable_list ()
+Drul_array<Real>
+robust_scm2drul (SCM k, Drul_array<Real> v)
 {
-  SCM s = scm_cons (SCM_EOL, SCM_EOL);
-  scm_set_car_x (s, s);
-
-  return s;
+  if (is_number_pair (k))
+    v = ly_scm2interval (k);
+  return v;
 }
 
-void
-appendable_list_append (SCM l, SCM elt)
+Drul_array<bool>
+robust_scm2booldrul (SCM k, Drul_array<bool> def)
 {
-  SCM newcons = scm_cons (elt, SCM_EOL);
-
-  scm_set_cdr_x (scm_car (l), newcons);
-  scm_set_car_x (l, newcons);
+  if (scm_is_pair (k))
+    {
+      def[LEFT] = to_boolean (scm_car (k));
+      def[RIGHT] = to_boolean (scm_cdr (k));
+    }
+  return def;
 }
 
+/*
+  OFFSET
+*/
 SCM
 ly_offset2scm (Offset o)
 {
@@ -303,6 +293,13 @@ ly_scm2offset (SCM s)
                 scm_to_double (scm_cdr (s)));
 }
 
+Offset
+robust_scm2offset (SCM k, Offset o)
+{
+  if (is_number_pair (k))
+    o = ly_scm2offset (k);
+  return o;
+}
 SCM
 ly_offsets2scm (vector<Offset> os)
 {
@@ -325,91 +322,73 @@ ly_scm2offsets (SCM s)
   return os;
 }
 
-SCM
-ly_deep_copy (SCM src)
-{
-  if (scm_is_pair (src))
-    return scm_cons (ly_deep_copy (scm_car (src)), ly_deep_copy (scm_cdr (src)));
-  else if (scm_is_vector (src))
-    {
-      int len = scm_c_vector_length (src);
-      SCM nv = scm_c_make_vector (len, SCM_UNDEFINED);
-      for (int i = 0;i < len; i++)
-       {
-         SCM si = scm_from_int (i);
-         scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
-       }
-    }
-  return src;
-}
-
-/* looks the key up in the cdrs of the alist-keys
-   - ignoring the car and ignoring non-pair keys.
-   Returns first match found, i.e.
 
-   alist = ((1 . 10)
-   ((1 . 2) . 11)
-   ((2 . 1) . 12)
-   ((3 . 0) . 13)
-   ((4 . 1) . 14) )
 
-   I would like (ly_assoc_cdr 1) to return 12 - because it's the first
-   element with the cdr of the key = 1.  In other words (alloc_cdr key)
-   corresponds to call
 
-   (alloc (anything . key))
+/*
+  ALIST
 */
-SCM
-ly_assoc_cdr (SCM key, SCM alist)
+
+bool
+alist_equal_p (SCM a, SCM b)
 {
-  if (scm_is_pair (alist))
+  for (SCM s = a;
+       scm_is_pair (s); s = scm_cdr (s))
     {
-      SCM trykey = scm_caar (alist);
-      if (scm_is_pair (trykey)
-         && to_boolean (scm_equal_p (key, scm_cdr (trykey))))
-       return scm_car (alist);
-      return ly_assoc_cdr (key, scm_cdr (alist));
+      SCM key = scm_caar (s);
+      SCM val = scm_cdar (s);
+      SCM l = scm_assoc (key, b);
+
+      if (l == SCM_BOOL_F
+         || !ly_is_equal (scm_cdr (l), val))
+
+       return false;
     }
-  return SCM_BOOL_F;
+  return true;
 }
 
 SCM
-ly_string_array_to_scm (vector<string> a)
+ly_alist_vals (SCM alist)
 {
-  SCM s = SCM_EOL;
-  for (vsize i = a.size (); i ; i--)
-    s = scm_cons (ly_symbol2scm (a[i - 1].c_str ()), s);
-  return s;
+  SCM x = SCM_EOL;
+  for (SCM p = alist; scm_is_pair (p); p = scm_cdr (p))
+    x = scm_cons (scm_cdar (p), x);
+  return x;
 }
 
-/* SYMBOLS is a whitespace separated list.  */
+/*
+  LISTS
+ */
+
+/* Return I-th element, or last elt L. If I < 0, then we take the first
+   element.
+
+   PRE: length (L) > 0  */
 SCM
-parse_symbol_list (char const *symbols)
+robust_list_ref (int i, SCM l)
 {
-  while (isspace (*symbols))
-    *symbols++;
-  string s = symbols;
-  replace_all (s, '\n', ' ');
-  replace_all (s, '\t', ' ');
-  return ly_string_array_to_scm (string_split (s, ' '));
+  while (i-- > 0 && scm_is_pair (scm_cdr (l)))
+    l = scm_cdr (l);
+  return scm_car (l);
 }
 
+
 SCM
-ly_truncate_list (int k, SCM lst)
+ly_deep_copy (SCM src)
 {
-  if (k == 0)
-    lst = SCM_EOL;
-  else
+  if (scm_is_pair (src))
+    return scm_cons (ly_deep_copy (scm_car (src)), ly_deep_copy (scm_cdr (src)));
+  else if (scm_is_vector (src))
     {
-      SCM s = lst;
-      k--;
-      for (; scm_is_pair (s) && k--; s = scm_cdr (s))
-       ;
-
-      if (scm_is_pair (s))
-       scm_set_cdr_x (s, SCM_EOL);
+      int len = scm_c_vector_length (src);
+      SCM nv = scm_c_make_vector (len, SCM_UNDEFINED);
+      for (int i = 0;i < len; i++)
+       {
+         SCM si = scm_from_int (i);
+         scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
+       }
     }
-  return lst;
+  return src;
 }
 
 string
@@ -456,14 +435,15 @@ type_check_assignment (SCM sym, SCM val, SCM type_symbol)
 
   if (type != SCM_EOL && !ly_is_procedure (type))
     {
-      warning (_f ("can't find property type-check for `%s' (%s).",
+      warning (_f ("cannot find property type-check for `%s' (%s).",
                   ly_symbol2string (sym).c_str (),
                   ly_symbol2string (type_symbol).c_str ())
               + "  " + _ ("perhaps a typing error?"));
 
       /* Be strict when being anal :) */
       if (do_internal_type_checking_global)
-       abort ();
+       scm_throw (ly_symbol2scm ("ly-file-failed"), scm_list_3 (ly_symbol2scm ("typecheck"),
+                                                                sym, val));
 
       warning (_ ("doing assignment anyway"));
     }
@@ -506,51 +486,6 @@ ly_unique (SCM list)
   return scm_reverse_x (unique, SCM_EOL);
 }
 
-static int
-scm_default_compare (void const *a, void const *b)
-{
-  SCM pa = *(SCM *) a;
-  SCM pb = *(SCM *) b;
-  if (pa == pb)
-    return 0;
-  return pa < pb ? -1 : 1;
-}
-
-/*  Modify LST in place: qsort it.
-
-FIXME: unused, junk? */
-SCM
-ly_list_qsort_uniq_x (SCM lst)
-{
-  int len = scm_ilength (lst);
-  SCM *arr = new SCM[len];
-  int k = 0;
-  for (SCM s = lst; SCM_NNULLP (s); s = scm_cdr (s))
-    arr[k++] = scm_car (s);
-
-  assert (k == len);
-  qsort (arr, len, sizeof (SCM), &scm_default_compare);
-
-  SCM *tail = &lst;
-  for (int i = 0; i < len; i++)
-    if (!i || arr[i] != arr[i - 1])
-      {
-       SCM_SETCAR (*tail, arr[i]);
-       tail = SCM_CDRLOC (*tail);
-      }
-
-  *tail = SCM_EOL;
-  delete[] arr;
-
-  return lst;
-}
-
-/* tail add */
-SCM
-ly_snoc (SCM s, SCM list)
-{
-  return ly_append2 (list, scm_list_n (s, SCM_UNDEFINED));
-}
 
 /* Split list at member s, removing s.
    Return (BEFORE . AFTER)  */
@@ -607,18 +542,6 @@ int_list_to_slice (SCM l)
   return s;
 }
 
-/* Return I-th element, or last elt L. If I < 0, then we take the first
-   element.
-
-   PRE: length (L) > 0  */
-SCM
-robust_list_ref (int i, SCM l)
-{
-  while (i-- > 0 && scm_is_pair (scm_cdr (l)))
-    l = scm_cdr (l);
-  return scm_car (l);
-}
-
 Real
 robust_scm2double (SCM k, double x)
 {
@@ -627,51 +550,6 @@ robust_scm2double (SCM k, double x)
   return x;
 }
 
-Direction
-robust_scm2dir (SCM d, Direction def)
-{
-  if (is_direction (d))
-    def = to_dir (d);
-  return def;
-}
-
-Interval
-robust_scm2interval (SCM k, Drul_array<Real> v)
-{
-  Interval i;
-  i[LEFT] = v[LEFT];
-  i[RIGHT] = v[RIGHT];
-  if (is_number_pair (k))
-    i = ly_scm2interval (k);
-  return i;
-}
-
-Drul_array<Real>
-robust_scm2drul (SCM k, Drul_array<Real> v)
-{
-  if (is_number_pair (k))
-    v = ly_scm2interval (k);
-  return v;
-}
-
-Drul_array<bool>
-robust_scm2booldrul (SCM k, Drul_array<bool> def)
-{
-  if (scm_is_pair (k))
-    {
-      def[LEFT] = to_boolean (scm_car (k));
-      def[RIGHT] = to_boolean (scm_cdr (k));
-    }
-  return def;
-}
-
-Offset
-robust_scm2offset (SCM k, Offset o)
-{
-  if (is_number_pair (k))
-    o = ly_scm2offset (k);
-  return o;
-}
 
 string
 robust_scm2string (SCM k, string s)
@@ -689,6 +567,22 @@ robust_scm2int (SCM k, int o)
   return o;
 }
 
+
+SCM
+ly_rational2scm (Rational r)
+{
+  return scm_divide (scm_from_int (r.numerator ()), scm_from_int (r.denominator ()));
+}
+
+
+Rational
+ly_scm2rational (SCM r)
+{
+  return Rational (scm_to_int (scm_numerator (r)),
+                  scm_to_int (scm_denominator (r)));
+}
+
+
 SCM
 alist_to_hashq (SCM alist)
 {
@@ -705,33 +599,6 @@ alist_to_hashq (SCM alist)
   return tab;
 }
 
-bool
-alist_equal_p (SCM a, SCM b)
-{
-  for (SCM s = a;
-       scm_is_pair (s); s = scm_cdr (s))
-    {
-      SCM key = scm_caar (s);
-      SCM val = scm_cdar (s);
-      SCM l = scm_assoc (key, b);
-
-      if (l == SCM_BOOL_F
-         || !ly_is_equal (scm_cdr (l), val))
-
-       return false;
-    }
-  return true;
-}
-
-SCM
-ly_alist_vals (SCM alist)
-{
-  SCM x = SCM_EOL;
-  for (SCM p = alist; scm_is_pair (p); p = scm_cdr (p))
-    x = scm_cons (scm_cdar (p), x);
-  return x;
-}
-
 SCM
 ly_hash2alist (SCM tab)
 {
@@ -739,16 +606,10 @@ ly_hash2alist (SCM tab)
   return scm_call_1 (func, tab);
 }
 
-int
-procedure_arity (SCM proc)
-{
-  assert (ly_is_procedure (proc));
-  SCM arity = scm_procedure_property (proc,
-                                     ly_symbol2scm ("arity"));
 
-  SCM fixed = scm_car (arity);
-  return scm_to_int (fixed);
-}
+/*
+  C++ interfacing.
+ */
 
 string
 mangle_cxx_identifier (string cxx_id)
@@ -769,3 +630,47 @@ mangle_cxx_identifier (string cxx_id)
   return cxx_id;
 }
 
+
+
+SCM
+ly_string_array_to_scm (vector<string> a)
+{
+  SCM s = SCM_EOL;
+  for (vsize i = a.size (); i ; i--)
+    s = scm_cons (ly_symbol2scm (a[i - 1].c_str ()), s);
+  return s;
+}
+
+/* SYMBOLS is a whitespace separated list.  */
+SCM
+parse_symbol_list (char const *symbols)
+{
+  while (isspace (*symbols))
+    *symbols++;
+  string s = symbols;
+  replace_all (s, '\n', ' ');
+  replace_all (s, '\t', ' ');
+  return ly_string_array_to_scm (string_split (s, ' '));
+}
+
+
+bool
+ly_is_fraction (SCM x)
+{
+  return SCM_FRACTIONP(x);
+}
+
+struct ly_t_double_cell
+{
+  SCM a;
+  SCM b;
+  SCM c;
+  SCM d;
+};
+
+/* inserts at front, removing duplicates */
+SCM ly_assoc_prepend_x (SCM alist, SCM key, SCM val)
+{
+  return scm_acons (key, val, scm_assoc_remove_x (alist, key));
+}
+
index 66e47d3d6b5e56b53253b0cd963e3f468f5ab895..4bf001ea0a3941eb1e6002ad54889a55f9e38264 100644 (file)
@@ -3,18 +3,17 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
 #include "lily-lexer.hh"
 
 LY_DEFINE(ly_lexer_keywords, "ly:lexer-keywords",
-         1,0,0, (SCM lexer),
+         1, 0, 0, (SCM lexer),
          "Return a list of (KEY . CODE) pairs, signifying the lilypond reserved words list.")
 {
   Lily_lexer * lex = Lily_lexer::unsmob (lexer);
   SCM_ASSERT_TYPE(lex, lexer, SCM_ARG1, __FUNCTION__, "lily lexer");
   return lex->keyword_list ();
 }
-         
index 8d70783cb5989da22c5eede795ac94bcf6f72cc3..4a877f2d2e3e4bb6183b1773423202c3f81181cc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "lily-lexer.hh"
@@ -193,7 +193,7 @@ Lily_lexer::keyword_list () const
   SCM *tail = &l;
   for (vsize i = 0; i < keytable_->table_.size (); i++)
     {
-      *tail = scm_acons (scm_makfrom0str (keytable_->table_[i].name_),
+      *tail = scm_acons (scm_from_locale_string (keytable_->table_[i].name_),
                         scm_from_int (keytable_->table_[i].tokcode_),
                         SCM_EOL);
 
@@ -231,12 +231,27 @@ Lily_lexer::start_main_input ()
   
   new_input (main_input_name_, sources_);
 
-  /* Do not allow \include in --safe-mode */
-  allow_includes_b_ = allow_includes_b_ && !be_safe_global;
-
   scm_module_define (scm_car (scopes_),
                     ly_symbol2scm ("input-file-name"),
-                    scm_makfrom0str (main_input_name_.c_str ()));
+                    ly_string2scm (main_input_name_));
+}
+
+void
+Lily_lexer::new_input (string str, string d, Sources *ss)
+{
+  Includable_lexer::new_input (str, d, ss);
+}
+
+void
+Lily_lexer::new_input (string str, Sources *ss)
+{
+  if (is_main_input_ && be_safe_global)
+    {
+      LexerError (_ ("include files are not allowed in safe mode").c_str ());
+      return;
+    }
+
+  Includable_lexer::new_input (str, ss);
 }
 
 void
index 83c3826dbdf7bf625f4becc951695b18e19a2d01..c3ac4afa3c9a98e53a1ca1441e7fb6b2777567c5 100644 (file)
@@ -3,17 +3,18 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <unistd.h>
 
+#include "lily-parser.hh"
+
 #include "file-name-map.hh"
 #include "file-name.hh"
 #include "file-path.hh"
 #include "international.hh"
 #include "lily-lexer.hh"
-#include "lily-parser.hh"
 #include "ly-module.hh"
 #include "main.hh"
 #include "program-option.hh"
@@ -85,7 +86,7 @@ LY_DEFINE (ly_parse_file, "ly:parse-file",
       if (dir != "" && dir != "." && dir != get_working_directory ())
        {
          global_path.prepend (get_working_directory ());
-         message (_f ("Changing working directory to `%s'",
+         message (_f ("Changing working directory to: `%s'",
                       dir.c_str ()));
          chdir (dir.c_str ());
        }
@@ -103,7 +104,7 @@ LY_DEFINE (ly_parse_file, "ly:parse-file",
 
   if (init.length () && global_path.find (init).empty ())
     {
-      warning (_f ("can't find init file: `%s'", init));
+      warning (_f ("cannot find init file: `%s'", init));
       warning (_f ("(search path: `%s')",
                   global_path.to_string ().c_str ()));
       exit (2);
@@ -113,7 +114,7 @@ LY_DEFINE (ly_parse_file, "ly:parse-file",
   bool error = false;
   if ((file_name != "-") && file_name.empty ())
     {
-      warning (_f ("can't find file: `%s'", file));
+      warning (_f ("cannot find file: `%s'", file));
       error = true;
     }
   else
@@ -141,31 +142,15 @@ LY_DEFINE (ly_parse_file, "ly:parse-file",
   if (error)
     /* TODO: pass renamed input file too.  */
     scm_throw (ly_symbol2scm ("ly-file-failed"),
-              scm_list_1 (scm_makfrom0str (file_name.c_str ())));
+              scm_list_1 (ly_string2scm (file_name)));
   
   return SCM_UNSPECIFIED;
 }
 
-LY_DEFINE (ly_parse_string, "ly:parse-string",
-          1, 0, 0, (SCM ly_code),
-          "Parse the string LY_CODE.  "
-          "Upon failure, throw @code{ly-file-failed} key.")
-{
-  SCM_ASSERT_TYPE (scm_is_string (ly_code), ly_code, SCM_ARG1, __FUNCTION__, "string");
-
-  Sources sources;
-  sources.set_path (&global_path);
-  Lily_parser *parser = new Lily_parser (&sources);
-  parser->parse_string (ly_scm2string (ly_code));
-  parser->unprotect ();
-  parser = 0;
-
-  return SCM_UNSPECIFIED;
-}
 
 LY_DEFINE (ly_parser_lexer, "ly:parser-lexer",
           1, 0, 0, (SCM parser_smob),
-          "Return the lexer for PARSER_SMOB.")
+          "Return the lexer for @var{parser-smob}.")
 {
   Lily_parser *parser = unsmob_lily_parser (parser_smob);
   return parser->lexer_->self_scm ();
@@ -173,7 +158,7 @@ LY_DEFINE (ly_parser_lexer, "ly:parser-lexer",
 
 LY_DEFINE (ly_parser_clone, "ly:parser-clone",
           1, 0, 0, (SCM parser_smob),
-          "Return a clone of PARSER_SMOB.")
+          "Return a clone of @var{parser-smob}.")
 {
   Lily_parser *parser = unsmob_lily_parser (parser_smob);
   Lily_parser *clone = new Lily_parser (*parser);
@@ -183,7 +168,7 @@ LY_DEFINE (ly_parser_clone, "ly:parser-clone",
 
 LY_DEFINE (ly_parser_define, "ly:parser-define!",
           3, 0, 0, (SCM parser_smob, SCM symbol, SCM val),
-          "Bind SYMBOL to VAL in PARSER_SMOB's module.")
+          "Bind @var{symbol} to @var{val} in @var{parser-smob}'s module.")
 {
   Lily_parser *parser = unsmob_lily_parser (parser_smob);
   SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
@@ -195,7 +180,7 @@ LY_DEFINE (ly_parser_define, "ly:parser-define!",
 
 LY_DEFINE (ly_parser_lookup, "ly:parser-lookup",
           2, 0, 0, (SCM parser_smob, SCM symbol),
-          "Lookup @var{symbol} in @var{parser_smob}'s module.  "
+          "Lookup @var{symbol} in @var{parser-smob}'s module.  "
           "Undefined is '().")
 {
   Lily_parser *parser = unsmob_lily_parser (parser_smob);
@@ -212,7 +197,7 @@ LY_DEFINE (ly_parser_lookup, "ly:parser-lookup",
 
 LY_DEFINE (ly_parser_parse_string, "ly:parser-parse-string",
           2, 0, 0, (SCM parser_smob, SCM ly_code),
-          "Parse the string LY_CODE with PARSER_SMOB."
+          "Parse the string @code{ly-code} with @code{parser-smob}."
           "Upon failure, throw @code{ly-file-failed} key.")
 {
   Lily_parser *parser = unsmob_lily_parser (parser_smob);
@@ -250,7 +235,7 @@ LY_DEFINE (ly_parser_output_name, "ly:parser-output-name",
   Lily_parser *p = unsmob_lily_parser (parser);
   SCM_ASSERT_TYPE (p, parser, SCM_ARG1, __FUNCTION__, "Lilypond parser");
 
-  return scm_makfrom0str (p->output_basename_.c_str ());
+  return ly_string2scm (p->output_basename_);
 }
 
 LY_DEFINE (ly_parser_error, "ly:parser-error",
@@ -270,3 +255,26 @@ LY_DEFINE (ly_parser_error, "ly:parser-error",
 
   return parser;
 }
+
+LY_DEFINE (ly_parser_clear_error, "ly:parser-clear-error",
+          1, 0, 0, (SCM parser),
+          "Clear the error flag for the parser.")
+{
+  Lily_parser *p = unsmob_lily_parser (parser);
+  SCM_ASSERT_TYPE (p, parser, SCM_ARG1, __FUNCTION__, "Lilypond parser");
+
+  p->error_level_ = 0;
+  p->lexer_->error_level_ = 0;
+  
+  return SCM_UNSPECIFIED;
+}
+
+LY_DEFINE (ly_parser_has_error_p, "ly:parser-has-error?",
+          1, 0, 0, (SCM parser),
+          "Does @var{parser} have an error flag?")
+{
+  Lily_parser *p = unsmob_lily_parser (parser);
+  SCM_ASSERT_TYPE (p, parser, SCM_ARG1, __FUNCTION__, "Lilypond parser");
+
+  return scm_from_bool (p->error_level_ || p->lexer_->error_level_);
+}
index e71176c873e51b570d7136cb23e4f18dd1d366a9..356615adc3cbf3d2ea93a42ed9d40964eabf3987 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -15,7 +15,6 @@
 #include "international.hh"
 #include "lily-lexer.hh"
 #include "lily-version.hh"
-#include "lilypond-key.hh"
 #include "main.hh"
 #include "output-def.hh"
 #include "paper-book.hh"
@@ -105,7 +104,7 @@ Lily_parser::parse_file (string init, string name, string out_name)
   File_name f (name);
   string s = global_path.find (f.base_ + ".twy");
   s = gulp_file_to_string (s, false, -1);
-  scm_eval_string (scm_makfrom0str (s.c_str ()));
+  scm_eval_string (ly_string2scm (s));
 
   /* Read .ly IN_FILE, lex, parse, write \score blocks from IN_FILE to
      OUT_FILE (unless IN_FILE redefines output file name).  */
@@ -124,7 +123,7 @@ Lily_parser::parse_file (string init, string name, string out_name)
 
   if (!define_spots_.empty ())
     {
-      define_spots_.back ().warning (_ ("braces don't match"));
+      define_spots_.back ().warning (_ ("braces do not match"));
       error_level_ = 1;
     }
 
@@ -140,8 +139,7 @@ Lily_parser::parse_string (string ly_code)
                          self_scm ());
 
   lexer_->main_input_name_ = "<string>";
-  lexer_->is_main_input_ = true;
-
+  lexer_->is_main_input_ = true; 
   lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
 
   SCM mod = lexer_->set_current_scope ();
@@ -208,7 +206,6 @@ get_layout (Lily_parser *parser)
   Output_def *layout = unsmob_output_def (id);
   layout = layout ? layout->clone () : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T);
-  layout->parser_ = parser;
     
   return layout;
 }
@@ -220,7 +217,6 @@ get_midi (Lily_parser *parser)
   Output_def *layout = unsmob_output_def (id);
   layout = layout ? layout->clone () : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
-  layout->parser_ = parser;
   return layout;
 }
 
@@ -232,7 +228,6 @@ get_paper (Lily_parser *parser)
 
   layout = layout ? dynamic_cast<Output_def *> (layout->clone ()) : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
-  layout->parser_ = parser;
   return layout;
 }
 
@@ -241,13 +236,19 @@ get_header (Lily_parser *parser)
 {
   SCM id = parser->lexer_->lookup_identifier ("$defaultheader");
   if (!ly_is_module (id))
-    id = ly_make_anonymous_module (be_safe_global);
+    id = parser->make_scope ();
   else
     {
-      SCM nid = ly_make_anonymous_module (false);
-      ly_module_copy(nid,id);
+      SCM nid = parser->make_scope ();
+      ly_module_copy (nid, id);
       id = nid;
     }
   
   return id;
 }
+
+SCM 
+Lily_parser::make_scope () const
+{
+  return ly_make_anonymous_module (be_safe_global);
+}
index c15c76e6287845d411fb243e653931308d8df7b1..1df780b8e1ec05edf7a5a3a951b0d374f397d5e8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "lily-version.hh"
index 99b190bcc4801346fe4624f6288b49eb57e3a7fd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,226 +0,0 @@
-/*
-  lilypond-key.cc -- implement Lilypond_{grob, context}_key
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "lilypond-key.hh"
-
-Lilypond_grob_key::Lilypond_grob_key (Object_key const *context,
-                                     Moment start,
-                                     string name,
-                                     int disambiguation_count)
-{
-  context_ = context;
-  creation_moment_ = start;
-  grob_name_ = name;
-  disambiguation_count_ = disambiguation_count;
-}
-
-void
-Lilypond_grob_key::derived_mark () const
-{
-  if (context_)
-    scm_gc_mark (context_->self_scm ());
-}
-
-// todo: reverse order of comparison for efficiency reasons.
-int
-Lilypond_grob_key::do_compare (Object_key const *key) const
-{
-  Lilypond_grob_key const *other = dynamic_cast<Lilypond_grob_key const *> (key);
-  int c;
-
-  c = context_->compare (other->context_);
-  if (c)
-    return c;
-
-  c = Moment::compare (creation_moment_, other->creation_moment_);
-  if (c)
-    return c;
-
-  c = grob_name_.compare (other->grob_name_);
-  if (c)
-    return c;
-
-  c = sign (disambiguation_count_ - other->disambiguation_count_);
-  if (c)
-    return c;
-
-  return 0;
-}
-
-int
-Lilypond_grob_key::get_type () const
-{
-  return GROB_KEY;
-}
-
-SCM
-Lilypond_grob_key::as_scheme () const
-{
-  return scm_list_4 (context_ ? context_->self_scm () : SCM_BOOL_F,
-                    creation_moment_.smobbed_copy (),
-                    scm_makfrom0str (grob_name_.c_str ()),
-                    scm_from_int (disambiguation_count_));
-}
-
-Object_key *
-Lilypond_grob_key::from_scheme (SCM a)
-{
-  return new Lilypond_grob_key (unsmob_key (scm_car (a)),
-                               *unsmob_moment (scm_cadr (a)),
-                               ly_scm2string (scm_caddr (a)),
-                               scm_to_int (scm_list_ref (a, scm_from_int (3))));
-}
-
-/****************************************************************/
-
-void
-Lilypond_context_key::derived_mark () const
-{
-  if (parent_context_)
-    scm_gc_mark (parent_context_->self_scm ());
-}
-
-Lilypond_context_key::Lilypond_context_key (Object_key const *parent,
-                                           Moment start,
-                                           string type,
-                                           string id,
-                                           int count)
-{
-  disambiguation_count_ = count;
-  parent_context_ = parent;
-  start_moment_ = start;
-  context_name_ = type;
-  id_ = id;
-}
-
-int
-Lilypond_context_key::do_compare (Object_key const *key) const
-{
-  Lilypond_context_key const *other
-    = dynamic_cast<Lilypond_context_key const *> (key);
-
-  int c;
-  if (parent_context_ && other->parent_context_)
-    {
-      c = parent_context_->compare (other->parent_context_);
-      if (c)
-       return c;
-    }
-  else if (parent_context_)
-    return -1;
-  else if (other->parent_context_)
-    return 1;
-
-  c = Moment::compare (start_moment_, other->start_moment_);
-  if (c)
-    return c;
-
-  c = context_name_.compare (other->context_name_);
-  if (c)
-    return c;
-
-  c = id_.compare (other->id_);
-  if (c)
-    return c;
-
-  c = sign (disambiguation_count_ - other->disambiguation_count_);
-  if (c)
-    return c;
-
-  return 0;
-}
-
-int
-Lilypond_context_key::get_type () const
-{
-  return CONTEXT_KEY;
-}
-
-SCM
-Lilypond_context_key::as_scheme () const
-{
-  return scm_list_5 (parent_context_ ? parent_context_->self_scm () : SCM_BOOL_F,
-                    start_moment_.smobbed_copy (),
-                    scm_makfrom0str (context_name_.c_str ()),
-                    scm_makfrom0str (id_.c_str ()),
-                    scm_from_int (disambiguation_count_));
-}
-
-Object_key *
-Lilypond_context_key::from_scheme (SCM a)
-{
-  return new Lilypond_context_key (unsmob_key (scm_car (a)),
-                                  *unsmob_moment (scm_cadr (a)),
-                                  ly_scm2string (scm_list_ref (a, scm_from_int (2))),
-                                  ly_scm2string (scm_list_ref (a, scm_from_int (3))),
-                                  scm_to_int (scm_list_ref (a, scm_from_int (4))));
-}
-
-/****************************************************************/
-
-int
-Lilypond_general_key::get_type () const
-{
-  return GENERAL_KEY;
-}
-
-void
-Lilypond_general_key::derived_mark () const
-{
-  if (parent_)
-    scm_gc_mark (parent_->self_scm ());
-}
-
-Lilypond_general_key::Lilypond_general_key (Object_key const *parent,
-                                           string name,
-                                           int count)
-{
-  parent_ = parent;
-  name_ = name;
-  disambiguation_count_ = count;
-}
-
-int
-Lilypond_general_key::do_compare (Object_key const *key)const
-{
-  Lilypond_general_key const *other
-    = dynamic_cast<Lilypond_general_key const *> (key);
-
-  if (parent_ && other->parent_)
-    parent_->compare (other->parent_);
-  else if (parent_)
-    return -1;
-  else if (other->parent_)
-    return 1;
-
-  int c = name_.compare (other->name_);
-  if (c)
-    return c;
-
-  c = sign (disambiguation_count_ - other->disambiguation_count_);
-  if (c)
-    return c;
-
-  return 0;
-}
-
-SCM
-Lilypond_general_key::as_scheme () const
-{
-  return scm_list_3 (parent_ ? parent_->self_scm () : SCM_BOOL_F,
-                    scm_makfrom0str (name_.c_str ()),
-                    scm_from_int (disambiguation_count_));
-}
-
-Object_key *
-Lilypond_general_key::from_scheme (SCM a)
-{
-  return new Lilypond_general_key (unsmob_key (scm_car (a)),
-                                  ly_scm2string (scm_list_ref (a, scm_from_int (1))),
-                                  scm_to_int (scm_list_ref (a, scm_from_int (2))));
-}
index 21ca2e5212cadbed5bab65db906ab2b9f284cd61..9c0e938547d6d4c0381a50272e29bb60ca1acdbf 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include <ctype.h>
index f65dc946f2c70b62d7196f66159d99c2c1307dde..894d1089cfa6a545cad8835a7ca96c88b0a49b16 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "line-interface.hh"
@@ -154,23 +154,5 @@ ADD_INTERFACE (Line_interface,
               "thickness "
               "style "
               "arrow-length "
-              "arrow-width")
+              "arrow-width ")
 
-
-
-/* todo: move this somewhere else? */
-Stencil
-points_to_line_stencil (vector<Offset> points)
-{
-  Stencil ret;
-  for (vsize i = 1; i < points.size (); i++)
-    {
-      if (points[i-1].is_sane ()  && points[i].is_sane ())
-       {
-         Stencil line
-           = Line_interface::make_line (0.1, points[i-1], points[i]);
-         ret.add_stencil (line);
-       }
-    }
-  return ret;
-}
index 2f99a0dce2fcfad53815a1eacbc4a113c0c91d57..f6809cda266d7f69ffb33487cbe018f2d90129b3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "line-spanner.hh"
@@ -136,7 +136,7 @@ Line_spanner::line_stencil (Grob *me,
       Stencil mol;
 
       do
-       mol.add_at_edge (X_AXIS, RIGHT, m, 0, 0);
+       mol.add_at_edge (X_AXIS, RIGHT, m, 0);
       while (m.extent (X_AXIS).length ()
             && mol.extent (X_AXIS).length ()
             + m.extent (X_AXIS).length () < dz[X_AXIS])
index d8c20c044fcd871b36f831b83adf022ed28c0c54..c92ca3bd211a99c79c4d11e91b2a631a5a476f20 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
@@ -147,7 +147,7 @@ Lookup::horizontal_line (Interval w, Real th)
 Stencil
 Lookup::blank (Box b)
 {
-  return Stencil (b, scm_makfrom0str (""));
+  return Stencil (b, scm_from_locale_string (""));
 }
 
 Stencil
@@ -714,17 +714,29 @@ Lookup::triangle (Interval iv, Real thick, Real protude)
   b[X_AXIS] = Interval (0, iv.length ());
   b[Y_AXIS] = Interval (min (0., protude), max (0.0, protude));
 
-  Offset z1 (iv[LEFT], 0);
-  Offset z2 (iv[RIGHT], 0);
-  Offset z3 ((z1 + z2)[X_AXIS] / 2, protude);
+  vector<Offset> points;
+  points.push_back (Offset (iv[LEFT], 0));
+  points.push_back (Offset (iv[RIGHT], 0));
+  points.push_back (Offset (iv.center (), protude));
 
-  /*
-    TODO: move Triangle to Line_interface ?
-  */
-  Stencil tri = Line_interface::make_line (thick, z1, z2);
-  tri.add_stencil (Line_interface::make_line (thick, z2, z3));
-  tri.add_stencil (Line_interface::make_line (thick, z3, z1));
+  return points_to_line_stencil (thick, points);
 
-  return tri;
 }
 
+
+
+Stencil
+Lookup::points_to_line_stencil (Real thick, vector<Offset> const &points)
+{
+  Stencil ret;
+  for (vsize i = 1; i < points.size (); i++)
+    {
+      if (points[i-1].is_sane ()  && points[i].is_sane ())
+       {
+         Stencil line
+           = Line_interface::make_line (thick, points[i-1], points[i]);
+         ret.add_stencil (line);
+       }
+    }
+  return ret;
+}
index 740f9e4e521ceda5fb92eb6d417a2b9648dbe75c..c2e96a4a1cf800c62197c085424f6a8460f457ed 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "lily-guile.hh"
index 6011ede3f24c29f3363d847bd683b2aa3295be6e..e6fcf4ea0a4a42d9cbb640b36e145cb9f360842d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "dispatcher.hh"
 #include "music-iterator.hh"
 #include "music.hh"
 
+/*
+  This iterator is hairy.  It tracks both lyric and melody contexts,
+  and has a complicated communication route, reading/writing
+  properties in both.
+
+  In the future, this should rather be done with
+
+     \interpretAsMelodyFor { MUSIC } { LYRICS LYRICS LYRICS }
+
+  This can run an interpret step on MUSIC, generating a stream.  Then
+  the stream can be perused at leisure to apply durations to all of
+  the LYRICS.
+*/
+
 class Lyric_combine_music_iterator : public Music_iterator
 {
 public:
@@ -32,7 +46,7 @@ protected:
   virtual void derived_substitute (Context *, Context *);
   void set_music_context (Context *to);
 private:
-  bool start_new_syllable ();
+  bool start_new_syllable () const;
   Context *find_voice ();
   DECLARE_LISTENER (set_busy);
   DECLARE_LISTENER (check_new_context);
@@ -43,7 +57,8 @@ private:
   Context *music_context_;
   SCM lyricsto_voice_name_;
 
-  bool busy_;
+  Moment busy_moment_;
+  
   Music_iterator *lyric_iter_;
 };
 
@@ -54,17 +69,26 @@ Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
   lyric_iter_ = 0;
   music_context_ = 0;
   lyrics_context_ = 0;
-  busy_ = false;
+  busy_moment_.set_infinite (-1);
 }
 
+
+/*
+  It's dubious whether we can ever make this fully work.  Due to
+  associatedVoice switching, this routine may be triggered for 
+  the wrong music_context_ 
+ */
 IMPLEMENT_LISTENER (Lyric_combine_music_iterator, set_busy)
 void
 Lyric_combine_music_iterator::set_busy (SCM se)
 {
   Stream_event *e = unsmob_stream_event (se);
 
-  if (e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
-    busy_ = true;
+  if ((e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
+      && music_context_)
+    busy_moment_ = max (music_context_->now_mom (),
+                       busy_moment_);
+  
 }
 
 void
@@ -73,24 +97,21 @@ Lyric_combine_music_iterator::set_music_context (Context *to)
   if (music_context_)
     {
       music_context_->event_source()->remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
-      lyrics_context_->unset_property (ly_symbol2scm ("associatedVoiceContext"));
     }
+
   music_context_ = to;
   if (to)
     {
       to->event_source()->add_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
-      lyrics_context_->set_property ("associatedVoiceContext", to->self_scm ());
     }
 }
 
 bool
-Lyric_combine_music_iterator::start_new_syllable ()
+Lyric_combine_music_iterator::start_new_syllable () const
 {
-  if (!busy_)
+  if (busy_moment_ < music_context_->now_mom ())
     return false;
 
-  busy_ = false;
-
   if (!lyrics_context_)
     return false;
 
@@ -158,20 +179,23 @@ Lyric_combine_music_iterator::construct_children ()
   lyrics_context_ = find_context_below (lyric_iter_->get_outlet (),
                                        ly_symbol2scm ("Lyrics"), "");
 
+  if (!lyrics_context_)
+    {
+      m->origin ()->warning ("argument of \\lyricsto should contain Lyrics context");
+    }
+  
   lyricsto_voice_name_ = get_music ()->get_property ("associated-context");
 
   Context *voice = find_voice ();
   if (voice)
     set_music_context (voice);
-  else
-    {
-      /*
-        Wait for a Create_context event. If this isn't done, lyrics can be 
-        delayed when voices are created implicitly.
-      */
-      Global_context *g = lyrics_context_->get_global_context ();
-      g->events_below ()->add_listener (GET_LISTENER (check_new_context), ly_symbol2scm ("CreateContext"));
-    }
+
+  /*
+    Wait for a Create_context event. If this isn't done, lyrics can be 
+    delayed when voices are created implicitly.
+  */
+  Global_context *g = get_outlet ()->get_global_context ();
+  g->events_below ()->add_listener (GET_LISTENER (check_new_context), ly_symbol2scm ("CreateContext"));
 
   /*
     We do not create a Lyrics context, because the user might
@@ -185,15 +209,15 @@ void
 Lyric_combine_music_iterator::check_new_context (SCM sev)
 {
   // TODO: Check first if type=Voice and if id matches
-  (void)sev;
-
+  Stream_event * ev = unsmob_stream_event (sev);
+  if (ev->get_property ("type") != ly_symbol2scm ("Voice"))
+    return ;
+  
   Context *voice = find_voice ();
+
   if (voice)
     {
       set_music_context (voice);
-
-      Global_context *g = voice->get_global_context ();
-      g->events_below ()->remove_listener (GET_LISTENER (check_new_context), ly_symbol2scm ("CreateContext"));
     }
 }
 
@@ -252,6 +276,7 @@ Lyric_combine_music_iterator::process (Moment)
       set_music_context (0);
     }
 
+
   if (music_context_
       && (start_new_syllable () || pending_grace_lyric_)
       && lyric_iter_->ok ())
@@ -265,10 +290,16 @@ Lyric_combine_music_iterator::process (Moment)
        pending_grace_lyric_ = false;
       
       Moment m = lyric_iter_->pending_moment ();
+      lyrics_context_->set_property (ly_symbol2scm ("associatedVoiceContext"),
+                                    music_context_->self_scm ());
       lyric_iter_->process (m);
 
       music_found_ = true;
     }
+
+  new_voice = find_voice ();
+  if (new_voice)
+    set_music_context (new_voice);
 }
 
 void
index d3f2eafe853c04265f6f11ae99f3516568446f70..7895e154a75eb536080c9034e0c1d1e469b54fc1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
index 75556716ec83cd3057ec78af55d873c656fff4f0..ae0464f97dd29fea92496270596ac2914c2473ee 100644 (file)
@@ -3,18 +3,16 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "context.hh"
 #include "engraver.hh"
-#include "font-metric.hh"
 #include "item.hh"
-#include "multi-measure-rest.hh"
 #include "note-head.hh"
-#include "rest.hh"
 #include "stream-event.hh"
+#include "international.hh"
 
 #include "translator.icc"
 
@@ -61,7 +59,7 @@ Lyric_engraver::process_music ()
     {
       SCM text = event_->get_property ("text");
 
-      if (ly_is_equal (text, scm_makfrom0str (" ")))
+      if (ly_is_equal (text, scm_from_locale_string (" ")))
        {
          if (last_text_)
            last_text_->set_property ("self-alignment-X", scm_from_int (LEFT));
@@ -117,12 +115,20 @@ get_voice_to_lyrics (Context *lyrics)
 Grob *
 get_current_note_head (Context *voice)
 {
+  Moment now = voice->now_mom ();
   for (SCM s = voice->get_property ("busyGrobs");
        scm_is_pair (s); s = scm_cdr (s))
     {
-      Item *g = dynamic_cast<Item *> (unsmob_grob (scm_cdar (s)));
-
-      if (g && !g->get_column ()
+      Grob *g = unsmob_grob (scm_cdar (s));;
+      Moment *end_mom = unsmob_moment (scm_caar (s));
+      if (!end_mom || !g)
+       {
+         programming_error ("busyGrobs invalid");
+         continue;
+       }
+      
+      if (end_mom->main_part_ > now.main_part_
+         && dynamic_cast<Item *> (g)
          && Note_head::has_interface (g))
        return g;
     }
@@ -147,6 +153,11 @@ Lyric_engraver::stop_translation_timestep ()
              if (melisma_busy (voice))
                text_->set_property ("self-alignment-X", scm_from_int (LEFT));
            }
+         else
+           {
+             text_->warning (_ ("Lyric syllable does not have note. Use \\lyricsto or associatedVoice."));
+             text_->set_property ("X-offset", scm_from_int (0));
+           }
        }
 
       last_text_ = text_;
index d30a53d6681b05ddb67bcf772f1ef3d6135c61b0..ce9e0fbc2e0070ee9030466ad8174bdcf9ff4619 100644 (file)
@@ -2,7 +2,7 @@
   lyric-extender.cc -- implement Lyric_extender
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys
 */
 
index d38460be74541729fbd271f2f37525684ad65d9a..d50a99727634b1dab18b2d43bf2dd8a15d7dbd2c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "lyric-hyphen.hh"
index e21b7fab350bf52886e10e40e76150c87ba8ccd0..0d14a737d2b6bfa80cd3247a19f9f93338479187 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "audio-item.hh"
index 68fc2a03cb4a4381f4f14f019d88d4e6241194b6..7a524d77dc8b45295c838e9079195252a7dc123d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "main.hh"
@@ -77,8 +77,8 @@ bool be_verbose_global = false;
 
 /* Scheme code to execute before parsing, after .scm init.
    This is where -e arguments are appended to.  */
-string init_scheme_code_string;
-string init_scheme_variables;
+string init_scheme_code_global;
+string init_scheme_variables_global;
 
 /* Generate preview of first system.  */
 bool make_preview = false;
@@ -150,24 +150,24 @@ static Getopt_long *option_parser = 0;
 
 static Long_option_init options_static[]
 = {
-  {_i ("BACK"), "backend", 'b', _i ("use backend BACK (gnome, ps,eps,\nscm, svg, tex, texstr)\ndefault: PS")},
+  {_i ("BACK"), "backend", 'b', _i ("use backend BACK (eps, gnome, ps [default],\nscm, svg, tex, texstr)")},
 
-  {_i ("SYM=VAL"), "define-default", 'd',
-   _i ("set a Scheme program option. Uses #t if VAL is not specified\n"
-       "Try -dhelp for help.")},
+  {_i ("SYM[=VAL]"), "define-default", 'd',
+   _i ("set Scheme option SYM to VAL (default: #t).\n"
+       "Use -dhelp for help.")},
 
   {_i ("EXPR"), "evaluate", 'e', _i ("evaluate scheme code")},
   /* Bug in option parser: --output =foe is taken as an abbreviation
      for --output-format.  */
   {_i ("FORMATs"), "formats", 'f', _i ("dump FORMAT,...  Also as separate options:")},
   {0, "dvi", 0, _i ("generate DVI (tex backend only)")},
-  {0, "relocate", 0, _i ("relocate using directory of lilypond program")},
   {0, "pdf", 0, _i ("generate PDF (default)")},
   {0, "png", 0, _i ("generate PNG")},
   {0, "ps", 0, _i ("generate PostScript")},
   {0, "tex", 0, _i ("generate TeX (tex backend only)")},
-  {0, "help", 'h',  _i ("print this help")},
-  {_i ("FIELD"), "header", 'H',  _i ("dump a header field to file BASENAME.FIELD")},
+  {0, "help", 'h',  _i ("show this help and exit")},
+  {_i ("FIELD"), "header", 'H',  _i ("dump header field FIELD to file\n"
+                                    "named BASENAME.FIELD")},
   {_i ("DIR"), "include", 'I',  _i ("add DIR to search path")},
   {_i ("FILE"), "init", 'i',  _i ("use FILE as init file")},
 #if HAVE_CHROOT
@@ -177,8 +177,8 @@ static Long_option_init options_static[]
   {0, "no-print", 0, _i ("do not generate printed output")},
   {_i ("FILE"), "output", 'o',  _i ("write output to FILE (suffix will be added)")},
   {0, "preview", 'p',  _i ("generate a preview of the first system")},
-  {0, "safe-mode", 's',  _i ("disallow unsafe Scheme and PostScript operations")},
-  {0, "version", 'v',  _i ("print version number")},
+  {0, "relocate", 0, _i ("relocate using directory of lilypond program")},
+  {0, "version", 'v',  _i ("show version number and exit")},
   {0, "verbose", 'V', _i ("be verbose")},
   {0, "warranty", 'w',  _i ("show warranty and copyright")},
   {0, 0, 0, 0}
@@ -220,7 +220,7 @@ static void
 copyright ()
 {
   printf (_f ("Copyright (c) %s by\n%s  and others.",
-             "1996--2006",
+             "1996--2007",
              AUTHORS).c_str ());
   printf ("\n");
 }
@@ -320,7 +320,7 @@ do_chroot_jail ()
       if (errno == 0)
        error (_f ("no such user: %s", components[USER_NAME]));
       else
-       error (_f ("can't get user id from user name: %s: %s",
+       error (_f ("cannot get user id from user name: %s: %s",
                   components[USER_NAME],
                   strerror (errno)));
       exit (3);
@@ -337,7 +337,7 @@ do_chroot_jail ()
       if (errno == 0)
        error (_f ("no such group: %s", components[GROUP_NAME]));
       else
-       error (_f ("can't get group id from group name: %s: %s",
+       error (_f ("cannot get group id from group name: %s: %s",
                   components[GROUP_NAME],
                   strerror (errno)));
       exit (3);
@@ -345,26 +345,26 @@ do_chroot_jail ()
 
   if (chroot (components[JAIL].c_str ()))
     {
-      error (_f ("can't chroot to: %s: %s", components[JAIL],
+      error (_f ("cannot chroot to: %s: %s", components[JAIL],
                 strerror (errno)));
       exit (3);
     }
 
   if (setgid (gid))
     {
-      error (_f ("can't change group id to: %d: %s", gid, strerror (errno)));
+      error (_f ("cannot change group id to: %d: %s", gid, strerror (errno)));
       exit (3);
     }
 
   if (setuid (uid))
     {
-      error (_f ("can't change user id to: %d: %s", uid, strerror (errno)));
+      error (_f ("cannot change user id to: %d: %s", uid, strerror (errno)));
       exit (3);
     }
 
   if (chdir (components[DIR].c_str ()))
     {
-      error (_f ("can't change working directory to: %s: %s", components[DIR],
+      error (_f ("cannot change working directory to: %s: %s", components[DIR],
                 strerror (errno)));
       exit (3);
     }
@@ -386,33 +386,16 @@ main_with_guile (void *, int, char **)
                          || output_backend_global == "texstr");
 
   is_pango_format_global = !is_TeX_format_global;
+  init_scheme_variables_global = "(list " + init_scheme_variables_global + ")";
+  init_scheme_code_global = "(begin " + init_scheme_code_global + ")";
 
   ly_c_init_guile ();
   call_constructors ();
-  init_global_tweak_registry ();
   init_fontconfig ();
 
   init_freetype ();
   ly_reset_all_fonts ();
 
-  if (!init_scheme_variables.empty ()
-      || !init_scheme_code_string.empty ())
-    {
-      init_scheme_variables = "(map (lambda (x) (ly:set-option (car x) (cdr x))) (list "
-       + init_scheme_variables + "))";
-
-      init_scheme_code_string
-       = "(begin #t "
-       + init_scheme_variables
-       + init_scheme_code_string
-       + ")";
-
-      char const *str0 = init_scheme_code_string.c_str ();
-
-      if (be_verbose_global)
-       progress_indication (_f ("Evaluating %s", str0));
-      scm_c_eval_string ((char *) str0);
-    }
 
   /* We accept multiple independent music files on the command line to
      reduce compile time when processing lots of small files.
@@ -422,7 +405,7 @@ main_with_guile (void *, int, char **)
   SCM *tail = &files;
   while (char const *arg = option_parser->get_next_arg ())
     {
-      *tail = scm_cons (scm_makfrom0str (arg), SCM_EOL);
+      *tail = scm_cons (scm_from_locale_string (arg), SCM_EOL);
       tail = SCM_CDRLOC (*tail);
     }
   
@@ -504,10 +487,10 @@ parse_argv (int argc, char **argv)
            if (eq != NPOS)
              {
                key = arg.substr (0, eq);
-               val = arg.substr (eq + 1, key.length () - 1);
+               val = arg.substr (eq + 1, arg.length () - 1);
              }
 
-           init_scheme_variables
+           init_scheme_variables_global
              += "(cons \'" + key + "  " + val + ")\n";
          }
          break;
@@ -526,8 +509,9 @@ parse_argv (int argc, char **argv)
        case 'j':
          jail_spec = option_parser->optional_argument_str0_;
          break;
+         
        case 'e':
-         init_scheme_code_string += option_parser->optional_argument_str0_;
+         init_scheme_code_global += option_parser->optional_argument_str0_ + string (" ");
          break;
        case 'w':
          warranty ();
@@ -562,12 +546,6 @@ parse_argv (int argc, char **argv)
          break;
        case 'V':
          be_verbose_global = true;
-         break;
-       case 's':
-         be_safe_global = true;
-         init_scheme_variables
-           += "(cons \'safe #t)\n";
-
          break;
        case 'p':
          make_preview = true;
index 3682618ec9748c5fba515ccaa3142ca9de4d9d56..984eb687a096a58bd3902234c952d587704ada98 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include <cctype>
index fe7abf1ea4a137d1bfbd01f04483815fc287957b..311448302ca8c2b5e549caca88c5dbf6cfbcf789 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "warn.hh"
index a256d0468dd820a40e0e4653be0da33a27654d81..f2cd9894749d8c5e2ef831c6f043c2588c32773e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "measure-grouping-spanner.hh"
diff --git a/lily/melisma-translator.cc b/lily/melisma-translator.cc
deleted file mode 100644 (file)
index eda732b..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-  melisma-engraver.cc -- implement Melisma_engraver
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "engraver.hh"
-#include "grob.hh"
-#include "context.hh"
-#include "music.hh"
-#include "translator.icc"
-
-/* Remove this translator. */
-
-/**
-   Signal existence of melismas.
-*/
-class Melisma_translator : public Translator
-{
-public:
-  TRANSLATOR_DECLARATIONS (Melisma_translator);
-protected:
-  virtual bool try_music (Music *);
-  void process_music ();
-  void start_translation_timestep ();
-  Music *event_;
-};
-
-bool
-Melisma_translator::try_music (Music *m)
-{
-  if (m->is_mus_type ("melisma-playing-event"))
-    return melisma_busy (context ());
-  else if (m->is_mus_type ("melisma-span-event"))
-    {
-      event_ = m;
-      return true;
-    }
-
-  return false;
-}
-
-void
-Melisma_translator::process_music ()
-{
-  if (event_)
-    {
-      SCM sd = event_->get_property ("span-direction");
-      Direction d = to_dir (sd);
-      if (d == START)
-       context ()->set_property ("melismaBusy", SCM_BOOL_T);
-      else
-       context ()->unset_property (ly_symbol2scm ("melismaBusy"));
-    }
-}
-
-void
-Melisma_translator::start_translation_timestep ()
-{
-  event_ = 0;
-}
-
-Melisma_translator::Melisma_translator ()
-{
-  event_ = 0;
-}
-
-ADD_TRANSLATOR (Melisma_translator,
-               /* doc */ "This translator collects melisma information about ties, beams, and user settings (@code{melismaBusy}, and signals it to the @code{\addlyrics} code.  ",
-               /* create */ "",
-               /* read */
-               "beamMelismaBusy "
-               "melismaBusy "
-               "melismaBusyProperties "
-               "slurMelismaBusy "
-               "tieMelismaBusy "
-               ,
-
-               /* write */ "");
index f968eae3211313fe552ce144c7e6201b19965da3..9c0cb1d5fa86cb14c5a5f0269e26ed443a687d61 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
index d4901f2c9b1a12a9958132fdc7b133e0af3ef928..e11163bf4d23c2e7093432a75a4426467c99296f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -27,7 +27,7 @@ Melody_spanner::calc_neutral_stem_direction (SCM smob)
   Grob *stem = unsmob_grob (smob);
   Grob *me =  unsmob_grob (stem->get_object ("melody-spanner"));
   if (!me || !me->is_live ())
-    return SCM_UNSPECIFIED;
+    return scm_from_int (DOWN);
   
   extract_grob_set (me, "stems", stems);
 
@@ -41,7 +41,8 @@ Melody_spanner::calc_neutral_stem_direction (SCM smob)
         &&  !dirs[next_nonneutral])
     next_nonneutral++;
 
-  while (last_nonneutral == VPOS || last_nonneutral < dirs.size () - 1) 
+  SCM retval = SCM_EOL;
+  while (last_nonneutral == VPOS || last_nonneutral + 1 < dirs.size ()) 
     {
       Direction d1 = CENTER;
       Direction d2 = CENTER;
@@ -61,8 +62,12 @@ Melody_spanner::calc_neutral_stem_direction (SCM smob)
        total = to_dir (me->get_property ("neutral-direction"));
       
       for (vsize i = last_nonneutral + 1; i <  next_nonneutral; i++)
-       stems[i]->set_property ("neutral-direction", scm_from_int (total));
-
+       {
+         if (stems[i] == stem)
+           retval = scm_from_int (total);
+         else
+           stems[i]->set_property ("neutral-direction", scm_from_int (total));
+       }
 
       last_nonneutral = next_nonneutral;
       while (last_nonneutral < dirs.size ()
@@ -76,8 +81,7 @@ Melody_spanner::calc_neutral_stem_direction (SCM smob)
        next_nonneutral++;
     }
 
-  me->suicide ();
-  return SCM_UNSPECIFIED;
+  return retval;
 }
 
 void
index a6a48a8f188f4bf92537576453a9b90f6c9e8160..11d32cd82419d9b084cf304cceef14d447ade1da 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>,
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>,
   Pal Benko <benkop@freestart.hu>
 */
 
@@ -384,7 +384,7 @@ Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> primitives)
       if (Rhythmic_head::dot_count (current) > 0)
        // Move dots above/behind the ligature.
        {
-         if (i < primitives.size () - 1)
+         if (i + 1 < primitives.size ())
            // dot in the midst => move above head
            {
              // FIXME: Amount of vertical dot-shift should depend on
@@ -416,6 +416,7 @@ Mensural_ligature_engraver::build_ligature (Spanner *ligature,
 
 ADD_ACKNOWLEDGER (Mensural_ligature_engraver, rest);
 ADD_ACKNOWLEDGER (Mensural_ligature_engraver, note_head);
+
 ADD_TRANSLATOR (Mensural_ligature_engraver,
                /* doc */ "Handles Mensural_ligature_events by glueing special ligature heads together.",
                /* create */ "MensuralLigature",
index 88a11810581abb86de38528c15456d7399803d04..12b5218429e2ed1ce70c6a9a784fd36aae7dbf91 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>,
+  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>,
   Pal Benko <benkop@freestart.hu>
 */
 
index 9caa9cebef9bae5b54c7bad63f5de919b7a783c6..a663e573515cf5dbf7f6d0e5fe895b2f079d3f59 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include <cctype>
index 88d303b4e7d80f7952ee4690cf18c245489ab6f7..88f9aeb86f0525a8788ce7490f1d0799bf3dc96d 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  midi-item.cc -- implement Midi items.
+  midi-item.cc -- implement MIDI items.
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "midi-item.hh"
@@ -40,12 +40,10 @@ Midi_item::get_midi (Audio_item *a)
   else if (Audio_time_signature *i = dynamic_cast<Audio_time_signature *> (a))
     return new Midi_time_signature (i);
   else if (Audio_text *i = dynamic_cast<Audio_text *> (a))
-    //return i->text_string_.length () ? new Midi_text (i) : 0;
     return new Midi_text (i);
   else
     assert (0);
 
-  // isn't C++ grand?
   return 0;
 }
 
@@ -90,23 +88,16 @@ Midi_duration::to_string () const
   return string ("<duration: ") + ::to_string (seconds_) + ">";
 }
 
-Midi_event::Midi_event (Moment delta_mom, Midi_item *midi)
+Midi_event::Midi_event (int delta_ticks, Midi_item *midi)
 {
-  delta_mom_ = delta_mom;
+  delta_ticks_ = delta_ticks;
   midi_ = midi;
 }
 
-/*
-  ugh. midi output badly broken since grace note hackage.
-*/
 string
 Midi_event::to_string () const
 {
-  Rational rat_dt = (delta_mom_.main_part_ * Rational (384)
-                    + delta_mom_.grace_part_ * Rational (100)) * Rational (4);
-  int delta = rat_dt.to_int ();
-
-  string delta_string = Midi_item::i2varint_string (delta);
+  string delta_string = Midi_item::i2varint_string (delta_ticks_);
   string midi_string = midi_->to_string ();
   assert (midi_string.length ());
   return delta_string + midi_string;
@@ -140,9 +131,6 @@ Midi_instrument::to_string () const
   Byte program_byte = 0;
   bool found = false;
 
-  /*
-    UGH. don't use eval.
-  */
   SCM proc = ly_lily_module_constant ("midi-program");
   SCM program = scm_call_1 (proc, ly_symbol2scm (audio_->str_.c_str ()));
   found = (program != SCM_BOOL_F);
@@ -160,11 +148,6 @@ Midi_item::Midi_item ()
 {
 }
 
-Midi_channel_item::~Midi_channel_item ()
-{
-  channel_ = 0;
-}
-
 Midi_channel_item::Midi_channel_item ()
 {
   channel_ = 0;
@@ -248,32 +231,23 @@ Midi_note::Midi_note (Audio_note *a)
   dynamic_byte_ = 0x7f;
 }
 
-Moment
-Midi_note::get_length () const
-{
-  Moment m = audio_->length_mom_;
-  return m;
-}
 
 int
 Midi_note::get_fine_tuning () const
 {
-  int ft = audio_->pitch_.quartertone_pitch ();
-  ft -= 2 * audio_->pitch_.semitone_pitch ();
-  ft *= 50; // 1 quarter tone = 50 cents
-  return ft;
+  Rational tune = (audio_->pitch_.tone_pitch ()
+                  + audio_->transposing_.tone_pitch ()) * Rational (2);
+  tune -= Rational (get_semitone_pitch ());
+
+  tune *= 100;
+  return (int) double (tune);
 }
 
 int
-Midi_note::get_pitch () const
+Midi_note::get_semitone_pitch () const
 {
-  int p = audio_->pitch_.semitone_pitch () + audio_->transposing_;
-  if (p == INT_MAX)
-    {
-      warning (_ ("silly pitch"));
-      p = 0;
-    }
-  return p;
+  return int (double ((audio_->pitch_.tone_pitch ()
+                      + audio_->transposing_.tone_pitch ()) * Rational (2)));
 }
 
 string
@@ -300,8 +274,8 @@ Midi_note::to_string () const
       str += ::to_string ((char) (0x00));
     }
 
-  str += ::to_string ((char)status_byte);
-  str += ::to_string ((char) (get_pitch () + c0_pitch_));
+  str += ::to_string ((char) status_byte);
+  str += ::to_string ((char) (get_semitone_pitch () + c0_pitch_));
   str += ::to_string ((char)dynamic_byte_);
 
   return str;
@@ -326,7 +300,7 @@ Midi_note_off::to_string () const
   Byte status_byte = (char) (0x80 + channel_);
 
   string str = ::to_string ((char)status_byte);
-  str += ::to_string ((char) (get_pitch () + Midi_note::c0_pitch_));
+  str += ::to_string ((char) (get_semitone_pitch () + Midi_note::c0_pitch_));
   str += ::to_string ((char)aftertouch_byte_);
 
   if (get_fine_tuning () != 0)
@@ -462,11 +436,11 @@ Midi_track::Midi_track ()
 }
 
 void
-Midi_track::add (Moment delta_time_mom, Midi_item *midi)
+Midi_track::add (int delta_ticks, Midi_item *midi)
 {
-  assert (delta_time_mom >= Moment (0));
+  assert (delta_ticks >= 0);
 
-  Midi_event *e = new Midi_event (delta_time_mom, midi);
+  Midi_event *e = new Midi_event (delta_ticks, midi);
   events_.push_back (e);
 }
 
@@ -474,15 +448,11 @@ string
 Midi_track::data_string () const
 {
   string str = Midi_chunk::data_string ();
-  if (do_midi_debugging_global)
-    str += "\n";
 
   for (vector<Midi_event*>::const_iterator i (events_.begin());
        i != events_.end(); i ++)
     {
       str += (*i)->to_string ();
-      if (do_midi_debugging_global)
-       str += "\n";
     }
   return str;
 }
index d5b62fee5978490d7a34f37ff6e29e6e57844d91..11afe02cf46b13e0dcc53f9a681348fdcbd558b3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "midi-stream.hh"
@@ -25,7 +25,7 @@ Midi_stream::Midi_stream (string file_name)
   file_name_string_ = file_name;
   out_file_ = fopen (file_name.c_str (), "wb");
   if (!out_file_)
-    error (_f ("can't open for write: %s: %s", file_name, strerror (errno)));
+    error (_f ("cannot open for write: %s: %s", file_name, strerror (errno)));
 }
 
 Midi_stream::~Midi_stream ()
@@ -33,43 +33,28 @@ Midi_stream::~Midi_stream ()
   fclose (out_file_);
 }
 
-Midi_stream &
-Midi_stream::operator << (string str)
+void
+Midi_stream::write (string str)
 {
   size_t sz = sizeof (Byte);
   size_t n = str.length ();
   size_t written = fwrite (str.data (), sz, n, out_file_);
 
   if (written != sz * n)
-    warning (_ ("can't write to file: `%s'"));
-
-  return *this;
+    warning (_ ("cannot write to file: `%s'"));
 }
 
-Midi_stream &
-Midi_stream::operator << (Midi_item const &midi_c_r)
+void
+Midi_stream::write (Midi_item const &midi)
 {
-  string str = midi_c_r.to_string ();
-
-  // ugh, should have separate debugging output with Midi*::print routines
-  if (do_midi_debugging_global)
-    {
-      str = String_convert::bin2hex (str) + "\n";
-      for (ssize i = str.find ("0a"); i != NPOS; i = str.find ("0a"))
-       {
-         str[i] = '\n';
-         str[i + 1] = '\t';
-       }
-    }
+  string str = midi.to_string ();
 
-  return operator << (str);
+  return write (str);
 }
 
-Midi_stream &
-Midi_stream::operator << (int i)
+void
+Midi_stream::write (int i)
 {
-  // output binary string ourselves
-  *this << Midi_item::i2varint_string (i);
-  return *this;
+  write (Midi_item::i2varint_string (i));
 }
 
index 2979c9380ce1127a3d6687180840ca1a70315730..941e64c282932e753a97c1aa494327d339929ef8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -17,7 +17,7 @@
 
 Midi_note_event::Midi_note_event ()
 {
-  ignore_b_ = false;
+  ignore_ = false;
 }
 
 int
@@ -33,43 +33,53 @@ compare (Midi_note_event const &left, Midi_note_event const &right)
     return 0;
 }
 
+bool
+audio_item_less (Audio_item * const a,
+                Audio_item * const b)
+{
+  return a->get_column ()->when_ <  b->get_column ()->when_;
+}
+
 Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track,
                          int channel)
 {
   channel_ = channel;
   track_ = track;
   index_ = 0;
-  items_ = &audio_staff->audio_items_;
-
-  last_mom_ = 0;
+  items_ = audio_staff->audio_items_;
+  vector_sort (items_, audio_item_less);
+  last_tick_ = 0;
 }
 
 Midi_walker::~Midi_walker ()
 {
-  // ugh
-  do_stop_notes (last_mom_ + Moment (Rational (10, 1)));
+  do_stop_notes (INT_MAX);
 }
 
+
 /**
    Find out if start_note event is needed, and do it if needed.
 */
 void
 Midi_walker::do_start_note (Midi_note *note)
 {
-  Audio_item *ptr = (*items_)[index_];
-  Moment stop_mom = note->get_length () + ptr->audio_column_->at_mom ();
+  Audio_item *ptr = items_[index_];
+  int stop_ticks = int (moment_to_real (note->audio_->length_mom_) * Real (384 * 4))
+    + ptr->audio_column_->ticks ();
 
   bool play_start = true;
   for (vsize i = 0; i < stop_note_queue.size (); i++)
     {
       /* if this pith already in queue */
-      if (stop_note_queue[i].val->get_pitch () == note->get_pitch ())
+      if (stop_note_queue[i].val->get_semitone_pitch ()
+         == note->get_semitone_pitch ())
        {
-         if (stop_note_queue[i].key < stop_mom)
+         if (stop_note_queue[i].key < stop_ticks)
            {
              /* let stopnote in queue be ignored,
                 new stop note wins */
-             stop_note_queue[i].ignore_b_ = true;
+             stop_note_queue[i].ignore_ = true;
+
              /* don't replay start note, */
              play_start = false;
              break;
@@ -89,11 +99,11 @@ Midi_walker::do_start_note (Midi_note *note)
     {
       Midi_note_event e;
       e.val = new Midi_note_off (note);
-      e.key = stop_mom;
+      e.key = int (stop_ticks);
       stop_note_queue.insert (e);
 
       if (play_start)
-       output_event (ptr->audio_column_->at_mom (), note);
+       output_event (ptr->audio_column_->ticks (), note);
     }
 }
 
@@ -101,69 +111,68 @@ Midi_walker::do_start_note (Midi_note *note)
    Output note events for all notes which end before #max_mom#
 */
 void
-Midi_walker::do_stop_notes (Moment max_mom)
+Midi_walker::do_stop_notes (int max_ticks)
 {
-  while (stop_note_queue.size () && stop_note_queue.front ().key <= max_mom)
+  while (stop_note_queue.size () && stop_note_queue.front ().key <= max_ticks)
     {
       Midi_note_event e = stop_note_queue.get ();
-      if (e.ignore_b_)
+      if (e.ignore_)
        {
          delete e.val;
          continue;
        }
 
-      Moment stop_mom = e.key;
+      int stop_ticks = e.key;
       Midi_note *note = e.val;
 
-      output_event (stop_mom, note);
+      output_event (stop_ticks, note);
     }
 }
 
-/**
-   Advance the track to #now#, output the item, and adjust current "moment".
-*/
 void
-Midi_walker::output_event (Moment now_mom, Midi_item *l)
+Midi_walker::output_event (int now_ticks, Midi_item *l)
 {
-  Moment delta_t = now_mom - last_mom_;
-  last_mom_ = now_mom;
+  int delta_ticks = now_ticks - last_tick_;
+  last_tick_ = now_ticks;
 
   /*
     this is not correct, but at least it doesn't crash when you
     start with graces
   */
-  if (delta_t < Moment (0))
-    delta_t = Moment (0);
+  if (delta_ticks < 0)
+    {
+      programming_error ("Going back in MIDI time.");
+      delta_ticks = 0;
+    }
 
-  track_->add (delta_t, l);
+  track_->add (delta_ticks, l);
 }
 
 void
 Midi_walker::process ()
 {
-  Audio_item *audio = (*items_)[index_];
-  do_stop_notes (audio->audio_column_->at_mom ());
+  Audio_item *audio = items_[index_];
+  do_stop_notes (audio->audio_column_->ticks ());
 
   if (Midi_item *midi = Midi_item::get_midi (audio))
     {
       if (Midi_channel_item *mci = dynamic_cast<Midi_channel_item*> (midi))
        mci->channel_ = channel_;
       
-      //midi->channel_ = track_->number_;
       if (Midi_note *note = dynamic_cast<Midi_note *> (midi))
        {
-         if (note->get_length ().to_bool ())
+         if (note->audio_->length_mom_.to_bool ())
            do_start_note (note);
        }
       else
-       output_event (audio->audio_column_->at_mom (), midi);
+       output_event (audio->audio_column_->ticks (), midi);
     }
 }
 
 bool
 Midi_walker::ok () const
 {
-  return index_ < items_->size ();
+  return index_ < items_.size ();
 }
 
 void
index aa49a697a6e990bac32fc78e76cd3ace09dd66ef..6837df0d744838c4eff0978318902ff3d6324e6c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -56,6 +56,14 @@ peak_around (Real epsilon,  Real threshold, Real x)
   return max (- epsilon * (x - threshold) / ((x + epsilon)  * threshold), 0.0);
 }
 
+/*
+  0 at 0,  1 at standard_x, and increasing thereafter. 
+ */
+Real
+convex_amplifier (Real standard_x, Real increase_factor, Real x)
+{
+  return (exp (increase_factor * x / standard_x) - 1.0) / (exp (increase_factor) - 1.0); 
+}
 
 string
 camel_case_to_lisp_identifier (string in)
index e0fb13044d14d239858aa83ccd0fb0e4aa9dae84..9a5488f1ccca0c971cdea50044ba60f39a24d8b6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #include <cctype>
 using namespace std;
@@ -178,7 +178,7 @@ Modified_font_metric::text_stencil (string text) const
 Box
 Modified_font_metric::text_dimension (string text) const
 {
-  SCM stext = scm_makfrom0str (text.c_str ());
+  SCM stext = ly_string2scm (text);
   
   Box b;
   if (output_backend_global == "tex")
index f930a2856ed3980b8a040177853bbf18412da7da..ce08c424567d32a7d45e92bbd0fc79cc01b08d77 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "ly-module.hh"
index bc8dfae78b9ccbc9b806a36932f2da122641e48a..b19259e6b2505d36c30034282cc3caf55abfcdb9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "moment.hh"
index 1f32fb80eb76aa859fb6e4c140b4a38db77c52dd..7516bf20e1a786eda78b6a4e3ce926e29b7df4e0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "moment.hh"
index 5d0d7d97135b1d8f46e8f266e86e81f632c4b83d..ecb0d97a62246863ef4fd011c5096563f0a21799 100644 (file)
@@ -1,7 +1,7 @@
 /*
   multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
index 44d699b7ce1bcd0b35137945f03c1ad490c008cf..1b66670a7c780bc05e22a2e0544edd17cc2d1852 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "multi-measure-rest.hh"
@@ -183,8 +183,8 @@ Multi_measure_rest::big_rest (Grob *me, Real width)
   Stencil m = Lookup::round_filled_box (b, blot);
   Stencil yb = Lookup::round_filled_box (Box (Interval (-0.5, 0.5) * ythick, Interval (-ss, ss)), blot);
 
-  m.add_at_edge (X_AXIS, RIGHT, yb, 0, 0);
-  m.add_at_edge (X_AXIS, LEFT, yb, 0, 0);
+  m.add_at_edge (X_AXIS, RIGHT, yb, 0);
+  m.add_at_edge (X_AXIS, LEFT, yb, 0);
 
   m.align_to (X_AXIS, LEFT);
 
@@ -205,11 +205,11 @@ Multi_measure_rest::church_rest (Grob *me, Font_metric *musfont, int measures,
   int count = 0;
   Real symbols_width = 0.0;
 
-  SCM sml = me->get_property ("use-breve-rest");
+  bool use_breve = to_boolean (me->get_property ("use-breve-rest"));
 
   while (l)
     {
-      if (sml == SCM_BOOL_T)
+      if (use_breve)
        {
          int k;
          if (l >= 2)
@@ -268,7 +268,7 @@ Multi_measure_rest::church_rest (Grob *me, Font_metric *musfont, int measures,
   Stencil mol;
   for (SCM s = mols; scm_is_pair (s); s = scm_cdr (s))
     mol.add_at_edge (X_AXIS, LEFT, *unsmob_stencil (scm_car (s)),
-                    inner_padding, 0);
+                    inner_padding);
   mol.align_to (X_AXIS, LEFT);
   mol.translate_axis (outer_padding_factor * inner_padding, X_AXIS);
 
index 6a97db4a5515cd3e8328454249b63f83d4ecd257..7815ee1092edfc063f7aa7b7a330c82b0ec83082 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-function.hh"
index 3a97459f89565449b8c405b094b711eb6188224b..789b2b243c87fd9dd704b482dd2bf77f8822ddd6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
index 096dd330079e5b15c99ec57811f4cfe69eb1f469..ee8cbc1522f5a9b882f3323b3d3a961023467981 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-output.hh"
index 365c3f434474166b64fa6b5df2b9dc03005ecfb5..711df4d1a194352790df0dc839e8ce142316408d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
@@ -191,23 +191,23 @@ LY_DEFINE (ly_transpose_key_alist, "ly:transpose-key-alist",
        {
          Pitch orig (scm_to_int (scm_car (key)),
                      scm_to_int (scm_cdr (key)),
-                     scm_to_int (alter));
+                     ly_scm2rational (alter));
 
          orig = orig.transposed (*p);
 
          SCM key = scm_cons (scm_from_int (orig.get_octave ()),
                              scm_from_int (orig.get_notename ()));
 
-         newlist = scm_cons (scm_cons (key, scm_from_int (orig.get_alteration ())),
+         newlist = scm_cons (scm_cons (key, ly_rational2scm (orig.get_alteration ())),
                              newlist);
        }
       else if (scm_is_number (key))
        {
-         Pitch orig (0, scm_to_int (key), scm_to_int (alter));
+         Pitch orig (0, scm_to_int (key), ly_scm2rational (alter));
          orig = orig.transposed (*p);
 
          key = scm_from_int (orig.get_notename ());
-         alter = scm_from_int (orig.get_alteration ());
+         alter = ly_rational2scm (orig.get_alteration ());
          newlist = scm_cons (scm_cons (key, alter), newlist);
        }
     }
index 30ca686e79d1071f092f88673acc8978ec2dc4e1..7a0d5863a09321e51bd0d019fc046339a50d21be 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-sequence.hh"
index e89896ce663652bca52800985e9ecdf487eeedc4..b6d0d616564c2e655464da371d642e94f5dfcf88 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-wrapper-iterator.hh"
@@ -18,7 +18,8 @@ Music_wrapper_iterator::Music_wrapper_iterator ()
 void
 Music_wrapper_iterator::do_quit ()
 {
-  child_iter_->quit ();
+  if (child_iter_)
+    child_iter_->quit ();
 }
 
 void
@@ -40,7 +41,9 @@ Music_wrapper_iterator::construct_children ()
 {
   Music *my_music = get_music ();
   Music *child = unsmob_music (my_music->get_property ("element"));
-  child_iter_ = unsmob_iterator (get_iterator (child));
+  child_iter_ = (child)
+    ? unsmob_iterator (get_iterator (child))
+    : 0;
 }
 
 bool
@@ -52,13 +55,17 @@ Music_wrapper_iterator::ok () const
 void
 Music_wrapper_iterator::process (Moment m)
 {
-  child_iter_->process (m);
+  if (child_iter_)
+    child_iter_->process (m);
 }
 
 Moment
 Music_wrapper_iterator::pending_moment () const
 {
-  return child_iter_->pending_moment ();
+  if (child_iter_)
+    return child_iter_->pending_moment ();
+  else
+    return Music_iterator::pending_moment ();
 }
 
 IMPLEMENT_CTOR_CALLBACK (Music_wrapper_iterator);
@@ -66,5 +73,5 @@ IMPLEMENT_CTOR_CALLBACK (Music_wrapper_iterator);
 bool
 Music_wrapper_iterator::run_always () const
 {
-  return child_iter_->run_always ();
+  return (child_iter_ &&  child_iter_->run_always ());
 }
index 051187a8a4215f6d3feb6e6e8cd2283526448d70..968c4447a7ab8c4f06129b2111e670f7a9968fc3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-wrapper.hh"
@@ -16,7 +16,10 @@ Music_wrapper::start_callback (SCM m)
 {
   Music *me = unsmob_music (m);
   Music *elt = unsmob_music (me->get_property ("element"));
-  return elt->start_mom ().smobbed_copy ();
+  if (elt)
+    return elt->start_mom ().smobbed_copy ();
+  else
+    return Moment ().smobbed_copy ();
 }
 
 MAKE_SCHEME_CALLBACK (Music_wrapper, length_callback, 1);
index fb272aae0372af067db72aeef159af97d50271dd..b22e243139690aa239ea475d7a6bff176675afe0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
@@ -63,8 +63,7 @@ Music::copy_mutable_properties () const
 void
 Music::type_check_assignment (SCM s, SCM v) const
 {
-  if (!::type_check_assignment (s, v, ly_symbol2scm ("music-type?")))
-    abort ();
+  ::type_check_assignment (s, v, ly_symbol2scm ("music-type?"));
 }
 
 Music::Music (Music const &m)
@@ -138,7 +137,7 @@ Music::generic_to_relative_octave (Pitch last)
          Pitch expected_pit (scm_to_int (check),
                              new_pit.get_notename (),
                              new_pit.get_alteration ());
-         origin ()->warning (_f ("octave check failed; expected \"%s\", found: %s",
+         origin ()->warning (_f ("octave check failed; expected \"%s\", found: \"%s\"",
                                  expected_pit.to_string (),
                                  new_pit.to_string ()));
          new_pit = expected_pit;
@@ -184,29 +183,28 @@ Music::compress (Moment factor)
 }
 
 /*
-TODO: make transposition non-destructive
+  This mutates alist.  Hence, make sure that it is not shared 
 */
-SCM
+void
 transpose_mutable (SCM alist, Pitch delta)
 {
-  SCM retval = SCM_EOL;
-
   for (SCM s = alist; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM entry = scm_car (s);
       SCM prop = scm_car (entry);
       SCM val = scm_cdr (entry);
-
+      SCM new_val = val;
+      
       if (Pitch *p = unsmob_pitch (val))
        {
          Pitch transposed = p->transposed (delta);
-         scm_set_cdr_x (entry, transposed.smobbed_copy ());
-
-         if (abs (transposed.get_alteration ()) > DOUBLE_SHARP)
+         if (transposed.get_alteration ().abs () > Rational (1,1))
            {
              warning (_f ("transposition by %s makes alteration larger than double",
                           delta.to_string ()));
            }
+
+         new_val = transposed.smobbed_copy ();
        }
       else if (prop == ly_symbol2scm ("element"))
        {
@@ -217,11 +215,11 @@ transpose_mutable (SCM alist, Pitch delta)
        transpose_music_list (val, delta);
       else if (prop == ly_symbol2scm ("pitch-alist") &&
               scm_is_pair (val))
-       entry = scm_cons (prop, ly_transpose_key_alist (val, delta.smobbed_copy ()));
-      retval = scm_cons (entry, retval);
-    }
+       new_val = ly_transpose_key_alist (val, delta.smobbed_copy ());
 
-  return scm_reverse_x (retval, SCM_EOL);
+      if (val != new_val)
+       scm_set_cdr_x (entry , new_val);
+    }
 }
 
 void
@@ -230,7 +228,7 @@ Music::transpose (Pitch delta)
   if (to_boolean (get_property ("untransposable")))
     return;
 
-  mutable_property_alist_ = transpose_mutable (mutable_property_alist_, delta);
+  transpose_mutable (mutable_property_alist_, delta);
 }
 
 void
index 594f24f337deca28defdb719969dad63ed834f42..7cb38bd95677910a6b566da3b030cb24a0137875 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -93,7 +93,7 @@ New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
                       &fingerings_,
                       ev, note_ev);
       else if (ev->in_event_class ("text-script-event"))
-       ev->origin ()->warning (_ ("can't add text scripts to individual note heads"));
+       ev->origin ()->warning (_ ("cannot add text scripts to individual note heads"));
       else if (ev->in_event_class ("script-event"))
        add_script (inf.grob (), ev, note_ev);
       else if (ev->in_event_class ("string-number-event"))
@@ -250,6 +250,11 @@ New_fingering_engraver::position_scripts (SCM orientations,
       f->set_parent (ft.head_, X_AXIS);
       f->set_parent (ft.head_, Y_AXIS);
 
+      if (hordir == LEFT
+         && unsmob_grob (ft.head_->get_object ("accidental-grob")))
+       Side_position_interface::add_support (f,
+                                             unsmob_grob (ft.head_->get_object ("accidental-grob")));
+                                             
       Self_alignment_interface::set_align_self (f, Y_AXIS);
       Self_alignment_interface::set_center_parent (f, Y_AXIS);
       Side_position_interface::set_axis (f, X_AXIS);
index 2fa8ce48814fb6ab00249a53213a7c2bead23a55..7d92a76ec0600f33756094e3086ee711b8bcb453 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "note-collision.hh"
@@ -424,7 +424,6 @@ Note_collision_interface::get_clash_groups (Grob *me)
 /** This complicated routine moves note columns around horizontally to
     ensure that notes don't clash.
 
-    This should be put into Scheme.
 */
 SCM
 Note_collision_interface::automatic_shift (Grob *me,
@@ -553,6 +552,7 @@ ADD_INTERFACE (Note_collision_interface,
               "@code{force-hshift} and @code{horizontal-shift}.",
 
               /* properties */
+              "ignore-collision "
               "merge-differently-dotted "
               "merge-differently-headed "
               "positioning-done ");
index a53c06006943921f0f8b594e73f4025908003468..380182f85623cd74fca631b1d04a4715bc02fcf1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "note-column.hh"
@@ -121,7 +121,7 @@ Note_column::add_head (Grob *me, Grob *h)
     }
 
   if (both)
-    me->warning (_ ("can't have note heads and rests together on a stem"));
+    me->warning (_ ("cannot have note heads and rests together on a stem"));
   else
     Axis_group_interface::add_element (me, h);
 }
@@ -191,7 +191,6 @@ ADD_INTERFACE (Note_column,
               "Stem and noteheads combined",
 
               /* properties */
-              "accidentals "
               "arpeggio "
               "force-hshift "
               "horizontal-shift "
index 2d48f05c70bd9cd7fb354a7e7a0a21c549785917..aaf1304d29b4a2660c7e653ff10de2576f74027a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "engraver.hh"
index 4b4c3e00a82f46daf5986fd155b7bbd47b13ee82..621e5311b98f034a671c833fcfc5919889be1f5c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
 
 */
 
index 12064f705b6abfa932090f694e19f072d2f1763a..bd00033bc717d80ebdd7291bb09997c2994fef9f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "note-head.hh"
index 7d976761dd9fbfdd512ad9d4af025c6b6b01feea..a49bbbe81f64bfefb3d4d43ac1d35111a7895c44 100644 (file)
@@ -1,7 +1,7 @@
 /*
   note-heads-engraver.cc -- part of GNU LilyPond
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -104,5 +104,7 @@ ADD_TRANSLATOR (Note_heads_engraver,
                /* doc */ "Generate noteheads.",
                /* create */
                "NoteHead ",
-               /* read */ "middleCPosition",
-               /* write */ "");
+               /* read */
+               "middleCPosition",
+               /* write */
+               "");
index f3c081f0395a5af2f0c5a95bc2f0af302d539c32..1aebfd3d84ade98ffc3f46cc634a799ebf2be3ab 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -50,7 +50,7 @@ Note_name_engraver::process_music ()
   if (s.length ())
     {
       Item *t = make_item ("NoteName", events_[0]->self_scm ());
-      t->set_property ("text", scm_makfrom0str (s.c_str ()));
+      t->set_property ("text", ly_string2scm (s));
       texts_.push_back (t);
     }
 }
index 8d9dfb44c17c4005d169d54f0cc77435bf2fc709..ff296311ffead109a8de2936f8542a3170b8aa0d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
@@ -38,11 +38,10 @@ Note_performer::process_music ()
 {
   if (note_evs_.size ())
     {
-      int transposing = 0;
-
+      Pitch transposing;
       SCM prop = get_property ("instrumentTransposition");
       if (unsmob_pitch (prop))
-       transposing = unsmob_pitch (prop)->semitone_pitch ();
+       transposing = *unsmob_pitch (prop);
 
       while (note_evs_.size ())
        {
@@ -66,8 +65,15 @@ Note_performer::process_music ()
                     tie_event = ev;
                 }
 
-             Audio_note *p = new Audio_note (*pitp, get_event_length (n), 
-                                              tie_event, - transposing);
+             Moment len = get_event_length (n);
+             if (now_mom().grace_part_)
+               {
+                 len.grace_part_ = len.main_part_;
+                 len.main_part_ = Rational (0);
+               }
+             
+             Audio_note *p = new Audio_note (*pitp, len, 
+                                              tie_event, transposing.negated ());
              Audio_element_info info (p, n);
              announce_element (info);
              notes_.push_back (p);
diff --git a/lily/note-spacing-engraver.cc b/lily/note-spacing-engraver.cc
new file mode 100644 (file)
index 0000000..569735f
--- /dev/null
@@ -0,0 +1,132 @@
+/* 
+  note-spacing-engraver.cc -- implement Note_spacing_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#include "engraver.hh"
+
+#include "grob-array.hh"
+#include "context.hh"
+#include "item.hh"
+#include "pointer-group-interface.hh"
+
+#include "translator.icc"
+
+class Note_spacing_engraver : public Engraver
+{
+  Grob *last_spacing_;
+  Context *last_spacing_parent_context_;
+  
+  Grob *spacing_;
+
+  void add_spacing_item (Grob *);
+  TRANSLATOR_DECLARATIONS (Note_spacing_engraver);
+protected:
+
+  DECLARE_ACKNOWLEDGER (rhythmic_grob);
+  DECLARE_ACKNOWLEDGER (note_column);
+  void stop_translation_timestep ();
+  virtual void finalize ();
+  virtual void derived_mark () const;
+};
+
+void
+Note_spacing_engraver::derived_mark () const
+{
+  if (last_spacing_parent_context_)
+    scm_gc_mark (last_spacing_parent_context_->self_scm ());
+}
+
+Note_spacing_engraver::Note_spacing_engraver ()
+{
+  last_spacing_parent_context_ = 0;
+  last_spacing_ = 0;
+  spacing_ = 0;
+}
+
+void
+Note_spacing_engraver::add_spacing_item (Grob *g)
+{
+  if (!spacing_)
+    {
+      spacing_ = make_item ("NoteSpacing", g->self_scm ());
+    }
+  
+  if (spacing_)
+    {
+      Pointer_group_interface::add_grob (spacing_,
+                                        ly_symbol2scm ("left-items"),
+                                        g);
+
+      if (last_spacing_)
+       Pointer_group_interface::add_grob (last_spacing_,
+                                          ly_symbol2scm ("right-items"),
+                                          g);
+    }
+}
+
+
+void
+Note_spacing_engraver::acknowledge_note_column (Grob_info gi)
+{
+  add_spacing_item (gi.grob ());
+}
+
+void
+Note_spacing_engraver::acknowledge_rhythmic_grob (Grob_info gi)
+{
+  add_spacing_item (gi.grob ());
+}
+
+void
+Note_spacing_engraver::finalize ()
+{
+  if (last_spacing_
+      && last_spacing_parent_context_
+      && last_spacing_parent_context_ == context ()->get_parent_context ()
+      && !unsmob_grob_array (last_spacing_->get_object ("right-items")))
+    {
+      SCM ccol = get_property ("currentCommandColumn");
+      Grob *column = unsmob_grob (ccol);
+      
+      Pointer_group_interface::add_grob (last_spacing_,
+                                        ly_symbol2scm ("right-items"),
+                                        column);
+    }
+}
+
+void
+Note_spacing_engraver::stop_translation_timestep ()
+{
+  if (last_spacing_
+      && last_spacing_parent_context_
+      && last_spacing_parent_context_ == context ()->get_parent_context ())
+    {
+      Grob *sep = unsmob_grob (get_property ("breakableSeparationItem"));
+      if (sep)
+       Pointer_group_interface::add_grob (last_spacing_,
+                                          ly_symbol2scm ("right-items"),
+                                          sep);
+    }
+  
+  if (spacing_)
+    {
+      last_spacing_ = spacing_;
+      last_spacing_parent_context_ = context ()->get_parent_context ();
+      spacing_ = 0;
+    }
+
+}
+
+ADD_ACKNOWLEDGER (Note_spacing_engraver, note_column);
+ADD_ACKNOWLEDGER (Note_spacing_engraver, rhythmic_grob);
+
+ADD_TRANSLATOR (Note_spacing_engraver,
+               /* doc */ "Generates NoteSpacing, an object linking horizontal lines for use in spacing.",
+               /* create */ "NoteSpacing",
+               /* read */ "",
+               /* write */ "");
index f601a1054b4e24a76bfdd39caea676f129d730f6..c4a79e403f7b18bb0313ce9a823ab481cf2cd8d3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "note-spacing.hh"
@@ -64,7 +64,8 @@ Note_spacing::get_spacing (Grob *me, Item *right_col,
              continue;
            }
 
-         if (d == LEFT)
+         if (d == LEFT
+             && Note_column::has_interface (it))
            {
              SCM r = it->get_object ("rest");
              Grob *g = unsmob_grob (r);
@@ -355,6 +356,7 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
     {
       stem_dirs[RIGHT] = -stem_dirs[LEFT];
       stem_posns[RIGHT] = bar_yextent;
+      stem_posns[RIGHT] *= 2;
     }
 
   if (correct_stem_dirs && stem_dirs[LEFT] * stem_dirs[RIGHT] == -1)
diff --git a/lily/object-key-dumper-scheme.cc b/lily/object-key-dumper-scheme.cc
deleted file mode 100644 (file)
index bdcfff4..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  object-key-dumper-scheme.cc -- implement Object_key_dumper bindings
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "object-key-dumper.hh"
-
-#include "moment.hh"
-
-LY_DEFINE (ly_make_dumper, "ly:make-dumper",
-          0, 0, 0,
-          (),
-          "Create a key dumper. ")
-{
-  Object_key_dumper *u = new Object_key_dumper ();
-  return u->unprotect ();
-}
-
-LY_DEFINE (ly_dumper_definitions, "ly:dumper-definitions",
-          1, 0, 0,
-          (SCM dumper),
-          "Return list of key definitions. ")
-{
-  Object_key_dumper *u = unsmob_key_dumper (dumper);
-  SCM_ASSERT_TYPE (u, dumper, SCM_ARG1, __FUNCTION__, "dumper");
-  return u->get_file_contents ();
-}
-
-LY_DEFINE (ly_dumper_key_serial, "ly:dumper-key-serial",
-          2, 0, 0,
-          (SCM dumper, SCM key),
-          "Return the  key serial number @var{key}. ")
-{
-  Object_key_dumper *u = unsmob_key_dumper (dumper);
-  Object_key *k = unsmob_key (key);
-  SCM_ASSERT_TYPE (u, dumper, SCM_ARG1, __FUNCTION__, "dumper");
-  SCM_ASSERT_TYPE (k, key, SCM_ARG2, __FUNCTION__, "key");
-  return u->dump_key (k);
-}
diff --git a/lily/object-key-dumper.cc b/lily/object-key-dumper.cc
deleted file mode 100644 (file)
index 204097f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-  object-key-dumper.cc -- implement Object_key_dumper
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "object-key-dumper.hh"
-
-#include "moment.hh"
-
-#include "ly-smobs.icc"
-
-SCM
-Object_key_dumper::mark_smob (SCM smob)
-{
-  Object_key_dumper *dumper = (Object_key_dumper *) SCM_CELL_WORD_1 (smob);
-
-  for (Key_to_key_map::const_iterator i (dumper->serialized_keys_.begin ());
-       i != dumper->serialized_keys_.end ();
-       i++)
-    scm_gc_mark ((*i).first->self_scm ());
-  return SCM_EOL;
-}
-
-int
-Object_key_dumper::print_smob (SCM, SCM port, scm_print_state*)
-{
-  scm_puts ("#<Object_key_dumper>", port);
-  return 1;
-}
-
-IMPLEMENT_DEFAULT_EQUAL_P (Object_key_dumper);
-IMPLEMENT_SMOBS (Object_key_dumper);
-
-Object_key_dumper::Object_key_dumper ()
-{
-  file_contents_ = SCM_EOL;
-  next_available_ = 0;
-  smobify_self ();
-}
-
-SCM
-Object_key_dumper::key_serial (int k)
-{
-  return scm_list_2 (ly_symbol2scm ("key"),
-                    scm_from_int (k));
-}
-
-SCM
-Object_key_dumper::serialize_key (Object_key const *key)
-{
-  SCM skey = key->dump ();
-  for (SCM s = skey; scm_is_pair (s); s = scm_cdr (s))
-    {
-      if (Object_key const *sub_key = unsmob_key (scm_car (s)))
-       scm_set_car_x (s, dump_key (sub_key));
-      else if (Moment *mom = unsmob_moment (scm_car (s)))
-       scm_set_car_x (s,
-                      scm_list_2 (ly_symbol2scm ("unquote"),
-                                  mom->as_scheme ()));
-    }
-
-  file_contents_ = scm_cons (scm_list_3 (ly_symbol2scm ("define-key"),
-                                        scm_from_int (next_available_),
-                                        skey),
-                            file_contents_);
-
-  serialized_keys_[key] = key;
-  key_serial_numbers_[key] = next_available_;
-  SCM retval = key_serial (next_available_);
-  next_available_++;
-
-  return retval;
-}
-
-SCM
-Object_key_dumper::dump_key (Object_key const *key)
-{
-  if (key_serial_numbers_.find (key) != key_serial_numbers_.end ())
-    return key_serial (key_serial_numbers_[key]);
-  else if (Object_key const *serialized = serialized_keys_[key])
-    return key_serial (key_serial_numbers_[ serialized_keys_ [serialized] ]);
-
-  return serialize_key (key);
-}
-
-SCM
-Object_key_dumper::get_file_contents () const
-{
-  return scm_reverse (file_contents_);
-}
-
-Object_key_dumper::~Object_key_dumper ()
-{
-}
diff --git a/lily/object-key-undumper-scheme.cc b/lily/object-key-undumper-scheme.cc
deleted file mode 100644 (file)
index 6791a9c..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-  object-key-undumper-scheme.cc -- implement Object_key_undumper bindings
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "object-key-undumper.hh"
-
-LY_DEFINE (ly_undumper_read_keys, "ly:undumper-read-keys",
-          2, 0, 0,
-          (SCM undumper, SCM keys),
-          "Read serialized @var{keys} into @var{undumper}.")
-{
-  Object_key_undumper *u = unsmob_key_undumper (undumper);
-  SCM_ASSERT_TYPE (u, undumper, SCM_ARG1, __FUNCTION__, "Undumper");
-
-  u->parse_contents (keys);
-  return SCM_UNSPECIFIED;
-}
-
-LY_DEFINE (ly_make_undumper, "ly:make-undumper",
-          0, 0, 0,
-          (),
-          "Create a key undumper. ")
-{
-  Object_key_undumper *u = new Object_key_undumper ();
-  return u->unprotect ();
-}
-
-LY_DEFINE (ly_undumper_lookup, "ly:undumper-lookup",
-          2, 0, 0,
-          (SCM undumper, SCM serial),
-          "Return the object key for number @var{serial}. ")
-
-{
-  Object_key_undumper *u = unsmob_key_undumper (undumper);
-
-  SCM_ASSERT_TYPE (u, undumper, SCM_ARG1, __FUNCTION__, "undumper");
-  SCM_ASSERT_TYPE (scm_is_integer (serial), serial, SCM_ARG2, __FUNCTION__, "integer");
-  return u->get_key (scm_to_int (serial))->self_scm ();
-}
-
diff --git a/lily/object-key-undumper.cc b/lily/object-key-undumper.cc
deleted file mode 100644 (file)
index 3aec3c5..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-  object-key-undumper.cc -- implement Object_key_undumper
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "object-key-undumper.hh"
-
-#include "ly-smobs.icc"
-
-IMPLEMENT_SMOBS (Object_key_undumper);
-IMPLEMENT_DEFAULT_EQUAL_P (Object_key_undumper);
-
-SCM
-Object_key_undumper::mark_smob (SCM smob)
-{
-  Object_key_undumper *undumper = (Object_key_undumper *) SCM_CELL_WORD_1 (smob);
-  for (Int_to_key_map::const_iterator i (undumper->keys_.begin ());
-       i != undumper->keys_.end (); i++)
-    scm_gc_mark ((*i).second->self_scm ());
-
-  return SCM_BOOL_F;
-}
-
-int
-Object_key_undumper::print_smob (SCM s, SCM port, scm_print_state*)
-{
-  (void) s;
-  scm_puts ("#<Object_key_undumper>", port);
-  return 1;
-}
-
-Object_key_undumper::Object_key_undumper ()
-{
-  smobify_self ();
-}
-
-void
-Object_key_undumper::parse_contents (SCM contents)
-{
-  for (SCM s = contents; scm_is_pair (s); s = scm_cdr (s))
-    {
-      SCM entry = scm_car (s);
-      if (scm_car (entry) != ly_symbol2scm ("define-key"))
-       continue;
-
-      int number = scm_to_int (scm_cadr (entry));
-      SCM skey = scm_caddr (entry);
-
-      SCM new_key = SCM_EOL;
-      SCM *tail = &new_key;
-      for (SCM t = skey; scm_is_pair (t); t = scm_cdr (t))
-       {
-         SCM item = scm_car (t);
-         if (scm_is_pair (item)
-             && scm_car (item) == ly_symbol2scm ("key"))
-           {
-             int index = scm_to_int (scm_cadr (item));
-             Object_key const *key = get_key (index);
-             *tail = scm_cons (key->self_scm (), SCM_EOL);
-           }
-         else
-           *tail = scm_cons (item, SCM_EOL);
-         tail = SCM_CDRLOC (*tail);
-       }
-
-      Object_key *k = Object_key::undump (new_key);
-      keys_[number] = k;
-      k->unprotect ();
-    }
-}
-
-Object_key const *
-Object_key_undumper::get_key (int idx)
-{
-  Int_to_key_map::const_iterator i (keys_.find (idx));
-  assert (i != keys_.end ());
-
-  return (*i).second;
-}
-
-Object_key_undumper::~Object_key_undumper ()
-{
-}
index 50e42027efd8ddea4048c23b5c1c113ef9885a7d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,169 +0,0 @@
-/*
-  object-key.cc -- implement Object_key
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "lilypond-key.hh"
-#include "ly-smobs.icc"
-
-SCM
-Object_key::mark_smob (SCM key)
-{
-  Object_key *k = (Object_key *) SCM_CELL_WORD_1 (key);
-  k->derived_mark ();
-  return SCM_EOL;
-}
-
-void
-Object_key::derived_mark () const
-{
-}
-
-Object_key::~Object_key ()
-{
-}
-
-int
-Object_key::get_type () const
-{
-  return GENERAL_KEY;
-}
-
-int
-Object_key::print_smob (SCM smob, SCM port, scm_print_state*)
-{
-  Object_key *k = (Object_key *) SCM_CELL_WORD_1 (smob);
-  scm_puts ("#<Object_key ", port);
-  scm_display (scm_from_int (k->get_type ()), port);
-  scm_puts (">", port);
-  return 1;
-}
-
-Object_key::Object_key ()
-{
-  smobify_self ();
-}
-
-int
-Object_key::compare (Object_key const *other) const
-{
-  if (this == other)
-    return 0;
-
-  int c = sign (get_type () - other->get_type ());
-  if (c)
-    return c;
-  else
-    return do_compare (other);
-}
-
-IMPLEMENT_SMOBS (Object_key);
-
-SCM
-Object_key::equal_p (SCM a, SCM b)
-{
-  Object_key *ka = unsmob_key (a);
-  Object_key *kb = unsmob_key (b);
-
-  return (ka->compare (kb)) ? SCM_BOOL_F : SCM_BOOL_T;
-}
-
-int
-Object_key::do_compare (Object_key const *) const
-{
-  return 0;
-}
-
-SCM
-Object_key::dump () const
-{
-  return scm_cons (scm_from_int (get_type ()),
-                  as_scheme ());
-}
-
-SCM
-Object_key::as_scheme () const
-{
-  return SCM_EOL;
-}
-
-Object_key *
-Object_key::from_scheme (SCM)
-{
-  return new Object_key ();
-}
-
-struct Object_dumper_table_entry
-{
-  Object_key_type type_;
-  Object_key *(*ctor_) (SCM);
-};
-
-static Object_dumper_table_entry undumpers[]
-= {
-  {BASE_KEY, Object_key::from_scheme},
-  {COPIED_KEY, Copied_key::from_scheme},
-  {GENERAL_KEY, Lilypond_general_key::from_scheme},
-  {GROB_KEY, Lilypond_grob_key::from_scheme},
-  {CONTEXT_KEY, Lilypond_context_key::from_scheme},
-  {KEY_COUNT, 0},
-};
-
-Object_key *
-Object_key::undump (SCM scm_key)
-{
-  int t = scm_to_int (scm_car (scm_key));
-  assert (t == undumpers[t].type_);
-  return (undumpers[t].ctor_) (scm_cdr (scm_key));
-}
-
-/****************************************************************/
-
-Copied_key::Copied_key (Object_key const *key, int count)
-{
-  copy_count_ = count;
-  original_ = key;
-}
-
-int
-Copied_key::get_type () const
-{
-  return COPIED_KEY;
-}
-
-int
-Copied_key::do_compare (Object_key const *key) const
-{
-  Copied_key const *other = dynamic_cast<Copied_key const *> (key);
-
-  int c = original_->compare (other->original_);
-  if (c)
-    return c;
-
-  return sign (copy_count_ - other->copy_count_);
-}
-
-void
-Copied_key::derived_mark () const
-{
-  scm_gc_mark (original_->self_scm ());
-}
-
-SCM
-Copied_key::as_scheme () const
-{
-  return scm_list_2 (original_
-                    ? original_->self_scm ()
-                    : SCM_BOOL_F, scm_from_int (copy_count_));
-}
-
-Object_key *
-Copied_key::from_scheme (SCM a)
-{
-  return new Copied_key (unsmob_key (scm_car (a)),
-                        scm_to_int (scm_list_ref (a, scm_from_int (1))));
-}
-
index db4c89c177d705a7b1e77a00a6eb2f105774c6d8..c6561b48cb111c9540d1b2b26e34c38e55527562 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "modified-font-metric.hh"
index d34654e77045eb698f96dcaedf967ac204742502..8b1229fe90917bc3f508fb6f20ad1b8372f16b67 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "open-type-font.hh"
@@ -30,11 +30,11 @@ load_table (char const *tag_str, FT_Face face, FT_ULong *length)
     {
       FT_Byte *buffer = (FT_Byte *) malloc (*length);
       if (buffer == NULL)
-       error (_f ("can't allocate %lu bytes", *length));
+       error (_f ("cannot allocate %lu bytes", *length));
 
       error_code = FT_Load_Sfnt_Table (face, tag, 0, buffer, length);
       if (error_code)
-       error (_f ("can't load font table: %s", tag_str));
+       error (_f ("cannot load font table: %s", tag_str));
 
       return buffer;
     }
@@ -296,7 +296,7 @@ Open_type_font::glyph_list () const
       if (code)
        warning (_f ("FT_Get_Glyph_Name() returned error: %u", unsigned (code)));
 
-      *tail = scm_cons (scm_makfrom0str (name), SCM_EOL);
+      *tail = scm_cons (scm_from_locale_string (name), SCM_EOL);
       tail = SCM_CDRLOC (*tail);
     }
   
index 46105f7255bf842c9144e9f413e1c3ef90c844ca..d18ad2837e92ffe2104f0a4ae326bea06b0cc38e 100644 (file)
@@ -5,7 +5,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "optimal-page-breaking.hh"
index f1894a25a8806c9be323795e3dbb3d03f9d69a0d..cf13802844cf866eedf8d13615bb5a5aee14a94b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "text-interface.hh"
index 6afa928387e49ee6358aefefa26df994a8b7c6e6..c1afcfed3c7dee3588a244a62e469530e05da739 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  text-spanner-engraver.cc -- implement Ottava_spanner_engraver
+  ottova-engraver.cc -- implement Ottava_spanner_engraver
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys
+  (c) 2000--2007 Han-Wen Nienhuys
 */
 
 #include "protected-scm.hh"
@@ -61,7 +61,7 @@ Ottava_spanner_engraver::process_music ()
          span_->set_property ("text", ott);
 
          SCM c0 (get_property ("middleCPosition"));
-         SCM oc0 (get_property ("originalCentralCPosition"));
+         SCM oc0 (get_property ("originalMiddleCPosition"));
          if (scm_less_p (oc0, c0) == SCM_BOOL_T)
            span_->set_property ("direction", scm_from_int (DOWN));
        }
@@ -132,5 +132,10 @@ ADD_ACKNOWLEDGER (Ottava_spanner_engraver, note_column);
 ADD_TRANSLATOR (Ottava_spanner_engraver,
                /* doc */ "Create a text spanner when the ottavation property changes..",
                /* create */ "OttavaBracket",
-               /* read */ "ottavation",
+               /* read */ "ottavation "
+               "originalMiddleCPosition "
+               "currentMusicalColumn "
+               
+               ,
+               
                /* write */ "");
index 95fd4a578245d6e9cd4a66b7a9994fcf6a38bcd1..e7533eed16597c2d68a1595dd16abfc660bffb97 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "output-def.hh"
@@ -82,7 +82,7 @@ LY_DEFINE (ly_output_description, "ly:output-description",
   return ell;
 }
 
-LY_DEFINE (ly_layout_def_p, "ly:layout-def?",
+LY_DEFINE (ly_output_def_p, "ly:output-def?",
           1, 0, 0, (SCM def),
           "Is @var{def} a layout definition?")
 {
@@ -98,21 +98,6 @@ LY_DEFINE (ly_paper_outputscale, "ly:paper-outputscale",
   return scm_from_double (output_scale (b));
 }
 
-/*
-  Cannot put in scope, but need a separate function, since we don't
-  want to allow this in --safe.
- */
-LY_DEFINE (ly_output_def_parser, "ly:output-def-parser",
-          1, 0, 0, (SCM odef),
-          "Return the parser where @var{odef} is coming from.")
-{
-  Output_def *b = unsmob_output_def (odef);
-  SCM_ASSERT_TYPE (b, odef, SCM_ARG1, __FUNCTION__, "paper");
-
-  return b->get_parser()->self_scm ();
-}
-
-
 LY_DEFINE (ly_make_output_def, "ly:make-output-def",
           0, 0, 0, (),
           "Make a output def.")
index 739b4b9e7be729adeec2efea548258dbaf201f94..81e7f7a67158af44cc0de465d807c3fd31bebbcc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "output-def.hh"
@@ -26,7 +26,6 @@
 Output_def::Output_def ()
 {
   scope_ = SCM_EOL;
-  parser_ = 0;
   parent_ = 0;
 
   smobify_self ();
@@ -38,7 +37,6 @@ Output_def::Output_def (Output_def const &s)
 {
   scope_ = SCM_EOL;
   parent_ = 0;
-  parser_ = s.parser_;
   smobify_self ();
 
   input_origin_ = s.input_origin_;
@@ -54,12 +52,6 @@ Output_def::~Output_def ()
 IMPLEMENT_SMOBS (Output_def);
 IMPLEMENT_DEFAULT_EQUAL_P (Output_def);
 
-Lily_parser *
-Output_def::get_parser () const
-{
-  return parent_ ? parent_->get_parser () : parser_;
-}
-
 SCM
 Output_def::mark_smob (SCM m)
 {
index 6b450ef864be1d4df4477af91035df008da09da3..8b42a6cbd3e7b5128a038ef186b5644d9ad1e9e8 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   
  */
 
index 2c28da917e1f579b94e7e5d2d743d5f015cd5359..87d21383b328a671965e0b3e9e5776ad270495f3 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "paper-book.hh"
index b43c302367053bf5418ea7f77db00530f2cf2fcc..b5c38293e5fdeacb180605b9ea8b20bebf04b623 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "page-breaking.hh"
@@ -77,7 +77,7 @@ Page_breaking::break_into_pieces (vsize start_break, vsize end_break, Line_divis
   vector<Break_position> chunks = chunk_list (start_break, end_break);
   assert (chunks.size () == div.size () + 1);
 
-  for (vsize i = 0; i < chunks.size () - 1; i++)
+  for (vsize i = 0; i + 1 < chunks.size (); i++)
     {
       vsize sys = next_system (chunks[i]);
       if (all_[sys].pscore_)
@@ -86,7 +86,7 @@ Page_breaking::break_into_pieces (vsize start_break, vsize end_break, Line_divis
          vsize end;
          line_breaker_args (sys, chunks[i], chunks[i+1], &start, &end);
 
-         vector<Column_x_positions> pos = line_breaking_[sys].get_solution (start, end, div[i]);
+         vector<Column_x_positions> pos = line_breaking_[sys].solve (start, end, div[i]);
          all_[sys].pscore_->root_system ()->break_into_pieces (pos);
        }
     }
@@ -100,8 +100,9 @@ Page_breaking::systems ()
     {
       if (all_[sys].pscore_)
        {
-         SCM lines = all_[sys].pscore_->root_system ()->get_paper_systems ();
-         ret = scm_cons (scm_vector_to_list (lines), ret);
+         all_[sys].pscore_->root_system ()->do_break_substitution_and_fixup_refpoints ();
+         SCM lines = all_[sys].pscore_->root_system ()->get_broken_system_grobs ();
+         ret = scm_cons (lines, ret);
        }
       else
        {
@@ -120,7 +121,7 @@ Page_breaking::line_details (vsize start_break, vsize end_break, Line_division c
   vector<Line_details> ret;
   assert (chunks.size () == div.size () + 1);
 
-  for (vsize i = 0; i < chunks.size () - 1; i++)
+  for (vsize i = 0; i + 1 < chunks.size (); i++)
     {
       vsize sys = next_system (chunks[i]);
       if (all_[sys].pscore_)
@@ -129,7 +130,7 @@ Page_breaking::line_details (vsize start_break, vsize end_break, Line_division c
          vsize end;
          line_breaker_args (sys, chunks[i], chunks[i+1], &start, &end);
 
-         vector<Line_details> details = line_breaking_[sys].get_details (start, end, div[i]);
+         vector<Line_details> details = line_breaking_[sys].line_details (start, end, div[i]);
          ret.insert (ret.end (), details.begin (), details.end ());
        }
       else
@@ -178,7 +179,7 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
   SCM layout_module = scm_c_resolve_module ("scm layout-page-layout");
   SCM page_module = scm_c_resolve_module ("scm page");
 
-  SCM make_page = scm_c_module_lookup (layout_module, "make-page-from-systems");
+  SCM make_page = scm_c_module_lookup (layout_module, "stretch-and-draw-page");
   SCM page_stencil = scm_c_module_lookup (page_module, "page-stencil");
   make_page = scm_variable_ref (make_page);
   page_stencil = scm_variable_ref (page_stencil);
@@ -255,7 +256,7 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break)
     {
       if (all_[i].pscore_)
        {
-         vector<Grob*> cols = all_[i].pscore_->root_system ()->columns ();
+         vector<Grob*> cols = all_[i].pscore_->root_system ()->used_columns ();
          vector<vsize> line_breaker_columns;
          line_breaker_columns.push_back (0);
 
@@ -341,7 +342,7 @@ Page_breaking::system_count_bounds (vector<Break_position> const &chunks, bool m
   Line_division ret;
   ret.resize (chunks.size () - 1, 1);
 
-  for (vsize i = 0; i < chunks.size () - 1; i++)
+  for (vsize i = 0; i + 1 < chunks.size (); i++)
     {
       vsize sys = next_system (chunks[i]);
       if (all_[sys].pscore_)
@@ -350,8 +351,8 @@ Page_breaking::system_count_bounds (vector<Break_position> const &chunks, bool m
          vsize end;
          line_breaker_args (sys, chunks[i], chunks[i+1], &start, &end);
          ret[i] = min
-           ? line_breaking_[sys].get_min_systems (start, end)
-           : line_breaking_[sys].get_max_systems (start, end);
+           ? line_breaking_[sys].min_system_count (start, end)
+           : line_breaking_[sys].max_system_count (start, end);
        }
     }
 
index 945a52b60aeef2a8890007b6ebae9a115249ee01..2ebd53814e3927c3a8120b23befe94847561c3f3 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "page-spacing.hh"
@@ -164,7 +164,7 @@ space_systems_on_2_pages (vector<Line_details> const &lines,
                          bool ragged_last)
 {
   /* if there is a forced break, this reduces to 2 1-page problems */
-  for (vsize i = 0; i < lines.size () - 1; i++)
+  for (vsize i = 0; i + 1 < lines.size (); i++)
     if (lines[i].page_permission_ == ly_symbol2scm ("force"))
       {
        vector<Line_details> lines1 (lines.begin (), lines.begin () + i + 1);
@@ -195,7 +195,7 @@ space_systems_on_2_pages (vector<Line_details> const &lines,
 
       if (ragged || ragged_last)
        page2_force[page2_force.size () - 1 - i] =
-         (page2.force_ < 0 && i < page1_force.size () - 1) ? infinity_f : 0;
+         (page2.force_ < 0 && i + 1 < page1_force.size ()) ? infinity_f : 0;
       else
        page2_force[page2_force.size () - 1 - i] = page2.force_;
     }
@@ -358,7 +358,7 @@ min_page_count (vector<Line_details> const &uncompressed_lines,
        + ((cur_rod_height > 0) ? lines[i].padding_: 0);
 
       if ((next_height > page_height && cur_rod_height > 0)
-         || (i < lines.size () - 1 && lines[i].page_permission_ == ly_symbol2scm ("force")))
+         || (i + 1 < lines.size () && lines[i].page_permission_ == ly_symbol2scm ("force")))
        {
          ret++;
          cur_rod_height = ext_len + (rag ? lines[i].space_ : 0);
index 4064efa37e2fd9f12921dfc8c5cab56df2f219c0..522ae7559eb46e029d539549607f274534a7d7ff 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "engraver.hh"
@@ -287,7 +287,7 @@ Page_turn_engraver::finalize ()
 
          /* it's possible that the last of my newly-split events overlaps the next repeat_penalty,
             in which case we need to refilter that event */
-         if (rep_index < repeat_penalties_.size () - 1
+         if (rep_index + 1 < repeat_penalties_.size ()
              && split.size ()
              && split.back ().duration_[RIGHT] > repeat_penalties_[rep_index+1].duration_[LEFT])
            {
@@ -327,6 +327,7 @@ Page_turn_engraver::finalize ()
 }
 
 ADD_ACKNOWLEDGER (Page_turn_engraver, note_head);
+
 ADD_TRANSLATOR (Page_turn_engraver,
                 /* doc */ "Decide where page turns are allowed to go",
                 /* create */ "",
index c6a1381f3670280cc8349a48f1c521b53da37970..58c66ed09d69b71c1f8c26d939c1c5b87e869130 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Joe Neeman <joeneeman@gmail.com>
+  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "page-turn-page-breaking.hh"
@@ -53,7 +53,7 @@ Page_turn_page_breaking::put_systems_on_pages (vsize start,
   /* If [START, END] does not contain an intermediate
      breakpoint, we may need to consider solutions that result in a bad turn.
      In this case, we won't abort if the min_page_count is too big */
-  if (start < end - 1 && min_p_count > 2)
+  if (start < end - 1 && min_p_count + (page_number % 2) > 2)
     return Break_node ();
 
   /* if PAGE-NUMBER is odd, we are starting on a right hand page. That is, we
@@ -115,7 +115,7 @@ vsize
 Page_turn_page_breaking::final_page_num (Break_node const &b)
 {
   vsize end = b.first_page_number_ + b.page_count_;
-  return end + 1 - (end % 2);
+  return end - 1 + (end % 2);
 }
 
 void
@@ -171,7 +171,7 @@ Page_turn_page_breaking::calc_subproblem (vsize ending_breakpoint)
               cur = put_systems_on_pages (start, end, line, div[d], p_num);
 
               if (isinf (cur.demerits_)
-                 || (cur.page_count_ > 2
+                 || (cur.page_count_  + (p_num % 2) > 2
                      && (!isinf (this_start_best.demerits_))
                      && final_page_num (cur) > final_page_num (this_start_best)))
                 {
@@ -202,7 +202,7 @@ Page_turn_page_breaking::calc_subproblem (vsize ending_breakpoint)
       if (start == 0 && end == 1
          && this_start_best.first_page_number_ == 1
          && this_start_best.page_count_ > 1)
-       warning (_ ("couldn't fit the first page turn onto a single page. "
+       warning (_ ("cannot fit the first page turn onto a single page.  "
                    "Consider setting first-page-number to an even number."));
 
       if (this_start_best.demerits_ < best.demerits_)
@@ -217,7 +217,7 @@ Page_turn_page_breaking::solve ()
   state_.clear ();
   message (_f ("Calculating page and line breaks (%d possible page breaks)...",
                (int)breaks_.size () - 1) + " ");
-  for (vsize i = 0; i < breaks_.size () - 1; i++)
+  for (vsize i = 0; i + 1 < breaks_.size (); i++)
     {
       calc_subproblem (i);
       progress_indication (string ("[") + to_string (i + 1) + "]");
@@ -263,7 +263,7 @@ Page_turn_page_breaking::make_pages (vector<Break_node> const &soln, SCM systems
       for (vsize j = 0; j < soln[i].page_count_; j++)
        lines_per_page.push_back (soln[i].system_count_[j]);
 
-      if (i < soln.size () - 1 && (soln[i].first_page_number_ + soln[i].page_count_) % 2)
+      if (i + 1 < soln.size () && (soln[i].first_page_number_ + soln[i].page_count_) % 2)
        /* add a blank page */
        lines_per_page.push_back (0);
     }
index 951093db4f88d82395140576ab8d995900353f4b..fe6d4bacd48007ed1fe94bd4baf7764c1ba3feca 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #define PANGO_ENABLE_BACKEND // ugh, why necessary?
index 3d58e0dd0ed69cbbd4a701b425d6c94e3d27549e..f91eafb9844743dd1a6ae89904e5c48ebb0f81b8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #define PANGO_ENABLE_BACKEND // ugh, why necessary?
 #include "stencil.hh"
 
 Pango_font::Pango_font (PangoFT2FontMap *fontmap,
-                       PangoFontDescription *description,
+                       PangoFontDescription const *description,
                        Real output_scale)
 {
   (void) fontmap;
+  
   physical_font_tab_ = scm_c_make_hash_table (11);
   PangoDirection pango_dir = PANGO_DIRECTION_LTR;
   context_
     = pango_ft2_get_context (PANGO_RESOLUTION, PANGO_RESOLUTION);
-  //  context_ = pango_ft2_font_map_create_context (fontmap);
 
   pango_description_ = pango_font_description_copy (description);
   attribute_list_ = pango_attr_list_new ();
@@ -69,8 +69,8 @@ void
 Pango_font::register_font_file (string filename, string ps_name)
 {
   scm_hash_set_x (physical_font_tab_,
-                 scm_makfrom0str (ps_name.c_str ()),
-                 scm_makfrom0str (filename.c_str ()));
+                 ly_string2scm (ps_name),
+                 ly_string2scm (filename));
 }
 
 void
@@ -104,7 +104,7 @@ Pango_font::pango_item_string_stencil (PangoItem const *item, string str,
   char glyph_name[GLYPH_NAME_LEN];
   PangoAnalysis const *pa = &(item->analysis);
   PangoGlyphString *pgs = pango_glyph_string_new ();
-
+  
   pango_shape (str.c_str () + item->offset,
               item->length, (PangoAnalysis*) pa, pgs);
 
@@ -204,7 +204,7 @@ Pango_font::pango_item_string_stencil (PangoItem const *item, string str,
          char_id = scm_from_uint32 (pg);
        }
       else
-       char_id = scm_makfrom0str (glyph_name);
+       char_id = scm_from_locale_string (glyph_name);
       
       *tail = scm_cons (scm_list_4 (scm_from_double (ggeo.width * scale_),
                                    scm_from_double (ggeo.x_offset * scale_),
@@ -215,6 +215,8 @@ Pango_font::pango_item_string_stencil (PangoItem const *item, string str,
       tail = SCM_CDRLOC (*tail);
     }
 
+  pango_glyph_string_free (pgs);  
+  pgs = 0;
   PangoFontDescription *descr = pango_font_describe (pa->font);
   Real size = pango_font_description_get_size (descr)
     / (Real (PANGO_SCALE));
@@ -261,7 +263,7 @@ Pango_font::pango_item_string_stencil (PangoItem const *item, string str,
       pango_fc_font_unlock_face (fcfont);
 
       SCM expr = scm_list_5 (ly_symbol2scm ("glyph-string"),
-                            scm_makfrom0str (ps_name.c_str ()),
+                            ly_string2scm (ps_name),
                             scm_from_double (size),
                             scm_from_bool (cid_keyed),
                             ly_quote_scm (glyph_exprs));
@@ -355,14 +357,15 @@ Pango_font::text_stencil (string str, bool tight) const
       */
       SCM exp
        = scm_list_3 (ly_symbol2scm ("utf-8-string"),
-                     scm_makfrom0str (description_string ().c_str ()),
-                     scm_makfrom0str (str.c_str ()));
+                     ly_string2scm (description_string ()),
+                     ly_string2scm (str));
 
       Box b (Interval (0, 0), Interval (0, 0));
       b.unite (dest.extent_box ());
       return Stencil (b, exp);
     }
 
+  g_list_free (items);
 
   return dest;
 }
index 89330c842ab88a263c49669f2878f8c550ddb93f..b1edd941c5e1c5f9004fd0d738269bc841ff8fb2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "config.hh"
@@ -19,7 +19,7 @@ LY_DEFINE (ly_make_pango_description_string, "ly:make-pango-description-string",
   PangoFontDescription *pfd = properties_to_pango_description (chain, scm_to_double (size));
   char *str = pango_font_description_to_string (pfd);
 
-  SCM scm_str = scm_makfrom0str (str);
+  SCM scm_str = scm_from_locale_string (str);
   g_free (str);
   pango_font_description_free (pfd);
   return scm_str;
index bd684b92f857344bb7f91ff02d41b3940da660a8..ed4b7579d4da6fc21f2c4a413ab7d55867d0d65e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "dimensions.hh"
@@ -56,7 +56,7 @@ select_pango_font (Output_def *layout, SCM chain)
                                       * layout->get_dimension (ly_symbol2scm ("text-font-size")));
 
   char *str = pango_font_description_to_string (pfd);
-  SCM scm_str = scm_makfrom0str (str);
+  SCM scm_str = scm_from_locale_string (str);
   g_free (str);
 
   return find_pango_font (layout, scm_str, 1.0);
index bc1c7007b44effc9f1e6c38a0401b7cd0ce38115..01e777220b24655c19c0a860bcd32849a9392082 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-book.hh"
index bddeffe15084c1370ae85d611a368067357f7e07..89e8b8ded33c3eaad7f28c8de1de17c5c345c1db 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "paper-book.hh"
@@ -91,9 +91,9 @@ Paper_book::output (SCM output_channel)
 {
   if (scm_is_pair (performances_))
     {
-      SCM proc = ly_lily_module_constant ("paper-book-write-midis");
-
-      scm_call_2 (proc, self_scm (), output_channel);
+      SCM proc = ly_lily_module_constant ("write-performances-midis");
+      scm_call_2 (proc, performances (), output_channel);
     }
 
   if (scores_ == SCM_EOL)
@@ -136,6 +136,13 @@ Paper_book::output (SCM output_channel)
 void
 Paper_book::classic_output (SCM output)
 {
+  if (scm_is_pair (performances_))
+    {
+      SCM proc = ly_lily_module_constant ("write-performances-midis");
+      scm_call_2 (proc, performances (), output);
+    }
+  
   /* Generate all stencils to trigger font loads.  */
   systems ();
 
index bef70f72a76e747ad47aef8ea160ae5686f9894a..2dd184854f12ea3857cc5939ee09c462f40bb2ae 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-column-engraver.hh"
index 2636b20fe4bccee354e4b9b915f060f8e6f082af..4dba6bbbd58f08784b55e5cbef2e38e96edc8355 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-column.hh"
 #include "output-def.hh"
 #include "pointer-group-interface.hh"
 #include "grob-array.hh"
+#include "system.hh"
+#include "spring.hh"
+#include "lookup.hh"
+#include "string-convert.hh"
 
 Grob *
-Paper_column::clone (int count) const
+Paper_column::clone () const
 {
-  return new Paper_column (*this, count);
+  return new Paper_column (*this);
 }
 
 void
 Paper_column::do_break_processing ()
 {
-  Spaceable_grob::remove_interface (this);
   Item::do_break_processing ();
 }
 
@@ -57,15 +60,15 @@ Paper_column::get_column () const
   return (Paper_column *) (this);
 }
 
-Paper_column::Paper_column (SCM l, Object_key const *key)
-  : Item (l, key)              // guh.?
+Paper_column::Paper_column (SCM l)
+  : Item (l)
 {
   system_ = 0;
   rank_ = -1;
 }
 
-Paper_column::Paper_column (Paper_column const &src, int count)
-  : Item (src, count)
+Paper_column::Paper_column (Paper_column const &src)
+  : Item (src)
 {
   system_ = 0;
   rank_ = src.rank_;
@@ -136,34 +139,100 @@ Paper_column::is_breakable (Grob *me)
 /*
   Print a vertical line and  the rank number, to aid debugging.
 */
-
 MAKE_SCHEME_CALLBACK (Paper_column, print, 1);
 SCM
 Paper_column::print (SCM p)
 {
-  Grob *me = unsmob_grob (p);
+  Paper_column *me = dynamic_cast<Paper_column*> (unsmob_grob (p));
 
   string r = to_string (Paper_column::get_rank (me));
 
   Moment *mom = unsmob_moment (me->get_property ("when"));
   string when = mom ? mom->to_string () : "?/?";
 
+  Font_metric *musfont = Font_interface::get_default_font (me);
   SCM properties = Font_interface::text_font_alist_chain (me);
 
   SCM scm_mol = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                  properties,
-                                                 scm_makfrom0str (r.c_str ()));
+                                                 ly_string2scm (r));
   SCM when_mol = Text_interface::interpret_markup (me->layout ()->self_scm (),
                                                   properties,
-                                                  scm_makfrom0str (when.c_str ()));
+                                                  ly_string2scm (when));
   Stencil t = *unsmob_stencil (scm_mol);
-  t.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (when_mol), 0.1, 0.1);
+  t.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (when_mol), 0.1);
   t.align_to (X_AXIS, CENTER);
   t.align_to (Y_AXIS, DOWN);
 
   Stencil l = Lookup::filled_box (Box (Interval (-0.01, 0.01),
                                       Interval (-2, -1)));
-
+  
+  SCM small_letters = scm_cons (scm_acons (ly_symbol2scm ("font-size"),
+                                          scm_from_int (-6), SCM_EOL),
+                               properties);
+  
+  int j = 0;
+  for (SCM s = me->get_object ("ideal-distances");
+       scm_is_pair (s); s = scm_cdr (s))
+    {
+      Spring_smob *sp = unsmob_spring (scm_car (s));
+      if (!sp->other_->get_system ())
+       continue;
+      
+      j++;
+      Real y = -j * 1 -3;
+      vector<Offset> pts;
+      pts.push_back (Offset (0, y));
+
+      Offset p2 (sp->distance_, y);
+      pts.push_back (p2);
+      
+      Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts);
+      Stencil head (musfont->find_by_name ("arrowheads.open.01"));
+
+      SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (),
+                                                          small_letters,
+                                                          ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance_)));
+      
+      id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance_/3, y+1)));
+      id_stencil.add_stencil (head.translated (p2));
+      id_stencil = id_stencil.in_color (0,0,1);
+      l.add_stencil (id_stencil);
+    }
+   
+  for (SCM s = me->get_object ("minimum-distances");
+       scm_is_pair (s); s = scm_cdr (s))
+    {
+      Real dist = scm_to_double (scm_cdar (s));
+      Grob *other =  unsmob_grob (scm_caar (s));
+      if (!other || other->get_system () != me->get_system ())
+       continue;
+
+      j++;
+      
+      Real y = -j * 1.0 -3.5;
+      vector<Offset> pts;
+      pts.push_back (Offset (0, y));
+
+      Offset p2 (dist, y);
+      pts.push_back (p2);
+
+      Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts);
+      Stencil head (musfont->find_by_name ("arrowheads.open.0M1"));
+      head.translate_axis (y, Y_AXIS);
+      id_stencil.add_stencil (head);
+
+      SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (),
+                                                          small_letters,
+                                                          ly_string2scm (String_convert::form_string ("%5.2lf",
+                                                                                                      dist)));
+          
+      id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist/3, y-1)));
+       
+      id_stencil = id_stencil.in_color (1,0,0);
+      l.add_stencil (id_stencil);
+    }
   t.add_stencil (l);
   return t.smobbed_copy ();
 }
index 8a170642616e038022beb00be6cd7ad7488918f1..e9a56ae0e190f269ce0c0ed690c933e0c46defd8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "dimensions.hh"
@@ -80,10 +80,17 @@ find_pango_font (Output_def *layout, SCM descr, Real factor)
 
   PangoFontDescription *description
     = pango_font_description_from_string (scm_i_string_chars (descr));
+
+  pango_font_description_set_size (description,
+                                  gint (factor *
+                                        pango_font_description_get_size (description)));
+
+  
   Font_metric *fm = all_fonts_global->find_pango_font (description,
-                                                      factor,
                                                       output_scale (layout));
 
+  pango_font_description_free (description);
   sizes = scm_acons (size_key, fm->self_scm (), sizes);
   scm_hash_set_x (table, descr, sizes);
 
index d7fe624952264fafe49a307fe802632875946631..e4906f4a9bda4fb34eda3c90f85cfef9482723fd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-outputter.hh"
index f11f40d90577411ff11fb0669a9d00a4299ee968..e7e48c2fb3c0c9ae03b34269567817027e4d3bd8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index a2e475093a7b3c1876424dbced918d20e069a3eb..0c6a16c21c60de057d1da33f1760aa2860c7b08a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-score.hh"
index 047e880f3c1fc085ce2899f1efd65c03fc842b51..f91a4cddee1deaa0ab3e2466dc5f99037c7097f7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-score.hh"
@@ -62,7 +62,7 @@ Paper_score::typeset_system (System *system)
 vector<vsize>
 Paper_score::find_break_indices () const
 {
-  vector<Grob*> all = root_system ()->columns ();
+  vector<Grob*> all = root_system ()->used_columns ();
   vector<vsize> retval;
 
   for (vsize i = 0; i < all.size (); i++)
@@ -106,9 +106,9 @@ Paper_score::calc_breaking ()
 
   int system_count = robust_scm2int (layout ()->c_variable ("system-count"), 0);
   if (system_count)
-    algorithm.resize (system_count);
+    return algorithm.solve (0, VPOS, system_count);
 
-  return algorithm.solve ();
+  return algorithm.best_solution (0, VPOS);
 }
 
 void
@@ -125,7 +125,7 @@ Paper_score::process ()
      down the road.
 
      doubly, also done in Score_engraver */
-  vector<Grob*> pc (system_->columns ());
+  vector<Grob*> pc (system_->used_columns ());
   pc[0]->set_property ("line-break-permission", ly_symbol2scm ("allow"));
   pc.back ()->set_property ("line-break-permission", ly_symbol2scm ("allow"));
 
@@ -152,6 +152,7 @@ Paper_score::get_paper_systems ()
       vector<Column_x_positions> breaking = calc_breaking ();
       system_->break_into_pieces (breaking);
       message (_ ("Drawing systems...") + " ");
+      system_->do_break_substitution_and_fixup_refpoints ();
       paper_systems_ = system_->get_paper_systems ();
     }
   return paper_systems_;
index 5d3d19c513e2fe096dc7426c1242754f055d3971..544f64d8b05eefed05652ab79d7fc47dd0113397 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "paper-system.hh"
index cef5c55493f7aea82249700ba065d64988b36ee3..8f190f969cca7b4aa43a540c3ab8fb063cac0ba7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index c8d8d36bfab2f2ca2a393d9c17c6e00c7dd42917..fabc5c2e891d943161c56f765c25fae3558c1967 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "parse-scm.hh"
index 64d6103d44d51dff51dd7900ed4100c4551802c5..02f03dea92fd941e8a4646e24f94be083b360b72 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
                  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -136,7 +136,7 @@ SCM make_music_relative (Pitch start, SCM music, Input loc);
 SCM run_music_function (Lily_parser *, SCM expr);
 SCM get_first_context_id (SCM type, Music *m);
 SCM make_chord_elements (SCM pitch, SCM dur, SCM modification_list);
-SCM make_chord_step (int step, int alter);
+SCM make_chord_step (int step, Rational alter);
 SCM make_simple_markup (SCM a);
 bool is_duration (int t);
 bool is_regular_identifier (SCM id);
@@ -300,7 +300,7 @@ If we give names, Bison complains.
 %type <book> book_body
 
 %type <i> bare_unsigned
-%type <i> figured_bass_alteration
+%type <scm> figured_bass_alteration
 %type <i> dots
 %type <i> exclamations
 %type <i> optional_rest
@@ -350,6 +350,7 @@ If we give names, Bison complains.
 %type <scm> absolute_pitch
 %type <scm> assignment_id
 %type <scm> bare_number
+%type <scm> unsigned_number
 %type <scm> bass_figure
 %type <scm> figured_bass_modification
 %type <scm> br_bass_figure
@@ -502,7 +503,7 @@ embedded_scm:
 
 lilypond_header_body:
        {
-               $$ = get_header(PARSER);
+               $$ = get_header (PARSER);
                PARSER->lexer_->add_scope ($$);
        }
        | lilypond_header_body assignment  {
@@ -854,9 +855,9 @@ alternative_music:
 
 
 repeated_music:
-       REPEAT simple_string bare_unsigned music alternative_music
+       REPEAT simple_string unsigned_number music alternative_music
        {
-               $$ = MAKE_SYNTAX ("repeat", @$, $2, scm_int2num ($3), $4, $5);
+               $$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, $5);
        }
        ;
 
@@ -975,7 +976,7 @@ prefix_composite_music:
        generic_prefix_music_scm {
                $$ = run_music_function (PARSER, $1);
        }
-       | CONTEXT    simple_string optional_id optional_context_mod music {
+       | CONTEXT simple_string optional_id optional_context_mod music {
                $$ = MAKE_SYNTAX ("context-specification", @$, $2, $3, $5, $4, SCM_BOOL_F);
        }
        | NEWCONTEXT simple_string optional_id optional_context_mod music {
@@ -1609,7 +1610,7 @@ direction_reqd_event:
 octave_check:
        /**/ { $$ = SCM_EOL; }
        | '='  { $$ = scm_from_int (0); }
-       | '=' sub_quotes { $$ = scm_from_int ($2); }
+       | '=' sub_quotes { $$ = scm_from_int (-$2); }
        | '=' sup_quotes { $$ = scm_from_int ($2); }
        ;
 
@@ -1661,7 +1662,7 @@ steno_tonic_pitch:
                $$ = p.smobbed_copy ();
        }
        | TONICNAME_PITCH sub_quotes     {
-               Pitch p =unsmob_pitch ($1);
+               Pitch p = *unsmob_pitch ($1);
 
                p = p.transposed (Pitch (-$2,0,0));
                $$ = p.smobbed_copy ();
@@ -1700,25 +1701,25 @@ gen_text_def:
 
 script_abbreviation:
        '^'             {
-               $$ = scm_makfrom0str ("Hat");
+               $$ = scm_from_locale_string ("Hat");
        }
        | '+'           {
-               $$ = scm_makfrom0str ("Plus");
+               $$ = scm_from_locale_string ("Plus");
        }
        | '-'           {
-               $$ = scm_makfrom0str ("Dash");
+               $$ = scm_from_locale_string ("Dash");
        }
        | '|'           {
-               $$ = scm_makfrom0str ("Bar");
+               $$ = scm_from_locale_string ("Bar");
        }
        | ANGLE_CLOSE   {
-               $$ = scm_makfrom0str ("Larger");
+               $$ = scm_from_locale_string ("Larger");
        }
        | '.'           {
-               $$ = scm_makfrom0str ("Dot");
+               $$ = scm_from_locale_string ("Dot");
        }
        | '_' {
-               $$ = scm_makfrom0str ("Underscore");
+               $$ = scm_from_locale_string ("Underscore");
        }
        ;
 
@@ -1823,9 +1824,9 @@ bass_number:
        ;
 
 figured_bass_alteration:
-       '-'     { $$ = -2; }
-       | '+'   { $$ = 2; }
-       | '!'   { $$ = 0; }
+       '-'     { $$ = ly_rational2scm (FLAT_ALTERATION); }
+       | '+'   { $$ = ly_rational2scm (SHARP_ALTERATION); }
+       | '!'   { $$ = scm_from_int (0); }
        ;
 
 bass_figure:
@@ -1850,11 +1851,11 @@ bass_figure:
        }
        | bass_figure figured_bass_alteration {
                Music *m = unsmob_music ($1);
-               if ($2) {
+               if (scm_to_double ($2)) {
                        SCM salter = m->get_property ("alteration");
-                       int alter = scm_is_number (salter) ? scm_to_int (salter) : 0;
+                       SCM alter = scm_is_number (salter) ? salter : scm_from_int (0);
                        m->set_property ("alteration",
-                               scm_from_int (alter + $2));
+                                        scm_sum (alter, $2));
                } else {
                        m->set_property ("alteration", scm_from_int (0));
                }
@@ -2063,10 +2064,10 @@ step_number:
                $$ = make_chord_step ($1, 0);
         }
        | bare_unsigned '+' {
-               $$ = make_chord_step ($1, SHARP);
+               $$ = make_chord_step ($1, SHARP_ALTERATION);
        }
        | bare_unsigned CHORD_MINUS {
-               $$ = make_chord_step ($1, FLAT);
+               $$ = make_chord_step ($1, FLAT_ALTERATION);
        }
        ;       
 
@@ -2134,6 +2135,14 @@ bare_unsigned:
        }
        ;
 
+unsigned_number:
+       bare_unsigned  { $$ = scm_from_int ($1); }
+       | NUMBER_IDENTIFIER {
+               $$ = $1;
+       }
+       ;
+       
+
 exclamations:
                { $$ = 0; }
        | exclamations '!'      { $$ ++; }
@@ -2375,7 +2384,7 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
 SCM
 get_next_unique_context_id ()
 {
-       return scm_makfrom0str ("$uniqueContextId");
+       return scm_from_locale_string ("$uniqueContextId");
 }
 
 
@@ -2385,7 +2394,7 @@ get_next_unique_lyrics_context_id ()
        static int new_context_count;
        char s[128];
        snprintf (s, sizeof (s)-1, "uniqueContext%d", new_context_count++);
-       return scm_makfrom0str (s);
+       return scm_from_locale_string (s);
 }
 
 
@@ -2470,10 +2479,10 @@ set_music_properties (Music *p, SCM a)
 
 
 SCM
-make_chord_step (int step, int alter)
+make_chord_step (int step, Rational alter)
 {
        if (step == 7)
-               alter += FLAT;
+               alter += FLAT_ALTERATION;
 
        while (step < 0)
                step += 7;
index 121ad3fbd27f6405ce179874177ab800e499f771..b12eb19a5fe7a1aac6d29d2542a58428e7d75cfb 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
@@ -104,6 +104,9 @@ ADD_TRANSLATOR (Part_combine_engraver,
                /* doc */ "Part combine engraver for orchestral scores:         "
                "Print markings a2, Solo, Solo II, and unisono ",
                /* create */ "CombineTextScript",
-               /* read */ "printPartCombineTexts soloText soloIIText "
+               /* read */
+               "printPartCombineTexts "
+               "soloText "
+               "soloIIText "
                "aDueText",
                /* write */ "");
index 6dbff411800836318edaabb2d4b7b9dce69f3d73..8841fb826b82c83064b2670eca674f87b19ff174 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys
+  (c) 2004--2007 Han-Wen Nienhuys
 */
 
 #include "context.hh"
index a6c47e872c7f50e86fb6d1a0abf110f3d7153087..55f99cd5cfca149a66974c2cc00b503a933f17e0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
 */
 
 
index 705d9394b200b34423413f1f1863c91021875dd2..451647fb5cc03739fc9a98ee58dc1f12e7621eb1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "percent-repeat-item.hh"
@@ -38,14 +38,14 @@ Percent_repeat_item_interface::x_percent (Grob *me, int count,
   Stencil s = brew_slash (me);
 
   for (int i = count; i--;)
-    m.add_at_edge (X_AXIS, RIGHT, s, -slash_neg_kern, 0);
+    m.add_at_edge (X_AXIS, RIGHT, s, -slash_neg_kern);
   Stencil d1 = Font_interface::get_default_font (me)->find_by_name ("dots.dot");
   Stencil d2 = d1;
   d1.translate_axis (0.5, Y_AXIS);
   d2.translate_axis (-0.5, Y_AXIS);
 
-  m.add_at_edge (X_AXIS, LEFT, d1, -dot_neg_kern, 0);
-  m.add_at_edge (X_AXIS, RIGHT, d2, -dot_neg_kern, 0);
+  m.add_at_edge (X_AXIS, LEFT, d1, -dot_neg_kern);
+  m.add_at_edge (X_AXIS, RIGHT, d2, -dot_neg_kern);
 
   return m;
 }
index 077d51907d4878d50d5ac95839ce68e11e781268..0039b36415fffd906ca88cc16a981fdf86342bd3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
                   Erik Sandberg <mandolaerik@gmail.com>
 */
 
index 1d760da6dea9b8c2c7fb292289dd6ac3326d461f..3f45829882b8b174e73f99bb077973333800850e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "performance.hh"
index 59cc64a2e25c31de2d6036670de92b1c0cce71ba..439d9489f175727bc3ad0624179acaa49b8145d2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performance.hh"
@@ -34,15 +34,13 @@ Performance::~Performance ()
 }
 
 void
-Performance::output (Midi_stream &midi_stream)
+Performance::output (Midi_stream &midi_stream) const
 {
   int tracks_ = audio_staffs_.size ();
 
-  // ugh
-  int clocks_per_4 = 384;
-
-  midi_stream << Midi_header (1, tracks_, clocks_per_4);
-  message (_ ("Track...") + " ");
+  midi_stream.write (Midi_header (1, tracks_, 384));
+  if (be_verbose_global)
+    progress_indication (_ ("Track...") + " ");
   
   int channel = 0;
   for (vsize i = 0; i < audio_staffs_.size (); i++)
@@ -89,7 +87,7 @@ Performance::add_element (Audio_element *p)
 }
 
 void
-Performance::write_output (string out)
+Performance::write_output (string out) const
 {
   if (out == "-")
     out = "lelie.midi";
@@ -107,3 +105,7 @@ Performance::write_output (string out)
 }
 
 
+void
+Performance::process ()
+{
+}
index 6eb2b656c26f4716c4c8bb02b37def7e8faa5d65..4b3270f4ee3ccb1b755310efdec79d9b70e1139c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 9d99873989e8755c5bc3d72c115f0c050327d234..7add5ba193149b478ba252f285cfe89032f66f30 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index a96aac7761deb7518e5c69e6c6132463b5ee5a16..f062c986dbcb75a30c7f5947634ede72ba54452c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cstdlib>
@@ -85,7 +85,7 @@ LY_DEFINE (ly_pfb_to_pfa, "ly:pfb->pfa",
   vector<char> pfb_string = gulp_file (file_name, 0);
   char *pfa = pfb2pfa ((Byte *) &pfb_string[0], pfb_string.size ());
   
-  SCM pfa_scm = scm_makfrom0str (pfa);
+  SCM pfa_scm = scm_from_locale_string (pfa);
   free (pfa);
 
   if (be_verbose_global)
index c1261f3066eab33adc8171b28dd5a9b7fcb0c95c..b2301d38e50e5c0c260f38d0947daff4a57d1b6c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 6b1fc5b29db1f5e5065f42e45448efd0a06304cd..a7031fbb018cb1592cbc3d8d4c9a903cb0f0671b 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
index 8c76a60d138d793ddb236fc855cec947c626d27d..86964ce53f6de2c8fab41b516385405d06b5ea5b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "stencil.hh"
@@ -100,4 +100,4 @@ ADD_INTERFACE (Piano_pedal_bracket,
               "edge-height "
               "shorten-pair "
               "bracket-flare "
-              "pedal-text");
+              "pedal-text ");
index 8c919cb36f9d6d5eaab2dbb1be5a607000d2067f..703183b3c6d046c77f7431995318b01f0f9630b2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>,
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>,
                  Erik Sandberg <mandolaerik@gmail.com>
 
   Chris Jackson <chris@fluffhouse.org.uk> - extended to support
@@ -298,7 +298,7 @@ Piano_pedal_engraver::create_text_grobs (Pedal_info *p, bool mixed)
       if (!mixed)
        {
          if (!p->start_ev_)
-           p->event_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: `%s'", p->type_->base_name_.c_str ()));
+           p->event_drul_[STOP]->origin ()->warning (_f ("cannot find start of piano pedal: `%s'", p->type_->base_name_.c_str ()));
          else
            s = scm_cadr (strings);
          p->start_ev_ = p->event_drul_[START];
@@ -309,7 +309,7 @@ Piano_pedal_engraver::create_text_grobs (Pedal_info *p, bool mixed)
       if (!mixed)
        {
          if (!p->start_ev_)
-           p->event_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: `%s'", p->type_->base_name_.c_str ()));
+           p->event_drul_[STOP]->origin ()->warning (_f ("cannot find start of piano pedal: `%s'", p->type_->base_name_.c_str ()));
          else
            s = scm_caddr (strings);
          p->start_ev_ = 0;
@@ -344,7 +344,7 @@ Piano_pedal_engraver::create_bracket_grobs (Pedal_info *p, bool mixed)
 {
   if (!p->bracket_ && p->event_drul_[STOP])
     {
-      string msg = _f ("can't find start of piano pedal bracket: `%s'", p->type_->base_name_.c_str ());
+      string msg = _f ("cannot find start of piano pedal bracket: `%s'", p->type_->base_name_.c_str ());
       p->event_drul_[STOP]->origin ()->warning (msg);
       p->event_drul_[STOP] = 0;
     }
index 67d16d4019389dbc145aea0dc00f392dcf1c4c11..ef01942221f26ebffd24c620927ffaf7360de17a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
@@ -90,7 +90,7 @@ Piano_pedal_performer::process_music ()
       if (p->event_drul_[STOP])
        {
          if (!p->start_event_)
-           p->event_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: `%s'", pedal_type));
+           p->event_drul_[STOP]->origin ()->warning (_f ("cannot find start of piano pedal: `%s'", pedal_type));
          else
            {
              Audio_piano_pedal *a = new Audio_piano_pedal;
index ee2d4e32810fc51ee8b1d96ca0c216cf3d6b1f62..064c6343275974e0fafbd790e1fc30f9a36d8b0a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "pitch-interval.hh"
index 3beb9f43cf94ccffe41a07fcb73f76de6a09524f..440df366ebe68a7175b412bbfc09a010426e0326 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "pitch.hh"
@@ -22,22 +22,33 @@ LY_DEFINE (ly_pitch_transpose, "ly:pitch-transpose",
 
 /* Should add optional args.  */
 LY_DEFINE (ly_make_pitch, "ly:make-pitch",
-          3, 0, 0, (SCM octave, SCM note, SCM alter),
+          2, 1, 0, (SCM octave, SCM note, SCM alter),
           "@var{octave} is specified by an integer, "
           "zero for the octave containing middle C.  "
           "@var{note} is a number from 0 to 6, "
           "with 0 corresponding to C and 6 corresponding to B.  "
-          "The @var{alter} is zero for a natural, negative for "
-          "flats, or positive for sharps. ")
+          "The @var{alter} is a rational number of whole tones for alteration.")
 {
-  SCM_ASSERT_TYPE (scm_integer_p (octave) == SCM_BOOL_T, octave, SCM_ARG1, __FUNCTION__, "integer");
-  SCM_ASSERT_TYPE (scm_integer_p (note) == SCM_BOOL_T, note, SCM_ARG2, __FUNCTION__, "integer");
-  SCM_ASSERT_TYPE (scm_integer_p (alter) == SCM_BOOL_T, alter, SCM_ARG3, __FUNCTION__, "integer");
-
-  Pitch p (scm_to_int (octave), scm_to_int (note), scm_to_int (alter));
+  SCM_ASSERT_TYPE (scm_is_integer (octave), octave, SCM_ARG1, __FUNCTION__, "integer");
+  SCM_ASSERT_TYPE (scm_is_integer (note), note, SCM_ARG2, __FUNCTION__, "integer");
+  SCM_ASSERT_TYPE (scm_is_rational (alter),
+                  alter, SCM_ARG3, __FUNCTION__, "rational");
+  
+  Pitch p (scm_to_int (octave), scm_to_int (note),
+          ly_scm2rational (alter));
+  
   return p.smobbed_copy ();
 }
 
+LY_DEFINE (ly_pitch_negate, "ly:pitch-negate", 1, 0, 0,
+          (SCM p),
+          "Negate @var{p}.")
+{
+  Pitch *pp = unsmob_pitch (p);
+  SCM_ASSERT_TYPE (pp, p, SCM_ARG1, __FUNCTION__, "Pitch");
+  return pp->negated ().smobbed_copy ();
+}
+
 LY_DEFINE (ly_pitch_steps, "ly:pitch-steps", 1, 0, 0,
           (SCM p),
           "Number of steps counted from middle C of the pitch @var{p}.")
@@ -63,9 +74,9 @@ LY_DEFINE (ly_pitch_alteration, "ly:pitch-alteration",
 {
   Pitch *p = unsmob_pitch (pp);
   SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch");
-  int q = p->get_alteration ();
+  Rational q = p->get_alteration ();
 
-  return scm_from_int (q);
+  return ly_rational2scm (q);
 }
 
 LY_DEFINE (pitch_notename, "ly:pitch-notename",
@@ -84,7 +95,7 @@ LY_DEFINE (ly_pitch_quartertones, "ly:pitch-quartertones",
 {
   Pitch *p = unsmob_pitch (pp);
   SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch");
-  int q = p->quartertone_pitch ();
+  int q = p->rounded_quartertone_pitch ();
   return scm_from_int (q);
 }
 
@@ -94,7 +105,7 @@ LY_DEFINE (ly_pitch_semitones, "ly:pitch-semitones",
 {
   Pitch *p = unsmob_pitch (pp);
   SCM_ASSERT_TYPE (p, pp, SCM_ARG1, __FUNCTION__, "Pitch");
-  int q = p->semitone_pitch ();
+  int q = p->rounded_semitone_pitch ();
   return scm_from_int (q);
 }
 
index f072c3c84e209301a097a3354122f42172b60072..8fd4d4e26d213f2eb6d4d6e9cadc4ddcf1432bcf 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 566b729e24fdacd7c1bca1df2ff8aecc6f071357..7c43708890d506db29b1059ecafc77ef4d56b7bc 100644 (file)
@@ -3,31 +3,32 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "pitch.hh"
 
 #include "main.hh"
+#include "scale.hh"
 #include "string-convert.hh"
 #include "warn.hh"
 
 #include "ly-smobs.icc"
 
-Pitch::Pitch (int o, int n, int a)
+
+Pitch::Pitch (int o, int n, Rational a)
 {
   notename_ = n;
   alteration_ = a;
   octave_ = o;
   scale_ = default_global_scale; 
-  normalise ();
+  normalize ();
 }
 
 /* FIXME: why is octave == 0 and default not middleC ? */
 Pitch::Pitch ()
 {
   notename_ = 0;
-  alteration_ = 0;
   scale_ = default_global_scale; 
   octave_ = 0;
 }
@@ -37,7 +38,7 @@ Pitch::compare (Pitch const &m1, Pitch const &m2)
 {
   int o = m1.octave_ - m2.octave_;
   int n = m1.notename_ - m2.notename_;
-  int a = m1.alteration_ - m2.alteration_;
+  Rational a = m1.alteration_ - m2.alteration_;
 
   if (o)
     return o;
@@ -45,76 +46,69 @@ Pitch::compare (Pitch const &m1, Pitch const &m2)
     return n;
   if (a)
     return a;
+  
   return 0;
 }
 
 int
 Pitch::steps () const
 {
-  return notename_ + octave_ * scale_->step_semitones_.size ();
+  return notename_ + octave_ * scale_->step_tones_.size ();
 }
 
-/* Should be settable from input?  */
-// static Byte diatonic_scale_semitones[ ] = { 0, 2, 4, 5, 7, 9, 11 };
-
-
-
-/* Calculate pitch height in 12th octave steps.  Don't assume
-   normalised pitch as this function is used to normalise the pitch.  */
-int
-Pitch::semitone_pitch () const
+Rational
+Pitch::tone_pitch () const
 {
   int o = octave_;
   int n = notename_;
   while (n < 0)
     {
-      n += scale_->step_semitones_.size ();
+      n += scale_->step_tones_.size ();
       o--;
     }
 
-  if (alteration_ % 2)
-    programming_error ("semitone_pitch () called on quarter tone alteration.");
+  Rational tones ((o + n / scale_->step_tones_.size ()) * 6, 1);
+  tones += scale_->step_tones_[n % scale_->step_tones_.size ()];
 
-  return ((o + n / scale_->step_semitones_.size ()) * 12
-         + scale_->step_semitones_[n % scale_->step_semitones_.size ()]
-         + (alteration_ / 2));
+  tones += alteration_;
+  
+  return tones;
 }
 
+/* Calculate pitch height in 12th octave steps.  Don't assume
+   normalized pitch as this function is used to normalize the pitch.  */
 int
-Pitch::quartertone_pitch () const
+Pitch::rounded_semitone_pitch () const
 {
-  int o = octave_;
-  int n = notename_;
-  while (n < 0)
-    {
-      n += scale_->step_semitones_.size ();
-      o--;
-    }
+  return int (double (tone_pitch () * Rational (2)));
+}
 
-  return ((o + n / scale_->step_semitones_.size ()) * 24
-         + 2 * scale_->step_semitones_[n % scale_->step_semitones_.size ()]
-         + alteration_);
+int
+Pitch::rounded_quartertone_pitch () const
+{
+  return int (double (tone_pitch () * Rational (4)));
 }
 
 void
-Pitch::normalise ()
+Pitch::normalize ()
 {
-  int pitch = quartertone_pitch ();
-  while (notename_ >= (int) scale_->step_semitones_.size ())
+  Rational pitch = tone_pitch ();
+  while (notename_ >= (int) scale_->step_tones_.size ())
     {
-      notename_ -= scale_->step_semitones_.size ();
+      notename_ -= scale_->step_tones_.size ();
       octave_++;
-      alteration_ -= quartertone_pitch () - pitch;
+      alteration_ -= tone_pitch () - pitch;
     }
   while (notename_ < 0)
     {
-      notename_ += scale_->step_semitones_.size ();
+      notename_ += scale_->step_tones_.size ();
       octave_--;
-      alteration_ -= quartertone_pitch () - pitch;
+      alteration_ -= tone_pitch () - pitch;
     }
-  while (alteration_ > DOUBLE_SHARP)
+
+  while (alteration_ > Rational (1))
     {
-      if (notename_ == 6)
+      if (notename_ == int (scale_->step_tones_.size ()))
        {
          notename_ = 0;
          octave_++;
@@ -122,47 +116,46 @@ Pitch::normalise ()
       else
        notename_++;
 
-      alteration_ = 0;
-      alteration_ -= quartertone_pitch () - pitch;
+      alteration_ = Rational (0);
+      alteration_ -= tone_pitch () - pitch;
     }
-
-  while (alteration_ < DOUBLE_FLAT)
+  while (alteration_ < Rational(-1))
     {
       if (notename_ == 0)
        {
-         notename_ = 6;
+         notename_ = scale_->step_tones_.size ();
          octave_--;
        }
       else
        notename_--;
 
       alteration_ = 0;
-      alteration_ -= quartertone_pitch () - pitch;
+      alteration_ -= tone_pitch () - pitch;
     }
 }
 
-/* WHugh, wat een intervaas */
 void
 Pitch::transpose (Pitch delta)
 {
-  int new_semi = quartertone_pitch () +delta.quartertone_pitch ();
+  Rational new_alter = tone_pitch () + delta.tone_pitch ();
+
   octave_ += delta.octave_;
   notename_ += delta.notename_;
-  alteration_ += new_semi - quartertone_pitch ();
+  alteration_ += new_alter - tone_pitch ();
 
-  normalise ();
+  normalize ();
 }
 
 Pitch
 pitch_interval (Pitch const &from, Pitch const &to)
 {
-  int sound = to.quartertone_pitch () - from.quartertone_pitch ();
+  Rational sound = to.tone_pitch () - from.tone_pitch ();
   Pitch pt (to.get_octave () - from.get_octave (),
            to.get_notename () - from.get_notename (),
 
            to.get_alteration () - from.get_alteration ());
 
-  return pt.transposed (Pitch (0, 0, sound - pt.quartertone_pitch ()));
+  return pt.transposed (Pitch (0, 0, sound - pt.tone_pitch ()));
 }
 
 /* FIXME
@@ -173,11 +166,12 @@ char const *accname[] = {"eses", "eseh", "es", "eh", "",
 string
 Pitch::to_string () const
 {
-  int n = (notename_ + 2) % scale_->step_semitones_.size ();
+  int n = (notename_ + 2) % scale_->step_tones_.size ();
   string s = ::to_string (char (n + 'a'));
-  if (alteration_)
-    s += string (accname[alteration_ - DOUBLE_FLAT]);
-
+  Rational qtones = alteration_ * Rational (4,1);
+  int qt = int (rint (Real (qtones)));
+      
+  s += string (accname[qt + 4]);
   if (octave_ >= 0)
     {
       int o = octave_ + 1;
@@ -251,7 +245,7 @@ Pitch::print_smob (SCM s, SCM port, scm_print_state *)
 {
   Pitch *r = (Pitch *) SCM_CELL_WORD_1 (s);
   scm_puts ("#<Pitch ", port);
-  scm_display (scm_makfrom0str (r->to_string ().c_str ()), port);
+  scm_display (ly_string2scm (r->to_string ()), port);
   scm_puts (" >", port);
   return 1;
 }
@@ -294,7 +288,7 @@ Pitch::get_notename () const
   return notename_;
 }
 
-int
+Rational
 Pitch::get_alteration () const
 {
   return alteration_;
@@ -307,3 +301,14 @@ Pitch::transposed (Pitch d) const
   p.transpose (d);
   return p;
 }
+
+Rational NATURAL_ALTERATION (0);
+Rational FLAT_ALTERATION (-1, 2);
+Rational DOUBLE_FLAT_ALTERATION (-1);
+Rational SHARP_ALTERATION (1, 2);
+
+Pitch
+Pitch::negated () const
+{
+  return pitch_interval (*this, Pitch ());
+}
index da74dafcdd75453b51b82b0115842ef662775bfc..2d632a02a13347e4de3c623abd38fbfeaf5dc8f7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -83,7 +83,7 @@ Pitched_trill_engraver::make_trill (Stream_event *ev)
 
   SCM handle = scm_assoc (key, keysig);
   bool print_acc
-    = (handle == SCM_BOOL_F) || p->get_alteration () == 0;
+    = (handle == SCM_BOOL_F) || p->get_alteration () == Rational (0);
 
   if (trill_head_)
     {
@@ -110,7 +110,7 @@ Pitched_trill_engraver::make_trill (Stream_event *ev)
       trill_accidental_ = make_item ("TrillPitchAccidental", ev->self_scm ());
 
       // fixme: naming -> alterations
-      trill_accidental_->set_property ("accidentals", scm_list_1 (scm_from_int (p->get_alteration ())));
+      trill_accidental_->set_property ("alteration", ly_rational2scm (p->get_alteration ()));
       Side_position_interface::add_support (trill_accidental_, trill_head_);
       
       trill_head_->set_object ("accidental-grob", trill_accidental_->self_scm ());
index 36eac12bca69bbd2f50b87310bd9e94b5e374adf..d1302391e477983a49aed12317f03569a04ef5ae 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "pointer-group-interface.hh"
@@ -72,7 +72,9 @@ ly_scm2link_array (SCM x)
 vector<Grob*> const &
 internal_extract_grob_array (Grob const *elt, SCM symbol)
 {
-  return ly_scm2link_array (elt->internal_get_object (symbol));
+  return elt
+    ? ly_scm2link_array (elt->internal_get_object (symbol))
+    : empty_array;
 }
 
 vector<Item*>
index bfa355d9a2a616455fe805cb4d2b33223f889347..dc53e51d3387e1bdae82b12774a3a6c08be4fcbe 100644 (file)
@@ -3,10 +3,11 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "prob.hh"
+#include "skyline.hh"
 
 LY_DEFINE (ly_prob_set_property_x, "ly:prob-set-property!",
           2, 1, 0, (SCM obj, SCM sym, SCM value),
@@ -83,3 +84,28 @@ LY_DEFINE(ly_paper_system_p, "ly:paper-system?",
 {
   return ly_prob_type_p (obj, ly_symbol2scm ("paper-system"));
 }
+
+LY_DEFINE (ly_paper_system_minimum_distance, "ly:paper-system-minimum-distance",
+          2, 0, 0, (SCM sys1, SCM sys2),
+          "Measure the minimum distance between these two paper-systems "
+          "using their stored skylines if possible and falling back to "
+          "their extents otherwise.")
+{
+  Real ret = 0;
+  Prob *p1 = unsmob_prob (sys1);
+  Prob *p2 = unsmob_prob (sys2);
+  Skyline_pair *sky1 = Skyline_pair::unsmob (p1->get_property ("skylines"));
+  Skyline_pair *sky2 = Skyline_pair::unsmob (p2->get_property ("skylines"));
+
+  if (sky1 && sky2)
+    ret = (*sky1)[DOWN].distance ((*sky2)[UP]);
+  else
+    {
+      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];
+    }
+  return scm_from_double (ret);
+}
index a45e089a08fce1d1fa53a524b4a9726a04e387f8..7438de3dcb05fa6a1500db02cf3f672a07c8014e 100644 (file)
@@ -3,13 +3,14 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "prob.hh"
 #include "main.hh"
 #include "item.hh"
 #include "input.hh"
+#include "profile.hh"
 
 #include "ly-smobs.icc"
 
@@ -140,6 +141,11 @@ Prob::print_smob (SCM smob, SCM port, scm_print_state*)
 SCM
 Prob::internal_get_property (SCM sym) const
 {
+#ifndef NDEBUG
+  if (profile_property_accesses)
+    note_property_access (&prob_property_lookup_table, sym);
+#endif
+
   /*
     TODO: type checking
    */
index 6531a3f3302f7877e0bbd3a331961bbafe842058..0390a64a627d1b8180f71643ccf8bed85c374745 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "profile.hh"
@@ -12,22 +12,25 @@ void note_property_access (SCM *table, SCM sym);
 
 SCM context_property_lookup_table;
 SCM grob_property_lookup_table;
+SCM prob_property_lookup_table;
 
-LY_DEFINE (ly_context_property_lookup_stats, "ly:context-property-lookup-stats",
-          0, 0, 0, (),
-          "")
+LY_DEFINE (ly_property_lookup_stats, "ly:property-lookup-stats",
+          1, 0, 0, (SCM sym),
+          "Return hash table with a property access corresponding to @var{sym}. "
+          "Choices are prob, grob and context.")
 {
-  return context_property_lookup_table ? context_property_lookup_table
-    : scm_c_make_hash_table (1);
+  if (sym == ly_symbol2scm ("context"))
+    return context_property_lookup_table ? context_property_lookup_table
+      : scm_c_make_hash_table (1);
+  if (sym == ly_symbol2scm ("prob"))
+    return prob_property_lookup_table ? prob_property_lookup_table
+      : scm_c_make_hash_table (1);
+  if (sym == ly_symbol2scm ("grob"))
+    return grob_property_lookup_table ? grob_property_lookup_table
+      : scm_c_make_hash_table (1);
+  return scm_c_make_hash_table (1);
 }
 
-LY_DEFINE (ly_property_lookup_stats, "ly:grob-property-lookup-stats",
-          0, 0, 0, (),
-          "")
-{
-  return grob_property_lookup_table ? grob_property_lookup_table
-    : scm_c_make_hash_table (1);
-}
 
 void
 note_property_access (SCM *table, SCM sym)
index 02213e4c71a68d1cfdddc2276e7e1b35580f36bd..5d9bebd7382728656addb4e9e5b01ac75fe1776c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "program-option.hh"
 #include <cstring>
 using namespace std;
 
+#include "profile.hh"
 #include "international.hh"
 #include "main.hh"
 #include "parse-scm.hh"
 #include "string-convert.hh"
 #include "warn.hh"
 
-/* Write midi as formatted ascii stream? */
-bool do_midi_debugging_global;
-bool use_object_keys;
 bool debug_skylines;
 
 /*
@@ -48,11 +46,6 @@ void internal_set_option (SCM var, SCM val)
       profile_property_accesses = to_boolean (val);
       val = scm_from_bool (to_boolean (val));
     }
-  else if (var == ly_symbol2scm ("debug-midi"))
-    {
-      do_midi_debugging_global = to_boolean (val);
-      val = scm_from_bool (to_boolean (val));
-    }
   else if (var == ly_symbol2scm ("point-and-click"))
     {
       point_and_click_global = to_boolean (val);
@@ -73,6 +66,11 @@ void internal_set_option (SCM var, SCM val)
       parsed_objects_should_be_dead = to_boolean (val);
       val = scm_from_bool (parsed_objects_should_be_dead);
     }
+  else if (var == ly_symbol2scm ("safe"))
+    {
+      be_safe_global = to_boolean (val);
+      val = scm_from_bool (be_safe_global);
+    }
   else if (var == ly_symbol2scm ("old-relative"))
     {
       lily_1_8_relative = to_boolean (val);
@@ -80,11 +78,6 @@ void internal_set_option (SCM var, SCM val)
       lily_1_8_compatibility_used = to_boolean (val);
       val = scm_from_bool (to_boolean (val));
     }
-  else if (var == ly_symbol2scm ("object-keys"))
-    {
-      use_object_keys = to_boolean (val);
-      val = scm_from_bool (to_boolean (val));
-    }
   else if (var == ly_symbol2scm ("strict-infinity-checking"))
     {
       strict_infinity_checking = to_boolean (val);
@@ -152,12 +145,11 @@ get_help_string ()
 }
 
 LY_DEFINE (ly_option_usage, "ly:option-usage", 0, 0, 0, (),
-          "Print ly:set-option usage")
+          "Print @code{ly:set-option} usage")
 {
   string help = get_help_string ();
-  fputs (help.c_str (), stdout);
+  progress_indication (help);
 
-  exit (0);
   return SCM_UNSPECIFIED;
 }
 
@@ -188,7 +180,10 @@ LY_DEFINE (ly_set_option, "ly:set-option", 1, 1, 0, (SCM var, SCM val),
                   __FUNCTION__, "symbol");
 
   if (ly_symbol2scm ("help") == var)
-    ly_option_usage ();
+    {
+      ly_option_usage ();
+      exit (0);
+    }
 
   if (val == SCM_UNDEFINED)
     val = SCM_BOOL_T;
@@ -208,6 +203,18 @@ LY_DEFINE (ly_set_option, "ly:set-option", 1, 1, 0, (SCM var, SCM val),
   return SCM_UNSPECIFIED;
 }
 
+LY_DEFINE (ly_command_line_options, "ly:command-line-options", 0, 0, 0, (),
+          "The Scheme specified on command-line with @samp{-d}.")
+{
+  return ly_string2scm (init_scheme_variables_global); 
+}
+
+LY_DEFINE (ly_command_line_code, "ly:command-line-code", 0, 0, 0, (),
+          "The Scheme specified on command-line with @samp{-e}.")
+{
+  return ly_string2scm (init_scheme_code_global); 
+}
+
 LY_DEFINE (ly_command_line_verbose_p, "ly:command-line-verbose?", 0, 0, 0, (),
           "Was be_verbose_global set?")
 {
@@ -216,6 +223,13 @@ LY_DEFINE (ly_command_line_verbose_p, "ly:command-line-verbose?", 0, 0, 0, (),
 
 
 
+LY_DEFINE (ly_all_option, "ly:all-options",
+          0, 0, 0, (),
+          "Get all option settings in an alist.")
+{
+  return ly_hash2alist (option_hash);
+}
+
 
 LY_DEFINE (ly_get_option, "ly:get-option", 1, 0, 0, (SCM var),
           "Get a global option setting.")
@@ -226,6 +240,7 @@ LY_DEFINE (ly_get_option, "ly:get-option", 1, 0, 0, (SCM var),
 }
 
 
+
 bool
 get_program_option (const char *s)
 {
index cfa6fb62861cf66f3e641e386e71100cea0fe3a6..f067a6628212b29ec6d2d9350676fb7483adbd03 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "property-iterator.hh"
index d7a8498a928c8313f12ac899f97e1b9919ae64e7..ccb91ab08777d182274c23a235007521de295635 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "protected-scm.hh"
index 849472c329a34a52ca1e594740231e6281cb34a9..7f42310f7f497b6f9d48c2fda2a978b885f24b1e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music-wrapper-iterator.hh"
@@ -244,9 +244,9 @@ Quote_iterator::process (Moment m)
                    mp = *me_pitch;
 
                  Pitch diff = pitch_interval (qp, mp);
-
-                 SCM props =  transpose_mutable (ev->get_property_alist (true), diff);
-                 ev = new Stream_event (ev->get_property ("class"), props);
+                 ev = ev->clone ();
+                 
+                 transpose_mutable (ev->get_property_alist (true), diff);
                  transposed_musics_ = scm_cons (ev->unprotect (), transposed_musics_);
                }
              quote_outlet_.get_outlet ()->event_source ()->broadcast (ev);
index 388e2f2d0fcd31ff1d6b69d8082f6fa560b426e5..1c15364b861b5479b0f9cd08a694047169b20e85 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "input.hh"
@@ -45,5 +45,6 @@ Relative_octave_check::relative_callback (SCM music, SCM last_pitch)
     }
 
   return Pitch (p.get_octave () + delta_oct,
-               p.get_notename (), p.get_alteration ()).smobbed_copy ();
+               p.get_notename (),
+               p.get_alteration ()).smobbed_copy ();
 }
index f940a8b68bb0040f55ab7b3d4633d207cab00c73..cd8aead2d0d3fa4b0d41ac6847096a38d7867db6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
index ac4c31bac4658673c9af16e3b9f0363ef969b783..47502f7dbda9f054f9524c0587763cf5b26bc91b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -41,9 +41,15 @@ sane_putenv (char const *key, string value, bool overwrite)
       char *s = strdup (combine.c_str ());
 
       if (be_verbose_global)
-       progress_indication (_f ("Setting %s to %s\n" , key, value.c_str ())); 
+       progress_indication (_f ("Setting %s to %s" , key, value.c_str ())
+                            + "\n");
                             
-      return putenv (s);
+      int retval =  putenv (s);
+      /*
+       unfortunately, we can't portably free S here,
+       due to various bugs in glibc prior to 2.1.1
+       */ 
+      return retval;
     }
   
   return -1;
@@ -192,7 +198,7 @@ setup_paths (char const *argv0_ptr)
 #endif /* __MINGW32__ */
 
          if (argv0_abs.empty ())
-           programming_error ("can't find absolute argv0.");
+           programming_error ("cannot find absolute argv0");
        }
 
       string bindir = dir_name (argv0_abs);
@@ -227,11 +233,7 @@ setup_paths (char const *argv0_ptr)
   /*
     When running from build dir, a full LILYPOND_PREFIX is set-up at
 
-        $(OUTBASE)/share/lilypond/TOPLEVEL_VERSION
-
-     This historical hack will allow the shorthand
-
-        LILYPONDPREFIX=out lily/out/lilypond ...
+        $(OUTBASE)/{share,lib}/lilypond/current
 
   */
   
@@ -350,12 +352,13 @@ void
 read_relocation_file (string filename)
 {
   if (be_verbose_global)
-    progress_indication (_f ("Relocation file %s\n", filename.c_str ()));
+    progress_indication (_f ("Relocation file: %s", filename.c_str ())
+                        + "\n");
       
   char const *cname = filename.c_str ();
   FILE *f = fopen (cname, "r");
   if (!f)
-    error (_f ("can't open file %s", cname));
+    error (_f ("cannot open file: `%s'", cname));
 
   while (!feof (f))
     {
index 56301cd2a33b9c9a5b51fb32f67e0bb95fde4be9..3e3025556f88b31d9784a8c112db9a6bc1aca204 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -102,7 +102,7 @@ Repeat_acknowledge_engraver::process_music ()
   if (!scm_is_string (wb) || ly_is_equal (db, wb))
     {
       if (s != "" || (volta_found && !scm_is_string (wb)))
-       context ()->set_property ("whichBar", scm_makfrom0str (s.c_str ()));
+       context ()->set_property ("whichBar", ly_string2scm (s));
     }
 }
 
index 7678850d8933ed0f2b95ca9c6f86033de8bbceb2..6b16fbc08841863d01be8fc7e3afc74ae746214a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -60,14 +60,23 @@ Repeat_tie_engraver::acknowledge_note_head (Grob_info inf)
     {
       semi_tie_column_ = make_item ("RepeatTieColumn", event_->self_scm ());
     }
-  
-  Grob *semi_tie = make_item ("RepeatTie", event_->self_scm ());
+
+  SCM cause = event_->self_scm ();
+  Grob *semi_tie = make_item ("RepeatTie", cause);
   semi_tie->set_object ("note-head", inf.grob ()->self_scm ());
   
   Pointer_group_interface::add_grob (semi_tie_column_, ly_symbol2scm ("ties"),
                                     semi_tie);
   semi_tie->set_parent (semi_tie_column_, Y_AXIS);
   semi_ties_.push_back (semi_tie);
+
+
+  if (is_direction (unsmob_stream_event (cause)->get_property ("direction")))
+    {
+      Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction"));
+      semi_tie->set_property ("direction", scm_from_int (d)); 
+    }
+
 }
 
 ADD_ACKNOWLEDGER (Repeat_tie_engraver, note_head);
index be05ae58b01e511e55fbd8947b38da4c54967970..666b1fbf1dee6bccb2976ddd4c48e73e13ff23a1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "repeated-music.hh"
index fb1c763b9eb8bf7002d8b6d350b9621e87997589..d0704a10b50c28a04b57da7dcbd5908a86b4a169 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "warn.hh"
index 3e823288378faa780767edfbebe2ababb19326f5..b8ad86ba916a9c5e31633da5d44a7548a4bcdb51 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "rest-collision.hh"
@@ -101,16 +101,7 @@ Rest_collision::calc_positioning_done (SCM smob)
     {
       Grob *e = elts[i];
       if (unsmob_grob (e->get_object ("rest")))
-       {
-         /*
-           Ignore rests under beam.
-         */
-         Grob *st = unsmob_grob (e->get_object ("stem"));
-         if (st && unsmob_grob (st->get_object ("beam")))
-           continue;
-
-         rests.push_back (e);
-       }
+       rests.push_back (e);
       else
        notes.push_back (e);
     }
@@ -126,7 +117,7 @@ Rest_collision::calc_positioning_done (SCM smob)
     no partners to collide with
   */
   if (rests.size () + notes.size () < 2)
-    return SCM_UNSPECIFIED;
+    return SCM_BOOL_T;
 
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   /*
@@ -148,7 +139,7 @@ Rest_collision::calc_positioning_done (SCM smob)
          if (d)
            ordered_rests[d].push_back (rests[i]);
          else
-           rests[d]->warning (_ ("can't resolve rest collision: rest direction not set"));
+           rests[d]->warning (_ ("cannot resolve rest collision: rest direction not set"));
        }
 
       Direction d = LEFT;
@@ -164,7 +155,7 @@ Rest_collision::calc_positioning_done (SCM smob)
              if (ordered_rests[-d].size () > 1)
                ordered_rests[-d][0]->warning (_ ("too many colliding rests"));
 
-             return SCM_UNSPECIFIED;
+             return SCM_BOOL_T;
            }
        }
       while (flip (&d) != LEFT);
@@ -219,14 +210,14 @@ Rest_collision::calc_positioning_done (SCM smob)
          }
 
       if (!rcol)
-       return SCM_UNSPECIFIED;
+       return SCM_BOOL_T;
 
       Grob *rest = Note_column::get_rest (rcol);
       Grob *common = common_refpoint_of_array (notes, rcol, Y_AXIS);
 
       Interval restdim = rcol->extent (common, Y_AXIS);
       if (restdim.is_empty ())
-       return SCM_UNSPECIFIED;
+       return SCM_BOOL_T;
 
       Real staff_space = Staff_symbol_referencer::staff_space (rcol);
       Real minimum_dist = robust_scm2double (me->get_property ("minimum-distance"), 1.0) * staff_space;
@@ -258,7 +249,7 @@ Rest_collision::calc_positioning_done (SCM smob)
 
       Note_column::translate_rests (rcol, discrete_y);
     }
-  return SCM_UNSPECIFIED;
+  return SCM_BOOL_T;
 }
 
 ADD_INTERFACE (Rest_collision,
index ec812ec2ed4c30107e5649c83f6434c72cebb5e9..e6e7ecb7dea588df79f98712c2d07f4bff58a3fc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index e3543e4cb9545f2bef8eee0b2ce1b8b48fcf5afa..1e15144839167141867820384a67d371211833d6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "rest.hh"
@@ -40,18 +40,6 @@ Rest::y_offset_callback (SCM smob)
   else
     amount += ss / 2;
 
-  Grob *dot = unsmob_grob (me->get_object ("dot"));
-  if (dot && duration_log > 4) // UGH.
-    {
-      dot->set_property ("staff-position",
-                      scm_from_int ((duration_log == 7) ? 4 : 3));
-    }
-  if (dot && duration_log >= -1 && duration_log <= 1) // UGH again.
-    {
-      dot->set_property ("staff-position",
-                        scm_from_int ((duration_log == 0) ? -1 : 1));
-    }
-
   if (!position_override)
     amount += 2 * ss * get_grob_direction (me);; 
   
@@ -187,12 +175,25 @@ Rest::generic_extent_callback (Grob *me, Axis a)
   return ly_interval2scm (unsmob_stencil (m)->extent (a));
 }
 
+MAKE_SCHEME_CALLBACK (Rest, pure_height, 3);
+SCM
+Rest::pure_height (SCM smob, SCM start, SCM end)
+{
+  (void) start;
+  (void) end;
+  
+  Grob *me = unsmob_grob (smob);
+  SCM m = brew_internal_stencil (me, false);
+  return ly_interval2scm (unsmob_stencil (m)->extent (Y_AXIS));
+}
+
 ADD_INTERFACE (Rest,
               "A rest symbol.",
 
               /* properties */
                  
-              "style "
               "direction "
-              "minimum-distance");
+              "minimum-distance "
+              "style "
+              );
 
index ec8b754873ce9af8bb0550ff07adb90eee5472cb..fc21e618eb202059a234c64e33e29101aed22721 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -47,11 +47,6 @@ class Rhythmic_column_engraver : public Engraver
   Grob *note_column_;
   Grob *dotcol_;
 
-  Grob *last_spacing_;
-  Grob *spacing_;
-
-  void add_spacing_item (Grob *);
-
   TRANSLATOR_DECLARATIONS (Rhythmic_column_engraver);
 protected:
 
@@ -64,31 +59,13 @@ protected:
 
 Rhythmic_column_engraver::Rhythmic_column_engraver ()
 {
-  spacing_ = 0;
-  last_spacing_ = 0;
 
   stem_ = 0;
   note_column_ = 0;
   dotcol_ = 0;
 }
 
-void
-Rhythmic_column_engraver::add_spacing_item (Grob *g)
-{
-  if (spacing_)
-    {
-      Pointer_group_interface::add_grob (spacing_,
-                                        ly_symbol2scm ("left-items"),
-                                        g);
 
-      if (last_spacing_)
-       {
-         Pointer_group_interface::add_grob (last_spacing_,
-                                            ly_symbol2scm ("right-items"),
-                                            g);
-       }
-    }
-}
 void
 Rhythmic_column_engraver::process_acknowledged ()
 {
@@ -97,9 +74,6 @@ Rhythmic_column_engraver::process_acknowledged ()
       if (!note_column_)
        {
          note_column_ = make_item ("NoteColumn", rheads_[0]->self_scm ());
-
-         spacing_ = make_item ("NoteSpacing", SCM_EOL);
-         add_spacing_item (note_column_);
        }
 
       for (vsize i = 0; i < rheads_.size (); i++)
@@ -147,13 +121,6 @@ void
 Rhythmic_column_engraver::stop_translation_timestep ()
 {
   note_column_ = 0;
-
-  if (spacing_)
-    {
-      last_spacing_ = spacing_;
-      spacing_ = 0;
-    }
-
   dotcol_ = 0;
   stem_ = 0;
 }
@@ -164,6 +131,6 @@ ADD_ACKNOWLEDGER (Rhythmic_column_engraver, rhythmic_head);
 
 ADD_TRANSLATOR (Rhythmic_column_engraver,
                /* doc */ "Generates NoteColumn, an objects that groups stems, noteheads and rests.",
-               /* create */ "NoteColumn NoteSpacing",
+               /* create */ "NoteColumn",
                /* read */ "",
                /* write */ "");
index 00ef3ae020abadfe6e7da11dca70511c1428a3ae..93349e06fee49a6e50c789a4cbccf202680e23f0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "rhythmic-head.hh"
index 4801eb3cbe5d57c1ed3bd8296c2bc01cc32b67b8..2e6ab483dbf7f5b10bf7e4d4686b0ad47207f2d7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "rod.hh"
index b71f43fe207106a5d1a2171127642e9c1ddde937..c9fa8b7f22afc7499a1782a0f956122eb3e804d4 100644 (file)
@@ -3,39 +3,45 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
-#include  "pitch.hh"
+#include "scale.hh"
 
 #include "ly-smobs.icc"
 
+/*
+  todo: put string <-> pitch here too.
+
+*/
 LY_DEFINE (ly_make_scale, "ly:make-scale",
           1, 0, 0, (SCM steps),
           "Create a scale. Takes a vector of ints as argument")
 {
   bool type_ok = scm_is_vector (steps);
 
-  vector<int> semitones; 
+  vector<Rational> semitones; 
   if (type_ok)
     {
       int len = scm_c_vector_length (steps);
       for (int i = 0 ; i < len; i++)
        {
          SCM step = scm_c_vector_ref (steps, i);
-         type_ok = type_ok && scm_is_integer (step);
+         type_ok = type_ok && scm_is_rational (step);
          if (type_ok)
-           semitones.push_back (scm_to_int (step));
+           {
+             Rational from_c (scm_to_int (scm_numerator (step)),
+                              scm_to_int (scm_denominator (step)));
+             semitones.push_back (from_c);
+           }
        }
     }
-
   
   SCM_ASSERT_TYPE (type_ok, steps, SCM_ARG1, __FUNCTION__, "vector of int");
 
-
   Scale *s = new Scale;
-  s->step_semitones_ = semitones;
+  s->step_tones_ = semitones;
 
   SCM retval =  s->self_scm ();
 
@@ -96,7 +102,7 @@ Scale::Scale ()
 
 Scale::Scale (Scale const &src)
 {
-  step_semitones_ = src.step_semitones_;
+  step_tones_ = src.step_tones_;
   smobify_self ();
 }
 
index b8946871c0061bb7c44a3f484fdca08477801541..5d46d7fc5b15a9d76f7822113726a8748f2f9dea 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Erik Sandberg  <mandolaerik@gmail.com>
+  (c) 2006--2007 Erik Sandberg  <mandolaerik@gmail.com>
 */
 
 #include "scheme-listener.hh"
@@ -16,7 +16,7 @@ LY_DEFINE (ly_make_listener, "ly:make-listener",
           "\n"
           " @var{callback} should take exactly one argument." )
 {
-  SCM_ASSERT_TYPE (scm_procedure_p (callback), callback, SCM_ARG1, __FUNCTION__, "procedure");
+  SCM_ASSERT_TYPE (ly_is_procedure (callback), callback, SCM_ARG1, __FUNCTION__, "procedure");
   Scheme_listener *l = new Scheme_listener (callback);
   SCM listener = GET_LISTENER (l->call).smobbed_copy ();
   l->unprotect ();
index d6ef4751507fb75e9791dc0a290789936a1239e9..7d2f9da8244ad872d7ddc55976ffdbfd9bb1ccee 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Erik Sandberg  <mandolaerik@gmail.com>
+  (c) 2006--2007 Erik Sandberg  <mandolaerik@gmail.com>
 */
 
 #include "scheme-listener.hh"
index 5b889ace4fa2309cca7652b2ccfbab97f456a3ca..e64de8b3979abe3c9f93b4b5254d7c3a7430fdd1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "scm-hash.hh"
index 91cca081e727f21c6611a460d329e4c79973ceae..eb89e555f83819771cc2054c6e7e1adde0f0d9e4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "score-engraver.hh"
@@ -79,8 +79,7 @@ Score_engraver::initialize ()
 
   SCM props = updated_grob_properties (context (), ly_symbol2scm ("System"));
 
-  Object_key const *sys_key = context ()->get_grob_key ("System");
-  pscore_->typeset_system (new System (props, sys_key));
+  pscore_->typeset_system (new System (props));
   
   system_ = pscore_->root_system ();
   context ()->set_property ("rootSystem", system_->self_scm ());
@@ -99,6 +98,20 @@ Score_engraver::connect_to_context (Context *c)
   d->add_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish"));
 }
 
+/*
+  uncovered:
+  
+  check_removal always returns false for Score contexts, it has been that way 
+since I joined the project. There is a reason for this: The typeset score is 
+stored in the Score_engraver, which in turn is accessed through the 
+Global_context returned by ly:run-translator. So the score-translator must be 
+connected to the score-context after run-translator finishes.
+
+I plan to change this: we should junk run-translator, and instead keep track 
+of both context and translator in the SCM code, and access the typeset score 
+directly via the created global-translator. Then it would be possible to 
+disconnect score-translators at iteration time. -es
+ */
 void
 Score_engraver::disconnect_from_context ()
 {
@@ -171,7 +184,7 @@ ADD_TRANSLATOR_GROUP (Score_engraver,
                      /* read */
                      "currentMusicalColumn "
                      "currentCommandColumn "
-                     "verticallySpacedContexts",
+                     "verticallySpacedContexts ",
 
                      /* write */
                      "");
index 73f79add862ba55bdd66b589d80eede1d5238532..99d2f84967ee74f366ab5e0db653b199415bc99d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "score-performer.hh"
@@ -92,6 +92,7 @@ Score_performer::prepare (SCM sev)
   SCM sm = ev->get_property ("moment");
   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);
 }
 
@@ -113,7 +114,7 @@ Score_performer::one_time_step (SCM)
     {
       if (!skipping_)
         {
-         skip_start_mom_ = audio_column_->at_mom ();
+         skip_start_mom_ = audio_column_->when ();
          skipping_ = true;
         }
     }
@@ -121,11 +122,11 @@ Score_performer::one_time_step (SCM)
     {
       if (skipping_)
         {
-         offset_mom_ -= audio_column_->at_mom () - skip_start_mom_;
+         offset_mom_ -= audio_column_->when () - skip_start_mom_;
          skipping_ = false;
        }
 
-      audio_column_->offset_at_mom (offset_mom_);
+      audio_column_->offset_when (offset_mom_);
       precomputed_recurse_over_translators (context (), PROCESS_MUSIC, UP);
       do_announces ();
     }
index c188de3704d9e1a7ea9d32d16250ad363cbe3f87..eebdedbb95c3d8614b043d932a799d1e9896b25e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "score.hh"
@@ -11,7 +11,9 @@
 #include "music.hh"
 #include "output-def.hh"
 #include "global-context.hh"
-#include "lilypond-key.hh"
+#include "music-output.hh"
+#include "paper-score.hh"
+#include "paper-book.hh"
 
 LY_DEFINE (ly_make_score, "ly:make-score",
           1, 0, 0,
@@ -27,8 +29,51 @@ LY_DEFINE (ly_make_score, "ly:make-score",
   return score->unprotect ();
 }
 
+LY_DEFINE (ly_score_output_defs, "ly:score-output-defs",
+          1, 0, 0, (SCM score),
+          "All output defs in a score.")
+{
+  Score *sc = unsmob_score (score);
+  SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score");
+
+  SCM l = SCM_EOL;
+  for (vsize i = 0; i < sc->defs_.size (); i++)
+    l = scm_cons (sc->defs_[i]->self_scm(), l);
+  return scm_reverse_x (l, SCM_EOL);
+}
+
+
+
+LY_DEFINE (ly_score_header, "ly:score-header",
+          1, 0, 0, (SCM score),
+          "return score header.")
+{
+  Score *sc = unsmob_score (score);
+  SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score");
+  return sc->header_;
+}
+
+
+LY_DEFINE (ly_score_music, "ly:score-music",
+          1, 0, 0, (SCM score),
+          "return score music.")
+{
+  Score *sc = unsmob_score (score);
+  SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score");
+  return sc->get_music ();
+}
+
+LY_DEFINE (ly_score_error_p, "ly:score-error?",
+          1, 0, 0, (SCM score),
+          "Was there an error in the score?")
+{
+  Score *sc = unsmob_score (score);
+  SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score");
+  return scm_from_bool (sc->error_found_);
+}
+
 LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
-          2, 1, 0, (SCM score, SCM layout, SCM key),
+          2, 0, 0, (SCM score, SCM layout),
           "Run @var{score} through @var{layout}, an output definition, "
           "scaled to correct output-scale already, "
           "return a list of layout-lines. "
@@ -61,55 +106,9 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
      itself. */
   score_def->parent_ = od;
 
-  SCM context = ly_run_translator (sc->get_music (), score_def->self_scm (),
-                                  key);
+  SCM context = ly_run_translator (sc->get_music (), score_def->self_scm ());
   SCM output = ly_format_output (context);
 
   scm_remember_upto_here_1 (prot);
   return output;
 }
-
-LY_DEFINE (ly_score_process, "ly:score-process",
-          5, 0, 0,
-          (SCM score_smob,
-           SCM default_header,
-           SCM default_paper,
-           SCM default_layout,
-           SCM basename),
-          "Print score without page-layout: just print the systems.")
-{
-  Score *score = unsmob_score (score_smob);
-
-  SCM_ASSERT_TYPE (score, score_smob, SCM_ARG1, __FUNCTION__, "score");
-
-  // allow header to be undefined.
-  SCM_ASSERT_TYPE (unsmob_output_def (default_paper),
-                  default_header, SCM_ARG3, __FUNCTION__, "\\paper block");
-  SCM_ASSERT_TYPE (unsmob_output_def (default_layout),
-                  default_header, SCM_ARG4, __FUNCTION__, "\\layout block");
-
-  Object_key *key = new Lilypond_general_key (0, score->user_key_, 0);
-
-  if (score->error_found_)
-    return SCM_UNSPECIFIED;
-
-  SCM header = ly_is_module (score->header_)
-    ? score->header_
-    : default_header;
-
-  for (vsize i = 0; i < score->defs_.size (); i++)
-    default_rendering (score->get_music (), score->defs_[i]->self_scm (),
-                      default_paper, header, basename, key->self_scm ());
-
-  if (score->defs_.empty ())
-    {
-      default_rendering (score->get_music (),
-                        default_layout,
-                        default_paper,
-                        header, basename, key->self_scm ());
-    }
-
-  key->unprotect ();
-  return SCM_UNSPECIFIED;
-}
-
index 52a48538b8d8d3cf2630bc77fcfbd66b7cc27aea..5b11a0d4271b34534a809ce84f1ac68183278c83 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "score.hh"
@@ -17,7 +17,6 @@ using namespace std;
 #include "global-context.hh"
 #include "international.hh"
 #include "lily-parser.hh"
-#include "lilypond-key.hh"
 #include "main.hh"
 #include "music.hh"
 #include "music.hh"
@@ -106,58 +105,6 @@ Score::Score (Score const &s)
     ly_module_copy (header_, s.header_);
 }
 
-void
-default_rendering (SCM music, SCM outdef,
-                  SCM book_outputdef,
-                  SCM header,
-                  SCM outname,
-                  SCM key)
-{
-  SCM scaled_def = outdef;
-  SCM scaled_bookdef = book_outputdef;
-
-  Output_def *bpd = unsmob_output_def (book_outputdef);
-
-  /* ugh.  */
-  if (bpd->c_variable ("is-paper") == SCM_BOOL_T)
-    {
-      Real scale = scm_to_double (bpd->c_variable ("output-scale"));
-
-      Output_def *def = scale_output_def (unsmob_output_def (outdef), scale);
-      Output_def *bdef = scale_output_def (bpd, scale);
-      def->parent_ = bdef;
-
-      scaled_def = def->self_scm ();
-      scaled_bookdef = bdef->self_scm ();
-
-      def->unprotect ();
-      bdef->unprotect ();
-    }
-
-  SCM context = ly_run_translator (music, scaled_def, key);
-  
-  SCM output_as_scm = ly_format_output (context);
-  Music_output *output = unsmob_music_output (output_as_scm);
-
-  if (Paper_score *pscore = dynamic_cast<Paper_score *> (output))
-    {
-      /* ugh, this is strange, Paper_book without a Book object. */
-      Paper_book *paper_book = new Paper_book ();
-      paper_book->header_ = header;
-      paper_book->paper_ = unsmob_output_def (scaled_bookdef);
-
-      if (ly_is_module (header))
-       paper_book->add_score (header);
-
-      paper_book->add_score (pscore->self_scm ());
-      paper_book->classic_output (outname);
-      paper_book->unprotect ();
-    }
-
-  scm_remember_upto_here_1 (scaled_def);
-  scm_remember_upto_here_1 (output_as_scm);
-  scm_remember_upto_here_1 (scaled_bookdef);
-}
 
 /*
   Format score, return list of Music_output objects.
@@ -166,8 +113,7 @@ default_rendering (SCM music, SCM outdef,
 */
 SCM
 Score::book_rendering (Output_def *layoutbook,
-                      Output_def *default_def,
-                      Object_key *book_key)
+                      Output_def *default_def)
 {
   if (error_found_)
     return SCM_EOL;
@@ -183,9 +129,6 @@ Score::book_rendering (Output_def *layoutbook,
 
   int outdef_count = defs_.size ();
 
-  Object_key *key = new Lilypond_general_key (book_key, user_key_, 0);
-  SCM scm_key = key->unprotect ();
-
   for (int i = 0; !i || i < outdef_count; i++)
     {
       Output_def *def = outdef_count ? defs_[i] : default_def;
@@ -200,7 +143,7 @@ Score::book_rendering (Output_def *layoutbook,
        }
 
       /* TODO: fix or junk --no-layout.  */
-      SCM context = ly_run_translator (music_, def->self_scm (), scm_key);
+      SCM context = ly_run_translator (music_, def->self_scm ());
       if (dynamic_cast<Global_context *> (unsmob_context (context)))
        {
          SCM s = ly_format_output (context);
@@ -212,7 +155,6 @@ Score::book_rendering (Output_def *layoutbook,
       scm_remember_upto_here_1 (scaled);
     }
 
-  scm_remember_upto_here_1 (scm_key);
   scm_remember_upto_here_1 (scaled_bookdef);
   return outputs;
 }
index ada6f0aac4d1c67933013af6338c89924f556ed9..6a0211530de10dacd425f2776c61fb82f02bb69f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index a8fc0c3fc4c9c2067b6f68a86ede5e8c8c8be512..1ae7969b4e3f84afface3e4bbe53f4057f78ad34 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "script-column.hh"
index c3354a67000e6ad7bc17613eeb332f0b1580b438..72359defcfe991be36187adcf5f99d591a6666d7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -99,7 +99,7 @@ make_script_from_event (Grob *p,  Context *tg,
   if (art == SCM_BOOL_F)
     {
       /* FIXME: */
-      warning (_ ("don't know how to interpret articulation: "));
+      warning (_ ("do not know how to interpret articulation: "));
       warning (_ ("scheme encoding: "));
       scm_write (art_type, scm_current_error_port ());
       message ("");
index 94bebe9e600aacdd848af6e03408ec237d7cda37..9087b88e6cd16ca1302a7a847bec7070de98e795 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "script-interface.hh"
index b84c5f22a26bfc4a6ee4a98aef1bdfddc58903a2..0e08362c589725c774b33dce654d88f6c0d8ca54 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
   
 */
 
index 4c63ce73d2ee24dc6d70eb53904b27847ce2ffca..ff089b6bbdc2e05c9d683d1ddcdd0512b7ac6e9e 100644 (file)
@@ -3,7 +3,7 @@
  
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "self-alignment-interface.hh"
@@ -35,7 +35,7 @@ Self_alignment_interface::aligned_on_self (Grob *me, Axis a)
     {
       Interval ext (me->extent (me, a));
       if (ext.is_empty ())
-       programming_error ("can't align on self: empty element");
+       programming_error ("cannot align on self: empty element");
       else
        return scm_from_double (- ext.linear_combination (scm_to_double (align)));
     }
@@ -106,7 +106,7 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
 
   Interval ext (me->extent (me, a));
   if (ext.is_empty ())
-    programming_error ("can't align on self: empty element");
+    programming_error ("cannot align on self: empty element");
   else
     x -= ext.linear_combination (align);
 
index 7a02ac578b6b3ba14e57fd6c203f5f1378cd9b09..c7d44a9568fa506c12196ba8f1285a97f45c137f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -55,14 +55,18 @@ Semi_tie_column::calc_positioning_done (SCM smob)
   SCM manual_configs = me->get_property ("tie-configuration");
   problem.set_manual_tie_configuration (manual_configs);
 
-  Ties_configuration base = problem.generate_optimal_chord_configuration ();
+  Ties_configuration base = problem.generate_optimal_configuration ();
   for (vsize i = 0; i < lv_ties.size(); i++)
     {
-      Tie::set_control_points (lv_ties[i], problem.common_x_refpoint (), base[i],
-                              problem.details_);
+      SCM cp = Tie::get_control_points (lv_ties[i], problem.common_x_refpoint (), base[i],
+                                       problem.details_);
+
+      lv_ties[i]->set_property ("control-points", cp);
       set_grob_direction (lv_ties[i], base[i].dir_);
-    }
 
+      problem.set_debug_scoring (base);
+    }
+  
   return SCM_BOOL_T;
 }
   
index 77b266e6c43aeea6704dcaeccd5b3a4738a3d12c..a95b30737f263dda851cce80f9271b7934a4bc6c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -23,6 +23,7 @@ ADD_INTERFACE(Semi_tie,
              "control-points "
              "direction "
              "details "
+             "head-direction "
              "note-head "
              "thickness "
              );
@@ -43,8 +44,8 @@ Semi_tie::calc_control_points (SCM smob)
       programming_error ("lv tie without Semi_tie_column. Killing lv tie."); 
       me->suicide (); 
     }
-  
-  return SCM_UNSPECIFIED;
+
+  return me->get_property_data ("control-points");
 }
 
 int
index fb8cce00226d91ec9171f54cca78be2e907cb2da..f8975cd5158e5eb62be38f642899c8d3972cc220 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "separating-group-spanner.hh"
index b2aeb9b2ab4e72fe492f84114cb1cd1e06cb59a2..f493840d9585290af83648a7c86c17e4f2f5a8b4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -93,13 +93,6 @@ Separating_line_group_engraver::finalize ()
   sep_span_->set_bound (RIGHT, unsmob_grob (ccol));
   sep_span_ = 0;
 
-  for (vsize i = 0; i < last_spacings_.note_spacings_.size (); i++)
-    {
-      Pointer_group_interface::add_grob (last_spacings_.note_spacings_[i],
-                                        ly_symbol2scm ("right-items"),
-                                        column);
-    }
-
   if (last_spacings_.staff_spacing_
       && last_spacings_.staff_spacing_->get_column () == column)
     last_spacings_.staff_spacing_->suicide ();
@@ -146,14 +139,8 @@ Separating_line_group_engraver::acknowledge_item (Grob_info i)
          Pointer_group_interface::add_grob (it, ly_symbol2scm ("left-items"),
                                             break_item_);
 
-         if (int i = last_spacings_.note_spacings_.size ())
-           {
-             for (; i--;)
-               Pointer_group_interface::add_grob (last_spacings_.note_spacings_[i],
-                                                  ly_symbol2scm ("right-items"),
-                                                  break_item_);
-           }
-         else if (last_spacings_.staff_spacing_)
+         if (!last_spacings_.note_spacings_.size ()
+             && last_spacings_.staff_spacing_)
            {
              SCM ri = last_spacings_.staff_spacing_->get_object ("right-items");
              Grob_array *ga = unsmob_grob_array (ri);
index 0a6c085afcf41a7f1f433f9f4b1a2cf319c0792a..c0536b6ce3ab69b95f545b860d45ba65a707ee8e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "separation-item.hh"
@@ -109,14 +109,15 @@ Separation_item::boxes (Grob *me, Grob *left)
          continue;
        }
 
-      if (to_boolean (il->get_property ("no-spacing-rods")))
-       continue;
-
       Interval y (il->pure_height (ycommon, 0, very_large));
       Interval x (il->extent (pc, X_AXIS));
 
-      SCM padding = elts[i]->get_property ("padding");
-      x.widen (robust_scm2double (padding, 0));
+      Interval extra = robust_scm2interval (elts[i]->get_property ("extra-spacing-width"),
+                                           Interval (0, 0));
+      x[LEFT] += extra[LEFT];
+      x[RIGHT] += extra[RIGHT];
+      if (to_boolean (elts[i]->get_property ("infinite-spacing-height")))
+       y = Interval (-infinity_f, infinity_f);
  
       out.push_back (Box (x, y));
     }
index db8eb5865e06c3a838745593cbe2bbc4908918a0..8679bcbbe158843dbdaeffa00b84cf1d6699429b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "sequential-iterator.hh"
index 96751edf2c5658ad321254e7a774d798332a1c6d..0d56fe18681968efe5b5c4f739717336e8ff0688 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "side-position-interface.hh"
index cea6584972fb5f91822c2de048ae56813d45945a..f473b30e47e446d79922cbcdd9c8d81bad69e84d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 #include "simple-closure.hh"
index b2d686b32eeff1fb633944e0709f4bedddd81e17..05fcc293f4211d6c003f0f7387f5ad3f386df3ba 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "simple-music-iterator.hh"
index 1ffe464fc28f9b8eccc4f047c0af079e2fe93d29..24b6d1c76351f3830d105651c75eb46644332ba8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include <cstdio>
index ffc4bfcbfce26bad151ab0240007c89602ed26bd..9200554822b87030d8e0b6c452fd7b3fe5ba859a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   TODO:
   - add support for different stretch/shrink constants?
@@ -247,6 +247,20 @@ Simple_spacer::spring_positions () const
   return ret;
 }
 
+Real
+Simple_spacer::force_penalty (bool ragged) const
+{
+  /* If we are ragged-right, we don't want to penalise according to the force,
+     but according to the amount of whitespace that is present after the end
+     of the line. */
+  if (ragged)
+    return max (0.0, line_len_ - configuration_length (0.0));
+
+  /* Use a convex compression penalty. */
+  Real f = force_;
+  return f - (f < 0 ? f*f*f*f*4 : 0);
+}
+
 /****************************************************************/
 
 Spring_description::Spring_description ()
@@ -356,29 +370,6 @@ next_spaceable_column (vector<Grob*> const &list, vsize starting)
   return 0;
 }
 
-static void
-get_column_spring (Grob *this_col, Grob *next_col, Real *ideal, Real *inv_hooke)
-{
-  Spring_smob *spring = 0;
-
-  for (SCM s = this_col->get_object ("ideal-distances");
-       !spring && scm_is_pair (s);
-       s = scm_cdr (s))
-    {
-      Spring_smob *sp = unsmob_spring (scm_car (s));
-
-      if (sp->other_ == next_col)
-       spring = sp;
-    }
-
-  if (!spring)
-    programming_error (_f ("No spring between column %d and next one",
-                          Paper_column::get_rank (this_col)));
-
-  *ideal = (spring) ? spring->distance_ : 5.0;
-  *inv_hooke = (spring) ? spring->inverse_strength_ : 1.0;
-}
-
 static Column_description
 get_column_description (vector<Grob*> const &cols, vsize col_index, bool line_starter)
 {
@@ -389,10 +380,10 @@ get_column_description (vector<Grob*> const &cols, vsize col_index, bool line_st
   Column_description description;
   Grob *next_col = next_spaceable_column (cols, col_index);
   if (next_col)
-    get_column_spring (col, next_col, &description.ideal_, &description.inverse_hooke_);
+    Spaceable_grob::get_spring (col, next_col, &description.ideal_, &description.inverse_hooke_);
   Grob *end_col = dynamic_cast<Item*> (cols[col_index+1])->find_prebroken_piece (LEFT);
   if (end_col)
-    get_column_spring (col, end_col, &description.end_ideal_, &description.end_inverse_hooke_);
+    Spaceable_grob::get_spring (col, end_col, &description.end_ideal_, &description.end_inverse_hooke_);
 
   for (SCM s = Spaceable_grob::get_minimum_distances (col);
        scm_is_pair (s); s = scm_cdr (s))
@@ -432,7 +423,7 @@ get_line_forces (vector<Grob*> const &columns,
   breaks.clear ();
   breaks.push_back (0);
   cols.push_back (Column_description ());
-  for (vsize i = 1; i < non_loose.size () - 1; i++)
+  for (vsize i = 1; i + 1 < non_loose.size (); i++)
     {
       if (Paper_column::is_breakable (non_loose[i]))
        breaks.push_back (cols.size ());
@@ -442,7 +433,7 @@ get_line_forces (vector<Grob*> const &columns,
   breaks.push_back (cols.size ());
   force.resize (breaks.size () * breaks.size (), infinity_f);
 
-  for (vsize b = 0; b < breaks.size () - 1; b++)
+  for (vsize b = 0; b + 1 < breaks.size (); b++)
     {
       cols[breaks[b]] = get_column_description (non_loose, breaks[b], true);
       vsize st = breaks[b];
@@ -472,14 +463,7 @@ get_line_forces (vector<Grob*> const &columns,
                }
            }
          spacer.solve ((b == 0) ? line_len - indent : line_len, ragged);
-
-         /* add a (convex) penalty for compression. We do this _only_ in get_line_forces,
-            not get_line_configuration. This is temporary, for backwards compatibility;
-            the old line/page-breaking stuff ignores page breaks when it calculates line
-            breaks, so compression penalties can result in scores (eg. wtk-fugue) blowing
-            up to too many pages. */
-         Real f = spacer.force ();
-         force[b * breaks.size () + c] = f - (f < 0 ? f*f*f*f*4 : 0);
+         force[b * breaks.size () + c] = spacer.force_penalty (ragged);
 
          if (!spacer.fits ())
            {
@@ -507,7 +491,7 @@ get_line_configuration (vector<Grob*> const &columns,
   Column_x_positions ret;
 
   ret.cols_.push_back (dynamic_cast<Item*> (columns[0])->find_prebroken_piece (RIGHT));
-  for (vsize i = 1; i < columns.size () - 1; i++)
+  for (vsize i = 1; i + 1 < columns.size (); i++)
     {
       if (is_loose (columns[i]))
        ret.loose_cols_.push_back (columns[i]);
@@ -518,7 +502,7 @@ get_line_configuration (vector<Grob*> const &columns,
 
   /* since we've already put our line-ending column in the column list, we can ignore
      the end_XXX_ fields of our column_description */
-  for (vsize i = 0; i < ret.cols_.size () - 1; i++)
+  for (vsize i = 0; i + 1 < ret.cols_.size (); i++)
     {
       cols.push_back (get_column_description (ret.cols_, i, i == 0));
       spacer.add_spring (cols[i].ideal_, cols[i].inverse_hooke_);
@@ -536,12 +520,8 @@ get_line_configuration (vector<Grob*> const &columns,
     }
 
   spacer.solve (line_len, ragged);
-  ret.force_ = spacer.force ();
+  ret.force_ = spacer.force_penalty (ragged);
 
-  /*
-    We used to have a penalty for compression, no matter what, but that
-    fucked up wtk1-fugue2 (taking 3 full pages.)
-  */
   ret.config_ = spacer.spring_positions ();
   for (vsize i = 0; i < ret.config_.size (); i++)
     ret.config_[i] += indent;
@@ -551,7 +531,7 @@ get_line_configuration (vector<Grob*> const &columns,
   /*
     Check if breaking constraints are met.
   */
-  for (vsize i = 1; i < ret.cols_.size () - 1; i++)
+  for (vsize i = 1; i + 1 < ret.cols_.size (); i++)
     {
       SCM p = ret.cols_[i]->get_property ("line-break-permission");
       if (p == ly_symbol2scm ("force"))
index 62d3b3c200e8396c8b50f496ef96239ce0daecd7..badc98d65bee38a0c1bec3648ccf87e629f52c17 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "simultaneous-music-iterator.hh"
index 6b53a62ef845174c290f8ea02462afb156392e1a..b729e5312b15a56471f9f7b58ca542e0db947281 100644 (file)
@@ -2,10 +2,11 @@
 
    source file of the GNU LilyPond music typesetter
  
-   (c) 2006 Joe Neeman <joeneeman@gmail.com>
+   (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
 */
 
 #include "skyline.hh"
+#include <deque>
 
 #include "ly-smobs.icc"
 
    but the distance routine does.
 */
 
+/*
+  FIXME:
+
+  * Consider to use
+
+  typedef list<Skyline_point> Skyline;
+  struct Skyline_point
+  {
+    Real x;
+    Drul_array<Real> ys; 
+  };
+
+  this is a cleaner representation, as it doesn't duplicate the X, and
+  doesn't need bogus buildings at infinity  --hwn.
+
+
+  * All the messing around with EPS is very fishy.  There are no
+  complicated numerical algorithms involved, so EPS should not be
+  necessary.
+
+  --hwn
+  
+  
+ */
+
 #define EPS 1e-10
 
 static inline bool
@@ -84,11 +110,11 @@ Skyline::print () const
 }
 
 bool
-Skyline::is_legal_skyline () const
+is_legal_skyline (list<Building> const &buildings)
 {
   list<Building>::const_iterator i;
   Real last_x = -infinity_f;
-  for (i = buildings_.begin (); i != buildings_.end (); i++)
+  for (i = buildings.begin (); i != buildings.end (); i++)
     {
       if (i->iv_[LEFT] != last_x)
        return false;
@@ -159,7 +185,7 @@ Building::print () const
 }
 
 Real
-Building::intersection (Building const &other) const
+Building::intersection_x (Building const &other) const
 {
   return (y_intercept_ - other.y_intercept_) / (other.slope_ - slope_);
 }
@@ -213,9 +239,16 @@ skyline_trailing_part (list<Building> *sky, Real x)
 bool
 Building::conceals_beginning (Building const &other) const
 {
-  if (approx_equal (intersection (other), iv_[LEFT]) || approx_equal (height_[LEFT], other.height_[LEFT]))
-    return slope_ > other.slope_;
-  return height_[LEFT] > other.height_[LEFT];
+  bool w = false;
+  Real h = other.height (iv_[LEFT]);
+  if (approx_equal (height_[LEFT], h))
+    w = slope_ > other.slope_;    
+  else if (height_[LEFT] > h) 
+    w = true;
+  else 
+    w = false;
+
+  return w;
 }
 
 bool
@@ -254,7 +287,7 @@ Skyline::internal_merge_skyline (list<Building> *s1, list<Building> *s2,
       if (approx_greater_than (s2_start_height, s1_start_height))
        end = s2->front ().iv_[LEFT];
       else if (approx_greater_than (s2_end_height, s1_end_height))
-       end = b.intersection (s2->front ());
+       end = b.intersection_x (s2->front ());
       end = min (end, b.iv_[RIGHT]);
 
       b.leading_part (end);
@@ -293,34 +326,78 @@ single_skyline (Building b, Real horizon_padding, list<Building> *const ret)
                               -infinity_f, b.iv_[LEFT]));
 }
 
-void
-Skyline::internal_build_skyline (list<Building> *buildings, list<Building> *const result)
+/* remove a non-overlapping set of buildings from BUILDINGS and build a skyline
+   out of them */
+static list<Building>
+non_overlapping_skyline (list<Building> *const buildings)
+{
+  list<Building> result;
+  Real last_end = -infinity_f;
+  list<Building>::iterator i = buildings->begin ();
+  while (i != buildings->end ())
+    {
+      if (approx_less_than (i->iv_[LEFT], last_end))
+       {
+         i++;
+         continue;
+       }
+
+      if (approx_greater_than (i->iv_[LEFT], last_end))
+       result.push_back (Building (last_end, -infinity_f, -infinity_f, i->iv_[LEFT]));
+      else
+       i->iv_[LEFT] = last_end;
+
+      last_end = i->iv_[RIGHT];
+      list<Building>::iterator j = i;
+      i++;
+      result.splice (result.end (), *buildings, j);
+    }
+  if (last_end < infinity_f)
+    result.push_back (Building (last_end, -infinity_f, -infinity_f, infinity_f));
+  assert (is_legal_skyline (result));
+  return result;
+}
+
+list<Building>
+Skyline::internal_build_skyline (list<Building> *buildings)
 {
   vsize size = buildings->size ();
 
   if (size == 0)
     {
-      empty_skyline (result);
-      return;
+      list<Building> result;
+      empty_skyline (&result);
+      return result;
     }
   else if (size == 1)
     {
-      single_skyline (buildings->front (), 0, result);
-      return;
+      list<Building> result;
+      single_skyline (buildings->front (), 0, &result);
+      return result;
     }
 
-  list<Building> right_half;
-  list<Building>::iterator i = buildings->begin ();
-
-  for (vsize s = 0; s < size/2; s++)
-    i++;
-  right_half.splice (right_half.end (), *buildings, i, buildings->end ());
+  deque<list<Building> > partials;
+  buildings->sort ();
+  while (!buildings->empty ())
+    partials.push_back (non_overlapping_skyline (buildings));
 
-  list<Building> right;
-  list<Building> left;
-  internal_build_skyline (&right_half, &right);
-  internal_build_skyline (buildings, &left);
-  internal_merge_skyline (&right, &left, result);
+  /* we'd like to say while (partials->size () > 1) but that's O(n).
+     Instead, we exit in the middle of the loop */
+  while (!partials.empty ())
+    {
+      list<Building> merged;
+      list<Building> one = partials.front ();
+      partials.pop_front ();
+      if (partials.empty ())
+       return one;
+
+      list<Building> two = partials.front ();
+      partials.pop_front ();
+      internal_merge_skyline (&one, &two, &merged);
+      partials.push_back (merged);
+    }
+  assert (0);
+  return list<Building> ();
 }
 
 Skyline::Skyline ()
@@ -374,8 +451,8 @@ Skyline::Skyline (vector<Box> const &boxes, Real horizon_padding, Axis horizon_a
        }
     }
   
-  internal_build_skyline (&bldgs, &buildings_);
-  assert (is_legal_skyline ());
+  buildings_ = internal_build_skyline (&bldgs);
+  assert (is_legal_skyline (buildings_));
 }
 
 Skyline::Skyline (Box const &b, Real horizon_padding, Axis horizon_axis, Direction sky)
@@ -394,7 +471,7 @@ Skyline::merge (Skyline const &other)
   list<Building> my_bld;
   my_bld.splice (my_bld.begin (), buildings_);
   internal_merge_skyline (&other_bld, &my_bld, &buildings_);
-  assert (is_legal_skyline ());
+  assert (is_legal_skyline (buildings_));
 }
 
 void
@@ -406,7 +483,7 @@ Skyline::insert (Box const &b, Real horizon_padding, Axis a)
   my_bld.splice (my_bld.begin (), buildings_);
   single_skyline (Building (b, 0, a, sky_), horizon_padding, &other_bld);
   internal_merge_skyline (&other_bld, &my_bld, &buildings_);
-  assert (is_legal_skyline ());
+  assert (is_legal_skyline (buildings_));
 }
 
 void
@@ -419,7 +496,7 @@ Skyline::raise (Real r)
       i->height_[RIGHT] += sky_ * r;
       i->y_intercept_ += sky_ * r;
     }
-  assert (is_legal_skyline ());
+  assert (is_legal_skyline (buildings_));
 }
 
 void
@@ -574,6 +651,7 @@ IMPLEMENT_DEFAULT_EQUAL_P (Skyline_pair);
 SCM
 Skyline::mark_smob (SCM)
 {
+  ASSERT_LIVE_IS_ALLOWED();
   return SCM_EOL;
 }
 
index 7df5c317a0e8e4ac80006969f2d3fafcc9bc7ace..7d71b677a193aa6f0e20581a495c54285cabc992 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg
   <mandolaerik@gmail.com>
 */
 
index b1ce277351e250ce155b6607450432744256bdb4..6e44c9d6db0df0d30eabb789534a4f2d0f7325d8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "slur-configuration.hh"
index 864ea7747363dd13e982b0fb0439f0457279954f..8f7a7525486fb851ca54a34d0b6809d5b5019b28 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -80,7 +80,8 @@ Slur_engraver::listen_slur (Stream_event *ev)
     ASSIGN_EVENT_ONCE (events_[START], ev);
   else if (d == STOP)
     ASSIGN_EVENT_ONCE (events_[STOP], ev);
-  else ev->origin ()->warning (_ ("Invalid direction of slur-event"));
+  else ev->origin ()->warning (_f ("direction of %s invalid: %d",
+                                  "slur-event", int (d)));
 }
 
 void
@@ -162,7 +163,7 @@ Slur_engraver::process_music ()
   if (events_[STOP])
     {
       if (slurs_.size () == 0)
-       events_[STOP]->origin ()->warning (_ ("can't end slur"));
+       events_[STOP]->origin ()->warning (_ ("cannot end slur"));
 
       
       end_slurs_ = slurs_;
@@ -208,7 +209,12 @@ Slur_engraver::stop_translation_timestep ()
   
   
   for (vsize i = 0; i < end_slurs_.size (); i++)
-    announce_end_grob (end_slurs_[i], SCM_EOL);
+    {
+      Spanner * s = dynamic_cast<Spanner*> (end_slurs_[i]);
+      if (!s->get_bound (RIGHT))
+       s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")));
+      announce_end_grob (s, SCM_EOL);
+    }
   end_slurs_.clear ();
   events_[START] = events_[STOP] = 0;
 }
index 6c8cd3a1926bcd9b357bc44a23e2ed56c8dea42a..20d5d5a4fc8b6ff3194493637960a67da84904e9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1996--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
index 0a1a09f6f20932961e502998a285ad06405ae679..a399e4d9d037b5e439fb179102772e30f1307c4a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 34e20519c96c0ea34afd3ff627abe31b7411f7d2..6dc6b5718ac487d2a1c6256df93ea3f4420d39ac 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -66,38 +66,6 @@ Slur_score_state::~Slur_score_state ()
   junk_pointers (configurations_);
 }
 
-Real
-broken_trend_y (Slur_score_state const &state, Direction hdir)
-{
-  /* A broken slur should maintain the same vertical trend
-     the unbroken slur would have had.  */
-  Real by = 0.0;
-  if (Spanner *mother = dynamic_cast<Spanner *> (state.slur_->original ()))
-    {
-      Grob *neighbor = mother->broken_neighbor (hdir);
-      if (!neighbor)
-       return by;
-
-      
-      Spanner *common_mother
-       = dynamic_cast<Spanner *> (state.common_[Y_AXIS]->original ());
-      int common_k
-       = broken_spanner_index (dynamic_cast<Spanner *> (state.common_[Y_AXIS]));
-      int common_j = common_k + hdir;
-
-      if (common_j < 0 || vsize (common_j) >= common_mother->broken_intos_.size ())
-       return by;
-
-      Grob *common_next_system = common_mother->broken_intos_[common_j];
-
-      SCM last_point = scm_car (scm_last_pair (neighbor->get_property ("control-points")));
-
-      return scm_to_double (scm_cdr (last_point))
-       + neighbor->relative_coordinate (common_next_system, Y_AXIS);
-    }
-  return by;
-}
-
 /*
   copy slur dir forwards across line break.
 */
@@ -394,7 +362,7 @@ Slur_score_state::get_best_curve ()
        }
   
       slur_->set_property ("quant-score",
-                          scm_makfrom0str (total.c_str ()));
+                          ly_string2scm (total));
     }
 #endif
 
@@ -442,7 +410,7 @@ Slur_score_state::get_closest_index (SCM inspect_quants) const
        }
     }
   if (mindist > 1e5)
-    programming_error ("can't not find quant");
+    programming_error ("cannot find quant");
   return opt_idx;
 }
 
@@ -815,34 +783,21 @@ Slur_score_state::get_extra_encompass_infos () const
          if (Accidental_interface::has_interface (g))
            {
              penalty = parameters_.accidental_collision_;
-             /* Begin copy accidental.cc */
-             bool parens = false;
-             if (to_boolean (g->get_property ("cautionary")))
-               {
-                 SCM cstyle = g->get_property ("cautionary-style");
-                 parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
-               }
 
-             SCM accs = g->get_property ("accidentals");
+             Rational alt = ly_scm2rational (g->get_property ("alteration"));
              SCM scm_style = g->get_property ("style");
              if (!scm_is_symbol (scm_style)
-                 && !parens
-                 && scm_ilength (accs) == 1)
+                 && !to_boolean (g->get_property ("parenthesized"))
+                 && !to_boolean (g->get_property ("restore-first")))
                {
                  /* End copy accidental.cc */
-                 switch (scm_to_int (scm_car (accs)))
-                   {
-                   case FLAT:
-                   case DOUBLE_FLAT:
-                     xp = LEFT;
-                     break;
-                   case SHARP:
-                     xp = 0.5 * dir_;
-                     break;
-                   case NATURAL:
-                     xp = -dir_;
-                     break;
-                   }
+                 if (alt == FLAT_ALTERATION
+                     || alt == DOUBLE_FLAT_ALTERATION)
+                   xp = LEFT;
+                 else if (alt == SHARP_ALTERATION)
+                   xp = 0.5 * dir_;
+                 else if (alt == NATURAL_ALTERATION)
+                   xp = -dir_;
                }
            }
 
index 88697c2bb12b5900ce9e8a34f2644a875a138674..1f9e605fb96f10d5e26bccb8507a87f7d9a0adbc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -153,7 +153,7 @@ Slur::print (SCM smob)
       Stencil tm = *unsmob_stencil (Text_interface::interpret_markup
                                    (me->layout ()->self_scm (), properties,
                                     quant_score));
-      a.add_at_edge (Y_AXIS, get_grob_direction (me), tm, 1.0, 0);
+      a.add_at_edge (Y_AXIS, get_grob_direction (me), tm, 1.0);
     }
 #endif
 
index fff178ccb27746376a66c6ce24a9e84318821297..34b5bb36ab697e30da50d1480f01eb0bb6ea49d5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "smobs.hh"
index 310c7938d3b11011681f48af5f936571ae80e7c5..879653dff0b050cb7fb283f91ebf6ca62bd6c870 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -51,7 +51,7 @@ gulp_file (string filename, int desired_size)
   FILE *f = fopen (filename.c_str (), "rb");
   if (!f)
     {
-      warning (_f ("can't open file: `%s'", filename.c_str ()));
+      warning (_f ("cannot open file: `%s'", filename.c_str ()));
 
       vector<char> cxx_arr;
       return cxx_arr;
@@ -138,9 +138,9 @@ Source_file::Source_file (string filename_string)
 void
 Source_file::init_port ()
 {
-  SCM str = scm_makfrom0str (c_str ());
+  SCM str = scm_from_locale_string (c_str ());
   str_port_ = scm_mkstrport (SCM_INUM0, str, SCM_OPN | SCM_RDNG, __FUNCTION__);
-  scm_set_port_filename_x (str_port_, scm_makfrom0str (name_.c_str ()));
+  scm_set_port_filename_x (str_port_, ly_string2scm (name_));
 }
 
 
index 811b4dd6814dd541400b38895eae08f39c16ed88..068baed379405c532d1b144eac81dd228322d365 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "source.hh"
index 679c2bcb195651dc1954d371c59830d7d447b887..ad6e7d61812bb9f959c6a5c806c50cd9f1abfdfc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "spaceable-grob.hh"
@@ -15,6 +15,7 @@
 #include "pointer-group-interface.hh"
 #include "grob.hh"
 #include "paper-column.hh"
+#include "international.hh"
 
 SCM
 Spaceable_grob::get_minimum_distances (Grob *me)
@@ -98,28 +99,30 @@ Spaceable_grob::add_spring (Grob *me, Grob *other,
 }
 
 void
-Spaceable_grob::get_spring (Grob *me, Grob *other, Real *dist, Real *inv_strength)
+Spaceable_grob::get_spring (Grob *this_col, Grob *next_col, Real *dist, Real *inv_strength)
 {
-  for (SCM s = me->get_object ("ideal-distances");
-       scm_is_pair (s); s = scm_cdr (s))
+  Spring_smob *spring = 0;
+
+  for (SCM s = this_col->get_object ("ideal-distances");
+       !spring && scm_is_pair (s);
+       s = scm_cdr (s))
     {
-      Spring_smob *spring = unsmob_spring (scm_car (s));
-      if (spring && spring->other_ == other)
-       {
-         *dist = spring->distance_;
-         *inv_strength = spring->inverse_strength_;
-       }
+      Spring_smob *sp = unsmob_spring (scm_car (s));
+
+      if (sp && sp->other_ == next_col)
+       spring = sp;
     }
-}
 
-void
-Spaceable_grob::remove_interface (Grob *me)
-{
-  me->set_object ("minimum-distances", SCM_EOL);
-  me->set_object ("spacing-wishes", SCM_EOL);
-  me->set_object ("ideal-distances", SCM_EOL);
+  if (!spring)
+    programming_error (_f ("No spring between column %d and next one",
+                          Paper_column::get_rank (this_col)));
+
+  *dist = (spring) ? spring->distance_ : 5.0;
+  *inv_strength = (spring) ? spring->inverse_strength_ : 1.0;
 }
 
+
+
 ADD_INTERFACE (Spaceable_grob,
               "A layout object that takes part in the spacing problem. ",
               
@@ -132,5 +135,7 @@ ADD_INTERFACE (Spaceable_grob,
               "measure-length "
               "minimum-distances "
               "right-neighbors "
-              "spacing-wishes");
+              "spacing-wishes "
+
+              );
 
index 2e81fdf416237d2569dcedd1f94960cb91e02bba..63d97f265246b3eff0b5f8f74ad419838463f12b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "spacing-spanner.hh"
@@ -86,14 +86,7 @@ get_measure_length (Grob *column)
 
   extract_grob_set (sys, "columns", cols);
 
-  vsize col_idx = binary_search (cols, column,
-                                Paper_column::less_than);
-
-  if (col_idx == VPOS)
-    {
-      programming_error ( __FUNCTION__ + string (": Unknown column"));
-      return 0;
-    }
+  vsize col_idx = Paper_column::get_rank (column);
   
   do
     {
@@ -122,7 +115,7 @@ Spacing_spanner::note_spacing (Grob *me, Grob *lc, Grob *rc,
 
   if (! shortest_playing_len.to_bool ())
     {
-      programming_error ("can't find a ruling note at " + Paper_column::when_mom (lc).to_string ());
+      programming_error ("cannot find a ruling note at: " + Paper_column::when_mom (lc).to_string ());
       shortest_playing_len = 1;
     }
 
@@ -130,25 +123,25 @@ Spacing_spanner::note_spacing (Grob *me, Grob *lc, Grob *rc,
   Moment rwhen = Paper_column::when_mom (rc);
 
   Moment delta_t = rwhen - lwhen;
-  if (!Paper_column::is_musical (rc))
+
+  /*
+    when toying with mmrests, it is possible to have musical
+    column on the left and non-musical on the right, spanning
+    several measures.
+
+    TODO: efficiency: measure length can be cached, or stored as
+    property in paper-column.
+  */
+
+  if (Moment *measure_len = get_measure_length (lc))
     {
+      delta_t = min (delta_t, *measure_len);
+
       /*
-       when toying with mmrests, it is possible to have musical
-       column on the left and non-musical on the right, spanning
-       several measures.
+       The following is an extra safety measure, such that
+       the length of a mmrest event doesn't cause havoc.
       */
-
-      Moment *dt = get_measure_length (lc);
-      if (dt)
-       {
-         delta_t = min (delta_t, *dt);
-
-         /*
-           The following is an extra safety measure, such that
-           the length of a mmrest event doesn't cause havoc.
-         */
-         shortest_playing_len = min (shortest_playing_len, *dt);
-       }
+      shortest_playing_len = min (shortest_playing_len, *measure_len);
     }
 
   Real dist = 0.0;
@@ -171,7 +164,6 @@ Spacing_spanner::note_spacing (Grob *me, Grob *lc, Grob *rc,
        {
          Spacing_options grace_opts;
          grace_opts.init_from_grob (grace_spacing);
-
          bool bla;
          dist = grace_opts.get_duration_space (delta_t.grace_part_, &bla);
        }
index fe5a89c80bc3f0193a42422eb14bbec43577c352..920e66bd03a04eada7338482014d4e5d5b166d12 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "staff-spacing.hh"
@@ -37,18 +37,19 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
   if (!to_boolean (col->get_property ("allow-loose-spacing")))
     return false;
   
+
   if ((options->float_nonmusical_columns_
-       ||options->float_grace_columns_)
+       || options->float_grace_columns_)
       && Paper_column::when_mom (col).grace_part_)
-    return true;
+    {
+      return true;
+    }
 
+  
   if (Paper_column::is_musical (col)
       || Paper_column::is_breakable (col))
     return false;
 
-  extract_grob_set (col, "right-neighbors", rns);
-  extract_grob_set (col, "left-neighbors", lns);
-
   /*
     If this column doesn't have a proper neighbor, we should really
     make it loose, but spacing it correctly is more than we can
@@ -70,9 +71,14 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
     such a borderline case.)
 
   */
+
+  extract_grob_set (col, "right-neighbors", rns);
+  extract_grob_set (col, "left-neighbors", lns);
+
   if (lns.empty () || rns.empty ())
     return false;
 
+  
   Item *l_neighbor = dynamic_cast<Item *> (lns[0]);
   Item *r_neighbor = dynamic_cast<Item *> (rns[0]);
 
@@ -98,9 +104,6 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
     return false;
 
   /*
-    A rather hairy check, but we really only want to move around
-    clefs. (anything else?)
-
     in any case, we don't want to move bar lines.
   */
   extract_grob_set (col, "elements", elts);
@@ -114,9 +117,6 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
            {
              Grob *h = gelts[j];
 
-             /*
-               ugh. -- fix staff-bar name?
-             */
              if (h && h->get_property ("break-align-symbol") == ly_symbol2scm ("staff-bar"))
                return false;
            }
@@ -126,14 +126,77 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options)
   return true;
 }
 
+void
+Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c,
+                                             Drul_array<Item *> next_door,
+                                             Spacing_options const *options)
+{
+  Direction d = LEFT;
+  Drul_array<Real> dists (0, 0);
+
+  do
+    {
+      Item *lc = dynamic_cast<Item *> ((d == LEFT) ? next_door[LEFT] : c);
+      Item *rc = dynamic_cast<Item *> (d == LEFT ? c : next_door[RIGHT]);
+
+      extract_grob_set (lc, "spacing-wishes", wishes);
+      for (vsize k = wishes.size (); k--;)
+       {
+         Grob *sp = wishes[k];
+         if (Note_spacing::left_column (sp) != lc
+             || Note_spacing::right_column (sp) != rc)
+           continue;
+
+         if (Note_spacing::has_interface (sp))
+           {
+             /*
+               The note spacing should be taken from the musical
+               columns.
+             */
+             Real space = 0.0;
+             Real fixed = 0.0;
+             bool dummy = false;
+                 
+             Real base = note_spacing (me, lc, rc, options, &dummy);
+             Note_spacing::get_spacing (sp, rc, base, options->increment_,
+                                        &space, &fixed);
+
+             space -= options->increment_;
+
+             dists[d] = max (dists[d], space);
+           }
+         else if (Staff_spacing::has_interface (sp))
+           {
+             Real space = 0;
+             Real fixed_space = 0;
+             Staff_spacing::get_spacing_params (sp,
+                                                &space, &fixed_space);
+
+             dists[d] = max (dists[d], fixed_space);
+           }
+         else
+           programming_error ("Subversive spacing wish");
+       }
+    }
+  while (flip (&d) != LEFT);
+
+  Rod r;
+  r.distance_ = dists[LEFT] + dists[RIGHT];
+  r.item_drul_ = next_door;
+  r.add_to_cols (); 
+}
+
+
 /*
   Remove columns that are not tightly fitting from COLS. In the
   removed columns, set 'between-cols to the columns where it is in
   between.
 */
 void
-Spacing_spanner::prune_loose_columns (Grob *me, vector<Grob*> *cols,
-                                     Spacing_options const *options)
+Spacing_spanner::prune_loose_columns (Grob *me,
+                                     vector<Grob*> *cols,
+                                     Spacing_options *options)
 {
   vector<Grob*> newcols;
 
@@ -141,7 +204,7 @@ Spacing_spanner::prune_loose_columns (Grob *me, vector<Grob*> *cols,
     {
       Grob *c = cols->at (i);
 
-      bool loose = (i > 0 && i < cols->size () - 1)
+      bool loose = (i > 0 && i + 1 < cols->size ())
        && is_loose_column (cols->at (i - 1), c, cols->at (i + 1), options);
 
       if (loose)
@@ -158,71 +221,40 @@ Spacing_spanner::prune_loose_columns (Grob *me, vector<Grob*> *cols,
          */
 
          extract_grob_set (unsmob_grob (rns), "right-items", right_items);
-         c->set_object ("between-cols", scm_cons (lns,
-                                                  right_items[0]->self_scm ()));
-
-         /*
-           Set distance constraints for loose columns
-         */
-         Drul_array<Grob *> next_door (cols->at (i - 1),
-                                       cols->at (i + 1));
-         Direction d = LEFT;
-         Drul_array<Real> dists (0, 0);
-
-         do
+         if (right_items.size () == 0 || !unsmob_grob (lns))
            {
-             Item *lc = dynamic_cast<Item *> ((d == LEFT) ? next_door[LEFT] : c);
-             Item *rc = dynamic_cast<Item *> (d == LEFT ? c : next_door[RIGHT]);
-
-             extract_grob_set (lc, "spacing-wishes", wishes);
-             for (vsize k = wishes.size (); k--;)
+             c->programming_error ("Cannot determine neighbors for floating column. ");
+             c->set_object ("between-cols", scm_cons (cols->at (i-1)->self_scm (),
+                                                      cols->at (i+1)->self_scm ()));
+           }
+         else
+           {
+             Grob *min_item = 0;
+             int min_rank = INT_MAX;
+             for (vsize j = 0; j < right_items.size (); j ++)
                {
-                 Grob *sp = wishes[k];
-                 if (Note_spacing::left_column (sp) != lc
-                     || Note_spacing::right_column (sp) != rc)
-                   continue;
-
-                 if (Note_spacing::has_interface (sp))
+                 int rank = dynamic_cast<Item*> (right_items[j])->get_column ()->get_rank ();
+                 if (rank < min_rank)
                    {
-                     /*
-                       The note spacing should be taken from the musical
-                       columns.
-                     */
-                     Real space = 0.0;
-                     Real fixed = 0.0;
-                     bool dummy = false;
-                 
-                     Real base = note_spacing (me, lc, rc, options, &dummy);
-                     Note_spacing::get_spacing (sp, rc, base, options->increment_,
-                                                &space, &fixed);
-
-                     space -= options->increment_;
-
-                     dists[d] = max (dists[d], space);
+                     min_item = right_items[j];
+                     min_rank = rank;
                    }
-                 else if (Staff_spacing::has_interface (sp))
-                   {
-                     Real space = 0;
-                     Real fixed_space = 0;
-                     Staff_spacing::get_spacing_params (sp,
-                                                        &space, &fixed_space);
-
-                     dists[d] = max (dists[d], fixed_space);
-                   }
-                 else
-                   programming_error ("Subversive spacing wish");
                }
-           }
-         while (flip (&d) != LEFT);
+             
+             c->set_object ("between-cols", scm_cons (lns,
+                                                      min_item->self_scm ()));
 
-         Rod r;
-         r.distance_ = dists[LEFT] + dists[RIGHT];
-         r.item_drul_[LEFT] = dynamic_cast<Item *> (cols->at (i - 1));
-         r.item_drul_[RIGHT] = dynamic_cast<Item *> (cols->at (i + 1));
+             /*
+               Set distance constraints for loose columns
+             */
+             Drul_array<Item *> next_door (dynamic_cast<Item*> (cols->at (i - 1)),
+                                           dynamic_cast<Item*> (cols->at (i + 1)));
 
-         r.add_to_cols ();
+             set_distances_for_loose_col (me, c, next_door, options);
+           }
        }
-      else
+
+      if (!loose)
        newcols.push_back (c);
     }
 
@@ -239,7 +271,7 @@ Spacing_spanner::set_explicit_neighbor_columns (vector<Grob*> const &cols)
     {
       SCM right_neighbors = Grob_array::make_array ();
       Grob_array *rn_arr = unsmob_grob_array (right_neighbors);
-      int min_rank = 100000;   // inf.
+      int min_rank = INT_MAX;
 
       extract_grob_set (cols[i], "spacing-wishes", wishes);
       for (vsize k = wishes.size (); k--;)
@@ -313,8 +345,6 @@ Spacing_spanner::set_implicit_neighbor_columns (vector<Grob*> const &cols)
       if (!Paper_column::is_breakable (it) && !Paper_column::is_musical (it))
        continue;
 
-      // it->breakable || it->musical
-
       /*
        sloppy with typing left/right-neighbors should take list, but paper-column found instead.
       */
@@ -327,7 +357,7 @@ Spacing_spanner::set_implicit_neighbor_columns (vector<Grob*> const &cols)
          cols[i]->set_object ("left-neighbors", ga_scm);
        }
       extract_grob_set (cols[i], "right-neighbors", rns);
-      if (rns.empty () && i < cols.size () - 1)
+      if (rns.empty () && i + 1 < cols.size ())
        {
          SCM ga_scm = Grob_array::make_array ();
          Grob_array *ga = unsmob_grob_array (ga_scm);
index c6fc091de0711f4a4ac31bbff8be752d64bd62f7..ad49a345b6de47eae4ed06cb6854e4003e899652 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -68,12 +68,14 @@ protected:
   DECLARE_ACKNOWLEDGER (staff_spacing);
   DECLARE_ACKNOWLEDGER (note_spacing);
   DECLARE_ACKNOWLEDGER (rhythmic_head);
+  DECLARE_ACKNOWLEDGER (rhythmic_grob);
   DECLARE_TRANSLATOR_LISTENER (spacing_section);
 
   void start_translation_timestep ();
   void stop_translation_timestep ();
   void process_music ();
-  
+  void add_starter_duration (Grob_info i);
+
   virtual void finalize ();
 
   void start_spanner ();
@@ -144,8 +146,21 @@ Spacing_engraver::acknowledge_staff_spacing (Grob_info i)
   Pointer_group_interface::add_grob (spacing_, ly_symbol2scm ("wishes"), i.grob ());
 }
 
+void
+Spacing_engraver::acknowledge_rhythmic_grob (Grob_info i)
+{
+ add_starter_duration (i);  
+}
+
 void
 Spacing_engraver::acknowledge_rhythmic_head (Grob_info i)
+{
+  add_starter_duration (i);
+}
+
+
+void
+Spacing_engraver::add_starter_duration (Grob_info i)
 {
   if (i.grob ()->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface"))
       || i.grob ()->internal_has_interface (ly_symbol2scm ("multi-measure-interface")))
@@ -243,6 +258,7 @@ Spacing_engraver::start_translation_timestep ()
 ADD_ACKNOWLEDGER (Spacing_engraver, staff_spacing);
 ADD_ACKNOWLEDGER (Spacing_engraver, note_spacing);
 ADD_ACKNOWLEDGER (Spacing_engraver, rhythmic_head);
+ADD_ACKNOWLEDGER (Spacing_engraver, rhythmic_grob);
 
 ADD_TRANSLATOR (Spacing_engraver,
                "make a SpacingSpanner and do "
index 94bc552e6f799ed47c3b8d9ad9b8668077ea6c43..3a69e26802aa46cd42ad2e78bd58df58efd3beed 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "system.hh"
@@ -66,16 +66,41 @@ set_loose_columns (System *which, Column_x_positions const *posns)
          loose = right = re->get_column ();
        }
 
-      if (!right->get_system ())
+      if (right->get_system ())
+       ; /* do nothing */
+      else if (right->find_prebroken_piece (LEFT)
+              && right->find_prebroken_piece (LEFT)->get_system () == which)
        right = right->find_prebroken_piece (LEFT);
+      else if (Paper_column::get_rank (which->get_bound (RIGHT)) < Paper_column::get_rank (right))
+       
+       right = which->get_bound (RIGHT);
+      else
+       {
+         clique.back ()->programming_error ("Loose column does not have right side to attach to.");
+         System *base_system = dynamic_cast<System*> (which->original ());
+         int j = Paper_column::get_rank (clique.back ()) + 1;
+         int end_rank = Paper_column::get_rank (which->get_bound (RIGHT));
+         extract_grob_set (base_system, "columns", base_cols);
+         for (; j < end_rank; j++)
+           {
+             if (base_cols[j]->get_system () == which)
+               right = dynamic_cast<Item*> ((Grob*)base_cols[j]);
+           }
+       }
+      
 
+      if (!right)
+       {
+         programming_error ("Can't attach loose column sensibly. Attaching to end of system.");
+         right = which->get_bound (RIGHT);
+       }
       Grob *common = right->common_refpoint (left, X_AXIS);
 
       clique.push_back (right);
 
       vector<Real> clique_spacing;
       clique_spacing.push_back (0.0);
-      for (vsize j = 1; j < clique.size () - 1; j ++)
+      for (vsize j = 1; j + 1 < clique.size (); j ++)
        {
          Grob *clique_col = clique[j];
 
index c0e11fa62cf7a074a1e059d99ac1e0cd2d0a55bf..8c7b7c3ca5191002cc1477be2d0e666552eb71d7 100644 (file)
@@ -3,14 +3,16 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@lilypond.org>
 
 */
 
 #include "spacing-options.hh"
+#include "spacing-spanner.hh"
 #include "grob.hh"
 #include "misc.hh"
 #include "moment.hh"
+#include "spanner.hh"
 
 void
 Spacing_options::init_from_grob (Grob *me)
@@ -33,7 +35,6 @@ Spacing_options::init_from_grob (Grob *me)
     global_shortest_ = shortest_dur.main_part_;
   else
     global_shortest_ = shortest_dur.grace_part_;
-
 }
 
 Spacing_options::Spacing_options ()
index 31f7df6c8e72fba6e118f9dd2e0f4bf945cbe109..50848ecc598a2ae8c33f944605e6efd3ce2967d5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "spacing-spanner.hh"
@@ -29,14 +29,15 @@ using namespace std;
 #include "warn.hh"
 
 vector<Grob*>
-Spacing_spanner::get_columns (Spanner *me)
+Spacing_spanner::get_columns (Grob *me_grob)
 {
-  vector<Grob*> all (get_root_system (me)->columns ());
+  Spanner *me = dynamic_cast<Spanner*> (me_grob);
+  vector<Grob*> all (get_root_system (me)->used_columns ());
   vsize start = binary_search (all, (Grob*)me->get_bound (LEFT),
                               &Paper_column::less_than);
   vsize end = binary_search (all, (Grob*) me->get_bound (RIGHT),
-                            &Paper_column::less_than);
-
+                            &Paper_column::less_than);  
+  
   all = vector<Grob*>::vector<Grob*> (all.begin () + start,
                                      all.begin () + end + 1);
   return all;
@@ -51,15 +52,14 @@ Spacing_spanner::set_springs (SCM smob)
   /*
     can't use get_system() ? --hwn.
   */
-  vector<Grob*> all (get_columns (me));
-  set_explicit_neighbor_columns (all);
-
   Spacing_options options;
   options.init_from_grob (me);
+  vector<Grob*> cols = Spacing_spanner::get_columns (me);
+  set_explicit_neighbor_columns (cols);
 
-  prune_loose_columns (me, &all, &options);
-  set_implicit_neighbor_columns (all);
-  generate_springs (me, all, &options);
+  prune_loose_columns (me, &cols, &options);
+  set_implicit_neighbor_columns (cols);
+  generate_springs (me, cols, &options);
 
   return SCM_UNSPECIFIED;
 }
@@ -146,9 +146,6 @@ Spacing_spanner::calc_common_shortest_duration (SCM grob)
          max_idx = i;
          max_count = counts[i];
        }
-
-      // printf ("duration %d/%d, count %d\n",
-      // durations[i].num (), durations[i].den (), counts[i]);
     }
 
   SCM bsd = me->get_property ("base-shortest-duration");
@@ -226,7 +223,7 @@ Spacing_spanner::generate_springs (Grob *me,
   for (vsize i = 0; i < cols.size (); i++)
     {
       Paper_column *col = dynamic_cast<Paper_column *> (cols[i]);
-      Paper_column *next = (i < cols.size()-1) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
+      Paper_column *next = (i + 1 < cols.size ()) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
       
       if (i > 0)
        generate_pair_spacing (me, prev, col, next, options);
@@ -321,6 +318,9 @@ Spacing_spanner::musical_column_spacing (Grob *me,
 
          if (!Paper_column::is_musical (right_col))
            {
+             /*
+               reconsider this: breaks with wide marks/tempos/etc.
+              */
              Real left_col_stick_out = robust_relative_extent (left_col, left_col,  X_AXIS)[RIGHT];
              compound_fixed_note_space = max (left_col_stick_out, options->increment_);
 
@@ -397,6 +397,42 @@ Spacing_spanner::musical_column_spacing (Grob *me,
   Spaceable_grob::add_spring (left_col, right_col, distance, inverse_strength);
 }
 
+/*
+  Check if COL fills the whole measure.
+ */
+bool
+Spacing_spanner::fills_measure (Grob *me, Item *left, Item *col)
+{
+  System *sys = get_root_system (me);
+  Item *next = sys->column (col->get_column()->get_rank () + 1);
+  if (!next)
+    return false;
+
+  if (Paper_column::is_musical (next)
+      || Paper_column::is_musical (left)
+      || !Paper_column::is_musical (col)
+      || !Paper_column::is_used (next))
+    return false;
+  
+  Moment dt =
+    Paper_column::when_mom (next) - Paper_column::when_mom (col);
+  
+  Moment *len = unsmob_moment (left->get_property ("measure-length"));
+  if (!len)
+    return false;
+  
+  /*
+    Don't check for exact measure length, since ending measures are
+    often shortened due to pickups.
+   */
+  if (dt.main_part_ > len->main_part_ / Rational (2)
+      && (next->is_broken ()
+         || next->break_status_dir ()))
+    return true;
+
+  return false;
+}
+
 /*
   Read hints from L and generate springs.
 */
@@ -424,13 +460,12 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
          if (!spacing_grob || !Staff_spacing::has_interface (spacing_grob))
            continue;
 
-         Real space;
-         Real fixed_space;
+         Real space = 0.;
+         Real fixed_space = 0.;
 
          /*
            column for the left one settings should be ok due automatic
            pointer munging.
-
          */
          assert (spacing_grob->get_column () == l);
 
@@ -477,19 +512,19 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
       
     }
 
+  if (Paper_column::is_musical (r)
+      && l->break_status_dir () == CENTER
+      && fills_measure (me, l, r))
+    {
+      compound_space += 1.0; 
+    }
+  
   if (options->stretch_uniformly_ && l->break_status_dir () != RIGHT)
     compound_fixed = 0.0;
 
   assert (!isinf (compound_space));
   compound_space = max (compound_space, compound_fixed);
 
-  /*
-    There used to be code that changed spacing depending on
-    raggedright setting.  Ugh.
-
-    Do it more cleanly, or rename the property.
-
-  */
   Real inverse_strength = (compound_space - compound_fixed);
   Real distance = compound_space;
   Spaceable_grob::add_spring (l, r, distance, inverse_strength);
@@ -520,9 +555,3 @@ ADD_INTERFACE (Spacing_spanner,
               
               );
 
-ADD_INTERFACE (Spacing_interface,
-              "Something to do with line breaking and spacing. "
-              "Kill this one after determining line breaks.",
-              
-              "");
-
index 4a81d5bdbab3bbacba2e8bd047606b5dc27f37d9..a465b7da1141551eb63a811baed536d274a03cfc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
index 7e28a6bc416c8d33f2fe8ad3d2042eba2b5a7e19..a1618a27567b863b6f65d4bfc73a02bc41ea25f0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "bar-line.hh"
index 4566d73f77080e486530436499324cc48f67b630..072b110e7a1ef1b66cb6ad468dcb26050f8cccf1 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "span-bar.hh"
@@ -185,7 +185,7 @@ Span_bar::calc_glyph_name (SCM smob)
   else if (type == ":|:")
     type = ".|.";
 
-  return scm_makfrom0str (type.c_str ());
+  return ly_string2scm (type);
 }
 
 Interval
diff --git a/lily/span-dynamic-performer.cc b/lily/span-dynamic-performer.cc
deleted file mode 100644 (file)
index 28e2ea6..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-  span-dynamic-performer.cc -- implement Span_dynamic_performer
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include "performer.hh"
-
-#include "audio-item.hh"
-#include "international.hh"
-#include "stream-event.hh"
-
-#include "translator.icc"
-
-/*
-  TODO: fold this into 1 engraver: \< and \> should also stop when
-  absdyn is encountered.
-*/
-struct Audio_dynamic_tuple
-{
-  Audio_dynamic *audio_;
-  Moment mom_;
-};
-
-/**
-   perform span-dynamics
-*/
-class Span_dynamic_performer : public Performer
-{
-public:
-  TRANSLATOR_DECLARATIONS (Span_dynamic_performer);
-
-protected:
-  virtual void acknowledge_audio_element (Audio_element_info);
-  void process_music ();
-  void stop_translation_timestep ();
-
-  DECLARE_TRANSLATOR_LISTENER (decrescendo);
-  DECLARE_TRANSLATOR_LISTENER (crescendo);
-private:
-  Audio_dynamic *audio_;
-  Real last_volume_;
-  Stream_event *span_start_event_;
-  Drul_array<Stream_event *> span_events_;
-  vector<Audio_dynamic_tuple> dynamic_tuples_;
-  vector<Audio_dynamic_tuple> finished_dynamic_tuples_;
-  Direction dir_;
-  Direction finished_dir_;
-};
-
-Span_dynamic_performer::Span_dynamic_performer ()
-{
-  span_events_[START] = 0;
-  span_events_[STOP] = 0;
-  span_start_event_ = 0;
-  audio_ = 0;
-  last_volume_ = 0;
-}
-
-void
-Span_dynamic_performer::acknowledge_audio_element (Audio_element_info i)
-{
-  if (Audio_dynamic *d = dynamic_cast<Audio_dynamic *> (i.elem_))
-    last_volume_ = d->volume_;
-}
-
-void
-Span_dynamic_performer::process_music ()
-{
-  if (span_start_event_ || span_events_[START])
-    {
-      audio_ = new Audio_dynamic (0);
-      Audio_element_info info (audio_, span_events_[START]
-                              ? span_events_[START]
-                              : span_events_[STOP]);
-      announce_element (info);
-      Audio_dynamic_tuple a = { audio_, now_mom () };
-      dynamic_tuples_.push_back (a);
-    }
-
-  if (span_events_[STOP])
-    {
-      if (!span_start_event_)
-       {
-         span_events_[STOP]->origin ()->warning (_ ("can't find start of (de)crescendo"));
-         span_events_[STOP] = 0;
-       }
-      else
-       {
-         finished_dir_ = dir_;
-         finished_dynamic_tuples_ = dynamic_tuples_;
-       }
-      dynamic_tuples_.clear ();
-      span_start_event_ = 0;
-    }
-
-  if (span_events_[START])
-    {
-      dir_ = (span_events_[START]->in_event_class ("crescendo-event"))
-       ? RIGHT : LEFT;
-      span_start_event_ = span_events_[START];
-
-      dynamic_tuples_.clear ();
-      Audio_dynamic_tuple a = { audio_, now_mom () };
-      dynamic_tuples_.push_back (a);
-    }
-
-  if (span_events_[STOP])
-    finished_dynamic_tuples_.back ().audio_->volume_ = last_volume_;
-
-  if (span_events_[START])
-    dynamic_tuples_[0].audio_->volume_ = last_volume_;
-
-  span_events_[START] = 0;
-  span_events_[STOP] = 0;
-}
-
-void
-Span_dynamic_performer::stop_translation_timestep ()
-{
-  if (finished_dynamic_tuples_.size () > 1)
-    {
-      Real start_volume = finished_dynamic_tuples_[0].audio_->volume_;
-      Real dv = finished_dynamic_tuples_.back ().audio_->volume_
-       - start_volume;
-      /*
-       urg.
-       Catch and fix the case of:
-
-       |                         |
-       x|                        x|
-       f cresc.  -- -- -- -- --  pp
-
-       Actually, we should provide a non-displayed dynamic/volume setting,
-       to set volume to 'ff' just before the pp.
-      */
-      if (!dv || sign (dv) != finished_dir_)
-       {
-         // urg.  20%: about two volume steps
-         dv = (Real)finished_dir_ * 0.2;
-         if (!start_volume)
-           start_volume = finished_dynamic_tuples_.back ().audio_->volume_
-             - dv;
-       }
-      Moment start_mom = finished_dynamic_tuples_[0].mom_;
-      Moment dt = finished_dynamic_tuples_.back ().mom_ - start_mom;
-      for (vsize i = 0; i < finished_dynamic_tuples_.size (); i++)
-       {
-         Audio_dynamic_tuple *a = &finished_dynamic_tuples_[i];
-         Real volume = start_volume + dv * (Real) (a->mom_ - start_mom).main_part_
-           / (Real)dt.main_part_;
-         a->audio_->volume_ = volume;
-       }
-      finished_dynamic_tuples_.clear ();
-    }
-
-  if (audio_)
-    {
-      audio_ = 0;
-    }
-
-  span_events_[STOP] = 0;
-  span_events_[START] = 0;
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (Span_dynamic_performer, decrescendo);
-void
-Span_dynamic_performer::listen_decrescendo (Stream_event *r)
-{
-  Direction d = to_dir (r->get_property ("span-direction"));
-  span_events_[d] = r;
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (Span_dynamic_performer, crescendo);
-void
-Span_dynamic_performer::listen_crescendo (Stream_event *r)
-{
-  Direction d = to_dir (r->get_property ("span-direction"));
-  span_events_[d] = r;
-}
-
-ADD_TRANSLATOR (Span_dynamic_performer,
-               "", "",
-               "", "");
diff --git a/lily/spanner-break-forbid-engraver.cc b/lily/spanner-break-forbid-engraver.cc
new file mode 100644 (file)
index 0000000..41d061c
--- /dev/null
@@ -0,0 +1,68 @@
+/* 
+  spanner-break-forbid-engraver.cc -- implement Spanner_break_forbid_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+*/
+
+
+
+#include "engraver.hh"
+#include "international.hh"
+#include "spanner.hh"
+#include "stream-event.hh"
+#include "warn.hh"
+#include "context.hh"
+
+#include "translator.icc"
+
+class Spanner_break_forbid_engraver : public Engraver
+{
+  TRANSLATOR_DECLARATIONS (Spanner_break_forbid_engraver);
+  vector<Spanner*> running_spanners_;
+protected:
+  DECLARE_ACKNOWLEDGER (unbreakable_spanner);
+  DECLARE_END_ACKNOWLEDGER (unbreakable_spanner);
+
+  void process_music ();
+};
+
+
+void
+Spanner_break_forbid_engraver::process_music ()
+{
+  if (running_spanners_.size ())
+    {
+      context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
+    }
+}
+
+void
+Spanner_break_forbid_engraver::acknowledge_end_unbreakable_spanner (Grob_info gi)
+{
+  vector<Spanner*>::iterator i = find (running_spanners_.begin (), running_spanners_.end (),
+                                      gi.spanner ());
+  if (i != running_spanners_.end ())
+    running_spanners_.erase (i);
+}
+
+void
+Spanner_break_forbid_engraver::acknowledge_unbreakable_spanner (Grob_info gi)
+{
+  if (!to_boolean (gi.grob ()->get_property ("breakable")))
+    running_spanners_.push_back (gi.spanner ());
+}
+
+Spanner_break_forbid_engraver::Spanner_break_forbid_engraver ()
+{
+}
+
+
+ADD_END_ACKNOWLEDGER (Spanner_break_forbid_engraver, unbreakable_spanner);
+ADD_ACKNOWLEDGER (Spanner_break_forbid_engraver, unbreakable_spanner);
+ADD_TRANSLATOR (Spanner_break_forbid_engraver,
+               /* doc */ "Forbid breaks in certain spanners",
+               /* create */ "",
+               /* read */ "",
+               /* write */ "");
diff --git a/lily/spanner-scheme.cc b/lily/spanner-scheme.cc
new file mode 100644 (file)
index 0000000..e5a33e0
--- /dev/null
@@ -0,0 +1,47 @@
+/* 
+  spanner-scheme.cc -- implement Spanner bindings.
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#include "spanner.hh"
+#include "item.hh"
+
+LY_DEFINE (ly_spanner_get_bound, "ly:spanner-bound",
+          2, 0, 0, (SCM slur, SCM dir),
+          "Get one of the bounds of @var{spanner}. @var{dir} is @code{-1} "
+          "for left, and @code{1} for right.")
+{
+  Spanner *sl = dynamic_cast<Spanner *> (unsmob_grob (slur));
+  SCM_ASSERT_TYPE (sl, slur, SCM_ARG1, __FUNCTION__, "spanner grob");
+  SCM_ASSERT_TYPE (is_direction (dir), slur, SCM_ARG2, __FUNCTION__, "dir");
+  return sl->get_bound (to_dir (dir))->self_scm ();
+}
+
+/* TODO: maybe we should return a vector -- random access is more
+   logical for this list? */
+LY_DEFINE (ly_spanner_broken_into, "ly:spanner-broken-into",
+          1, 0, 0, (SCM spanner),
+          "Return broken-into list for @var{spanner}.")
+{
+  Spanner *me = dynamic_cast<Spanner *> (unsmob_grob (spanner));
+  SCM_ASSERT_TYPE (me, spanner, SCM_ARG1, __FUNCTION__, "spanner");
+
+  SCM s = SCM_EOL;
+  for (vsize i = me->broken_intos_.size (); i--;)
+    s = scm_cons (me->broken_intos_[i]->self_scm (), s);
+  return s;
+}
+
+LY_DEFINE (ly_spanner_p, "ly:spanner?",
+          1, 0, 0, (SCM g),
+          "Is  @var{g} a spanner object?")
+{
+  Grob *me = unsmob_grob (g);
+  bool b = dynamic_cast<Spanner *> (me);
+
+  return ly_bool2scm (b);
+}
index c0ac823b02b5329f8c7991b1f019aca551e1512f..e1fe55efe1d04d6ee65ea6e0ce80ad5f9b94bbbd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "pointer-group-interface.hh"
@@ -16,9 +16,9 @@
 #include "warn.hh"
 
 Grob *
-Spanner::clone (int count) const
+Spanner::clone () const
 {
-  return new Spanner (*this, count);
+  return new Spanner (*this);
 }
 
 void
@@ -64,7 +64,7 @@ Spanner::do_break_processing ()
            programming_error ("no broken bound");
          else if (bound->get_system ())
            {
-             Spanner *span = dynamic_cast<Spanner *> (clone (broken_intos_.size ()));
+             Spanner *span = dynamic_cast<Spanner *> (clone ());
              span->set_bound (LEFT, bound);
              span->set_bound (RIGHT, bound);
 
@@ -102,7 +102,7 @@ Spanner::do_break_processing ()
              continue;
            }
 
-         Spanner *span = dynamic_cast<Spanner *> (clone (broken_intos_.size ()));
+         Spanner *span = dynamic_cast<Spanner *> (clone ());
          span->set_bound (LEFT, bounds[LEFT]);
          span->set_bound (RIGHT, bounds[RIGHT]);
 
@@ -196,16 +196,16 @@ Spanner::set_bound (Direction d, Grob *s)
     Pointer_group_interface::add_grob (i, ly_symbol2scm ("bounded-by-me"), this);
 }
 
-Spanner::Spanner (SCM s, Object_key const *key)
-  : Grob (s, key)
+Spanner::Spanner (SCM s)
+  : Grob (s)
 {
   break_index_ = 0;
   spanned_drul_[LEFT] = 0;
   spanned_drul_[RIGHT] = 0;
 }
 
-Spanner::Spanner (Spanner const &s, int count)
-  : Grob (s, count)
+Spanner::Spanner (Spanner const &s)
+  : Grob (s)
 {
   spanned_drul_[LEFT] = spanned_drul_[RIGHT] = 0;
 }
@@ -384,11 +384,30 @@ unsmob_spanner (SCM s)
   return dynamic_cast<Spanner *> (unsmob_grob (s));
 }
 
+MAKE_SCHEME_CALLBACK(Spanner, bounds_width, 1);
+SCM
+Spanner::bounds_width (SCM grob)
+{
+  Spanner *me = unsmob_spanner (grob);
+
+
+  Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS);
+
+  Interval w (me->get_bound (LEFT)->relative_coordinate (common, X_AXIS),
+             me->get_bound (RIGHT)->relative_coordinate (common, X_AXIS));
+             
+  w -= me->relative_coordinate (common, X_AXIS);
+
+  return ly_interval2scm (w);
+}
+
 ADD_INTERFACE (Spanner,
               "Some objects are horizontally spanned between objects. For\n"
               "example, slur, beam, tie, etc. These grobs form a subtype called\n"
               "@code{Spanner}. All spanners have two span-points (these must be\n"
               "@code{Item} objects), one on the left and one on the right. The left bound is\n"
               "also the X-reference point of the spanner.\n",
-              "minimum-length");
+
+              "minimum-length "
+              );
 
index 1ab1507fbf5ce02fdf2b44a8dad0c4409485587b..a57f5029f2d2eef8c160f6173a67ea8761164361 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "spring.hh"
index af4d5e04f08bb7ee9b9a8289245b965ed7dd511a..72b1bf51cd5a5d7cb95502e470e1e65da331faa6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "staff-symbol.hh"
index 7c982d05465939782c325c1dda8cc650a0173102..1359af5e01ea512c5f74f24a72bebba8e7bcdc6a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "warn.hh"
index f89113187ed1c435adc678efc7e518c5374873f9..79e70286445b3844169be78dea600fa7261defe7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "staff-spacing.hh"
@@ -30,65 +30,100 @@ void
 Staff_spacing::next_note_correction (Grob *me,
                                     Grob *g,
                                     Interval bar_size,
+                                    Real current_space, Real current_fixed,
                                     Real *space,
-                                    Real *fix)
+                                    Real *fix,
+                                    int *wish_count)
 {
-  (void)space;
-  
+  (void) current_fixed; 
   if (!g || !Note_column::has_interface (g))
     return ;
 
   Item *col = dynamic_cast<Item *> (g)->get_column ();
-  Real max_corr = max (0., (- g->extent (col, X_AXIS)[LEFT]));
+  Real left_stickout_correction = max (0., (- g->extent (col, X_AXIS)[LEFT]));
+
+  /* staff space -> positions */
+  bar_size *= 2;
 
   /*
     Duh. If this gets out of hand, we should invent something more generic.
   */
-  if (Grob *a = Note_column::accidentals (g))
+  Grob *accs = Note_column::accidentals (g);
+  if (accs)
     {
       Interval v;
-      if (Accidental_placement::has_interface (a))
-       v = Accidental_placement::get_relevant_accidental_extent (a, col, me);
+      if (Accidental_placement::has_interface (accs))
+       v = Accidental_placement::get_relevant_accidental_extent (accs, col, me);
       else
-       v = a->extent (col, X_AXIS);
-
-      max_corr = max (max_corr, (- v[LEFT]));
+       v = accs->extent (col, X_AXIS);
+      
+      left_stickout_correction = max (left_stickout_correction, (- v[LEFT]));
     }
-  if (Grob *a = unsmob_grob (g->get_object ("arpeggio")))
-    max_corr = max (max_corr, - a->extent (col, X_AXIS)[LEFT]);
+  Grob *arpeggio = unsmob_grob (g->get_object ("arpeggio"));
+  if (arpeggio)
+    left_stickout_correction = max (left_stickout_correction, - arpeggio->extent (col, X_AXIS)[LEFT]);
 
+  
   /*
     Let's decrease the space a little if the problem is not located
     after a barline.
   */
   if (bar_size.is_empty ())
-    max_corr *= 0.75;
-
-  if (!bar_size.is_empty ())
-    if (Grob *stem = Note_column::get_stem (g))
-      {
-       Direction d = get_grob_direction (stem);
-       if (d == DOWN)
-         {
-           Real stem_start = Stem::head_positions (stem) [DOWN];
-           Real stem_end = Stem::stem_end_position (stem);
-           Interval stem_posns (min (stem_start, stem_end),
-                                max (stem_end, stem_start));
-
-           stem_posns.intersect (bar_size);
-
-           Real corr = min (abs (stem_posns.length () / 7.0), 1.0);
-           corr *= robust_scm2double (me->get_property ("stem-spacing-correction"), 1);
-
-           if (d != DOWN)
-             corr = 0.0;
-           max_corr = max (max_corr, corr);
-         }
-      }
-
-  *fix += max_corr;
-}
+    left_stickout_correction *= 0.75;
+
+  /*
+    We want 0.3 ss before the sticking-out object.
+    
+    current_fixed/2 is our guess at (right side of left object + 0.3)
+   */
+  left_stickout_correction += current_fixed/2 - current_space;
+  left_stickout_correction = max (left_stickout_correction, 0.0);
 
+  
+  Real optical_corr = 0.0;
+  Grob *stem = Note_column::get_stem (g);
+  if (!bar_size.is_empty ()
+      && !arpeggio
+      && !accs
+      && stem)
+    {
+      Direction d = get_grob_direction (stem);
+      if (Stem::is_normal_stem (stem) && d == DOWN)
+       {
+
+         /*
+           can't look at stem-end-position, since that triggers
+           beam slope computations.
+         */
+         Real stem_start = Stem::head_positions (stem) [d];
+         Real stem_end = stem_start + 
+           d * robust_scm2double (stem->get_property ("length"), 7);
+         
+         Interval stem_posns (min (stem_start, stem_end),
+                              max (stem_end, stem_start));
+
+         stem_posns.intersect (bar_size);
+
+         optical_corr = min (abs (stem_posns.length () / 7.0), 1.0);
+         optical_corr *= robust_scm2double (me->get_property ("stem-spacing-correction"), 1);
+       }
+    }
+
+
+  Real correction = optical_corr + left_stickout_correction;
+  if (correction)
+    {
+      (*wish_count) ++; 
+
+      /*
+       This minute adjustments don't make sense for widely spaced scores.
+       Hence, we need to keep the stretchable (that is, space - fix)
+       distance equal.
+      */
+      *space += correction;
+      *fix += correction;
+    }
+}
 /*
   Y-positions that are covered by BAR_GROB, in the case that it is a
   barline.  */
@@ -107,7 +142,7 @@ Staff_spacing::bar_y_positions (Grob *bar_grob)
          || glyph_string.substr (0, 1) == ".")
        {
          Grob *common = bar_grob->common_refpoint (staff_sym, Y_AXIS);
-         Interval bar_size = bar_grob->extent (common, Y_AXIS);
+         bar_size = bar_grob->extent (common, Y_AXIS);
          bar_size *= 1.0 / Staff_symbol_referencer::staff_space (bar_grob);
        }
     }
@@ -121,8 +156,10 @@ Staff_spacing::bar_y_positions (Grob *bar_grob)
   pointers to the separation-items, not the note-columns or
   note-spacings.
 */
+
 void
 Staff_spacing::next_notes_correction (Grob *me, Grob *last_grob,
+                                     Real current_space, Real current_fixed,
                                      Real *compound_space, Real *compound_fixed
                                      )
 {
@@ -133,33 +170,42 @@ Staff_spacing::next_notes_correction (Grob *me, Grob *last_grob,
   *compound_fixed = 0.0;
   *compound_space = 0.0;
   int wish_count = 0;
-  
+
   for (vsize i = right_items.size (); i--;)
     {
       Grob *g = right_items[i];
-
-      Real space = 0.0;
-      Real fixed = 0.0;
-
-      next_note_correction (me, g, bar_size, &space, &fixed);
-
-      *compound_space += space;
-      *compound_fixed += fixed; 
-      wish_count ++;
-      
-      extract_grob_set (g, "elements", elts);
-      for (vsize j = elts.size (); j--;)
+      if (Note_column::has_interface (right_items[i]))
        {
+         Grob *g = right_items[i];
+
          Real space = 0.0;
          Real fixed = 0.0;
-         next_note_correction (me, elts[j], bar_size, &space, &fixed);
-         *compound_fixed += fixed;
+      
+         next_note_correction (me, g, bar_size,
+                               current_space, current_fixed,
+                               &space, &fixed, &wish_count);
+      
          *compound_space += space;
-         wish_count ++;
+         *compound_fixed += fixed; 
+       }
+      else
+       {
+         extract_grob_set (g, "elements", elts);
+         for (vsize j = elts.size (); j--;)
+           {
+             Real space = 0.0;
+             Real fixed = 0.0;
+             next_note_correction (me, elts[j], bar_size,
+                                   current_space, current_fixed,
+                                   &space, &fixed,
+                                   &wish_count);
+             *compound_fixed += fixed;
+             *compound_space += space;
+           }
        }
     }
-
-  if (wish_count)
+  
+  if (wish_count > 1)
     {
       *compound_space /= wish_count;
       *compound_fixed /= wish_count;
@@ -255,8 +301,11 @@ Staff_spacing::get_spacing_params (Grob *me, Real *space, Real *fixed)
       *fixed = *space;
     }
 
-  Real correction_fixed, correction_space;
-  next_notes_correction (me, last_grob, &correction_space, &correction_fixed );
+  Real correction_fixed = 0.0;
+  Real correction_space = 0.0;
+  next_notes_correction (me, last_grob,
+                        *space, *fixed,
+                        &correction_space, &correction_fixed );
   *space += correction_space;
   *fixed += correction_fixed;
 }
index fe053011fc4572adb4ab31ddaf32337280de7d95..0b0d212a90502006e121fca8c19d0b66d60002c5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index da8491e8fa277b3ccb1dcb5d918823bc608566aa..ec12f1639be0d06ea20145d1320b2d7b7f0ad68b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "grob.hh"
index 7fe0bf3131679d75ad7aa456547719430f103c1d..53637c86e5f1bd8fadc39ece6ee3dec4fdbc0f87 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "staff-symbol-referencer.hh"
@@ -92,6 +92,25 @@ Staff_symbol_referencer::get_position (Grob *me)
   return robust_scm2double (me->get_property ("staff-position"), p);
 }
 
+
+Interval
+Staff_symbol_referencer::extent_in_staff (Grob *me)
+{
+  Grob *st = get_staff_symbol (me);
+  Grob *c = st ? me->common_refpoint (st, Y_AXIS) : 0;
+
+  Interval retval;
+  if (st && c)
+    {
+      retval  = me->extent (c, Y_AXIS)
+       - st->relative_coordinate (c, Y_AXIS);
+    }
+
+  return retval;
+}
+
+
+
 int
 Staff_symbol_referencer::get_rounded_position (Grob *me)
 {
@@ -172,3 +191,4 @@ ADD_INTERFACE (Staff_symbol_referencer,
               /* properties */
               "staff-position");
 
+
index f999346753e44620bbebde59233da9d8271ef1e0..9f6b1915e8cdf715df5724e315dd2ec3c9b269fa 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "staff-symbol.hh"
index 94e726864ff7b2830bc4e563fed29c94db4de71d..2e862dc269854da93dcdefc37cb12617b3efc820 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
@@ -60,9 +60,10 @@ Stanza_number_align_engraver::stop_translation_timestep ()
 
 ADD_ACKNOWLEDGER (Stanza_number_align_engraver, lyric_syllable);
 ADD_ACKNOWLEDGER (Stanza_number_align_engraver, stanza_number);
+
 ADD_TRANSLATOR (Stanza_number_align_engraver,
                "This engraver ensures that stanza numbers are neatly aligned. ",
                "",
-               " ",
+               "",
                "");
 
index bdf4ae5db2cfd886199e6290bcf938ecdc9efdfa..41759ff12a90ac358a76effbbd6f2065326e3ff3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Glen Prideaux <glenprideaux@iname.com>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>, Glen Prideaux <glenprideaux@iname.com>
 */
 
 #include "engraver.hh"
index 1dfef14b73b1f7c1c83dc82e4a702a7fa522d097..164bedff3638676fc1a4d0e8eef8c3de1ca2ab7d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index e607fda1b08ec3e551a303be846af81c9c78a791..c8fbd63d18d3ec037f5fe3c8ed030622ffee6710 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "stem-tremolo.hh"
@@ -33,8 +33,8 @@ Stem_tremolo::calc_slope (SCM smob)
       if (is_number_pair (s))
        dy = - scm_to_double (scm_car (s)) + scm_to_double (scm_cdr (s));
 
-      Grob *s2 = Beam::last_visible_stem (beam);
-      Grob *s1 = Beam::first_visible_stem (beam);
+      Grob *s2 = Beam::last_normal_stem (beam);
+      Grob *s1 = Beam::first_normal_stem (beam);
       
       Grob *common = s1->common_refpoint (s2, X_AXIS);
       Real dx = s2->relative_coordinate (common, X_AXIS) -
@@ -147,8 +147,14 @@ Stem_tremolo::height (SCM smob)
   return ly_interval2scm (s1.extent (Y_AXIS));
 }
 
+Real
+Stem_tremolo::vertical_length (Grob *me)
+{
+  return untranslated_stencil (me, 0.35).extent (Y_AXIS).length ();
+}
+  
 Stencil
-Stem_tremolo::translated_stencil (Grob *me, Real slope)
+Stem_tremolo::untranslated_stencil (Grob *me, Real slope)
 {
   Grob *stem = unsmob_grob (me->get_object ("stem"));
   if (!stem)
@@ -157,30 +163,37 @@ Stem_tremolo::translated_stencil (Grob *me, Real slope)
       return Stencil();
     }
 
-  Spanner *beam = Stem::get_beam (stem);
   Direction stemdir = get_grob_direction (stem);
-  if (stemdir == 0)
+  if (!stemdir)
     stemdir = UP;
 
   bool whole_note = Stem::duration_log (stem) <= 0;
 
-  Real beam_translation = get_beam_translation (me);
-
   /* for a whole note, we position relative to the notehead, so we want the
      stencil aligned on the flag closest to the head */
   Direction stencil_dir = whole_note ? -stemdir : stemdir;
-  Stencil mol = raw_stencil (me, slope, stencil_dir);
+  return raw_stencil (me, slope, stencil_dir);
+}
 
-  Interval mol_ext = mol.extent (Y_AXIS);
-  Real ss = Staff_symbol_referencer::staff_space (me);
+  
+Stencil
+Stem_tremolo::translated_stencil (Grob *me, Real slope)
+{
+  Stencil mol = untranslated_stencil (me, slope);
 
-  // ugh, rather calc from Stem_tremolo_req
-  int beam_count = beam ? (Stem::beam_multiplicity (stem).length () + 1) : 0;
+  Grob *stem = unsmob_grob (me->get_object ("stem"));
+  if (!stem)
+    return Stencil ();
+  
+  Direction stemdir = get_grob_direction (stem);
+  if (stemdir == 0)
+    stemdir = UP;
 
-  Real beamthickness = 0.0;
-  SCM sbt = (beam) ? beam->get_property ("thickness") : SCM_EOL;
-  if (scm_is_number (sbt))
-    beamthickness = scm_to_double (sbt) * ss;
+  Spanner *beam = Stem::get_beam (stem);
+  Real beam_translation = get_beam_translation (me);
+
+  int beam_count = beam ? (Stem::beam_multiplicity (stem).length () + 1) : 0;
+  Real ss = Staff_symbol_referencer::staff_space (me);
 
   Real end_y
     = Stem::stem_end_position (stem) * ss / 2
@@ -192,6 +205,8 @@ Stem_tremolo::translated_stencil (Grob *me, Real slope)
       if (stemdir == UP)
         end_y -= stemdir * beam_translation * 0.5;
     }
+
+  bool whole_note = Stem::duration_log (stem) <= 0;
   if (whole_note)
     {
       /* we shouldn't position relative to the end of the stem since the stem
index fc21f2d6b9597929ee24dd4c888d1a1f7824d027..7c369e4bb060c281d4aeaeb797eaf097c08e02bc 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 
   TODO: This is way too hairy
@@ -154,7 +154,7 @@ Stem::last_head (Grob *me)
 Drul_array<Grob *>
 Stem::extremal_heads (Grob *me)
 {
-  const int inf = 1000000;
+  const int inf = INT_MAX;
   Drul_array<int> extpos;
   extpos[DOWN] = inf;
   extpos[UP] = -inf;
@@ -214,28 +214,36 @@ Stem::add_head (Grob *me, Grob *n)
 bool
 Stem::is_invisible (Grob *me)
 {
-  Real stemlet_length = robust_scm2double (me->get_property ("stemlet-length"),
-                                          0.0);
+  return !is_normal_stem (me)
+    && (robust_scm2double (me->get_property ("stemlet-length"),
+                          0.0) == 0.0);
+}
+
 
-  return !((head_count (me)
-           || stemlet_length > 0.0)
-          && scm_to_int (me->get_property ("duration-log")) >= 1);
+bool
+Stem::is_normal_stem (Grob *me)
+{
+  return head_count (me) && scm_to_int (me->get_property ("duration-log")) >= 1;
 }
 
+
 MAKE_SCHEME_CALLBACK (Stem, pure_height, 3)
 SCM
 Stem::pure_height (SCM smob, SCM start, SCM end)
 {
   (void) start;
   (void) end;
-  
-  
+
   Grob *me = unsmob_grob (smob);
+  Interval iv;
+
+  if (!is_normal_stem (me))
+    return ly_interval2scm (iv);
+  
   Real ss = Staff_symbol_referencer::staff_space (me);
   Real len = scm_to_double (calc_length (smob)) * ss / 2;
   Direction dir = get_grob_direction (me);
 
-  Interval iv;
   Interval hp = head_positions (me);
   if (dir == UP)
     iv = Interval (0, len);
@@ -317,7 +325,7 @@ Stem::calc_stem_end_position (SCM smob)
   return scm_from_double (stem_end);
 }
 
-
+/* Length is in half-spaces (or: positions) here. */
 MAKE_SCHEME_CALLBACK (Stem, calc_length, 1)
 SCM
 Stem::calc_length (SCM smob)
@@ -364,8 +372,7 @@ Stem::calc_length (SCM smob)
       (Stem_tremolo::raw_stencil () looks at the beam.) --hwn  */
 
       Real minlen = 1.0
-       + 2 * t_flag->extent (t_flag, Y_AXIS).length ()
-       / ss;
+       + 2 * Stem_tremolo::vertical_length (t_flag) / ss;
 
       /* We don't want to add the whole extent of the flag because the trem
          and the flag can overlap partly. beam_translation gives a good
@@ -794,8 +801,16 @@ SCM
 Stem::offset_callback (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
-  Real r = 0.0;
 
+  extract_grob_set (me, "rests", rests);
+  if (rests.size ())
+    {
+      Grob *rest = rests.back ();
+      Real r = rest->extent (rest, X_AXIS).center ();
+      return scm_from_double (r);
+    }
+
+  
   if (Grob *f = first_head (me))
     {
       Interval head_wid = f->extent (f, X_AXIS);
@@ -808,7 +823,7 @@ Stem::offset_callback (SCM smob)
 
       Direction d = get_grob_direction (me);
       Real real_attach = head_wid.linear_combination (d * attach);
-      r = real_attach;
+      Real r = real_attach;
 
       /* If not centered: correct for stem thickness.  */
       if (attach)
@@ -816,17 +831,11 @@ Stem::offset_callback (SCM smob)
          Real rule_thick = thickness (me);
          r += -d * rule_thick * 0.5;
        }
+      return scm_from_double (r);
     }
-  else
-    {
-      extract_grob_set (me, "rests", rests);
-      if (rests.size ())
-       {
-         Grob *rest = rests.back ();
-         r = rest->extent (rest, X_AXIS).center ();
-       }
-    }
-  return scm_from_double (r);
+
+  programming_error ("Weird stem.");
+  return scm_from_double (0.0);
 }
 
 Spanner *
index 6e51ec9b9d5ec334340c0617affdaf61b269698d..64ad13d95fbdcb7675a1894cfdd2cf9f1afb084c 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "stencil.hh"
index e4387345361da7ba061cac04386d361eebeef56a..f6deee072e969f9db966e5d4a2b34d3f703ebcae 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "stencil.hh"
index 2669e14808b2ad8f12def8efed9e8d8585008d77..6ef0e191fd4394bad150cf94dfc7aa45151f3e23 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 
@@ -85,58 +85,6 @@ LY_DEFINE (ly_stencil_empty_p, "ly:stencil-empty?",
   return scm_from_bool (s->is_empty ());
 }
 
-LY_DEFINE (ly_stencil_origin, "ly:stencil-origin",
-          2, 0, 0, (SCM stil, SCM axis),
-          "Return a pair of numbers signifying the origin @var{stil} in "
-          "@var{axis} direction (0 or 1 for x and y axis respectively).")
-{
-  Stencil *s = unsmob_stencil (stil);
-  SCM_ASSERT_TYPE (s, stil, SCM_ARG1, __FUNCTION__, "stencil");
-  SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
-
-  return scm_from_double (s->origin ()[Axis (scm_to_int (axis))]);
-}
-
-LY_DEFINE (ly_stencil_moved_to_edge, "ly:stencil-moved-to-edge",
-          4, 2, 0, (SCM first, SCM axis, SCM direction, SCM second,
-                    SCM padding, SCM minimum),
-          "Similar to @code{ly:stencil-combine-edge}, but returns "
-          "@var{second} positioned to be next to @var{first}. ")
-{
-  /*
-    C&P from combine-at-edge.
-  */
-  Stencil *s1 = unsmob_stencil (first);
-  Stencil *s2 = unsmob_stencil (second);
-  Stencil first_stencil;
-
-  SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
-  SCM_ASSERT_TYPE (is_direction (direction), direction, SCM_ARG4, __FUNCTION__, "dir");
-
-  Real p = 0.0;
-  if (padding != SCM_UNDEFINED)
-    {
-      SCM_ASSERT_TYPE (scm_is_number (padding), padding, SCM_ARG5, __FUNCTION__, "number");
-      p = scm_to_double (padding);
-    }
-  Real m = 0.0;
-  if (minimum != SCM_UNDEFINED)
-    {
-      SCM_ASSERT_TYPE (scm_is_number (minimum), minimum, SCM_ARG6, __FUNCTION__, "number");
-      m = scm_to_double (minimum);
-    }
-
-  if (s1)
-    first_stencil = *s1;
-
-  if (s2)
-    return first_stencil.moved_to_edge (Axis (scm_to_int (axis)),
-                                       Direction (scm_to_int (direction)),
-                                       *s2, p, m).smobbed_copy ();
-  else
-    return Stencil ().smobbed_copy ();
-}
-
 LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge",
           4, 2, 0, (SCM first, SCM axis, SCM direction,
                     SCM second,
@@ -179,7 +127,7 @@ LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge",
 
   if (s2)
     result.add_at_edge (Axis (scm_to_int (axis)),
-                       Direction (scm_to_int (direction)), *s2, p, m);
+                       Direction (scm_to_int (direction)), *s2, p);
 
   return result.smobbed_copy ();
 }
index 329c5cae61d2d85b87a41273ae9564bc6b486749..b88b0c8bdebb50581e275babe0a9fdb819e17f23 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "stencil.hh"
@@ -72,11 +72,6 @@ Stencil::extent_box () const
 {
   return dim_;
 }
-Offset
-Stencil::origin () const
-{
-  return origin_;
-}
 
 /*
  * Rotate this stencil around the point [x, y]
@@ -143,7 +138,6 @@ Stencil::translate (Offset o)
                      expr_, SCM_UNDEFINED);
   if (!is_empty ())
     dim_.translate (o);
-  origin_ += o;
 }
 
 void
@@ -186,13 +180,9 @@ Stencil::align_to (Axis a, Real x)
   translate_axis (-i.linear_combination (x), a);
 }
 
-/* FIXME: unintuitive naming, you would expect *this to be moved.
-   Kept (keeping?) API for compat with add_at_edge ().
-
-   What is PADDING, what is MINIMUM, exactly?  */
-Stencil
-Stencil::moved_to_edge (Axis a, Direction d, Stencil const &s,
-                       Real padding, Real minimum) const
+/*  See scheme Function.  */
+void
+Stencil::add_at_edge (Axis a, Direction d, Stencil const &s, Real padding)
 {
   Interval my_extent = dim_[a];
   Interval i (s.extent (a));
@@ -210,20 +200,7 @@ Stencil::moved_to_edge (Axis a, Direction d, Stencil const &s,
 
   Stencil toadd (s);
   toadd.translate_axis (offset, a);
-
-  if (minimum > 0 && d * (-origin ()[a] + toadd.origin ()[a]) < minimum)
-    toadd.translate_axis (-toadd.origin ()[a]
-                         + origin ()[a] + d * minimum, a);
-
-  return toadd;
-}
-
-/*  See scheme Function.  */
-void
-Stencil::add_at_edge (Axis a, Direction d, Stencil const &s, Real padding,
-                     Real minimum)
-{
-  add_stencil (moved_to_edge (a, d, s, padding, minimum));
+  add_stencil (toadd);
 }
 
 Stencil
@@ -237,3 +214,12 @@ Stencil::in_color (Real r, Real g, Real b) const
                                   expr ()));
   return new_stencil;
 }
+
+/* convenience */
+Stencil
+Stencil::translated (Offset z) const
+{
+  Stencil s (*this);
+  s.translate (z);
+  return s;
+}
index 1f890782a44cbfc09dca7c79626ac050b32c80ec..e6e4fb7dc60faaac59ae85c6354dd8d43a340aa2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Erik Sandberg  <mandolaerik@gmail.com>
+  (c) 2006--2007 Erik Sandberg  <mandolaerik@gmail.com>
 */
 
 #include "stream-event.hh"
@@ -13,12 +13,13 @@ LY_DEFINE (ly_make_stream_event, "ly:make-stream-event",
           "Creates a stream event of class @var{cl} with the given mutable property list.\n" )
 {
   SCM_ASSERT_TYPE (scm_is_symbol (cl), cl, SCM_ARG1, __FUNCTION__, "symbol");
-  if (proplist != SCM_UNDEFINED)
-    {
-      SCM_ASSERT_TYPE (scm_list_p (proplist), proplist, SCM_ARG2, __FUNCTION__, "association list");
-    }
-  else
+
+  /* should be scm_list_p, but scm_list_p is expensive. */
+  SCM_ASSERT_TYPE (scm_is_pair (proplist), proplist, SCM_ARG2, __FUNCTION__, "association list");
+  
+  if (proplist == SCM_UNDEFINED)
     proplist = SCM_EOL;
+
   Stream_event *e = new Stream_event (cl, proplist);
   return e->unprotect ();
 }
@@ -42,3 +43,20 @@ LY_DEFINE (ly_event_set_property, "ly:event-set-property!",
   SCM_ASSERT_TYPE (sc, ev, SCM_ARG1, __FUNCTION__, "event");
   return ly_prob_set_property_x (ev, sym, val);
 }
+
+LY_DEFINE (ly_event_deep_copy, "ly:event-deep-copy",
+          1, 0, 0, (SCM m),
+          "Copy @var{m} and all sub expressions of @var{m}")
+{
+  SCM copy = m;
+  if (Stream_event *ev = unsmob_stream_event (m))
+    {
+      ev = ev->clone ();
+      copy = ev->unprotect ();
+    }
+  else if (scm_is_pair (m))
+    copy = scm_cons (ly_event_deep_copy (scm_car (m)),
+                    ly_event_deep_copy (scm_cdr (m)));
+
+  return copy;
+}
index ff736d88323809227888f6b74037107ec21827d1..12219884b1071d40e9919e4cf13b771b515d2148 100644 (file)
@@ -35,11 +35,10 @@ Stream_event::Stream_event (SCM class_name, Input *origin)
     set_spot (origin);
 }
 
-Stream_event::Stream_event (Stream_event *ev)
-  : Prob (ly_symbol2scm ("Stream_event"), SCM_EOL)
+SCM
+Stream_event::copy_mutable_properties () const
 {
-  mutable_property_alist_ = scm_copy_tree (ev->mutable_property_alist_);
-  immutable_property_alist_ = ev->immutable_property_alist_;
+  return ly_event_deep_copy (mutable_property_alist_);
 }
 
 Input *
index d4aac87bc70153fc709ebc5f449cb989b09416cb..9164fe74bfb22de6657cd86581200ab9c5ddfcf9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 2e6cd91bd9be118684c3c98e4311db7ba1eaaea3..8056ea89a2448a99bafb24493ad00eb9921ecb4c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #include "grob.hh"
 #include "stencil.hh"
@@ -58,7 +58,7 @@ Sustain_pedal::print (SCM smob)
        idx += string (&text.c_str ()[i], 1);
       Stencil m = Font_interface::get_default_font (e)->find_by_name (idx);
       if (!m.is_empty ())
-       mol.add_at_edge (X_AXIS, RIGHT, m, 0, 0);
+       mol.add_at_edge (X_AXIS, RIGHT, m, 0);
     }
 
   return mol.smobbed_copy ();
index e86e004c1a4614dd62456c2478aa4caf46608681..7d0c851ab0627d80090556a7c024725b3582238c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 595b2a99d69d9a90bfc5c3e029b58b2779ad46ef..2bd42dfa5cb44ea8cb69098b2895d7e98cc36dd8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "performer.hh"
index 5c28a612311887ea1355022b694f7a77e85eedde..479618addcdb1b50aef2c4768a373964ce157aff 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -96,8 +96,7 @@ Bracket_nesting_group::add_support (Grob *g)
 
 Bracket_nesting_group::~Bracket_nesting_group ()
 {
-  for (vsize i = 0 ; i < children_.size (); i++)
-    delete children_[i];
+  junk_pointers (children_);
 }
 
 void
@@ -212,6 +211,8 @@ System_start_delimiter_engraver::finalize ()
       nesting_->set_bound (RIGHT,
                           unsmob_grob (get_property ("currentCommandColumn")));
       nesting_->set_nesting_support (0);
+
+      delete nesting_;
     }
 }
 
index c3fe50250a0a9e0bc20de549bffe1bb99c91a828..206ccd84db7cf68dfede69e5c67c0095b75b64a7 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "system-start-delimiter.hh"
@@ -42,7 +42,7 @@ System_start_delimiter::staff_bracket (Grob *me, Real height)
   Stencil bracket = Lookup::filled_box (box);
   Direction d = DOWN;
   do
-    bracket.add_at_edge (Y_AXIS, d, tips[d], -overlap, 0.0);
+    bracket.add_at_edge (Y_AXIS, d, tips[d], -overlap);
   while (flip (&d) != DOWN);
   bracket = Stencil (box, bracket.expr ());
 
index a0a90b06c3fb0b52809cfeb3b6ab580380a351f7..00795d22d749a743b8b381508f0816477e7ecc93 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2006--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 90eb463c44932ac307902bd3e8a7e5e210b7984f..85670f2927b087b7044bdc0e03750f2c799f92a0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "system.hh"
 #include "pointer-group-interface.hh"
 #include "spacing-interface.hh"
 #include "staff-symbol-referencer.hh"
-#include "tweak-registration.hh"
 #include "warn.hh"
+#include "lookup.hh"
 
 extern bool debug_skylines;
 
-System::System (System const &src, int count)
-  : Spanner (src, count)
+System::System (System const &src)
+  : Spanner (src)
 {
   all_elements_ = 0;
   pscore_ = 0;
@@ -35,8 +35,8 @@ System::System (System const &src, int count)
   init_elements ();
 }
 
-System::System (SCM s, Object_key const *key)
-  : Spanner (s, key)
+System::System (SCM s)
+  : Spanner (s)
 {
   all_elements_ = 0;
   rank_ = 0;
@@ -53,9 +53,9 @@ System::init_elements ()
 }
 
 Grob *
-System::clone (int index) const
+System::clone () const
 {
-  return new System (*this, index);
+  return new System (*this);
 }
 
 int
@@ -114,8 +114,8 @@ fixup_refpoints (vector<Grob*> const &grobs)
     grobs[i]->fixup_refpoint ();
 }
 
-SCM
-System::get_paper_systems ()
+void
+System::do_break_substitution_and_fixup_refpoints ()
 {
   for (vsize i = 0; i < all_elements_->size (); i++)
     {
@@ -178,7 +178,20 @@ System::get_paper_systems ()
 
   if (be_verbose_global)
     message (_f ("Element count %d.", count + element_count ()));
+}
+
+SCM
+System::get_broken_system_grobs ()
+{
+  SCM ret = SCM_EOL;
+  for (vsize i = 0; i < broken_intos_.size (); i++)
+    ret = scm_cons (broken_intos_[i]->self_scm (), ret);
+  return scm_reverse (ret);
+}
 
+SCM
+System::get_paper_systems ()
+{
   SCM lines = scm_c_make_vector (broken_intos_.size (), SCM_EOL);
   for (vsize i = 0; i < broken_intos_.size (); i++)
     {
@@ -187,14 +200,6 @@ System::get_paper_systems ()
 
       System *system = dynamic_cast<System *> (broken_intos_[i]);
 
-      system->post_processing ();
-      system->build_skylines ();
-      if (i > 0)
-       {
-         System *prev = dynamic_cast<System*> (broken_intos_[i-1]);
-         Real r = prev->skylines_[DOWN].distance (system->skylines_[UP]);
-         system->set_property ("skyline-distance", scm_from_double (r));
-       }
       scm_vector_set_x (lines, scm_from_int (i),
                        system->get_paper_system ());
 
@@ -209,7 +214,7 @@ System::break_into_pieces (vector<Column_x_positions> const &breaking)
 {
   for (vsize i = 0; i < breaking.size (); i++)
     {
-      System *system = dynamic_cast<System *> (clone (broken_intos_.size ()));
+      System *system = dynamic_cast<System *> (clone ());
       system->rank_ = broken_intos_.size ();
 
       vector<Grob*> c (breaking[i].cols_);
@@ -245,30 +250,12 @@ System::add_column (Paper_column *p)
       ga = unsmob_grob_array (scm_ga);
     }
 
-  p->rank_
-    = ga->size ()
-    ? Paper_column::get_rank (ga->array ().back ()) + 1
-    : 0;
+  p->rank_ = ga->size ();
 
   ga->add (p);
   Axis_group_interface::add_element (this, p);
 }
 
-void
-apply_tweaks (Grob *g, bool broken)
-{
-  if (bool (g->original ()) == broken)
-    {
-      SCM tweaks = global_registry_->get_tweaks (g);
-      for (SCM s = tweaks; scm_is_pair (s); s = scm_cdr (s))
-       {
-         SCM proc = scm_caar (s);
-         SCM rest = scm_cdar (s);
-         scm_apply_1 (proc, g->self_scm (), rest);
-       }
-    }
-}
-
 void
 System::pre_processing ()
 {
@@ -288,9 +275,6 @@ System::pre_processing ()
 
   fixup_refpoints (all_elements_->array ());
 
-  for (vsize i = 0; i < all_elements_->size (); i++)
-    apply_tweaks (all_elements_->grob (i), false);
-
   for (vsize i = 0; i < all_elements_->size (); i++)
     {
       Grob *g = all_elements_->grob (i);
@@ -311,7 +295,6 @@ System::post_processing ()
     {
       Grob *g = all_elements_->grob (i);
 
-      apply_tweaks (g, true);
       (void) g->get_property ("after-line-breaking");
     }
 
@@ -356,6 +339,9 @@ System::get_paper_system ()
   SCM exprs = SCM_EOL;
   SCM *tail = &exprs;
 
+  post_processing ();
+  build_skylines ();
+
   vector<Layer_entry> entries;
   for (vsize j = 0; j < all_elements_->size (); j++)
     {
@@ -402,8 +388,8 @@ System::get_paper_system ()
                                 exprs));
   if (debug_skylines)
     {
-      sys_stencil.add_stencil (points_to_line_stencil (skylines_[UP].to_points ()).in_color (255, 0, 0));
-      sys_stencil.add_stencil (points_to_line_stencil (skylines_[DOWN].to_points ()).in_color (0, 255, 0));
+      sys_stencil.add_stencil (Lookup::points_to_line_stencil (0.1, skylines_[UP].to_points ()).in_color (255, 0, 0));
+      sys_stencil.add_stencil (Lookup::points_to_line_stencil (0.1, skylines_[DOWN].to_points ()).in_color (0, 255, 0));
     }
 
   Grob *left_bound = this->get_bound (LEFT);
@@ -413,25 +399,18 @@ System::get_paper_system ()
 
   /* information that the page breaker might need */
   Grob *right_bound = this->get_bound (RIGHT);
-  pl->set_property ("skyline-distance", get_property ("skyline-distance"));
+  pl->set_property ("skylines", skylines_.smobbed_copy ());
   pl->set_property ("page-break-permission", right_bound->get_property ("page-break-permission"));
   pl->set_property ("page-turn-permission", right_bound->get_property ("page-turn-permission"));
   pl->set_property ("page-break-penalty", right_bound->get_property ("page-break-penalty"));
   pl->set_property ("page-turn-penalty", right_bound->get_property ("page-turn-penalty"));
 
-  if (!scm_is_pair (pl->get_property ("refpoint-Y-extent")))
-    {
-      Interval staff_refpoints;
-      staff_refpoints.set_empty ();
-      extract_grob_set (this, "spaceable-staves", staves);
-      for (vsize i = 0; i < staves.size (); i++)
-       {
-         Grob *g = staves[i];
-         staff_refpoints.add_point (g->relative_coordinate (this, Y_AXIS));
-       }
-      pl->set_property ("refpoint-Y-extent", ly_interval2scm (staff_refpoints));
-    }
+  Interval staff_refpoints;
+  extract_grob_set (this, "spaceable-staves", staves);
+  for (vsize i = 0; i < staves.size (); i++)
+    staff_refpoints.add_point (staves[i]->relative_coordinate (this, Y_AXIS));
 
+  pl->set_property ("staff-refpoint-extent", ly_interval2scm (staff_refpoints));
   pl->set_property ("system-grob", this->self_scm ()); 
 
   return pl->unprotect ();
@@ -448,9 +427,7 @@ System::broken_col_range (Item const *left, Item const *right) const
   
   extract_grob_set (this, "columns", cols);
 
-  vsize i = binary_search (cols, (Grob *) left,
-                          Paper_column::less_than);
-
+  vsize i = Paper_column::get_rank (left);
   int end_rank = Paper_column::get_rank (right);
   if (i < cols.size ())
     i++;
@@ -471,7 +448,7 @@ System::broken_col_range (Item const *left, Item const *right) const
 /** Return all columns, but filter out any unused columns , since they might
     disrupt the spacing problem. */
 vector<Grob*>
-System::columns () const
+System::used_columns () const
 {
   extract_grob_set (this, "columns", ro_columns);
 
@@ -493,6 +470,16 @@ System::columns () const
   return columns;
 }
 
+Paper_column *
+System::column (vsize which) const
+{
+  extract_grob_set (this, "columns", columns);
+  if (which >= columns.size ())
+    return 0;
+  
+  return dynamic_cast<Paper_column*> (columns[which]);
+}
+
 Paper_score*
 System::paper_score () const
 {
index 385b462cbd1c3bf50b180ec5ba7f1d9a064c4b91..900f4816dc98bd1d6a9bdf89b88e3c019dfea019 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index a9e655673420ec210e39b3aa818aea85b0653187..dd82a1d8e1fae32a8f7821d4ace8bab6fade03aa 100644 (file)
@@ -1,7 +1,7 @@
 /*
   tab-note-heads-engraver.cc -- part of GNU LilyPond
 
-  (c) 2002--2006 Han-Wen Nienhuys, Jean-Baptiste Lamy <jiba@tuxfamily.org>,
+  (c) 2002--2007 Han-Wen Nienhuys, Jean-Baptiste Lamy <jiba@tuxfamily.org>,
 */
 
 #include <cctype>
@@ -113,7 +113,7 @@ Tab_note_heads_engraver::process_music ()
 
       while (!string_found)
        {
-         int fret = unsmob_pitch (scm_pitch)->semitone_pitch ()
+         int fret = unsmob_pitch (scm_pitch)->rounded_semitone_pitch ()
            - scm_to_int (scm_list_ref (string_tunings, scm_from_int (tab_string - 1)));
          if (fret < min_fret)
            tab_string += high_string_one ? 1 : -1;
index ccdbf8683e993e18a12c3ffca2e0b0c445070b9b..03ba28679c65fc5c50b7b0e8e9ae6748d2f5f992 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index fcc788fd14f9160c93bbe621303b77555b682b1f..cbf4f3bfa7b489aba187fb1b3f5777f413b05979 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "moment.hh"
index 34864274c48c044df84e2667939e0ece00270ec1..ac537891ef2c1a8b6bfecf2b2d37a87e7f267922 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "performer.hh"
index a3447ccce7175cdceaffd377ac45aa7c4510815e..c53cf3e4fd2cc6143bca02b6d9c1f6f4dee2eda4 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "directional-element-interface.hh"
index ebfae5ae5b3b51f7c3016cf1745b8d5ede26553b..eec815089429a4ff115244552bbcea2e33c46535 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
index 164d0062ffdf5452a97560207321591c2fe1347a..05b17fdfccca442235b7c6b335bcead786dac60f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "dimensions.hh"
@@ -31,7 +31,7 @@ lookup_tex_text_dimension (Font_metric *font, SCM text)
   if (text_dimension_hash_tab)
     {
       scm_hash_ref (text_dimension_hash_tab,
-                   scm_makfrom0str (key_str.c_str ()),
+                   ly_string2scm (key_str),
                    SCM_BOOL_F);
     }
   if (scm_is_pair (val))
index 28f88fd76ffee3f2c35d16f640b5c7ff840d78ca..2ab6dd8d481dd9539da5e479debcf632f7cb73d5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "engraver.hh"
@@ -58,7 +58,7 @@ Text_spanner_engraver::process_music ()
   if (event_drul_[STOP])
     {
       if (!span_)
-       event_drul_[STOP]->origin ()->warning (_ ("can't find start of text spanner"));
+       event_drul_[STOP]->origin ()->warning (_ ("cannot find start of text spanner"));
       else
        {
          finished_ = span_;
index ea4c25074a2ed7f03b5592b6277660c615dcefc0..e98ae0f7dfa9afcd81c412e9c08ba504b87f5d07 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 
   Revised over good by Han-Wen.
 */
index 85529ef1d559585edac3d6e7bf4e5723f18fef6b..9eefbbf8ee10252c5b3360152280c9e759703392 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "tie-column.hh"
 using namespace std;
 
 void
-Tie_column::add_tie (Grob *me, Grob *tie)
+Tie_column::add_tie (Grob *tc, Grob *tie)
 {
+  Spanner *me = dynamic_cast<Spanner *> (tc);
+  
   if (tie->get_parent (Y_AXIS)
       && Tie_column::has_interface (tie->get_parent (Y_AXIS)))
     return;
 
-  if (!Pointer_group_interface::count (me, ly_symbol2scm ("ties")))
+  if (!me->get_bound (LEFT)
+      || (Paper_column::get_rank (me->get_bound (LEFT)->get_column ())
+         > Paper_column::get_rank (dynamic_cast<Spanner*> (tie)->get_bound (LEFT)->get_column ())))
     {
-      dynamic_cast<Spanner *> (me)->set_bound (LEFT, Tie::head (tie, LEFT));
-      dynamic_cast<Spanner *> (me)->set_bound (RIGHT, Tie::head (tie, RIGHT));
+       me->set_bound (LEFT, Tie::head (tie, LEFT));
+       me->set_bound (RIGHT, Tie::head (tie, RIGHT));
     }
-
+      
   tie->set_parent (me, Y_AXIS);
   Pointer_group_interface::add_grob (me, ly_symbol2scm ("ties"), tie);
 }
@@ -75,14 +79,6 @@ Tie_column::calc_positioning_done (SCM smob)
   if (!ties.size ())
     return SCM_BOOL_T;
 
-  if (ties.size() == 1)
-    {
-      /*
-       Already handled by standard mechanisms.
-       */
-      return SCM_BOOL_T;
-    }
-  
   vector_sort (ties, Tie::less);
 
   Tie_formatting_problem problem;
@@ -92,34 +88,19 @@ Tie_column::calc_positioning_done (SCM smob)
   problem.set_manual_tie_configuration (manual_configs);
 
 
-  Ties_configuration base = problem.generate_optimal_chord_configuration ();
+  Ties_configuration base = problem.generate_optimal_configuration ();
 
   for (vsize i = 0; i < base.size(); i++)
     {
-      Tie::set_control_points (ties[i], problem.common_x_refpoint (),
-                              base[i],
-                              problem.details_);
+      SCM cp = Tie::get_control_points (ties[i], problem.common_x_refpoint (),
+                                       base[i],
+                                       problem.details_);
+
+      ties[i]->set_property ("control-points", cp);
       set_grob_direction (ties[i],
                          base[i].dir_);
 
-#if DEBUG_TIE_SCORING
-      if (to_boolean (me->layout ()
-                     ->lookup_variable (ly_symbol2scm ("debug-tie-scoring"))))
-       {
-         string card = to_string ("%d (%.2f): ", base[i].position_, base[i].delta_y_)
-           + base[i].card () + base.tie_card (i);
-
-         
-         if (i == 0)
-           card += base.card ();
-         if (i == base.size () - 1)
-           card += to_string ("TOTAL=%.2f", base.score ());
-         
-         ties[i]->set_property ("quant-score",
-                                scm_makfrom0str (card.c_str ()));
-       }
-#endif
-      
+      problem.set_debug_scoring (base);
     }
   return SCM_BOOL_T;
 }
index 9192b3795e707a76094a003f0ea554d0a07d5ab6..2491f7e3effaa6c52fbcc73975e82c660eb8d916 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -157,8 +157,46 @@ Ties_configuration::score () const
   return score_;
 }
 
+
+string
+Ties_configuration::complete_tie_card (vsize i) const
+{
+  string s;
+  s += to_string ("%d (%.2f) %c: ", (*this)[i].position_, (*this)[i].delta_y_,
+                 ((*this)[i].dir_ == UP ? 'u' : 'd'))
+    + (*this)[i].card () + (*this).tie_card (i);
+  
+  /*
+    this is a little awkward, but we must decide where to put
+    aggregrates.
+   */
+  if (i == 0)
+    s += card ();
+
+  if (i + 1 == size ())
+    s += to_string ("TOTAL=%.2f", score ());
+  
+  return s;
+}
+
+/* for use inside GDB */
+string
+Ties_configuration::complete_score_card () const
+{
+  string s; 
+  for (vsize i = 0; i < size(); i++)
+    {
+      s += complete_tie_card (i);
+    }
+
+  return s;
+}
+
+
+
 string
 Ties_configuration::card () const
 {
   return score_card_;
 }
+
index 852f04466b2c2578539391e432624b8327dd7a00..ddb662fd308658cbe8df5a915aeb780e3efca0db 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -54,6 +54,7 @@ Tie_details::from_grob (Grob *me)
   tie_tie_collision_penalty_ = get_real_detail ("tie-tie-collision-penalty", 30);
   tie_tie_collision_distance_ = get_real_detail ("tie-tie-collision-distance", .25);
   horizontal_distance_penalty_factor_ = get_real_detail ("horizontal-distance-penalty-factor", 5);
+  same_dir_as_stem_penalty_ = get_real_detail ("same-dir-as-stem-penalty", 20);
   vertical_distance_penalty_factor_ = get_real_detail ("vertical-distance-penalty-factor", 5);
   intra_space_threshold_ = get_real_detail ("intra-space-threshold", 1.0);
   outer_tie_length_symmetry_penalty_factor_ = get_real_detail ("outer-tie-length-symmetry-penalty-factor", 3.0);
@@ -62,6 +63,7 @@ Tie_details::from_grob (Grob *me)
   outer_tie_vertical_gap_ = get_real_detail ("outer-tie-vertical-gap", 0.15);
 
   single_tie_region_size_ = get_int_detail ("single-tie-region-size", 3);
+  skyline_padding_ = get_real_detail ("skyline-padding", 0.05);
   multi_tie_region_size_ = get_int_detail ("multi-tie-region-size", 1);
 }
 
index ed46d59a77ccbdb437139e6bee7355d250e7ef6b..b97a5ad9c2bbd71782b25f95952a902a376aef81 100644 (file)
@@ -3,13 +3,12 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
 
 #include "context.hh"
-#include "grob-pitch-tuple.hh"
 #include "international.hh"
 #include "item.hh"
 #include "note-head.hh"
@@ -124,8 +123,7 @@ Tie_engraver::acknowledge_note_head (Grob_info i)
       if (ly_is_equal (right_ev->get_property ("pitch"),
                       left_ev->get_property ("pitch")))
        {
-         Grob *p = new Spanner (heads_to_tie_[i].tie_definition_,
-                                context ()->get_grob_key ("Tie"));
+         Grob *p = new Spanner (heads_to_tie_[i].tie_definition_);
 
          SCM cause = heads_to_tie_[i].tie_event_
            ? heads_to_tie_[i].tie_event_->self_scm ()
@@ -135,6 +133,13 @@ Tie_engraver::acknowledge_note_head (Grob_info i)
          Tie::set_head (p, LEFT, th);
          Tie::set_head (p, RIGHT, h);
 
+
+         if (is_direction (unsmob_stream_event (cause)->get_property ("direction")))
+           {
+             Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction"));
+             p->set_property ("direction", scm_from_int (d)); 
+           }
+         
          ties_.push_back (p);
          heads_to_tie_.erase (heads_to_tie_.begin () + i);
        }
@@ -153,8 +158,8 @@ Tie_engraver::start_translation_timestep ()
 {
   context ()->set_property ("tieMelismaBusy",
                            ly_bool2scm (heads_to_tie_.size ()));
-  
-  if (!to_boolean (get_property ("tieWaitForNote")))
+
+  if (heads_to_tie_.size () && !to_boolean (get_property ("tieWaitForNote")))
     {
       Moment now = now_mom ();
       for (vsize i = heads_to_tie_.size ();  i--; )
@@ -174,9 +179,14 @@ Tie_engraver::stop_translation_timestep ()
       if (!wait)
        heads_to_tie_.clear ();
 
+      Grob *sep = unsmob_grob (get_property ("breakableSeparationItem"));
       for (vsize i = 0; i < ties_.size (); i++)
-       typeset_tie (ties_[i]);
-
+       {
+         if (sep)
+           ties_[i]->set_object  ("separation-item", sep->self_scm ());
+         
+         typeset_tie (ties_[i]);
+       }
       ties_.clear ();
       tie_column_ = 0;
     }
index a55f31373519f6519131a5c5fd76bb8724c55cdd..6c7e2a024f091d0f5af9adae860c0a790b1cb80c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
@@ -22,7 +22,8 @@
 #include "tie-configuration.hh"
 #include "tie.hh"
 #include "warn.hh"
-
+#include "pointer-group-interface.hh"
+#include "output-def.hh"
 
 void
 Tie_formatting_problem::print_ties_configuration (Ties_configuration const *ties)
@@ -48,7 +49,7 @@ Tie_formatting_problem::get_attachment (Real y, Drul_array<int> columns) const
       Tuple2<int> key (columns[d], int (d));
       Chord_outline_map::const_iterator i (chord_outlines_.find (key));
       if (i == chord_outlines_.end ())
-       programming_error ("Can't find chord outline");
+       programming_error ("Cannot find chord outline");
       else
        attachments[d] = i->second.height (y);
     }
@@ -103,6 +104,9 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item*> bounds,
          Interval x = dots->extent (x_refpoint_, X_AXIS);
          int p = int (Staff_symbol_referencer::get_position (dots));
 
+         /*
+           TODO: shouldn't this use column-rank dependent key?  
+         */
          dot_positions_.insert (p);
          dot_x_.unite (x);
 
@@ -115,45 +119,76 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item*> bounds,
 
   Tuple2<int> key (column_rank, int (dir));
 
-  if (stem
-      && !Stem::is_invisible (stem))
+  if (stem)
     {
-      Interval x;
-      x.add_point (stem->relative_coordinate (x_refpoint_, X_AXIS));
-      x.widen (staff_space / 20); // ugh.
-      Interval y;
-      y.add_point (Stem::stem_end_position (stem) * staff_space * .5);
-
-      Direction stemdir = get_grob_direction (stem);
-      y.add_point (Stem::head_positions (stem)[-stemdir]
-                  * staff_space * .5);
-
-      boxes.push_back (Box (x, y));
+      if (Stem::is_normal_stem (stem))
+       {
+         
+         Interval x;
+         x.add_point (stem->relative_coordinate (x_refpoint_, X_AXIS));
+         x.widen (staff_space / 20); // ugh.
+         Interval y;
+         y.add_point (Stem::stem_end_position (stem) * staff_space * .5);
+
+         Direction stemdir = get_grob_direction (stem);
+         y.add_point (Stem::head_positions (stem)[-stemdir]
+                      * staff_space * .5);
+
+         /*
+           add extents of stem.
+         */
+         boxes.push_back (Box (x, y));
 
-      stem_extents_[key].unite (Box (x,y));
+         stem_extents_[key].unite (Box (x,y));
 
-      if (dir == LEFT)
+         if (dir == LEFT)
+           {
+             Box flag_box = Stem::get_translated_flag (stem).extent_box ();
+             flag_box.translate( Offset (x[RIGHT], X_AXIS));
+             boxes.push_back (flag_box);
+           }
+       }
+      else
        {
-         Box flag_box = Stem::get_translated_flag (stem).extent_box ();
-         flag_box.translate( Offset (x[RIGHT], X_AXIS));
-         boxes.push_back (flag_box);
+         Grob *head = Stem::support_head (stem);
+
+         /*
+           In case of invisible stem, don't pass x-center of heads.
+         */
+         Real x_center = head->extent (x_refpoint_, X_AXIS).center ();
+         Interval x_ext;
+         x_ext[-dir] = x_center;
+         Interval y_ext;
+         for (vsize j = 0; j < head_boxes.size (); j++)
+           y_ext.unite (head_boxes[j][Y_AXIS]);
+
+         boxes.push_back (Box (x_ext, y_ext));
        }
-    }
-  else if (stem)
-    {
-      Grob *head = Stem::support_head (stem);
 
-      /*
-       In case of invisible stem, don't pass x-center of heads.
-       */
-      Real x_center = head->extent (x_refpoint_, X_AXIS).center ();
-      Interval x_ext;
-      x_ext[-dir] = x_center;
-      Interval y_ext;
-      for (vsize j = 0; j < head_boxes.size (); j++)
-       y_ext.unite (head_boxes[j][Y_AXIS]);
+      extract_grob_set (stem, "note-heads", heads);
+      for (vsize i = 0; i < heads.size(); i ++)
+       {
+         if (find (bounds.begin(), bounds.end (), dynamic_cast<Item*> (heads[i])) ==  bounds.end ())
+           {
+             /*
+               other untied notes in the same chord.
+             */
+         
+             Interval y = Staff_symbol_referencer::extent_in_staff (heads[i]);
+             Interval x = heads[i]->extent (x_refpoint_, X_AXIS);
+             boxes.push_back (Box (x, y));
+           }
+         
+         Grob *acc = unsmob_grob (heads[i]->get_object ("accidental-grob"));
+         if (acc && acc->is_live () && dir == RIGHT)
+           {
+             boxes.push_back (Box (acc->extent (x_refpoint_, X_AXIS),
+                                   Staff_symbol_referencer::extent_in_staff (acc)));
+           }
 
-      boxes.push_back (Box (x_ext, y_ext));
+         head_positions_[column_rank].add_point (int (Staff_symbol_referencer::get_position (heads[i])));
+       }
+      
     }
   
   Direction updowndir = DOWN;
@@ -176,10 +211,11 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item*> bounds,
   while (flip (&updowndir) != DOWN);
 
   /* todo: the horizon_padding is somewhat arbitrary */
-  chord_outlines_[key] = Skyline (boxes, 0.1, Y_AXIS, -dir);
+  chord_outlines_[key] = Skyline (boxes, details_.skyline_padding_, Y_AXIS, -dir);
   if (bounds[0]->break_status_dir ())
     {
       Real x = robust_relative_extent (bounds[0],  x_refpoint_, X_AXIS)[-dir];
+      
       chord_outlines_[key].set_minimum_height (x);
     }
   else
@@ -266,8 +302,19 @@ Tie_formatting_problem::from_ties (vector<Grob*> const &ties)
       for (vsize i = 0; i < ties.size (); i++)
        {
          Item *it = dynamic_cast<Spanner*> (ties[i])->get_bound (d);
-                                            
-         bounds.push_back (it);
+         if (it->break_status_dir ())
+           {
+             Item *sep
+               = dynamic_cast<Item*> (unsmob_grob (ties[i]->get_object ("separation-item")));
+             if (sep && sep->get_column () == it->get_column ())
+               it = sep;
+
+             bounds.push_back (it);
+           }
+         else 
+           {
+             bounds.push_back (it);
+           }
        }
       
       set_chord_outline (bounds, d);
@@ -278,16 +325,12 @@ Tie_formatting_problem::from_ties (vector<Grob*> const &ties)
   for (vsize i = 0; i < ties.size (); i++)
     {
       Tie_specification spec;
-
-      spec.get_tie_manual_settings (ties[i]);
-      
-
+      spec.from_grob (ties[i]);
       
       do
        {
          spec.note_head_drul_[d] = Tie::head (ties[i], d);
-         spec.column_ranks_[d] =
-           dynamic_cast<Spanner*> (ties[i])->get_bound (d)->get_column ()->get_rank ();
+         spec.column_ranks_[d] = Tie::get_column_rank (ties[i], d);
        }
       while (flip (&d) != LEFT);
       specifications_.push_back (spec);
@@ -317,10 +360,10 @@ Tie_formatting_problem::from_semi_ties (vector<Grob*> const &semi_ties, Directio
          spec.position_ = int (Staff_symbol_referencer::get_position (head));
        }
 
-      spec.get_tie_manual_settings (semi_ties[i]);
+      spec.from_grob (semi_ties[i]);
       
       spec.note_head_drul_[head_dir] = head;
-      column_rank = dynamic_cast<Item*> (head)->get_column ()->get_rank ();
+      column_rank = Tie::get_column_rank (semi_ties[i], head_dir);
       spec.column_ranks_ = Drul_array<int> (column_rank, column_rank);
       heads.push_back (head);
       specifications_.push_back (spec);
@@ -354,7 +397,8 @@ Tie_formatting_problem::get_tie_specification (int i) const
   Return configuration, create it if necessary. 
 */
 Tie_configuration*
-Tie_formatting_problem::get_configuration (int pos, Direction dir, Drul_array<int> columns) const
+Tie_formatting_problem::get_configuration (int pos, Direction dir, Drul_array<int> columns,
+                                          bool tune_dy) const
 {
   int key_components[] = {
     pos, dir, columns[LEFT], columns[RIGHT]
@@ -368,14 +412,14 @@ Tie_formatting_problem::get_configuration (int pos, Direction dir, Drul_array<in
     }
 
   
-  Tie_configuration *conf = generate_configuration (pos, dir, columns);
+  Tie_configuration *conf = generate_configuration (pos, dir, columns, tune_dy);
   ((Tie_formatting_problem*) this)->possibilities_[key] = conf;
   return conf;
 }
 
 Tie_configuration*
 Tie_formatting_problem::generate_configuration (int pos, Direction dir,
-                                               Drul_array<int> columns) const
+                                               Drul_array<int> columns, bool y_tune) const
 {
   Tie_configuration *conf = new Tie_configuration;
   conf->position_ = pos;
@@ -385,7 +429,6 @@ Tie_formatting_problem::generate_configuration (int pos, Direction dir,
   
   Real y = conf->position_ * 0.5 * details_.staff_space_;
 
-  bool y_tune = true;
   if (dot_positions_.find (pos) != dot_positions_.end ())
     {
       conf->delta_y_ += dir * 0.25 * details_.staff_space_;
@@ -416,37 +459,41 @@ Tie_formatting_problem::generate_configuration (int pos, Direction dir,
        size.
        
        */
-      if (h < details_.intra_space_threshold_ * 0.5 * details_.staff_space_)
+      if (head_positions_slice (columns[LEFT]).contains (pos)
+         || head_positions_slice (columns[RIGHT]).contains (pos)
+         || abs (pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
        {
-         if (!Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos)
-             && abs (pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
-           {
-             conf->center_tie_vertically (details_);
-           }
-         else if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos))
+         if (h < details_.intra_space_threshold_ * 0.5 * details_.staff_space_)
            {
-             conf->delta_y_ += dir *
-               details_.tip_staff_line_clearance_ * 0.5 *  details_.staff_space_;
+             if (!Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos)
+                 && abs (pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
+               {
+                 conf->center_tie_vertically (details_);
+               }
+             else if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos))
+               {
+                 conf->delta_y_ += dir *
+                   details_.tip_staff_line_clearance_ * 0.5 *  details_.staff_space_;
+               }
            }
-       }
-      else 
-       {
-         Real top_y = y + conf->delta_y_ + conf->dir_ * h;
-         Real top_pos = top_y / (0.5*details_.staff_space_);
-         int round_pos = int (my_round (top_pos));
-
-         /* TODO: should use other variable? */
-         Real clearance = details_.center_staff_line_clearance_;
-         if (fabs (top_pos - round_pos) < clearance
-             && Staff_symbol_referencer::on_staff_line (details_.staff_symbol_referencer_,
-                                                        round_pos))
+         else 
            {
-             Real new_y = (round_pos + clearance * conf->dir_) * 0.5 * details_.staff_space_;
-             conf->delta_y_ = (new_y - top_y);
+             Real top_y = y + conf->delta_y_ + conf->dir_ * h;
+             Real top_pos = top_y / (0.5*details_.staff_space_);
+             int round_pos = int (my_round (top_pos));
+
+             /* TODO: should use other variable? */
+             Real clearance = details_.center_staff_line_clearance_;
+             if (fabs (top_pos - round_pos) < clearance
+                 && Staff_symbol_referencer::on_staff_line (details_.staff_symbol_referencer_,
+                                                            round_pos))
+               {
+                 Real new_y = (round_pos + clearance * conf->dir_) * 0.5 * details_.staff_space_;
+                 conf->delta_y_ = (new_y - top_y);
+               }
            }
        }
-    }
-  
+    }  
   conf->attachment_x_ = get_attachment (y + conf->delta_y_, conf->column_ranks_);
   if (conf->height (details_) < details_.intra_space_threshold_ * 0.5 * details_.staff_space_)
     {
@@ -532,7 +579,8 @@ Tie_formatting_problem::score_aptitude (Tie_configuration *conf,
     }
 
   {
-    Real p = details_.vertical_distance_penalty_factor_ * fabs (curve_y - tie_y);
+    Real relevant_dist = max (fabs (curve_y - tie_y) - 0.5, 0.0);
+    Real p = details_.vertical_distance_penalty_factor_ * convex_amplifier (1.0, 0.9, relevant_dist);
     if (ties_conf)
       ties_conf->add_tie_score (p, tie_idx, "vdist");
     else
@@ -547,22 +595,79 @@ Tie_formatting_problem::score_aptitude (Tie_configuration *conf,
       
       Interval head_x = spec.note_head_drul_[d]->extent (x_refpoint_, X_AXIS);
       Real dist = head_x.distance (conf->attachment_x_[d]);
+      
 
       /*
        TODO: flatten with log or sqrt.
        */
-      Real p = details_.horizontal_distance_penalty_factor_ * dist;
+      Real p = details_.horizontal_distance_penalty_factor_
+       * convex_amplifier (1.25, 1.0, dist);
       if (ties_conf)
        ties_conf->add_tie_score (p, tie_idx,
                                  (d == LEFT) ? "lhdist" : "rhdist");
       else
        penalty += p;
+
     }
   while (flip (&d) != LEFT);
 
+  if (ties_conf
+      && ties_conf->size() == 1)
+    {
+      Direction d = LEFT;
+      Drul_array<Grob*> stems (0, 0);
+      do
+       {
+         if (!spec.note_head_drul_[d])
+           continue;
+
+         Grob *stem = unsmob_grob (spec.note_head_drul_[d]->get_object ("stem"));
+         if (stem
+             && Stem::is_normal_stem (stem))
+           stems[d] = stem;
+       }
+      while (flip (&d) != LEFT);
+
+      bool tie_stem_dir_ok = true;
+      bool tie_position_dir_ok = true;
+      if (stems[LEFT] && !stems[RIGHT])
+       tie_stem_dir_ok = conf->dir_ != get_grob_direction (stems[LEFT]);
+      else if (!stems[LEFT] && stems[RIGHT])
+       tie_stem_dir_ok = conf->dir_ != get_grob_direction (stems[RIGHT]);
+      else if (stems[LEFT] && stems[RIGHT]
+         && get_grob_direction (stems[LEFT]) == get_grob_direction (stems[RIGHT]))
+       tie_stem_dir_ok = conf->dir_ != get_grob_direction (stems[LEFT]);
+      else if (spec.position_)
+       tie_position_dir_ok = conf->dir_ == sign (spec.position_);
+
+      if (!tie_stem_dir_ok)
+       ties_conf->add_score (details_.same_dir_as_stem_penalty_, "tie/stem dir");
+      if (!tie_position_dir_ok)
+       ties_conf->add_score (details_.same_dir_as_stem_penalty_, "tie/pos dir");
+    }
+  while (flip (&d) != LEFT);
+
+           
   return penalty;
 }
 
+
+Slice
+Tie_formatting_problem::head_positions_slice (int rank) const
+{
+  Position_extent_map::const_iterator i (head_positions_.find (rank));
+  if (i != head_positions_.end ())
+    {
+      return  (*i).second; 
+    }
+  Slice empty;
+  return empty;
+}
+
+/*
+  Score a configuration, ie. how well these ties looks without regard
+  to the note heads that they should connect to.
+ */
 void
 Tie_formatting_problem::score_configuration (Tie_configuration *conf) const
 {
@@ -591,13 +696,17 @@ Tie_formatting_problem::score_configuration (Tie_configuration *conf) const
       conf->add_score (
        details_.staff_line_collision_penalty_
        * peak_around (0.1 * details_.center_staff_line_clearance_,
-                    details_.center_staff_line_clearance_,
+                      details_.center_staff_line_clearance_,
                       fabs (top_pos - round_top_pos)),
        "line center");
     }
-  
-  if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_,
-                                       int (rint (tip_pos))))
+
+  int rounded_tip_pos = int (rint (tip_pos));
+  if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, rounded_tip_pos)
+      && (head_positions_slice (conf->column_ranks_[LEFT]).contains (rounded_tip_pos)
+         || head_positions_slice (conf->column_ranks_[RIGHT]).contains (rounded_tip_pos)
+         || abs (rounded_tip_pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
+         )
     {
       conf->add_score (details_.staff_line_collision_penalty_
                       * peak_around (0.1 * details_.tip_staff_line_clearance_,
@@ -632,96 +741,6 @@ Tie_formatting_problem::score_configuration (Tie_configuration *conf) const
   conf->scored_ = true;
 }
 
-Tie_configuration
-Tie_formatting_problem::find_optimal_tie_configuration (Tie_specification const &spec) const
-{
-  vector<Tie_configuration*> confs;
-
-  int pos = spec.position_;
-  Direction dir = spec.manual_dir_;
-
-  for (int i = 0; i < details_.single_tie_region_size_; i ++)
-    {
-      confs.push_back (generate_configuration (pos + i * dir, dir,
-                                              spec.column_ranks_));
-      
-      if (spec.has_manual_position_)
-       {
-         confs.back ()->delta_y_
-           = (spec.manual_position_ - spec.position_)
-           * 0.5 * details_.staff_space_;
-
-         break;
-       }
-    }
-
-  vector<Real> scores;
-
-  int best_idx = -1;
-  Real best_score = 1e6;
-  for (vsize i = 0; i < confs.size (); i ++)
-    {
-      score_configuration (confs[i]);
-      Real score = score_aptitude (confs[i], spec, 0, 0)
-       + confs[i]->score ();
-
-      if (score < best_score)
-       {
-         best_score = score;
-         best_idx = i;
-       }
-    }
-
-  if (best_idx < 0)
-    programming_error ("No best tie configuration found.");
-
-  Tie_configuration best
-    = (best_idx >= 0) ?  *confs[best_idx] : *confs[0];
-  
-  for (vsize i = 0; i < confs.size (); i++)
-    delete confs[i];
-
-  return best;
-}
-
-Tie_specification::Tie_specification ()
-{
-  has_manual_position_ = false;
-  has_manual_dir_ = false;
-  position_ = 0;
-  manual_position_ = 0;
-  manual_dir_ = CENTER;
-  note_head_drul_[LEFT] =
-    note_head_drul_[RIGHT] = 0;
-  column_ranks_[RIGHT] =
-    column_ranks_[LEFT] = 0;
-}
-
-
-void
-Tie_specification::get_tie_manual_settings (Grob *tie)
-{
-  if (scm_is_number (tie->get_property_data ("direction")))
-    {
-      manual_dir_ = to_dir (tie->get_property ("direction"));
-      has_manual_dir_ = true;
-    }
-  
-  position_ = Tie::get_position (tie);
-  if (scm_is_number (tie->get_property ("staff-position")))
-    {
-      manual_position_ = scm_to_double (tie->get_property ("staff-position"));
-      has_manual_position_ = true;
-      position_ = int (my_round (manual_position_));
-    }
-}
-
-int
-Tie_specification::column_span () const
-{
-  return column_ranks_[RIGHT] - column_ranks_[LEFT];
-}
-
 void
 Tie_formatting_problem::score_ties_aptitude (Ties_configuration *ties) const
 {
@@ -787,21 +806,23 @@ Tie_formatting_problem::score_ties_configuration (Ties_configuration *ties) cons
       last_center = center;
     }
 
-  ties->add_score (details_.outer_tie_length_symmetry_penalty_factor_
-                  * fabs (ties->at (0).attachment_x_.length () - ties->back ().attachment_x_.length ()),
-                  "length symm");
+  if (ties->size () > 1)
+    {
+      ties->add_score (details_.outer_tie_length_symmetry_penalty_factor_
+                      * fabs (ties->at (0).attachment_x_.length () - ties->back ().attachment_x_.length ()),
+                      "length symm");
   
-  ties->add_score (details_.outer_tie_vertical_distance_symmetry_penalty_factor_
-                  * fabs (fabs (specifications_[0].position_ * 0.5 * details_.staff_space_
-                                - (ties->at (0).position_ * 0.5 * details_.staff_space_
-                                   + ties->at (0).delta_y_))
-                          -
-                          fabs (specifications_.back ().position_ * 0.5 * details_.staff_space_
-                                - (ties->back ().position_ * 0.5 * details_.staff_space_
-                                   + ties->back ().delta_y_))),
-                  "pos symmetry");
+      ties->add_score (details_.outer_tie_vertical_distance_symmetry_penalty_factor_
+                      * fabs (fabs (specifications_[0].position_ * 0.5 * details_.staff_space_
+                                    - (ties->at (0).position_ * 0.5 * details_.staff_space_
+                                       + ties->at (0).delta_y_))
+                              -
+                              fabs (specifications_.back ().position_ * 0.5 * details_.staff_space_
+                                    - (ties->back ().position_ * 0.5 * details_.staff_space_
+                                       + ties->back ().delta_y_))),
+                      "pos symmetry");
+    }
 }
-
 /*
   Generate with correct X-attachments and beziers, copying delta_y_
   from TIES_CONFIG if necessary.
@@ -813,8 +834,9 @@ Tie_formatting_problem::generate_ties_configuration (Ties_configuration const &t
   for (vsize i = 0; i < ties_config.size (); i++)
     {
       Tie_configuration * ptr = get_configuration (ties_config[i].position_, ties_config[i].dir_,
-                                                  ties_config[i].column_ranks_);
-      if (specifications_[i].has_manual_position_)
+                                                  ties_config[i].column_ranks_,
+                                                  !specifications_[i].has_manual_delta_y_);
+      if (specifications_[i].has_manual_delta_y_)
        {
          ptr->delta_y_
            = (specifications_[i].manual_position_ - ties_config[i].position_)
@@ -838,8 +860,9 @@ Tie_formatting_problem::generate_base_chord_configuration ()
       if (specifications_[i].has_manual_position_)
        {
          conf.position_ = (int) my_round (specifications_[i].manual_position_);
-         conf.delta_y_ = (specifications_[i].manual_position_ - conf.position_)
-           * 0.5 * details_.staff_space_;
+         if (specifications_[i].has_manual_delta_y_)
+           conf.delta_y_ = (specifications_[i].manual_position_ - conf.position_)
+             * 0.5 * details_.staff_space_;
        }
       else
        {
@@ -862,7 +885,7 @@ Tie_formatting_problem::generate_base_chord_configuration ()
 
 Ties_configuration
 Tie_formatting_problem::find_best_variation (Ties_configuration const &base,
-                                            vector<Tie_configuration_variation> vars)
+                                            vector<Tie_configuration_variation> const &vars)
 {
   Ties_configuration best = base;
   
@@ -890,16 +913,24 @@ Tie_formatting_problem::find_best_variation (Ties_configuration const &base,
                                       
 
 Ties_configuration
-Tie_formatting_problem::generate_optimal_chord_configuration ()
+Tie_formatting_problem::generate_optimal_configuration ()
 {
   Ties_configuration base = generate_base_chord_configuration ();
-  vector<Tie_configuration_variation> vars = generate_collision_variations (base);
-  
   score_ties (&base);
+
+  vector<Tie_configuration_variation> vars;  
+  if (specifications_.size () > 1)
+    vars = generate_collision_variations (base);
+  else
+    vars = generate_single_tie_variations (base);
+
   Ties_configuration best = find_best_variation (base, vars);
-  vars = generate_extremal_tie_variations (best);
-  best = find_best_variation (best, vars);
 
+  if (specifications_.size () > 1)
+    {
+      vars = generate_extremal_tie_variations (best);
+      best = find_best_variation (best, vars);
+    }
   return best;
 }
 
@@ -947,7 +978,7 @@ Tie_formatting_problem::set_ties_config_standard_directions (Ties_configuration
        }
     }
 
-  for (vsize i = 1; i < tie_configs->size() - 1; i++)
+  for (vsize i = 1; i + 1 < tie_configs->size (); i++)
     {
       Tie_configuration &conf = tie_configs->at (i);
       if (conf.dir_)
@@ -983,7 +1014,8 @@ Tie_formatting_problem::generate_extremal_tie_variations (Ties_configuration con
            var.index_ = (d == DOWN) ? 0 : ties.size () - 1;
            var.suggestion_ = get_configuration (boundary (ties, d, 0).position_
                                                 + d * i, d,
-                                                boundary (ties, d, 0).column_ranks_);
+                                                boundary (ties, d, 0).column_ranks_,
+                                                true);
            vars.push_back (var);
          }
     }
@@ -992,6 +1024,41 @@ Tie_formatting_problem::generate_extremal_tie_variations (Ties_configuration con
   return vars;
 }
 
+vector<Tie_configuration_variation>
+Tie_formatting_problem::generate_single_tie_variations (Ties_configuration const &ties) const
+{
+  vector<Tie_configuration_variation> vars;
+
+  int sz = details_.single_tie_region_size_;
+  if (specifications_[0].has_manual_position_)
+    sz = 1;
+  for (int i = 0; i < sz; i ++)
+    {
+      Direction d = LEFT;
+      do
+       {
+         if (i == 0
+             && ties[0].dir_ == d)
+           continue;
+         
+         int p = ties[0].position_ + i * d;
+         
+         if (!specifications_[0].has_manual_dir_
+             || d == specifications_[0].manual_dir_)
+           {
+             Tie_configuration_variation var;
+             var.index_ = 0;
+             var.suggestion_ = get_configuration (p,
+                                                  d, specifications_[0].column_ranks_,
+                                                  !specifications_[0].has_manual_delta_y_);
+             vars.push_back (var);
+           }
+       }
+      while (flip (&d) != LEFT);
+    }
+  return vars;
+}
+
 
 vector<Tie_configuration_variation>
 Tie_formatting_problem::generate_collision_variations (Ties_configuration const &ties) const
@@ -1018,7 +1085,8 @@ Tie_formatting_problem::generate_collision_variations (Ties_configuration const
                                                       - ties[i].dir_,
                                                       - ties[i].dir_,
 
-                                                      ties[i].column_ranks_
+                                                      ties[i].column_ranks_,
+                                                      !specifications_[i].has_manual_delta_y_
                                                       );
 
                  vars.push_back (var);
@@ -1031,7 +1099,9 @@ Tie_formatting_problem::generate_collision_variations (Ties_configuration const
                  var.suggestion_ = get_configuration (specifications_[i-1].position_
                                                       - ties[i-1].dir_,
                                                       - ties[i-1].dir_,
-                                                      specifications_[i-1].column_ranks_);
+                                                      specifications_[i-1].column_ranks_,
+                                                      !specifications_[i-1].has_manual_delta_y_
+                                                      );
 
                  vars.push_back (var);
                }
@@ -1042,7 +1112,10 @@ Tie_formatting_problem::generate_collision_variations (Ties_configuration const
                  Tie_configuration_variation var;
                  var.index_ = i-1;
                  var.suggestion_ = get_configuration (specifications_[i-1].position_ - 1, DOWN,
-                                                      specifications_[i-1].column_ranks_);
+                                                      specifications_[i-1].column_ranks_,
+                                                      !specifications_[i-1].has_manual_delta_y_
+
+                                                      );
                  vars.push_back (var);
                }
              if (i == ties.size() && !specifications_[i].has_manual_position_
@@ -1052,7 +1125,9 @@ Tie_formatting_problem::generate_collision_variations (Ties_configuration const
                  var.index_ = i;
                  var.suggestion_ = get_configuration (specifications_[i].position_
                                                       + 1, UP,
-                                                      specifications_[i].column_ranks_);
+                                                      specifications_[i].column_ranks_,
+                                                      !specifications_[i].has_manual_delta_y_
+                                                      );
                  vars.push_back (var);
                }
            }
@@ -1063,7 +1138,9 @@ Tie_formatting_problem::generate_collision_variations (Ties_configuration const
              var.index_ = i;
              var.suggestion_ = get_configuration (ties[i].position_  + ties[i].dir_,
                                                   ties[i].dir_,
-                                                  ties[i].column_ranks_);
+                                                  ties[i].column_ranks_,
+                                                  !specifications_[i].has_manual_delta_y_
+                                                  );
              vars.push_back (var);
            }
          
@@ -1092,7 +1169,9 @@ Tie_formatting_problem::set_manual_tie_configuration (SCM manual_configs)
            {
              spec.has_manual_position_ = true;
              spec.manual_position_ = scm_to_double (scm_car (entry));
+             spec.has_manual_delta_y_ = (scm_inexact_p (scm_car (entry)) == SCM_BOOL_T);
            }
+         
          if (scm_is_number (scm_cdr (entry)))
            {
              spec.has_manual_dir_ = true;
@@ -1103,3 +1182,20 @@ Tie_formatting_problem::set_manual_tie_configuration (SCM manual_configs)
     }
 }
 
+
+void
+Tie_formatting_problem::set_debug_scoring (Ties_configuration const &base)
+{
+#if DEBUG_TIE_SCORING
+  if (to_boolean (x_refpoint_->layout ()
+                 ->lookup_variable (ly_symbol2scm ("debug-tie-scoring"))))
+    {
+      for (vsize i = 0; i < base.size(); i++)
+       {
+         string card = base.complete_tie_card (i);
+         specifications_[i].tie_grob_->set_property ("quant-score",
+                                                     ly_string2scm (card));
+       }
+    }
+#endif
+}      
index df68a638b1c0cf827123092690772ac4f8996ac0..0519fcb930488afe9d61b96a044890f629524df9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "performer.hh"
diff --git a/lily/tie-specification.cc b/lily/tie-specification.cc
new file mode 100644 (file)
index 0000000..3a7ce34
--- /dev/null
@@ -0,0 +1,47 @@
+#include "tie-formatting-problem.hh"
+#include "grob.hh"
+#include "tie.hh"
+#include "libc-extension.hh"
+#include "tie-specification.hh"
+
+Tie_specification::Tie_specification ()
+{
+  tie_grob_ = 0;
+  has_manual_position_ = false;
+  has_manual_dir_ = false;
+  has_manual_delta_y_ = false;
+  position_ = 0;
+  manual_position_ = 0;
+  manual_dir_ = CENTER;
+  note_head_drul_[LEFT] =
+    note_head_drul_[RIGHT] = 0;
+  column_ranks_[RIGHT] =
+    column_ranks_[LEFT] = 0;
+}
+
+
+void
+Tie_specification::from_grob (Grob *tie)
+{
+  tie_grob_ = tie;
+  if (scm_is_number (tie->get_property_data ("direction")))
+    {
+      manual_dir_ = to_dir (tie->get_property ("direction"));
+      has_manual_dir_ = true;
+    }
+  
+  position_ = Tie::get_position (tie);
+  SCM pos_scm = tie->get_property ("staff-position");
+  if (scm_is_number (pos_scm))
+    {
+      has_manual_delta_y_ = (scm_inexact_p (pos_scm) == SCM_BOOL_T);
+      manual_position_ = scm_to_double (tie->get_property ("staff-position"));
+      has_manual_position_ = true;
+    }
+}
+
+int
+Tie_specification::column_span () const
+{
+  return column_ranks_[RIGHT] - column_ranks_[LEFT];
+}
index 2aab6ac2b16b513e747d066410048409bdec9a68..1d4e7fca9ac296659d01bfdfd2deaeae3e9f7df6 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "tie.hh"
@@ -148,20 +148,21 @@ Tie::calc_direction (SCM smob)
   if ((Tie_column::has_interface (yparent)
        || Semi_tie_column::has_interface (yparent)) 
       && unsmob_grob_array (yparent->get_object ("ties"))
-      && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1)
+      //      && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1
+      )
     {
       /* trigger positioning. */
       (void) yparent->get_property ("positioning-done");
+
+      return me->get_property_data ("direction");
     }
   else
-    set_grob_direction (me, Tie::get_default_dir (me));
-
-  return SCM_UNSPECIFIED;
+    return scm_from_int (Tie::get_default_dir (me));
 }
 
 
-void
-Tie::set_default_control_points (Grob *me_grob)
+SCM
+Tie::get_default_control_points (Grob *me_grob)
 {
   Spanner *me = dynamic_cast<Spanner*> (me_grob);
   Grob *common  = me;
@@ -170,21 +171,21 @@ Tie::set_default_control_points (Grob *me_grob)
   
   Tie_formatting_problem problem;
   problem.from_tie (me);
+  
   Tie_specification spec = problem.get_tie_specification (0);
-  spec.has_manual_dir_ = true;
-  spec.manual_dir_ = get_grob_direction (me);
+  if (!me->is_live ())
+    return SCM_EOL;
 
-  if (me->is_live ())
-    {
-      Tie_configuration conf
-       = problem.find_optimal_tie_configuration (spec);
   
-      set_control_points (me, problem.common_x_refpoint (),
-                         conf, problem.details_);
-    }
+  Ties_configuration conf
+    = problem.generate_optimal_configuration ();
+  
+  return get_control_points (me, problem.common_x_refpoint (),
+                            conf[0], problem.details_);
 }
-void
-Tie::set_control_points (Grob *me,
+
+SCM
+Tie::get_control_points (Grob *me,
                         Grob *common,
                         Tie_configuration const &conf,
                         Tie_details const &details
@@ -200,38 +201,38 @@ Tie::set_control_points (Grob *me,
        programming_error ("Insane offset");
       controls = scm_cons (ly_offset2scm (b.control_[i]), controls);
     }
-  me->set_property ("control-points", controls);
+  return controls;
 }
 
+
 MAKE_SCHEME_CALLBACK(Tie, calc_control_points, 1);
 SCM
 Tie::calc_control_points (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
 
-  // trigger Tie-column
-  (void)  get_grob_direction (me);
-
   Grob *yparent = me->get_parent (Y_AXIS);
   if ((Tie_column::has_interface (yparent)
        || Semi_tie_column::has_interface (yparent)) 
       && unsmob_grob_array (yparent->get_object ("ties"))
-      && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1)
+      //      && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1
+      )
     {
       /* trigger positioning. */
       (void) yparent->get_property ("positioning-done");
     }
 
-  if (!scm_is_pair (me->get_property_data ("control-points")))
+  SCM cp = me->get_property_data ("control-points");
+  if (!scm_is_pair (cp))
     {
-      set_default_control_points (me);
+      cp = get_default_control_points (me);
     }
 
-  return SCM_UNSPECIFIED;
+  return cp;
 }
 
 /*
-  TODO: merge witnh Slur::print.
+  TODO: merge with Slur::print.
  */
 MAKE_SCHEME_CALLBACK (Tie, print, 1);
 SCM
@@ -280,8 +281,15 @@ Tie::print (SCM smob)
       Stencil tm = *unsmob_stencil (Text_interface::interpret_markup
                                    (me->layout ()->self_scm (), properties,
                                     quant_score));
-      tm.translate_axis (b.control_[0][Y_AXIS]*2, Y_AXIS);
-      a.add_at_edge (X_AXIS, RIGHT, tm, 1.0, 0);
+      tm.translate (Offset (b.control_[3][X_AXIS] + 0.5,
+                           b.control_[0][Y_AXIS] * 2));
+      tm = tm.in_color (1, 0, 0);
+
+      /*
+       It would be nice if we could put this in a different layer,
+       but alas, this must be done with a Tie override.
+       */
+      a.add_stencil (tm);
     }
 #endif
 
@@ -300,12 +308,16 @@ ADD_INTERFACE (Tie,
               "dash-period "
               "details "
               "direction "
+              "separation-item "
+              "head-direction "
               "line-thickness " 
               "quant-score "
               "staff-position "
               "thickness "
+
               );
 
 
 
 
+
index 9ab2673eeb86a23a7694700e886f5b0a13242086..f5ca62dbfbc67c215b485092bf5f1822613930e5 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>,
                  Erik Sandberg <mandolaerik@gmail.com>
 */
 
 #include "input.hh"
 #include "international.hh"
 #include "music.hh"
-#include "sequential-iterator.hh"
+#include "music-wrapper-iterator.hh"
+#include "stream-event.hh"
 
 /*
   Iterates \times, by sending TupletSpanEvents at the start/end of each
   tuplet bracket. Extra stop/start events are sent at regular
   intervals if tupletSpannerDuration is set.
 */
-class Time_scaled_music_iterator : public Sequential_iterator
+class Time_scaled_music_iterator : public Music_wrapper_iterator
 {
 public:
   DECLARE_SCHEME_CALLBACK (constructor, ());
@@ -26,11 +27,13 @@ public:
   DECLARE_CLASSNAME(Time_scaled_music_iterator);
   Time_scaled_music_iterator ();
 protected:
-  virtual SCM get_music_list () const;
   virtual void process (Moment m);
   virtual void construct_children ();
   virtual void derived_mark () const;
   virtual Moment pending_moment () const;
+
+  Music *create_event (Direction d);
+  
 private:
 
   /* tupletSpannerDuration */
@@ -40,26 +43,47 @@ private:
   Moment next_split_mom_;
   
   /* Recycle start/stop events if tupletSpannerDuration is set. */
-  Music *start_;
-  Music *stop_;
+  SCM synthesized_events_;
+  
+  Context_handle tuplet_handler_;
 };
 
+Music*
+Time_scaled_music_iterator::create_event (Direction d)
+{
+  SCM ev_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"),
+                          ly_symbol2scm ("TupletSpanEvent"),
+                          scm_from_int (d));
+  
+  Music *mus = get_music ();
+
+  Music *ev = unsmob_music (ev_scm);
+  ev->set_spot (*mus->origin ());
+  if (d == START)
+    {
+      ev->set_property ("numerator", mus->get_property ("numerator"));
+      ev->set_property ("denominator", mus->get_property ("denominator"));
+      ev->set_property ("tweaks", mus->get_property ("tweaks"));
+      ev->set_property ("length", spanner_duration_.smobbed_copy ()); 
+    }  
+
+  synthesized_events_ = scm_cons (ev_scm, synthesized_events_);
+  return ev;
+}
+
+
 Time_scaled_music_iterator::Time_scaled_music_iterator ()
 {
   spanner_duration_ = next_split_mom_ = 0;
+  synthesized_events_ = SCM_EOL;
 }
 
 
 Moment
 Time_scaled_music_iterator::pending_moment () const
 {
-  Moment next_mom = Sequential_iterator::pending_moment ();
-
-  if (spanner_duration_.to_bool () &&
-      next_mom.main_part_ > next_split_mom_)
-    {
-      next_mom = next_split_mom_;
-    }
+  Moment next_mom = Music_wrapper_iterator::pending_moment ();
+  next_mom = min (next_mom, next_split_mom_);
 
   return next_mom;
 }
@@ -71,73 +95,52 @@ Time_scaled_music_iterator::process (Moment m)
   if (spanner_duration_.to_bool () &&
       m.main_part_ == next_split_mom_)
     {
-      report_event (stop_);
-      report_event (start_);
+      descend_to_bottom_context ();
+      if (tuplet_handler_.get_outlet())
+       create_event (STOP)->send_to_context (tuplet_handler_.get_outlet ());
+
+      if (m.main_part_ < music_get_length ().main_part_)
+       {
+         tuplet_handler_.set_context (get_outlet ());
+         report_event (create_event (START));
       
-      next_split_mom_ += spanner_duration_;
-      /* avoid sending events twice at the end */
-      if (next_split_mom_ == get_music ()->get_length ().main_part_)
-       next_split_mom_.set_infinite (1);
+         next_split_mom_ += spanner_duration_;
+       }
+      else
+       {
+         tuplet_handler_.set_context (0);
+       }
     }
-  Sequential_iterator::process(m);
+  Music_wrapper_iterator::process(m);
+  if (child_iter_ && child_iter_->ok ())
+    descend_to_child (child_iter_->get_outlet ());
+  
 }
 
 void
 Time_scaled_music_iterator::construct_children ()
 {
-  /*
-    Inheritance trickery:
-    Time_scaled_music_iterator::construct_children initialises start_
-    and stop_, and calls Sequential_music::construct_children, which
-    in turn calls Time_scaled_music_iterator::get_music which reads
-    start_ and stop_.
-   */
-
-  Music *mus = get_music ();
-  Input *origin = mus->origin ();
-
-  SCM tuplet_symbol = ly_symbol2scm ("TupletSpanEvent");
-  SCM start_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tuplet_symbol, scm_from_int (START));
-  start_ = unsmob_music (start_scm);
-  start_->set_spot (*origin);
-  start_->set_property ("numerator", mus->get_property ("numerator"));
-  start_->set_property ("denominator", mus->get_property ("denominator"));
-  start_->set_property ("tweaks", mus->get_property ("tweaks"));
-  
-
-  SCM stop_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tuplet_symbol, scm_from_int (STOP));
-  stop_ = unsmob_music (stop_scm);
-  stop_->set_spot (*origin);
-
   Moment *mp = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration"));
-
   if (mp)
     {
       spanner_duration_ = mp->main_part_;
-      next_split_mom_ = spanner_duration_;
     }
+  else
+    {
+      spanner_duration_ = music_get_length ();
+    }
+  
+  Music_wrapper_iterator::construct_children ();
 
-  Sequential_iterator::construct_children ();
-}
-
-SCM
-Time_scaled_music_iterator::get_music_list () const
-{
-  Music *mus = get_music ();
-  SCM child = mus->get_property ("element");
-
-  return scm_list_3 (start_->self_scm (), child, stop_->self_scm ());
+  if (child_iter_ && child_iter_->ok ())
+    descend_to_child (child_iter_->get_outlet ());
 }
 
 void
 Time_scaled_music_iterator::derived_mark () const
 {
-  if (start_)
-    scm_gc_mark (start_->self_scm ());
-  if (stop_)
-    scm_gc_mark (stop_->self_scm ());
-
-  Sequential_iterator::derived_mark ();
+  scm_gc_mark (synthesized_events_);
+  Music_wrapper_iterator::derived_mark ();
 }
 
 IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator);
index 68a7e178b042da9a83d4c9802521c939efad02fc..5e23c5e3fe434e8d0554b0cfb436ebd806de033f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver-group.hh"
@@ -66,9 +66,14 @@ Time_signature_engraver::process_music ()
                       int (scm_to_int (scm_car (fr)))));
        }
 
-      last_time_fraction_ = fr;
       time_signature_ = make_item ("TimeSignature", SCM_EOL);
       time_signature_->set_property ("fraction", fr);
+
+      if (last_time_fraction_ == SCM_BOOL_F)
+       time_signature_->set_property ("break-visibility",
+                                      get_property ("implicitTimeSignatureVisibility"));
+      
+      last_time_fraction_ = fr;
     }
 }
 
@@ -81,7 +86,13 @@ Time_signature_engraver::stop_translation_timestep ()
 #include "translator.icc"
 
 ADD_TRANSLATOR (Time_signature_engraver,
-               /* doc */ "Create a TimeSignature whenever @code{timeSignatureFraction} changes",
-               /* create */ "TimeSignature",
-               /* read */ "",
+               /* doc */ "Create a @ref{TimeSignature} whenever @code{timeSignatureFraction} changes",
+               /* create */
+               "TimeSignature ",
+               
+               /* read */
+               "implicitTimeSignatureVisibility "
+               "timeSignatureFraction "
+
+               ,
                /* write */ "");
index 65c0d135c7792f813de874d364d5cfff83e74ff3..3e57a2c02c6b35114a5e3fad606da53e5dc89a3d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "audio-item.hh"
index ced6468e8dbba8dcc2d0c042cedc4c924b1ff264..c4afd8caa0d2d092e24d339019c4f593006e7acd 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1996--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "time-signature.hh"
@@ -94,9 +94,9 @@ Time_signature::numbered_time_signature (Grob *me, int num, int den)
                    chain);
 
   SCM sn = Text_interface::interpret_markup (me->layout ()->self_scm (), chain,
-                                            scm_makfrom0str (to_string (num).c_str ()));
+                                            ly_string2scm (to_string (num)));
   SCM sd = Text_interface::interpret_markup (me->layout ()->self_scm (), chain,
-                                            scm_makfrom0str (to_string (den).c_str ()));
+                                            ly_string2scm (to_string (den)));
 
   Stencil n = *unsmob_stencil (sn);
   Stencil d = *unsmob_stencil (sd);
@@ -106,8 +106,8 @@ Time_signature::numbered_time_signature (Grob *me, int num, int den)
   Stencil m;
   if (den)
     {
-      m.add_at_edge (Y_AXIS, UP, n, 0.0, 0);
-      m.add_at_edge (Y_AXIS, DOWN, d, 0.0, 0);
+      m.add_at_edge (Y_AXIS, UP, n, 0.0);
+      m.add_at_edge (Y_AXIS, DOWN, d, 0.0);
     }
   else
     {
index f98ac23c2fc1af222789727a764559ca8c661ffa..ee609a4db0cfeba7cfb27bbb2c0485fd317f0d11 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "timing-translator.hh"
@@ -25,13 +25,12 @@ Timing_translator::stop_translation_timestep ()
       Moment barleft = (measure_length () - measure_position (context ()));
       Moment now = now_mom ();
 
-      if (barleft > Moment (0)
-         /*
-           Hmm. We insert the bar moment every time we process a
-           moment.  A waste of cpu?
-         */
-         && !now.grace_part_)
-       global->add_moment_to_process (now + barleft);
+      if (barleft > Moment (0))
+       {
+         Moment nextmom = now + barleft;
+         nextmom.grace_part_ = Rational (0);
+         global->add_moment_to_process (nextmom);
+       }
     }
 }
 
index 1fe410f25dd7edad95484447d86602da7b323687..f4eaeaf31a74f09b98bcae10e1ff1eb3c0b0e180 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "translator.hh"
index bd2709198829649721773fda326f52ba573ed291..a4bddefca83013d6d281fe95669ae63f7d7f173e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "translator-dispatch-list.hh"
index 83feef1634468e1b33cd052d88e53fd532418606..8225f03176c5fd978163f4392f2c5514343b1a15 100644 (file)
@@ -3,12 +3,13 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "score-engraver.hh"
 #include "score-performer.hh"
 #include "warn.hh"
+#include "international.hh"
 
 /*
   Quick & dirty.
@@ -25,11 +26,13 @@ get_translator_group (SCM sym)
   else if (sym == ly_symbol2scm ("Score_performer"))
     return new Score_performer ();
 
-  programming_error ("Couldn't find type");
+  error (_f ("fatal error. Couldn't find type: %s",
+            ly_symbol2string (sym).c_str ()));
   scm_flush (scm_current_error_port ());
   scm_display (sym, scm_current_error_port ());
   scm_flush (scm_current_error_port ());
   
-  assert (0);
+  exit (2);
+  
   return 0;
 }
index b25d6154e5e0e23574c22a832eba9e1defacecfb..83bfdfa0b7be9eeb0839a056a0a20b8103c6eea9 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>,
                  Erik Sandberg <mandolaerik@gmail.com>
 */
 
 #include "scm-hash.hh"
 #include "warn.hh"
 
-Translator_group *
-Translator_group::get_daddy_translator () const
-{
-  return context ()->get_parent_context ()->implementation ();
-}
 
 void
 translator_each (SCM list, Translator_method method)
@@ -148,7 +143,7 @@ Translator_group::create_child_translator (SCM sev)
     {
       Translator *type = get_translator (scm_car (s));
       if (!type)
-       warning (_f ("can't find: `%s'", ly_symbol2string (scm_car (s)).c_str ()));
+       warning (_f ("cannot find: `%s'", ly_symbol2string (scm_car (s)).c_str ()));
       else
        {
          Translator *tr = type->clone ();
index d255386d73bba6dc19507f71ad56422065d453d4..3b2604fe18846b9e34dc8c2a8d84d49d8a292a98 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context-def.hh"
index b7a46d29b65b20c67aa724b351012b0c18817da3..52274adc429f8b6952ca0027389829c9b9908f30 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "translator.hh"
@@ -199,7 +199,7 @@ Translator::static_translator_description (const char *grobs,
                                 parse_symbol_list (grobs), static_properties);
   
   static_properties = scm_acons (ly_symbol2scm ("description"),        
-                                scm_makfrom0str (desc), static_properties); 
+                                scm_from_locale_string (desc), static_properties); 
   
   SCM list = SCM_EOL;
   for (; listener_list; listener_list = listener_list->next_)
index 3f07d5b5accd769f76a4b30e58026f7f17a1feb2..072f96623f48866e833ee8ddcd69d52793d2dfe0 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 /*
@@ -65,7 +65,7 @@ Trill_spanner_engraver::process_music ()
   if (event_drul_[STOP])
     {
       if (!span_)
-       event_drul_[STOP]->origin ()->warning (_ ("can't find start of trill spanner"));
+       event_drul_[STOP]->origin ()->warning (_ ("cannot find start of trill spanner"));
       else
        {
          finished_ = span_;
index 2e5eb8865d14a6223f787afda487d1745d49eab3..e8e86007a3d1b27ab6ac482748fc2909450d622d 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "freetype.hh"
@@ -231,7 +231,7 @@ LY_DEFINE (ly_ttf_ps_name, "ly:ttf-ps-name",
 
   FT_Face face = open_ft_face (file_name);
   char const *ps_name_str0 = FT_Get_Postscript_Name (face);
-  SCM ps_name = scm_makfrom0str (ps_name_str0 ? ps_name_str0 : "");
+  SCM ps_name = scm_from_locale_string (ps_name_str0 ? ps_name_str0 : "");
   
   FT_Done_Face (face);
   
index d13cf1c613e50d7103533c0f9c779334e73008cb..53253f71ddc120b98c9fd5a93acadba1912bd5b3 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
@@ -511,37 +511,10 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy)
   
   Direction dir = get_grob_direction (me);
 
-  /*
-    Use outer non-rest columns to determine slope
-  */
-  Grob *left_col = 0;
-  Grob *right_col = 0;
-  get_bounds (me, &left_col, &right_col);
-  if (left_col && right_col)
-    {
-      Interval rv = right_col->extent (commony, Y_AXIS);
-      Interval lv = left_col->extent (commony, Y_AXIS);
-      rv.unite (staff);
-      lv.unite (staff);
-      Real graphical_dy = rv[dir] - lv[dir];
-
-      Slice ls = Note_column::head_positions_interval (left_col);
-      Slice rs = Note_column::head_positions_interval (right_col);
-
-      Interval musical_dy;
-      musical_dy[UP] = rs[UP] - ls[UP];
-      musical_dy[DOWN] = rs[DOWN] - ls[DOWN];
-      if (sign (musical_dy[UP]) != sign (musical_dy[DOWN]))
-       *dy = 0.0;
-      else if (sign (graphical_dy) != sign (musical_dy[DOWN]))
-       *dy = 0.0;
-      else
-       *dy = graphical_dy;
-    }
-  else
-    *dy = 0;
+  bool equally_long = false;
+  Grob *par_beam = parallel_beam (me, columns, &equally_long);
+  
 
-  *offset = -dir * infinity_f;
 
   Item *lgr = get_x_bound_item (me, LEFT, dir);
   Item *rgr = get_x_bound_item (me, RIGHT, dir);
@@ -549,18 +522,82 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy)
   Real x1 = robust_relative_extent (rgr, commonx, X_AXIS)[RIGHT];
 
   vector<Offset> points;
-  points.push_back (Offset (x0 - x0, staff[dir]));
-  points.push_back (Offset (x1 - x0, staff[dir]));
 
-  for (vsize i = 0; i < columns.size (); i++)
+  if (columns.size ()
+      && par_beam
+      && get_grob_direction (par_beam) == dir 
+      && Note_column::get_stem (columns[0])
+      && Note_column::get_stem (columns.back ()))
+    {
+      /*
+       trigger set_stem_ends
+       */
+      (void) par_beam->get_property ("quantized-positions");
+
+
+      Drul_array<Grob *> stems (Note_column::get_stem (columns[0]),
+                               Note_column::get_stem (columns.back ()));
+
+      
+      
+
+      Real ss = 0.5 * Staff_symbol_referencer::staff_space (me);
+      Real lp = ss * robust_scm2double (stems[LEFT]->get_property ("stem-end-position"), 0.0);
+      Real rp = ss * robust_scm2double (stems[RIGHT]->get_property ("stem-end-position"), 0.0);
+
+      *dy = rp - lp;
+      points.push_back (Offset (stems[LEFT]->relative_coordinate (commonx, X_AXIS) - x0, lp));
+      points.push_back (Offset (stems[RIGHT]->relative_coordinate (commonx, X_AXIS) - x0, rp));
+    }
+  else
     {
-      Interval note_ext = columns[i]->extent (commony, Y_AXIS);
-      Real notey = note_ext[dir] - me->relative_coordinate (commony, Y_AXIS);
+      /*
+       Use outer non-rest columns to determine slope
+      */
+      Grob *left_col = 0;
+      Grob *right_col = 0;
+      get_bounds (me, &left_col, &right_col);
+      if (left_col && right_col)
+       {
+         Interval rv = right_col->extent (commony, Y_AXIS);
+         Interval lv = left_col->extent (commony, Y_AXIS);
+         rv.unite (staff);
+         lv.unite (staff);
+         Real graphical_dy = rv[dir] - lv[dir];
+
+         Slice ls = Note_column::head_positions_interval (left_col);
+         Slice rs = Note_column::head_positions_interval (right_col);
+
+         Interval musical_dy;
+         musical_dy[UP] = rs[UP] - ls[UP];
+         musical_dy[DOWN] = rs[DOWN] - ls[DOWN];
+         if (sign (musical_dy[UP]) != sign (musical_dy[DOWN]))
+           *dy = 0.0;
+         else if (sign (graphical_dy) != sign (musical_dy[DOWN]))
+           *dy = 0.0;
+         else
+           *dy = graphical_dy;
+       }
+      else
+       *dy = 0;
 
-      Real x = columns[i]->relative_coordinate (commonx, X_AXIS) - x0;
-      points.push_back (Offset (x, notey));
+      *offset = -dir * infinity_f;      
+      for (vsize i = 0; i < columns.size (); i++)
+       {
+         Interval note_ext = columns[i]->extent (commony, Y_AXIS);
+         Real notey = note_ext[dir] - me->relative_coordinate (commony, Y_AXIS);
+
+         Real x = columns[i]->relative_coordinate (commonx, X_AXIS) - x0;
+         points.push_back (Offset (x, notey));
+       }
     }
 
+  if (!(par_beam && get_grob_direction (par_beam) == dir))
+    {
+      points.push_back (Offset (x0 - x0, staff[dir]));
+      points.push_back (Offset (x1 - x0, staff[dir]));
+    }
+  
   /*
     This is a slight hack. We compute two encompass points from the
     bbox of the smaller tuplets.
@@ -647,7 +684,6 @@ SCM
 Tuplet_bracket::calc_positions (SCM smob)
 {
   Spanner *me = unsmob_spanner (smob);
-  extract_grob_set (me, "note-columns", columns);
 
   /*
     Don't print if it doesn't span time.
@@ -659,44 +695,9 @@ Tuplet_bracket::calc_positions (SCM smob)
       return SCM_EOL;
     }
 
-  
-  Direction dir = get_grob_direction (me);
-  bool equally_long = false;
-  Grob *par_beam = parallel_beam (me, columns, &equally_long);
-
-  /*
-    We follow the beam only if there is one, and we are next to it.
-  */
   Real dy = 0.0;
   Real offset = 0.0;
-  if (!par_beam
-      || get_grob_direction (par_beam) != dir)
-    calc_position_and_height (me, &offset, &dy);
-  else if  (columns.size ()
-           && Note_column::get_stem (columns[0])
-           && Note_column::get_stem (columns.back ()))
-    {
-      /*
-       trigger set_stem_ends
-       */
-      (void) par_beam->get_property ("quantized-positions");
-
-
-      Drul_array<Grob *> stems (Note_column::get_stem (columns[0]),
-                               Note_column::get_stem (columns.back ()));
-
-      
-      
-
-      Real ss = 0.5 * Staff_symbol_referencer::staff_space (me);
-      Real lp = ss * robust_scm2double (stems[LEFT]->get_property ("stem-end-position"), 0.0);
-      Real rp = ss * robust_scm2double (stems[RIGHT]->get_property ("stem-end-position"), 0.0);
-
-      
-      offset = lp + dir * (0.5 + scm_to_double (me->get_property ("padding")));
-      dy = (rp - lp);
-    }
-
+  calc_position_and_height (me, &offset, &dy);
   
   SCM x = scm_cons (scm_from_double (offset),
                    scm_from_double (offset + dy));
index 441fdd7610783a45c8644aa662bf96fca5cb72aa..c25d2a9a4e6f547ac42cfc76a334aa5011730fb8 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "beam.hh"
@@ -15,6 +15,7 @@
 #include "tuplet-bracket.hh"
 #include "warn.hh"
 #include "item.hh"
+#include "moment.hh"
 
 #include "translator.icc"
 
@@ -26,6 +27,9 @@ struct Tuplet_description
 
   bool full_length_;
   bool full_length_note_;
+  Moment stop_moment_;
+  Moment start_moment_;
+  Moment length_;
   
   Tuplet_description ()
   {
@@ -64,23 +68,58 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev)
     {
       Tuplet_description d;
       d.event_ = ev;
+
+      d.length_ = robust_scm2moment (d.event_->get_property ("length"),
+                                    Moment (0));
+      d.start_moment_ = now_mom ();
+      d.stop_moment_ = now_mom () + d.length_;
+
+      for (vsize i=0; i < new_tuplets_.size (); i++)
+       {
+         /*
+           discard duplicates.
+          */
+         if (new_tuplets_[i].stop_moment_ == d.stop_moment_)
+           return;
+       }
+      
       new_tuplets_.push_back (d);
     }
-  else if (dir == STOP && tuplets_.size ())
+  else if (dir == STOP)
+    {
+    if (tuplets_.size ())
     {
       stopped_tuplets_.push_back (tuplets_.back ());
       tuplets_.pop_back ();
     }
+    else
+      ev->origin ()->warning (_f ("No tuplet to end"));
+    }
   else 
-    programming_error (_ ("invalid direction of tuplet-span-event"));
+    ev->origin ()->programming_error ("direction tuplet-span-event_ invalid.");
 }
 
 void
 Tuplet_engraver::process_music ()
 {
+  /*
+    This may happen if the end of a tuplet is part of a quoted voice.
+   */
+  Moment now = now_mom();
+  for (vsize i = tuplets_.size (); i --; )
+    {
+      if (tuplets_[i].stop_moment_ == now)
+       {
+         stopped_tuplets_.push_back (tuplets_[i]);
+         tuplets_.erase (tuplets_.begin () + i);
+       }
+    }
+  
   for (vsize i = 0; i < stopped_tuplets_.size (); i++)
     {
-      if (stopped_tuplets_[i].bracket_)
+      Spanner *bracket = stopped_tuplets_[i].bracket_;
+      Spanner *number = stopped_tuplets_[i].number_;
+      if (bracket)
        {
          if (stopped_tuplets_[i].full_length_)
            {
@@ -89,20 +128,21 @@ Tuplet_engraver::process_music ()
                             ? get_property ("currentMusicalColumn")
                             : get_property ("currentCommandColumn"));
              
-             stopped_tuplets_[i].bracket_->set_bound (RIGHT, col);
-             stopped_tuplets_[i].number_->set_bound (RIGHT, col);
+             bracket->set_bound (RIGHT, col);
+             number->set_bound (RIGHT, col);
            }
-         else if (!stopped_tuplets_[i].bracket_->get_bound (RIGHT))
+         else if (!bracket->get_bound (RIGHT))
            {
-             stopped_tuplets_[i].bracket_->set_bound (RIGHT,
-                                                      stopped_tuplets_[i].bracket_->get_bound (LEFT));
-             stopped_tuplets_[i].number_->set_bound (RIGHT,
-                                                     stopped_tuplets_[i].bracket_->get_bound (LEFT));
+             bracket->set_bound (RIGHT,
+                                 bracket->get_bound (LEFT));
+             number->set_bound (RIGHT,
+                                stopped_tuplets_[i].bracket_->get_bound (LEFT));
            }
+         
          // todo: scrap last_tuplets_, use stopped_tuplets_ only.
          // clear stopped_tuplets_ at start_translation_timestep
-         last_tuplets_.push_back (tuplets_[i].bracket_);
-         last_tuplets_.push_back (tuplets_[i].number_);
+         last_tuplets_.push_back (bracket);
+         last_tuplets_.push_back (number);
        }
     }
   stopped_tuplets_.clear ();
@@ -128,8 +168,10 @@ Tuplet_engraver::process_music ()
                                          tuplets_[i].event_->self_scm ());
       tuplets_[i].number_->set_object ("bracket", tuplets_[i].bracket_->self_scm ());
       tuplets_[i].bracket_->set_object ("tuplet-number", tuplets_[i].number_->self_scm ());
+      tuplets_[i].stop_moment_.grace_part_ = 0;
+      
       
-      if (i < tuplets_.size () - 1 && tuplets_[i + 1].bracket_)
+      if (i + 1 < tuplets_.size () && tuplets_[i + 1].bracket_)
        Tuplet_bracket::add_tuplet_bracket (tuplets_[i].bracket_, tuplets_[i + 1].bracket_);
       
       if (i > 0 && tuplets_[i - 1].bracket_)
index 31bcbbfa57291a01276ecddc101bc737d5966d7a..b29ab39aaa087bbc73b3044114b92abe3cfa6c85 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
index 81f86adea172681eeca5b52f0e93cda06328065a..c87902f9ba1566d3406ab9dc3d7a8049ee51973a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 */
 
diff --git a/lily/tweak-registration-scheme.cc b/lily/tweak-registration-scheme.cc
deleted file mode 100644 (file)
index fb81a9c..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-  tweak-registration-scheme.cc -- implement Tweak_registry bindings
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "tweak-registration.hh"
-#include "grob.hh"
-#include "object-key-undumper.hh"
-
-LY_DEFINE (ly_clear_tweak_registry, "ly:tweak-clear-registry",
-          0, 0, 0, (),
-          "Clear global tweak registry")
-{
-  global_registry_->clear ();
-  return SCM_UNSPECIFIED;
-}
-
-LY_DEFINE (ly_grob_insert_tweak, "ly:grob-insert-tweak",
-          2, 0, 0,
-          (SCM grob, SCM tweak),
-          "add new tweak for grob.")
-{
-  Grob *gr = unsmob_grob (grob);
-  SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "Grob");
-  SCM_ASSERT_TYPE (scm_list_p (tweak) == SCM_BOOL_T
-                  && ly_is_procedure (scm_car (tweak)),
-                  tweak, SCM_ARG2, __FUNCTION__, "Tweak");
-
-  global_registry_->insert_grob_tweak (gr, tweak);
-  return SCM_UNSPECIFIED;
-}
-
-LY_DEFINE (ly_grob_replace_tweak, "ly:grob-replace-tweak",
-          2, 0, 0,
-          (SCM grob, SCM tweak),
-          "Replace tweak for grob.")
-{
-  Grob *gr = unsmob_grob (grob);
-  SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "Grob");
-  SCM_ASSERT_TYPE (scm_list_p (tweak) == SCM_BOOL_T
-                  && ly_is_procedure (scm_car (tweak)),
-                  tweak, SCM_ARG2, __FUNCTION__, "Tweak");
-
-  global_registry_->replace_grob_tweak (gr, tweak);
-  return SCM_UNSPECIFIED;
-}
-
-LY_DEFINE (ly_tweak_read_keys, "ly:tweak-define-keys",
-          1, 0, 0, (SCM keys),
-          "Read keys")
-{
-  global_registry_->undumper ()->parse_contents (keys);
-  return SCM_UNSPECIFIED;
-}
-
-LY_DEFINE (ly_all_tweaks, "ly:all-tweaks",
-          0, 0, 0, (),
-          "all tweaks")
-{
-  return global_registry_->list_tweaks ();
-}
-
-LY_DEFINE (ly_tweak_read_tweaks, "ly:tweak-define-tweaks",
-          1, 0, 0, (SCM tweaks),
-          "Read tweaks")
-{
-  for (SCM s = tweaks; scm_is_pair (s); s = scm_cdr (s))
-    global_registry_->insert_tweak_from_file (scm_car (s));
-  return SCM_UNSPECIFIED;
-}
diff --git a/lily/tweak-registration.cc b/lily/tweak-registration.cc
deleted file mode 100644 (file)
index 95ff32d..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-  tweak-registration.cc -- implement Tweak_registry
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#include "tweak-registration.hh"
-
-#include "object-key-undumper.hh"
-#include "grob.hh"
-
-#include "ly-smobs.icc"
-
-Tweak_registry::Tweak_registry ()
-{
-  undumper_ = 0;
-  smobify_self ();
-  undumper_ = new Object_key_undumper ();
-  undumper_->unprotect ();
-}
-
-Tweak_registry::~Tweak_registry ()
-{
-}
-
-void
-Tweak_registry::clear ()
-{
-  tweaks_.clear ();
-  undumper_ = new Object_key_undumper ();
-  undumper_->unprotect ();
-}
-
-void
-Tweak_registry::insert_tweak_from_file (SCM tweak)
-{
-  SCM skey = scm_car (tweak);
-
-  assert (scm_is_pair (skey)
-         && scm_car (skey) == ly_symbol2scm ("key"));
-
-  Object_key const *key = undumper_->get_key (scm_to_int (scm_cadr (skey)));
-
-  SCM existing = SCM_EOL;
-  Tweak_map::const_iterator prev = tweaks_.find (key);
-  if (prev != tweaks_.end ())
-    existing = (*prev).second;
-
-  tweaks_[key] = scm_cons (scm_cdr (tweak), existing);
-}
-
-void
-Tweak_registry::insert_grob_tweak (Grob *g, SCM tweak)
-{
-  Object_key const *key = g->key ();
-  if (tweaks_.find (key) == tweaks_.end ())
-    tweaks_[key] = SCM_EOL;
-
-  tweaks_[key] = scm_cons (tweak, tweaks_[key]);
-}
-
-void
-Tweak_registry::replace_grob_tweak (Grob *g, SCM tweak)
-{
-  Object_key const *key = g->key ();
-  tweaks_[key] = scm_cons (tweak, SCM_EOL);
-}
-
-SCM
-Tweak_registry::get_tweaks (Grob *g)
-{
-  Object_key const *key = g->key ();
-  if (tweaks_.find (key) == tweaks_.end ())
-    return SCM_EOL;
-  return tweaks_[key];
-}
-
-SCM
-Tweak_registry::list_tweaks ()
-{
-  SCM retval = SCM_EOL;
-  for (Tweak_map::const_iterator i (tweaks_.begin ());
-       i != tweaks_.end ();
-       i++)
-    {
-      Object_key const *key = (*i).first;
-      for (SCM t = (*i).second; scm_is_pair (t); t = scm_cdr (t))
-       retval = scm_cons (scm_cons (key->self_scm (), scm_car (t)), retval);
-    }
-
-  return retval;
-}
-
-SCM
-Tweak_registry::mark_smob (SCM smob)
-{
-  Tweak_registry *me = (Tweak_registry *) SCM_CELL_WORD_1 (smob);
-
-  for (Tweak_map::const_iterator i (me->tweaks_.begin ());
-       i != me->tweaks_.end ();
-       i++)
-    {
-      scm_gc_mark ((*i).first->self_scm ());
-      scm_gc_mark ((*i).second);
-    }
-
-  if (me->undumper_)
-    scm_gc_mark (me->undumper_->self_scm ());
-
-  return SCM_EOL;
-}
-
-int
-Tweak_registry::print_smob (SCM smob, SCM port, scm_print_state*)
-{
-  (void) smob;                 // smother warning.
-  scm_puts ("#<Tweak_registry>", port);
-  return 1;
-}
-
-Object_key_undumper *
-Tweak_registry::undumper () const
-{
-  return undumper_;
-}
-
-IMPLEMENT_DEFAULT_EQUAL_P (Tweak_registry);
-IMPLEMENT_SMOBS (Tweak_registry);
-
-Tweak_registry *global_registry_;
-
-void
-init_global_tweak_registry ()
-{
-  global_registry_ = new Tweak_registry ();
-}
index d69037c7b24c28cce6870088ac13f0bb7bbcdc13..87510de0d4ec67788a8218242311a5784692920c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "translator.hh"
index 8516368f0ac74f19733e290b7c28a4b99b6a9c10..46a8bfd0475b369559eb2191efa29f124c0ca98f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
index 608cb16c66c87b23c5ed7411d29b4f565d4322d2..5618465120c02a313bbff876e9ff15e9f5c23269 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "gregorian-ligature-engraver.hh"
@@ -681,7 +681,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
 
       if (prev_primitive)
        prev_primitive->set_property ("glyph-name",
-                                     scm_makfrom0str (prev_glyph_name.c_str ()));
+                                     ly_string2scm (prev_glyph_name));
 
       /*
        * In the backend, flexa shapes and joins need to know about line
@@ -699,7 +699,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
     }
 
   prev_primitive->set_property ("glyph-name",
-                               scm_makfrom0str (prev_glyph_name.c_str ()));
+                               ly_string2scm (prev_glyph_name));
 
   align_heads (primitives, flexa_width, thickness);
 
index 9e97482d029d2779e1cd427d6a10c9be0eb7a96c..58978a083926a45fdf16c6cfe2d77ebc74e71038 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "vaticana-ligature.hh"
index 830aa78fd7283ac2ea37f460fee266f110647769..64e7333f134d06bbbb0816ea819cb777bb56ba38 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
@@ -102,7 +102,7 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
     {
       string id = i.context ()->id_string ();
 
-      scm_hash_set_x (id_to_group_hashtab_, scm_makfrom0str (id.c_str ()),
+      scm_hash_set_x (id_to_group_hashtab_, ly_string2scm (id),
                      i.grob ()->self_scm ());
 
       SCM before_id = i.context ()->get_property ("alignAboveContext");
index aa29003d87ed4197b27503185dc1f8fb6a226703..2912c0a479c91c5e75934d41c128e6753b817958 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
index 9c2e4ea669921abec644dd8159dde2f15500dd4b..49018d8adb1692f4a3913bde223974ad6813a73f 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include <cstring>
@@ -99,7 +99,7 @@ Volta_bracket_interface::print (SCM smob)
       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 ()
-                        - 1.0, 0);
+                        - 1.0);
     }
   
   total.translate_axis (left, X_AXIS);
index 41b0c7cc78bd6a697eed5bf739b5a43a44944ca5..604c53c573493721796b068f66db084b4ae0c5ba 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "engraver.hh"
@@ -141,7 +141,7 @@ Volta_engraver::process_music ()
 
   if (end && !volta_span_)
     /* fixme: be more verbose.  */
-    warning (_ ("can't end volta spanner"));
+    warning (_ ("cannot end volta spanner"));
   else if (end)
     {
       end_volta_span_ = volta_span_;
index 1828dfdbca9b49d062752118c554abfc9cd7737d..23f8edd9c5e2fb76be3240e9f8d1edbef7d392f6 100644 (file)
@@ -4,7 +4,7 @@
   source file of the GNU LilyPond music typesetter
 
 
-  (c) 2002--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2002--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "music.hh"
@@ -98,7 +98,7 @@ Volta_repeat_iterator::next_element (bool side_effect)
 
          if (done_count_ <= alt_count_)
            add_repeat_command (scm_list_n (ly_symbol2scm ("volta"),
-                                           scm_makfrom0str (repstr.c_str ()), SCM_UNDEFINED));
+                                           ly_string2scm (repstr), SCM_UNDEFINED));
        }
       else
        add_repeat_command (ly_symbol2scm ("end-repeat"));
index 210b81daf3cb00cafbfda40623f0705f6a8e7ba2..17329521a071743fdd1e2031788d7ed1ebc81dda 100644 (file)
@@ -8,6 +8,7 @@ breve = #(ly:make-duration -1 0)
 longa = #(ly:make-duration -2 0)
 maxima = #(ly:make-duration -3 0)
 
+\include "markup-init.ly"
 \include "music-functions-init.ly"
 
 %% default note names are dutch
index ada3cf8bf804eefaac74be2a4309e6e35f7f9b1d..ea7d9c5db0ff0e239576e2767d2e394ec1cf600f 100644 (file)
@@ -57,7 +57,7 @@
   \consists "Figured_bass_position_engraver"
   \consists "Script_row_engraver"
 
-  \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4)
+  \override VerticalAxisGroup #'minimum-Y-extent = #'(-3.5 . 3.5)
   localKeySignature = #'()
   createSpacing = ##t
   ignoreFiguredBassRest = ##t 
@@ -206,7 +206,8 @@ contained staves are not connected vertically."
   \consists "Note_heads_engraver"
   \consists "Dots_engraver"
   \consists "Rest_engraver"
-
+  \consists "Tweak_engraver"
+  
   %% switch on to make stem directions interpolate for the
   %% center line.
   %  \consists "Melody_engraver"
@@ -227,11 +228,13 @@ contained staves are not connected vertically."
   \consists "Text_engraver"
   \consists "Dynamic_engraver"
   \consists "Fingering_engraver"
-  \consists "Bend_after_engraver"
+  \consists "Bend_engraver"
 
   \consists "Script_engraver"
   \consists "Script_column_engraver"
   \consists "Rhythmic_column_engraver"
+  \consists "Note_spacing_engraver"
+  \consists "Spanner_break_forbid_engraver"
   \consists "Phrasing_slur_engraver"
   \consists "Cluster_spanner_engraver"
   \consists "Slur_engraver"
@@ -357,12 +360,15 @@ staffs, with a bracket in front and spanning bar lines. "
 
 \context{
   \type "Engraver_group"
-  \override VerticalAxisGroup #'minimum-Y-extent = #'(-1.2 . 2.4)
+  \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.75 . 2.0)
 
   \description " Corresponds to a voice with lyrics.  Handles the
 printing of a single line of lyrics.  "
   
-  \name "Lyrics" 
+  \name "Lyrics"
+  instrumentName = #'()
+  shortInstrumentName = #'()
+  
   \consists "Lyric_engraver"
   \consists "Extender_engraver"
   \consists "Hyphen_engraver"
@@ -371,6 +377,7 @@ printing of a single line of lyrics.  "
   \consists "Skip_event_swallow_translator"
   \consists "Font_size_engraver"
   \consists "Hara_kiri_engraver"
+
   \override VerticalAxisGroup #'remove-first = ##t
   \override VerticalAxisGroup #'remove-empty = ##t
   \override SeparationItem #'padding = #0.2
@@ -413,9 +420,9 @@ printing of a single line of lyrics.  "
   \consists "Chord_name_engraver"
   \consists "Skip_event_swallow_translator"
   \consists "Hara_kiri_engraver"
-  
+%  \consists "Note_spacing_engraver"
   voltaOnThisStaff = ##f
-  \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2.5)
+  \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2)
   \override SeparatingGroupSpanner #'padding = #0.8
   \override VerticalAxisGroup #'remove-first = ##t
   \override VerticalAxisGroup #'remove-empty = ##t
@@ -474,7 +481,6 @@ AncientRemoveEmptyStaffContext = \context {
   \consists "Vertical_align_engraver"
   \consists "Stanza_number_align_engraver"
   \consists "Bar_number_engraver"
-  \consists "Tweak_engraver"
   \consists "Parenthesis_engraver"
   
   \defaultchild "Staff"
@@ -520,6 +526,8 @@ AncientRemoveEmptyStaffContext = \context {
   
   explicitClefVisibility = #all-visible
   explicitKeySignatureVisibility = #all-visible
+  implicitTimeSignatureVisibility = #end-of-line-invisible
+  
   autoBeamSettings = #default-auto-beam-settings
   autoBeaming = ##t
   autoBeamCheck = #default-auto-beam-check
@@ -553,8 +561,8 @@ AncientRemoveEmptyStaffContext = \context {
   printKeyCancellation = ##t
   keyAlterationOrder = #`(
     (6 . ,FLAT) (2  . ,FLAT) (5 . ,FLAT ) (1  . ,FLAT) (4  . ,FLAT) (0  . ,FLAT) (3  . ,FLAT)
-    (3  . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP)
-    (6 . ,DOUBLE-FLAT) (2  . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1  . ,DOUBLE-FLAT) (4  . ,DOUBLE-FLAT) (0  . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT)
+    (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP)
+    (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT) (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT)
     (3  . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP)
   )
 
@@ -603,6 +611,9 @@ AncientRemoveEmptyStaffContext = \context {
   keepAliveInterfaces = #'(
     rhythmic-grob-interface
     lyric-interface
+
+    ;; need this, as stanza numbers are items, and appear only once. 
+    stanza-number-interface
     percent-repeat-interface)
   quotedEventTypes = #'(
     note-event
@@ -634,7 +645,7 @@ AncientRemoveEmptyStaffContext = \context {
 
   \override VerticalAxisGroup #'remove-empty = ##t
   \override VerticalAxisGroup #'remove-first = ##t
-  \override VerticalAxisGroup #'minimum-Y-extent = #'(-0.5 . 2.5)
+  \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2)
 }
 
 \context {
@@ -781,7 +792,7 @@ AncientRemoveEmptyStaffContext = \context {
 
   %% Select vaticana style font.
   \override KeySignature #'style = #'vaticana
-  \override Accidental #'style = #'vaticana
+  \override Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
   \override Custos #'style = #'vaticana
   \override Custos #'neutral-position = #3
   \override Custos #'neutral-direction = #DOWN
@@ -792,7 +803,7 @@ AncientRemoveEmptyStaffContext = \context {
   \Voice
   \name "GregorianTranscriptionVoice"
   \alias "Voice"
-
+  
   %% Removing ligature bracket engraver without replacing it by some
   %% other ligature engraver would cause a "Junking event: `LigatureEvent'"
   %% warning for every "\[" and "\]".  Therefore, we make the grob
@@ -884,7 +895,7 @@ AncientRemoveEmptyStaffContext = \context {
   %% Select mensural style font.
   \override TimeSignature #'style = #'mensural
   \override KeySignature #'style = #'mensural
-  \override Accidental #'style = #'mensural
+  \override Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
   \override Custos #'style = #'mensural
   \override Custos #'neutral-position = #3
   \override Custos #'neutral-direction = #DOWN
index eab90ef3d5905527c56ee3c36edabbc4cba0f243..c3db3b37170810826995247621026c213d36379f 100644 (file)
@@ -4,11 +4,6 @@
 #(if (and #t (defined? 'set-debug-cell-accesses!))
   (set-debug-cell-accesses! 5000))
 
-#(define-public midi-debug  #f)
-
-
-
-
 \version "2.10.0"
 
 \include "declarations-init.ly"
@@ -19,7 +14,8 @@
 #(define output-count 0) 
 #(define $defaultheader #f)
 #(define version-seen #f)
-
+#(define expect-error #f) 
+#(define output-empty-score-list #f)
 
 #(use-modules (scm clip-region))
 \maininput
       (defined? 'input-file-name))
   (version-not-seen-message input-file-name))
 
-#(if (pair? toplevel-scores)
-  (toplevel-book-handler
+#(if (or (pair? toplevel-scores) output-empty-score-list)
+  ((if (defined? 'default-toplevel-book-handler)
+    default-toplevel-book-handler
+    toplevel-book-handler)
    parser
    (apply ly:make-book $defaultpaper $defaultheader toplevel-scores)))
+
+
+#(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"))))
index aa82b7330c55c4e33e435f684f3e693f1f3f9e1a..a7bea92f1566be1148302a18d39b08fb26e6adb3 100644 (file)
@@ -1,12 +1,30 @@
 
 \version "2.10.0"
 
-#(set! toplevel-score-handler print-score-with-defaults)
-#(set! toplevel-music-handler
-  (lambda (p m)
-   (if (not (eq? (ly:music-property m 'void) #t))
-        (print-score-with-defaults
-         p (scorify-music m p)))))
+%% toplevel \book gets output per page,
+%% everything else gets output per system/title
+#(define default-toplevel-book-handler
+  print-book-with-defaults-as-systems )
+
+#(define toplevel-book-handler
+  (lambda ( . rest)
+  (set! output-empty-score-list #f)
+  (apply print-book-with-defaults rest)))
+
+#(define toplevel-music-handler
+  (lambda ( . rest)
+   (apply collect-music-for-book rest)))
+
+#(define toplevel-score-handler
+  (lambda ( . rest)
+   (apply collect-scores-for-book rest)))
+
+#(define toplevel-text-handler
+  (lambda ( . rest)
+   (apply collect-scores-for-book rest)))
+
+#(set! output-empty-score-list #t)
+
 
 #(ly:set-option (quote no-point-and-click))
 #(define inside-lilypond-book #t)
diff --git a/ly/markup-init.ly b/ly/markup-init.ly
new file mode 100644 (file)
index 0000000..c40bd88
--- /dev/null
@@ -0,0 +1,87 @@
+%% -*- Mode: Scheme -*-
+
+\version "2.11.9"
+
+%%;; to be define later, in a closure
+#(define-public toplevel-module-define-public! #f)
+#(define-public toplevel-module-ref #f)
+#(let ((toplevel-module (current-module)))
+   (set! toplevel-module-define-public!
+         (lambda (symbol value)
+           (module-define! toplevel-module symbol value)
+           (module-export! toplevel-module (list symbol))))
+   (set! toplevel-module-ref
+         (lambda (symbol)
+           (module-ref toplevel-module symbol))))
+
+#(defmacro-public define-public-toplevel
+   (first-arg . rest)
+  "Define a public variable or function in the toplevel module:
+  (define-public-toplevel variable-name value)
+or:
+  (define-public-toplevel (function-name . args)
+    ..body..)"
+  (if (symbol? first-arg)
+      ;; (define-public-toplevel symbol value)
+      (let ((symbol first-arg)
+            (value (car rest)))
+        `(toplevel-module-define-public! ',symbol ,value))
+      ;; (define-public-toplevel (function-name . args) . body)
+      (let ((function-name (car first-arg))
+            (arg-list (cdr first-arg))
+            (body rest))
+        `(toplevel-module-define-public!
+          ',function-name
+          (let ((proc (lambda ,arg-list
+                        ,@body)))
+            (set-procedure-property! proc
+                                     'name
+                                     ',function-name)
+            proc)))))
+
+#(defmacro-public define-markup-command (command-and-args signature . body)
+  "
+* Define a COMMAND-markup function after command-and-args and body,
+register COMMAND-markup and its signature,
+
+* add COMMAND-markup to markup-function-list,
+
+* sets COMMAND-markup markup-signature and markup-keyword object properties,
+
+* define a make-COMMAND-markup function.
+
+Syntax:
+  (define-markup-command (COMMAND layout props arg1 arg2 ...)
+                         (arg1-type? arg2-type? ...)
+    \"documentation string\"
+    ...command body...)
+or:
+  (define-markup-command COMMAND (arg1-type? arg2-type? ...) function)
+"
+  (let* ((command (if (pair? command-and-args)
+                      (car command-and-args)
+                      command-and-args))
+         (command-name (string->symbol (format #f "~a-markup" command)))
+         (make-markup-name (string->symbol (format #f "make-~a-markup" command))))
+    `(begin
+       ;; define the COMMAND-markup procedure in toplevel module
+       ,(if (pair? command-and-args)
+            ;; 1/ (define (COMMAND-markup layout props arg1 arg2 ...)
+            ;;      ..command body))
+            `(define-public-toplevel (,command-name ,@(cdr command-and-args))
+               ,@body)
+            ;; 2/ (define (COMMAND-markup . args) (apply function args))
+            (let ((args (gensym "args"))
+                  (command (car body)))
+            `(define-public-toplevel (,command-name . ,args)
+               (apply ,command ,args))))
+       (let ((command-proc (toplevel-module-ref ',command-name)))
+         ;; register its command signature
+         (set! (markup-command-signature command-proc)
+               (list ,@signature))
+         ;; define the make-COMMAND-markup procedure in the toplevel module
+         (define-public-toplevel (,make-markup-name . args)
+           (make-markup command-proc
+                        ,(symbol->string make-markup-name)
+                        (list ,@signature)
+                        args))))))
index 077c965bd545137645fd35ce7c6c771816f6bae3..e914b70326435296f9968343badc6d16fa7f3b78 100644 (file)
 acciaccatura =
 #(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic)
 
-addquote =
+addQuote =
 #(define-music-function (parser location name music) (string? ly:music?)
-   "Add a piece of music to be quoted "
+   (_i "Add a piece of music to be quoted ")
    (add-quotable parser name music)
    (make-music 'SequentialMusic 'void #t))
 
-
 afterGraceFraction =
 #(cons 6 8)
 
@@ -153,8 +152,7 @@ bendAfter =
 clef =
 #(define-music-function (parser location type)
    (string?)
-   
-   "Set the current clef."
+   (_i "Set the current clef.")
 
    (make-clef-set type))
 
@@ -194,9 +192,8 @@ displayMusic =
 
 featherDurations=
 #(define-music-function (parser location factor argument) (ly:moment? ly:music?)
-
-   "Rearrange durations in ARGUMENT so there is an
-acceleration/deceleration. "
+   (_i "Rearrange durations in ARGUMENT so there is an
+acceleration/deceleration. ")
    
    (let*
        ((orig-duration (ly:music-length argument))
@@ -304,9 +301,9 @@ overrideProperty =
    (string? symbol? scheme?)
 
 
-   "Set @var{property} to @var{value} in all grobs named @var{name}.
+   (_i "Set @var{property} to @var{value} in all grobs named @var{name}.
 The @var{name} argument is a string of the form @code{\"Context.GrobName\"}
-or @code{\"GrobName\"}"
+or @code{\"GrobName\"}")
 
    (let*
        ((name-components (string-split name #\.))
@@ -346,7 +343,7 @@ removeWithTag =
 
 octave =
 #(define-music-function (parser location pitch-note) (ly:music?)
-   "octave check"
+   (_i "octave check")
 
    (make-music 'RelativeOctaveCheck
               'origin location
@@ -387,7 +384,7 @@ pitchedTrill =
    
 parenthesize =
 #(define-music-function (parser loc arg) (ly:music?)
-   "Tag @var{arg} to be parenthesized."
+   (_i "Tag @var{arg} to be parenthesized.")
 
    (set! (ly:music-property arg 'parenthesize) #t)
    arg)
@@ -397,7 +394,7 @@ parenthesize =
 
 parallelMusic =
 #(define-music-function (parser location voice-ids music) (list? ly:music?)
-  "Define parallel music sequences, separated by '|' (bar check signs),
+  (_i "Define parallel music sequences, separated by '|' (bar check signs),
 and assign them to the identifiers provided in @var{voice-ids}.
 
 @var{voice-ids}: a list of music identifiers (symbols containing only letters)
@@ -416,7 +413,7 @@ Example:
   B = { d d | e e | }
   C = { e e | f f | }
 @end verbatim
-"
+")
   (let* ((voices (apply circular-list (make-list (length voice-ids) (list))))
          (current-voices voices)
          (current-sequence (list)))
@@ -503,7 +500,7 @@ resetRelativeOctave  =
 #(define-music-function
     (parser location reference-note)
     (ly:music?)
-    "Set the octave inside a \\relative section."
+    (_i "Set the octave inside a \\relative section.")
 
    (let*
     ((notes (ly:music-property reference-note 'elements))
@@ -521,8 +518,7 @@ resetRelativeOctave  =
 
 shiftDurations =
 #(define-music-function (parser location dur dots arg) (integer? integer? ly:music?)
-   ""
-
+   (_i "")
    
    (music-map
     (lambda (x)
@@ -530,12 +526,13 @@ shiftDurations =
 
 spacingTweaks =
 #(define-music-function (parser location parameters) (list?)
-   "Set the system stretch, by reading the 'system-stretch property of
-   the `parameters' assoc list."
+   (_i "Set the system stretch, by reading the 'system-stretch property of
+the `parameters' assoc list.")
    #{
       \overrideProperty #"Score.NonMusicalPaperColumn"
         #'line-break-system-details
-        #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters))))
+        #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters)))
+               (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters))))
    #})
 
 %% Parser used to read page-layout file, and then retreive score tweaks.
@@ -543,8 +540,8 @@ spacingTweaks =
 
 includePageLayoutFile = 
 #(define-music-function (parser location) ()
-   "If page breaks and tweak dump is not asked, and the file
-   <basename>-page-layout.ly exists, include it."
+   (_i "If page breaks and tweak dump is not asked, and the file
+<basename>-page-layout.ly exists, include it.")
    (if (not (ly:get-option 'dump-tweaks))
        (let ((tweak-filename (format #f "~a-page-layout.ly"
                                     (ly:parser-output-name parser))))
@@ -560,7 +557,7 @@ includePageLayoutFile =
 
 rightHandFinger =
 #(define-music-function (parser location finger) (number-or-string?)
-   "Define a StrokeFingerEvent"
+   (_i "Define a StrokeFingerEvent")
    
    (apply make-music
          (append
@@ -573,7 +570,7 @@ rightHandFinger =
 
 scoreTweak =
 #(define-music-function (parser location name) (string?)
-   "Include the score tweak, if exists."
+   (_i "Include the score tweak, if exists.")
    (if (and page-layout-parser (not (ly:get-option 'dump-tweaks)))
        (let ((tweak-music (ly:parser-lookup page-layout-parser
                                             (string->symbol name))))
@@ -587,11 +584,11 @@ transposedCueDuring =
   (parser location what dir pitch-note main-music)
   (string? ly:dir? ly:music? ly:music?)
 
-  "Insert notes from the part @var{what} into a voice called @code{cue},
+  (_i "Insert notes from the part @var{what} into a voice called @code{cue},
 using the transposition defined by @var{pitch-note}.  This happens
 simultaneously with @var{main-music}, which is usually a rest.  The
 argument @var{dir} determines whether the cue notes should be notated
-as a first or second voice."
+as a first or second voice.")
 
   (make-music 'QuoteMusic
              'element main-music
@@ -606,19 +603,17 @@ as a first or second voice."
 
 transposition =
 #(define-music-function (parser location pitch-note) (ly:music?)
-   "Set instrument transposition"
+   (_i "Set instrument transposition")
 
    (context-spec-music
     (make-property-set 'instrumentTransposition
-                      (ly:pitch-diff (ly:make-pitch 0 0 0) (pitch-of-note pitch-note)))
-        'Staff
-))
+                      (ly:pitch-negate (pitch-of-note pitch-note)))
+        'Staff))
 
 tweak = #(define-music-function (parser location sym val arg)
           (symbol? scheme? ly:music?)
 
-          "Add @code{sym . val} to the @code{tweaks} property of @var{arg}."
-
+          (_i "Add @code{sym . val} to the @code{tweaks} property of @var{arg}.")
           
           (set!
            (ly:music-property arg 'tweaks)
@@ -629,7 +624,7 @@ tweak = #(define-music-function (parser location sym val arg)
 tag = #(define-music-function (parser location tag arg)
    (symbol? ly:music?)
 
-   "Add @var{tag} to the @code{tags} property of @var{arg}."
+   (_i "Add @var{tag} to the @code{tags} property of @var{arg}.")
 
    (set!
     (ly:music-property arg 'tags)
@@ -646,7 +641,7 @@ unfoldRepeats =
 
 withMusicProperty =
 #(define-music-function (parser location sym val music) (symbol? scheme? ly:music?)
-   "Set @var{sym} to @var{val} in @var{music}."
+   (_i "Set @var{sym} to @var{val} in @var{music}.")
 
    (set! (ly:music-property music sym) val)
    music)
index 65303f9f1c7a1512cbbf89380508c8d583890850..8ea1159204f405341fc84ce6487680f28fa1c8fe 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.10.0"
+\version "2.11.11"
 #(use-modules (scm layout-page-layout))
 \paper {
 
@@ -33,7 +33,7 @@
     %% ugh. hard coded?
     %%
 
-    #(layout-set-staff-size (* 20.0 pt))
+    #(layout-set-absolute-staff-size (* 20.0 pt))
 
 
     #(define-public score-title-properties
index 24f0da2b81b567496217cbce4f1b29c883a3bf0c..b48bd5454d01ba1b6ca7c53d4ff44ae7300e5f18 100644 (file)
@@ -30,9 +30,7 @@
 \context {
     \type "Performer_group"
     \name Voice
-    % The order of the dynamic performers is significant: absolute dynamic events must override crescendo events in midi.
-    \consists "Span_dynamic_performer"
-    \consists "Dynamic_performer"
+    \consists "Dynamic_performer"    
     \consists "Tie_performer"
     \consists "Piano_pedal_performer"
     \consists "Note_performer"
index 10e301af306ccb3e24efcfc30c4289ec0ab208b9..f7fc11ae7358f6773049f39e729968c690b6ac2d 100644 (file)
@@ -123,8 +123,11 @@ endincipit =  \context Staff {
 autoBeamOff = \set autoBeaming = ##f
 autoBeamOn = \set autoBeaming = ##t
 
-fatText = \override TextScript  #'no-spacing-rods = ##f
-emptyText = \override TextScript  #'no-spacing-rods = ##t
+fatText = { \override TextScript  #'extra-spacing-width = #'(0 . 0)
+            \override TextScript  #'infinite-spacing-height = ##t }
+
+emptyText = { \override TextScript  #'extra-spacing-width = #'(+inf.0 . -inf.0)
+              \override TextScript  #'infinite-spacing-height = ##f }
 
 showStaffSwitch = \set followVoice = ##t
 hideStaffSwitch = \set followVoice = ##f
index 7547e39ea69177fd4241b1bba42643134389b131..1411b8c5f7d96375c8cd74f58888097b66874092 100644 (file)
@@ -15,33 +15,16 @@ MAKEINFO = LANG=$(ISOLANG) $(MAKEINFO_PROGRAM) --force
 $(outdir)/lilypond/index.html: $(outdir)/lilypond.nexi doc-po
        mkdir -p $(dir $@)
        -$(MAKEINFO) -I$(outdir) --output=$(outdir)/lilypond --css-include=$(top-src-dir)/Documentation/texinfo.css --html $<
-       find $(outdir) -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | xargs $(PYTHON) $(top-src-dir)/buildscripts/html-gettext.py $(depth)/Documentation/po/$(outdir) $(ISOLANG)
+       find $(outdir) -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | xargs $(PYTHON) $(buildscript-dir)/html-gettext.py $(buildscript-dir) $(top-build-dir)/Documentation/po/$(outdir) $(ISOLANG)
 
 $(outdir)/lilypond.html: $(outdir)/lilypond.nexi
        -$(MAKEINFO) -I$(outdir) --output=$@ --css-include=$(top-src-dir)/Documentation/texinfo.css --html --no-split --no-headers $< 
 
-local-WWW: png-ln $(outdir)/lilypond.html $(outdir)/lilypond/index.html deep-ln lang-merge
+local-WWW: $(outdir)/lilypond.html $(outdir)/lilypond/index.html lang-merge
 
 lang-merge:
        $(foreach i, $(shell find $(outdir) -name '*.html' | xargs grep -L --label="" 'UNTRANSLATED NODE: IGNORE ME'), ln -f $(i) $(i:$(outdir)/%.html=$(depth)/Documentation/user/$(outdir)/%.$(ISOLANG).html) &&) true
 
-png-ln:
-       mkdir -p $(outdir)/lilypond
-       # makeinfo is broken, it MUST have PNGs in output dir
-       # symlinking PNGs...
-       $(foreach i, $(shell find $(depth)/Documentation/user/$(outdir) -maxdepth 1 -name '*.png'), ln -sf ../$(i) $(i:$(depth)/Documentation/user/$(outdir)/%.png=$(outdir)/%.png) &&) true
-       $(foreach i, $(shell find $(depth)/Documentation/user/$(outdir)/lilypond -name '*.png'), ln -sf ../../$(i) $(i:$(depth)/Documentation/user/$(outdir)/%.png=$(outdir)/%.png) &&) true
-
-# Links referred to by Documentation index
-# BROKEN: the following makes broken symlinks
-#LILYPOND_LINKS = Reference-Manual.html Tutorial.html Ly2dvi.html Midi2ly.html
-
-
-deep-ln:
-       mkdir -p $(outdir)/lilypond
-       cd $(outdir)/lilypond && $(foreach i, $(LILYPOND_LINKS),\
-                rm -f $(i) && ln -s lilypond.html $(i) &&) true
-
 local-WWW-clean: deep-WWW-clean
 
 deep-WWW-clean:
index 201c9984e9a9554ae9d28c8a5e7eb4bee1e9e526..6c158329815a06c18b5fafb435999102a5b39aca 100644 (file)
@@ -22,12 +22,14 @@ the-script-dir=$(wildcard $(script-dir))
 ABC2LY = $(script-dir)/abc2ly.py
 CONVERT_LY = $(script-dir)/convert-ly.py
 LILYPOND_BOOK = $(script-dir)/lilypond-book.py
-LILYPOND_BOOK_INCLUDES = -I $(src-dir)/ -I $(outdir) -I $(input-dir) -I $(input-dir)/regression/ -I $(input-dir)/manual/ -I $(input-dir)/tutorial/ -I $(top-build-dir)/mf/$(outconfbase)/  -I $(top-build-dir)/mf/out/
+LILYPOND_BOOK_INCLUDES = -I $(src-dir)/ -I $(outdir) -I $(input-dir) -I $(input-dir)/regression/ -I $(input-dir)/manual/ -I $(input-dir)/tutorial/ -I $(top-build-dir)/mf/$(outconfbase)/  -I $(top-build-dir)/mf/out/ -I $(input-dir)/test/ 
 
+## override from cmd line to speed up. 
+ANTI_ALIAS_FACTOR=2
 LILYPOND_JOBS=$(if $(CPU_COUNT),-djob-count=$(CPU_COUNT),)
-LILYPOND_BOOK_LILYPOND_FLAGS=--backend=eps --formats=ps,png,pdf $(LILYPOND_JOBS) -dinclude-eps-fonts -dgs-load-fonts --header=texidoc -I $(top-src-dir)/input/manual -dcheck-internal-types -ddump-signatures -danti-alias-factor=2
-
-LILYPOND_BOOK_FLAGS = --process="$(LILYPOND_BINARY) $(LILYPOND_BOOK_LILYPOND_FLAGS)"
+LILYPOND_BOOK_LILYPOND_FLAGS=--backend=eps --formats=ps,png,pdf $(LILYPOND_JOBS) -dinclude-eps-fonts -dgs-load-fonts --header=texidoc -I $(top-src-dir)/input/manual -dcheck-internal-types -ddump-signatures -danti-alias-factor=$(ANTI_ALIAS_FACTOR)
+LILYPOND_BOOK_VERBOSE = --verbose
+LILYPOND_BOOK_FLAGS = --process="$(LILYPOND_BINARY) $(LILYPOND_BOOK_LILYPOND_FLAGS)" $(LILYPOND_BOOK_VERBOSE)
 TEXINPUTS=$(top-src-dir)/tex/::
 export TEXINPUTS
 
index e7dbb42719f60faf7fbfc3100170c19241599ed7..2e9e5ff0224f7f2eaa02b62553fd417297d28925 100644 (file)
@@ -2,18 +2,16 @@
 
 
 $(outdir)/%.latex:  %.doc
-       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BINARY) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --verbose $(LILYPOND_BOOK_FLAGS) $<
+       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BINARY) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir)  $(LILYPOND_BOOK_FLAGS) $<
 
 # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
 # it is not, for --srcdir builds
 $(outdir)/%.texi: %.tely
-       rm -f $$(grep -LF '% eof' $(outdir)/lily-*systems.*tex 2>/dev/null)
-       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BINARY) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) $<
+       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BINARY) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
 
 
 $(outdir)/%.texi: $(outdir)/%.tely
-       rm -f $$(grep -LF '% eof' $(outdir)/lily-*systems.*tex 2>/dev/null)
-       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BINARY) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) $<
+       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BINARY) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
 #
 # DON'T REMOVE SOURCE FILES, otherwise the .TEXI ALWAYS OUT OF DATE.
 #      rm -f $<
@@ -22,7 +20,7 @@ $(outdir)/%.texi: $(outdir)/%.tely
 # for plain info doco: don't run lilypond
 $(outdir)/%.nexi: %.tely
        rm -f $(outdir)/$*.texi
-       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) --process='true' $<
+       $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) --process='true' $<
        mv -f $(outdir)/$*.texinfo $@ 2>/dev/null || mv -f $(outdir)/$*.texi $@
 
 $(outdir)/%.info: $(outdir)/%.nexi
index d01701d8593b223465114cf46e6b2dc19a3d1caf..a2d621b154c81eb103453a8ea076d0830fb3bb0b 100644 (file)
@@ -6,9 +6,3 @@ local-convert-ly:
 
 local-help: local-ly-help
 
-local-ly-help:
-       @echo -e "\
-  convert-ly  convert all LilyPond sources\n\
-"\
-#
-
index 090c6c753c450501073fc9c266a8c16d2d317831..cf5a9d2e677a324d1350581352dc5b6edd3ffdae 100644 (file)
@@ -1,5 +1,6 @@
 
 
-local-WWW: $(outdir)/$(NAME).html $(outdir)/$(NAME).pdf
+local-WWW: $(outdir)/collated-files.html $(outdir)/collated-files.pdf
 
 #.PRECIOUS: $(outdir)/$(NAME).texi
+
index 4d0ae695485a0e2b92984f47ad3d4a02bece3bc6..de5152e7d270752130e6e0208e95e583c4e14f6c 100644 (file)
@@ -10,6 +10,6 @@ $(outdir)/%.ly: %.abc
 
 # hmm. notdir builds src-dir builds?
 $(outdir)/%.png $(outdir)/%.pdf $(outdir)/%.ly $(outdir)/%.ps: $(outdir)/%.ly
-       cd $(outdir); $(LILYPOND_BINARY) --pdf --png -ddump-signatures -danti-alias-factor=2 -ddelete-intermediate-files -dno-point-and-click -I $(call absdir,$(src-dir))/ $(notdir $<)
+       cd $(outdir); $(LILYPOND_BINARY) --pdf --png -dlog-file="'$(basename $(notdir $<)).log"   -ddump-signatures -danti-alias-factor=2 -ddelete-intermediate-files -dno-point-and-click -I $(call absdir,$(src-dir))/ $(notdir $<)
        touch $(outdir)/$(basename $(notdir $<)).png
 
index 866bfbbad9f0f992f82ffbbbf21a1f040b616b9b..1492d1790b11ed6b2cf09be839b0d050c5db2e50 100644 (file)
@@ -6,10 +6,9 @@ LOCALSTEPMAKE_TEMPLATES=lilypond
 include $(depth)/make/stepmake.make
 
 
-# hangs on feta23
 MFTRACE_FLAGS=  --simplify
 
-EXTRA_DIST_FILES += README feta.tex
+EXTRA_DIST_FILES += README 
 
 # We don't use $(MF_FILES), because there's more .mf cruft here
 FETA_MF_FILES = $(call src-wildcard,feta[0-9]*.mf)\
@@ -36,11 +35,8 @@ NCSB_INSTALL_DIR=$(local_lilypond_datadir)/fonts/otf
 
 LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log)
 LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp)
-TEXTABLES = $(FETA_MF_FILES:%.mf=$(outdir)/%.tex)
-ENC_FILES = $(TEXTABLES:.tex=.enc)
-TFM_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.tfm)\
- $(SAUTER_FONTS:%=$(outdir)/%.tfm)
-
+ENC_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.enc)
+TFM_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.tfm)
 
 ENCODING_FILE=$(findstring $(<F:.mf=.enc), $(FETA_MF_FILES:.mf=.enc))
 MFTRACE_FLAGS=$(if $(ENCODING_FILE),--encoding $(outdir)/$(ENCODING_FILE),) --no-afm
@@ -98,12 +94,12 @@ $(outdir)/aybabtu.subfonts:
 $(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts.py
        $(PYTHON) $< --dir=$(outdir)
 
-ALL_FONTS = $(FETA_FONTS) $(SAUTER_FONTS)
+ALL_FONTS = $(FETA_FONTS)
 PFA_FILES = $(ALL_FONTS:%=$(outdir)/%.pfa)
 
 # Make tfm files first, log files last,
 # so that normally log files aren't made twice
-ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(TFM_FILES) $(LOG_FILES) $(ENC_FILES) $(LISP_FILES) $(OTF_TABLES) $(NCSB_OTFS) $(PFA_FILES) $(OTF_FILES) $(SVG_FILES) 
+ALL_GEN_FILES=$(LOG_FILES) $(ENC_FILES) $(LISP_FILES) $(OTF_TABLES) $(NCSB_OTFS) $(PFA_FILES) $(OTF_FILES) $(SVG_FILES) 
 
 #PRE_INSTALL=$(MAKE) "$(ALL_GEN_FILES)"
 
@@ -112,15 +108,9 @@ INSTALLATION_FILES=$(MF_FILES)
 
 INSTALLATION_OUT_SUFFIXES=1 2 3 4 5 6
 
-INSTALLATION_OUT_DIR1=$(local_lilypond_datadir)/tex
-INSTALLATION_OUT_FILES1=$(TEXTABLES)
-
 INSTALLATION_OUT_DIR2=$(local_lilypond_datadir)/fonts/otf
 INSTALLATION_OUT_FILES2=$(OTF_FILES) $(NCSB_OTFS)
 
-INSTALLATION_OUT_DIR3=$(local_lilypond_datadir)/fonts/tfm
-INSTALLATION_OUT_FILES3=$(TFM_FILES)
-
 INSTALLATION_OUT_DIR4=$(local_lilypond_datadir)/fonts/svg
 INSTALLATION_OUT_FILES4=$(SVG_FILES)
 
@@ -141,7 +131,7 @@ tree-regen:
 
 ##
 ## todo: this also depends on .tfm, FIXME.
-$(outdir)/%.lisp $(outdir)/%.otf-gtable $(outdir)/%.enc  $(outdir)/%.tex $(outdir)/%.dep: $(outdir)/%.log $(outdir)/%.tfm
+$(outdir)/%.lisp $(outdir)/%.otf-gtable $(outdir)/%.enc  $(outdir)/%.tex $(outdir)/%.dep: $(outdir)/%.log
        $(PYTHON) $(buildscript-dir)/mf-to-table.py --global-lisp=$(outdir)/$(<F:.log=.otf-gtable) --lisp=$(outdir)/$(<F:.log=.lisp) --outdir=$(outdir) --dep $(outdir)/$(<F:.log=.dep) --enc $(outdir)/$(<F:.log=.enc) --tex $(outdir)/$(<F:.log=.tex) $<
 
 local-clean:
index 552731486d58724e5f50f2f0a1bd19fcc35d307a..1ade03f2c354ad142a0616ac673b9fd9ccbe1b49 100644 (file)
@@ -4,9 +4,9 @@
 %
 
 %input feta-eindelijk;
-%input feta-toevallig;
+input feta-toevallig;
 %input feta-puntje;
-input feta-bolletjes;  
+%input feta-bolletjes; 
 %input feta-arrow;     
 %input feta-schrift;   
 %input feta-schrift;
index f473e236f0493fe3a9c1b876e609b36aa4677fd7..9b69c5f0a0902e2e2479f2a35d1f8a1283d98577 100644 (file)
@@ -1,12 +1,26 @@
 %
 % feta-toevallig.mf -- implement Accidentals
 %
-% source file of the Feta (Font-En-Tja) music font
-%
 % (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %
 
 
+%
+% also show in other configuration wrt staff lines.
+%
+def draw_shifted_too =
+if test > 0:
+       fet_beginchar ("shifted too", "");
+               set_char_box (0, 0,0,0);
+               currentpicture := remember_pic;
+
+               draw_staff (-2, 2, 0.5);
+       fet_endchar;
+fi;
+enddef;
+
+
+
 %
 % Accidentals from various sources, notably
 %
 %
 
 
+%
+% Naming for microtonal
+%
+%  BASES SLASHES STEMS
+%  
+%  mirroredflat.flat.slashslash
+%
+
+% standard sharp:
+%  sharp.slashslash.stemstem
+%  sharp.slashslash.stem
+
+
 fet_begingroup ("accidentals");
 
 
 save remember_pic;
 picture remember_pic;
 
+save sharp_beamheight;
+sharp_beamheight# := 0.3 staff_space# + stafflinethickness#;
 
 %
 % The beams of most sharps have horizontal endings (as if drawn with
@@ -29,28 +58,27 @@ picture remember_pic;
 %
 
 def draw_meta_sharp (expr width, offset) =
-       save beamheight, beamwidth, beamslope;
+       save beamwidth, beamslope;
        save ne, nw_dist;
        pair ne, nw_dist;
 
        beamwidth := width;
 
-       beamheight# := 0.3 staff_space# + stafflinethickness#;
-       define_whole_vertical_blacker_pixels (beamheight);
+       define_whole_vertical_blacker_pixels (sharp_beamheight);
 
        clearxy;
 
-       beamslope = beamheight / beamwidth;
+       beamslope = sharp_beamheight / beamwidth;
 
        pickup pencircle scaled 2 blot_diameter;
 
        rt x2 - lft x1 = beamwidth;
-       y2 - y1 = beamheight;
+       y2 - y1 = sharp_beamheight;
        .5 [z1, z3] = (.5 w, offset);
        x3 = x2;
-       top y2 - bot y3 = beamheight;
+       top y2 - bot y3 = sharp_beamheight;
        x4 = x1;
-       top y1 - bot y4 = beamheight;
+       top y1 - bot y4 = sharp_beamheight;
 
        ne = unitvector (z2 - z1);
        nw_dist = (ne rotated 90) * blot_diameter;
@@ -69,7 +97,7 @@ def draw_meta_sharp (expr width, offset) =
 enddef;
 
 
-fet_beginchar ("Sharp", "2");
+fet_beginchar ("Sharp", "sharp");
        save stem, stemx, stemwidth;
        save outer_space, interbeam;
 
@@ -110,21 +138,9 @@ fet_beginchar ("Sharp", "2");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
+draw_shifted_too;
 
-if test > 0:
-       fet_beginchar ("Sharp", "2");
-
-               set_char_box (0, 1.1 staff_space#,
-                             1.5 staff_space#, 1.5 staff_space#);
-
-               currentpicture := remember_pic;
-
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
-
-
-fet_beginchar ("1/2 Sharp", "1");
+fet_beginchar ("1/2 Sharp", "sharp.slashslash.stem");
        save stem, stemwidth;
        save outer_space, interbeam;
 
@@ -160,21 +176,100 @@ fet_beginchar ("1/2 Sharp", "1");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
+draw_shifted_too;
 
-if test > 0:
-       fet_beginchar ("1/2 Sharp", "1");
+fet_beginchar ("Sharp (3 beams)", "sharp.slashslashslash.stemstem");
+       save stem, stemx, stemwidth;
+       save outer_space, interbeam;
+       save sharp_beamheight;
 
-               set_char_box (0, 0.7 staff_space#,
-                             1.5 staff_space#, 1.5 staff_space#);
+       sharp_beamheight# := 0.22 staff_space# + stafflinethickness#;
 
-               currentpicture := remember_pic;
 
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
+       stemwidth# := stafflinethickness# + .05 staff_space#;
+       define_whole_blacker_pixels (stemwidth);
 
+       interbeam := 1.2 staff_space_rounded;
+
+       set_char_box (0, 1.1 staff_space#,
+                     1.5 staff_space#, 1.5 staff_space#);
 
-fet_beginchar ("3/4 Sharp", "3");
+       stem := 7 / 16 * w;
+       stemx := hround stem;
+       outer_space := hround ((w - stemx - stemwidth) / 2);
+
+       w := 2 outer_space + stemx + stemwidth;
+       d := d - feta_space_shift;
+
+       draw_meta_sharp (.88 w, -.5 interbeam);
+       draw_meta_sharp (w, 0);
+       draw_meta_sharp (.88 w, -.5 interbeam + vround interbeam);
+
+       pickup pencircle scaled stemwidth;
+
+       lft x5 = lft x6 = outer_space;
+       lft x7 = lft x8 = outer_space + stemx;
+       bot y5 = -d;
+       top y6 = vround (1.5 staff_space - stem * beamslope);
+       bot y7 = -top y6 + feta_space_shift;
+       top y8 = h;
+
+       labels (5, 6, 7, 8);    
+
+       draw_gridline (z5, z6, stemwidth);
+       draw_gridline (z7, z8, stemwidth);
+
+       remember_pic := currentpicture;
+
+       draw_staff (-2, 2, 0);
+fet_endchar;
+
+draw_shifted_too;
+
+fet_beginchar ("1/2 Sharp (3 beams)", "sharp.slashslashslash.stem");
+       save stem, stemx, stemwidth;
+       save outer_space, interbeam;
+       save sharp_beamheight;
+
+       sharp_beamheight# := 0.22 staff_space# + stafflinethickness#;
+
+       stemwidth# := stafflinethickness# + .05 staff_space#;
+       define_whole_blacker_pixels (stemwidth);
+
+       interbeam := 1.2 staff_space_rounded;
+
+       set_char_box (0, 0.95 staff_space#,
+                     1.3 staff_space#, 1.3 staff_space#);
+
+       stem := 7 / 16 * w;
+       outer_space := hround ((w - stemwidth) / 2);
+       w := 2 outer_space + stemwidth;
+       d := d - feta_space_shift;
+
+       draw_meta_sharp (.8 w, -.5 interbeam);
+       draw_meta_sharp (w, 0);
+       draw_meta_sharp (.8 w, -.5 interbeam + vround interbeam);
+
+       pickup pencircle scaled stemwidth;
+
+       lft x5 = lft x6 = outer_space;
+       top y6 = vround (1.5 staff_space - .5 stem);
+       bot y5 = -top y6 + feta_space_shift;
+       labels (5, 6);
+
+
+       draw_gridline (z5, z6, stemwidth);
+
+
+       remember_pic := currentpicture;
+
+       draw_staff (-2, 2, 0);
+fet_endchar;
+
+draw_shifted_too;
+
+
+fet_beginchar ("3/4 Sharp", "sharp.slashslash.stemstemstem");
        save stem, stemx, stemwidth;
        save outer_space, interbeam;
 
@@ -219,25 +314,15 @@ fet_beginchar ("3/4 Sharp", "3");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
+draw_shifted_too;
 
-if test > 0:
-       fet_beginchar ("3/4 Sharp", "3");
-
-               set_char_box (0, 1.6 staff_space#,
-                             1.5 staff_space#, 1.5 staff_space#);
-
-               currentpicture := remember_pic;
-
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
 
 
 %
 % The stems of the natural are brushed (at least, in Barenreiter SCS)
 %
 
-fet_beginchar ("Natural", "0");
+fet_beginchar ("Natural", "natural");
        save stemwidth, top_stem_thick;
        save ne, pat_top, pat_bottom;
        pair ne;
@@ -324,17 +409,7 @@ fet_beginchar ("Natural", "0");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
-
-if test > 0:
-       fet_beginchar ("Natural", "0");
-               set_char_box (0, 2/3 staff_space#,
-                             1.5 staff_space#, 1.5 staff_space#);
-
-               currentpicture := remember_pic;
-
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
+draw_shifted_too;
 
 
 %
@@ -455,7 +530,7 @@ enddef;
 % unfortunately, 600dpi is not enough to show the brush of the stem.
 %
 
-fet_beginchar ("Flat", "-2");
+fet_beginchar ("Flat", "flat");
        set_char_box (1.2 stafflinethickness#, .8 staff_space#,
                      0.6 staff_space#, 1.9 staff_space#);
 
@@ -467,20 +542,74 @@ fet_beginchar ("Flat", "-2");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
+draw_shifted_too;
 
-if test > 0:
-       fet_beginchar ("Flat", "-2");
-               set_char_box (1.2 stafflinethickness#, .8 staff_space#,
-                             0.6 staff_space#, 1.9 staff_space#);
+fet_beginchar ("Flat (slashed)", "flat.slash");
+       set_char_box (1.2 stafflinethickness#, .8 staff_space#,
+                     0.6 staff_space#, 1.9 staff_space#);
 
-               currentpicture := remember_pic;
+       draw_meta_flat (0, w, 0.31 staff_space);
+       clearxy;
+       save slope, slash_width;
+       slope = 0.5;
+       slash_width = w;
+       z1 = (0, h / 2);
+       z2 = z1 - (slash_width, slash_width * slope)/2;
+       z3 = z1 + (slash_width, slash_width * slope)/2;
+
+       pickup pencircle scaled 1.5 stafflinethickness;
+       draw  z2 .. z3;
+       labels (1, 2, 3);
+       remember_pic := currentpicture;
 
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
+       draw_staff (-2, 2, 0);
+fet_endchar;
+
+fet_beginchar ("Flat (slashed twice)", "flat.slashslash");
+       set_char_box (1.2 stafflinethickness#, .8 staff_space#,
+                     0.6 staff_space#, 1.9 staff_space#);
+
+       draw_meta_flat (0, w, 0.31 staff_space);
+       clearxy;
+       save slope, slash_width;
+
+       slope = 0.5;
+       slash_width = w;
+       pickup pencircle scaled 1.5 stafflinethickness;
+
+       z1 = (0, 5/12 h);
+       z2 = (0, 2/3 h);
+       draw z1 - (slash_width, slash_width * slope)/2
+               .. z1 + (slash_width, slash_width * slope)/2;
+       draw z2 - (slash_width, slash_width * slope)/2
+               .. z2 + (slash_width, slash_width * slope)/2;
+       labels (1, 2);
+       remember_pic := currentpicture;
+
+       draw_staff (-2, 2, 0);
+fet_endchar;
+
+fet_beginchar ("Flatflat (mirrored)", "mirroredflat.flat");
+       set_char_box (0, 1.6 staff_space#, 
+                     0.6 staff_space#, 1.9 staff_space#);
 
+       draw_meta_flat (0, w/2, 0.31 staff_space);
+       currentpicture := currentpicture xscaled -1;
+       draw_meta_flat (0, w/2, 0.31 staff_space);
+
+       currentpicture := currentpicture shifted (w/2,0);
+       penlabels (range 0 thru 11);
 
-fet_beginchar ("Semi flat", "-1");
+       remember_pic := currentpicture;
+
+       draw_staff (-2, 2, 0);
+fet_endchar;
+
+draw_shifted_too;
+
+
+
+fet_beginchar ("Semi flat", "mirroredflat");
        set_char_box (1.2 stafflinethickness#, .8 staff_space#,
                      0.6 staff_space#, 1.9 staff_space#);
 
@@ -489,7 +618,7 @@ fet_beginchar ("Semi flat", "-1");
 fet_endchar;
 
 
-fet_beginchar ("Double Flat", "-4");
+fet_beginchar ("Double Flat", "flatflat");
        save left_wid, overlap, right_wid;
 
        left_wid = .7;
@@ -505,7 +634,7 @@ fet_beginchar ("Double Flat", "-4");
 fet_endchar;
 
 
-fet_beginchar ("3/4 Flat", "-3");
+fet_beginchar ("3/4 Flat", "flatflat.slash");
        save left_wid, overlap, right_wid;
 
        left_wid = .7;
@@ -549,27 +678,9 @@ fet_beginchar ("3/4 Flat", "-3");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
+draw_shifted_too;
 
-if test > 0:
-       fet_beginchar ("3/4 Flat", "-3");
-               save left_wid, overlap, right_wid;
-
-               left_wid = .7;
-               right_wid = .8;
-               overlap = .05;
-
-               set_char_box (1.2 stafflinethickness#,
-                             (left_wid + right_wid - overlap) * staff_space#,
-                             .6 staff_space#, 1.9 staff_space#);
-
-               currentpicture := remember_pic;
-
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
-
-
-fet_beginchar ("Double Sharp", "4");
+fet_beginchar ("Double Sharp", "doublesharp");
        save klaverblad, klaversteel;
        save pat;
        path pat;
@@ -622,18 +733,7 @@ fet_beginchar ("Double Sharp", "4");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
-
-if test > 0:
-       fet_beginchar ("Double Sharp", "4");
-               set_char_box (0, staff_space#,
-                             .5 staff_space#, .5 staff_space#);
-
-               currentpicture := remember_pic;
-
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
-
+draw_shifted_too;
 
 def draw_paren =
        save leftindent;
@@ -671,17 +771,7 @@ fet_beginchar ("Right Parenthesis", "rightparen");
        draw_staff (-2, 2, 0);
 fet_endchar;
 
-
-if test > 0:
-       fet_beginchar ("Right Parenthesis", "rightparen");
-               draw_paren;
-               penlabels (1, 2, 3);
-
-               remember_pic := currentpicture;
-
-               draw_staff (-2, 2, 0.5);
-       fet_endchar;
-fi;
+draw_shifted_too;
 
 
 fet_beginchar ("Left Parenthesis", "leftparen");
@@ -692,5 +782,4 @@ fet_beginchar ("Left Parenthesis", "leftparen");
        set_char_box (charwd, charbp, chardp, charht);
 fet_endchar;
 
-
 fet_endgroup ("accidentals");
diff --git a/mf/feta.tex b/mf/feta.tex
deleted file mode 100644 (file)
index bd47bfd..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-% display all feta chars in a pretty picture
-% GNU LilyPond
-% (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
-%
-% urg: fool ls-latex
-\def\urg{
-\title{The Feta font}
-\author{JCN}
-\begin{document}
-}
-
-
-\parindent0pt
-\nopagenumbers
-\newcount\n
-\newcount\i
-
-\font\fetatwenty = feta20
-\font\fetanumber = feta-nummer12
-\font\fetafinger = feta-nummer5
-\font\fetadyn = feta-din10 scaled \magstep 2
-\font\titlefont = cmbx12 scaled \magstep 4
-\font\subtitle = cmr9
-
-\def\lilyfooter{Lily was here}
-\def\setchar#1#2{\hbox to\charwidth{\hss{#1\char#2}\hss}}
-
-\def\charsperline{6}
-\def\charheight{55pt}
-\def\charwidth{60pt}
-
-\def\listfont#1#2#3{
-        \n=#2
-        \advance\n by-1
-        \advance\n by-\charsperline
-        \loop\ifnum\n<#3
-        \advance\n by\charsperline
-        \i=0
-        {\vbox to\charheight{\vss\centerline{
-        {\loop\ifnum\i<\charsperline
-        \advance\i by1
-        \advance\n by1
-        {\setchar{#1}{\number\n}}
-        \repeat}}}}\repeat}
-
-\def\title#1{\centerline{\titlefont #1}}
-\def\author#1{\centerline{#1}}
-
-\title{FETA}
-
-\centerline{\subtitle (definitely not an abbreviation for Font-En-Tja)}
-
-\author{Han-Wen Nienhuys and Jan Nieuwenhuizen}
-
-
-\vskip5mm
-
-\listfont{\fetatwenty}{0}{105}
-% urg
-\vskip-\charheight
-\listfont{\fetanumber}{48}{58}
-\vskip-\charheight
-\listfont{\fetafinger}{48}{58}
-\vskip-\charheight
-\listfont{\fetadyn}{0}{6}
-\vskip-\charheight
-
-\lilyfooter
-
-\bye
index c9f8fba0d99b4949bc3c296cb30da9edb28b2ad8..c09ae5ae5f6c31b6ff235f2f0ee37baa075334a9 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-accidentals.mf -- implement ancient accidentals
 % 
 % source file of LilyPond's pretty-but-neat music font
index 1202080108dbc23ae014258e2fb3db985621235d..2ee63a0e930a3fa0170caa65835f20230d3da2ed 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-flags.mf -- implement ancient flags
 % 
 % source file of LilyPond's pretty-but-neat music font
index 0ed8a62016f267cecd400b48aa35416f4a588f09..7114bc6837dd04a9dcec261b2c61bc41cbbf6af6 100644 (file)
@@ -1,5 +1,4 @@
-
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-generic.mf --  implement generic stuff: include lots of files,
 % but don't set dims.
 %
index 6aa68ab5800a0726d7009b592a067508cf226630..d02840b57ffdd4e2ca0cd682e9811df4f85c4f56 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-timesig.mf -- implement ancient time signatures
 % 
 % source file of LilyPond's pretty-but-neat music font
index 1309db8c5436e901ce221c5d0bccb2717eea80b7..3b0152d2315250d3784ebfa439faa5de47455576 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 1.6.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: 2002-09-28 10:27+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2006-12-23 15:31+0100\n"
 "Last-Translator: Tomá¹ Kopeèek <xkopec14@stud.fit.vutbr.cz>\n"
 "Language-Team: Czech <cz@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -71,149 +71,160 @@ msgid "Running %s..."
 msgstr "Bì¾í %s..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "varování: %s\n"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "zapisuje výstup do SOUBORu"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr ""
+"Chyby v programu oznamujte na adrese %s (pouze anglicky),\n"
+"pøipomínky k pøekladu zasílejte na <cs@li.org> (èesky)."
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Pøíklad:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "varování: %s\n"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "chyba: %s\n"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 #, fuzzy
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 "Distribuováno ve znìní licence GNU General Public License. Program je "
 "nabízen BEZ jakékoliv ZÁRUKY"
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "Zpracovávám `%s'..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "nelze otevøít soubor: `%s'"
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "nelze nalézt implicitní font: `%s'"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "zapisuje výstup do SOUBORu"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "SOUBOR"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "vypisuje záruku a copyright"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, fuzzy, python-format
 msgid "Exiting (%d)..."
 msgstr "Konèím ... "
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s by"
@@ -228,7 +239,8 @@ msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr ""
 
 #: lilypond-book.py:135
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 
 #: lilypond-book.py:138
@@ -236,6 +248,10 @@ msgstr ""
 msgid "add DIR to include path"
 msgstr "pøidává ADRESÁØ do vyhledávací cesty"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "ADRESÁØ"
+
 #: lilypond-book.py:143
 #, fuzzy
 msgid "write output to DIR"
@@ -249,149 +265,149 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "vypisuje více informací"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "vypisuje záruku a copyright"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, fuzzy, python-format
 msgid "file not found: %s"
 msgstr "klíè `%s' nebyl nalezen"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "nelze nalézt soubor: `%s'"
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "Hlá¹ení chyby je takovéto:"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 #, fuzzy
 msgid "Writing snippets..."
 msgstr "Zapisuji `%s'..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 #, fuzzy
 msgid "Processing..."
 msgstr "Zpracovávám `%s'..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 #, fuzzy
 msgid "All snippets are up to date..."
 msgstr "uvolnìte se, %s je aktuální"
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "nelze nalézt implicitní font: `%s'"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, fuzzy, python-format
 msgid "%s is up to date."
 msgstr "uvolnìte se, %s je aktuální"
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Zapisuji `%s'..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, fuzzy, python-format
 msgid "Reading %s..."
 msgstr "Odstraòuji %s..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 #, fuzzy
 msgid "Dissecting..."
 msgstr "Prohledávám `%s'..."
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, fuzzy, python-format
 msgid "Compiling %s..."
 msgstr "Odstraòuji %s..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "Zpracovávám `%s'..."
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "Vyvolávám `%s'"
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "nelze vytvoøit adresáø: `%s'"
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "varování: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "chyba: "
 
@@ -404,9 +420,10 @@ msgstr "Kon
 msgid "%s output to `%s'..."
 msgstr "výstup %s se zapisuje do `%s'..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
-msgstr "Pøevádí MIDI na zdrojový text pro LilyPond."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "Pøevede soubor mup na zdrojový text LilyPondu."
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -450,34 +467,60 @@ msgstr "zpracuje ka
 
 #: midi2ly.py:905
 #, fuzzy
-msgid "example"
+msgid "Examples"
 msgstr "Pøíklad:"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "na pøíkazové øádce nebyly zadány ¾ádné soubory."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Toto je svobodný software. Je chránìn GNU General Public License \n"
+"a vy jste vítáni k jeho zmìnì a (nebo) ¹íøení jeho kopií za dodr¾ení\n"
+"urèitých podmínek. Pro více informací spus»te program takto: `%s --"
+"warranty'.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "zapisuje výstup do SOUBORu"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "volba `%s' vy¾aduje argument"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "volba `%s' nemá argumenty"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "neznámá volba: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "neplatný argument `%s' pro volbu `%s'"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, fuzzy, c-format
 msgid "programming error: %s"
 msgstr "chyba programrátora: %s (Pokraèuji: dr¾te mi palce)\n"
@@ -486,86 +529,75 @@ msgstr "chyba programr
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, fuzzy, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "Sazba posuvek musí zaèínat jménem kontextu: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr ""
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "Posuvka `%s' nebyla nalezena"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "nelze nalézt font: `%s'"
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "Nahrávám implicitní font"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "nelze nalézt implicitní font: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(vyhledávací cesta: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Vzdávám"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "nelze zmìnit `%s' na `%s'"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -579,19 +611,20 @@ msgstr "tr
 msgid "unterminated beam"
 msgstr "neukonèený trámec"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "no¾ka musí mít strukturu Rhythmic"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "no¾ka se nevejde pod trámec"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "trámec byl zaèat zde"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "Nebylo nalezeno vhodné místo pro øádkový zlom"
@@ -601,24 +634,24 @@ msgstr "Nebylo nalezeno vhodn
 msgid "removing beam with no stems"
 msgstr "trámec má ménì ne¾ dvì viditelné no¾ky"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, fuzzy, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Není záznam pro rozestup %s a `%s'"
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "nelze zmìnit `%s' na `%s'"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "nelze nalézt kontext `%s'"
 
 #. We could change the current translator's id, but that would make
@@ -650,7 +683,7 @@ msgstr "neukon
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "klíè `%s' nebyl nalezen"
@@ -665,7 +698,7 @@ msgstr "nezn
 msgid "junking empty cluster"
 msgstr "matoucí osamocený porrectus"
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
@@ -673,26 +706,26 @@ msgstr ""
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
 #, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "nelze nalézt ¾ádný vhodný font"
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, fuzzy, c-format
 msgid "program has no such type: `%s'"
 msgstr "Program nemá takový typ"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "nelze nalézt nebo vytvoøit: `%s'"
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "nelze nalézt nebo vytvoøit `%s' nazvaný `%s'"
 
 #: context.cc:276
@@ -702,7 +735,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "nelze nalézt nebo vytvoøit: `%s'"
 
 #: custos.cc:77
@@ -710,17 +743,22 @@ msgstr "nelze nal
 msgid "custos `%s' not found"
 msgstr "kustod `%s' nebyl nalezen"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "neznámý pøekladaè: `%s':"
 
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "pomlka `%s' nebyla nalezena, "
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "nelze nalézt zaèátek (de)crescenda"
 
 #: dynamic-engraver.cc:195
@@ -740,11 +778,7 @@ msgstr "Crescendo za
 msgid "unterminated (de)crescendo"
 msgstr "neukonèené (de)crescendo"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "neukonené prodlou¾ení"
 
@@ -767,15 +801,15 @@ msgstr "nelze vytvo
 msgid "adding font directory: %s"
 msgstr "nelze vytvoøit adresáø: `%s'"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "neukonèená ligatura"
@@ -808,47 +842,38 @@ msgstr ""
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "nelze nalézt zaèátek ligatury"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "neznámý pøekladaè: `%s':"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 #, fuzzy
 msgid "decrescendo too small"
 msgstr "Text_spanner je pøíli¹ malý"
 
-#: hairpin.cc:180
-#, fuzzy
-msgid "crescendo too small"
-msgstr "Text_spanner je pøíli¹ malý"
-
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
 msgstr ""
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "Nalezeny konfliktní tóniny."
@@ -867,96 +892,101 @@ msgstr "neukon
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "nelze nalézt soubor: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(vyhledávací cesta: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "neznámá pozice"
 
-#: ligature-engraver.cc:95
+#: ligature-engraver.cc:93
 #, fuzzy
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "nelze nalézt zaèátek ligatury"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "chybí pravá hranice"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 #, fuzzy
 msgid "already have a ligature"
 msgstr "ligatura ji¾ existuje"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "chybí levá hranice"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 #, fuzzy
 msgid "unterminated ligature"
 msgstr "neukonèená ligatura"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 #, fuzzy
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "ligatura by nemìla obsahovat pomlku; ignoruji pomlku"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 #, fuzzy
 msgid "ligature was started here"
 msgstr "ligatura byla zaèata zde"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(nahrávací cesta: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, fuzzy, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Nelze nalézt kontrolu typu vlastnosti pro `%s' (%s)."
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 #, fuzzy
 msgid "perhaps a typing error?"
 msgstr "Mo¾ná se stal pøeklep?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 #, fuzzy
 msgid "doing assignment anyway"
 msgstr "Pøesto pøiøazuji."
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, fuzzy, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "Kontrola typu `%s' selhala; hodnota `%s' musí být typu `%s'"
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Název identifikátoru je klíèové slovo: `%s'"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "chyba na konci souboru: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "nelze nalézt znak nazvaný: `%s'"
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "nelze vytvoøit adresáø: `%s'"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "nelze nalézt soubor: `%s'"
 
 #: lily-parser-scheme.cc:125
@@ -964,21 +994,21 @@ msgstr "nelze nal
 msgid "Processing `%s'"
 msgstr "Zpracovávám `%s'..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Analyzuji..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "Poèet závorek nesouhlasí"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "nelze nalézt soubor: `%s'"
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -991,7 +1021,7 @@ msgstr ""
 "urèitých podmínek. Pro více informací spus»te program takto: `%s --"
 "warranty'.\n"
 
-#: main.cc:123
+#: main.cc:122
 #, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
@@ -1003,7 +1033,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1019,134 +1049,134 @@ msgstr ""
 "GNU General Public License. Pokud se tak nestalo, napi¹te Free Software\n"
 "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139. USA\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
+#: main.cc:155
 #, fuzzy
-msgid "SYM=VAL"
+msgid "SYM[=VAL]"
 msgstr "KLÍÈ=HODN"
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "VÝRAZ"
 
-#: main.cc:160
+#: main.cc:159
 #, fuzzy
 msgid "evaluate scheme code"
 msgstr "Nelze vvyhodnotit Scheme v bezpeèném módu"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 #, fuzzy
 msgid "generate DVI (tex backend only)"
 msgstr "vytváøí PDF výstup"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 #, fuzzy
 msgid "generate PDF (default)"
 msgstr "vytváøí PDF výstup"
 
-#: main.cc:167
+#: main.cc:165
 #, fuzzy
 msgid "generate PNG"
 msgstr "vytváøí PDF výstup"
 
-#: main.cc:168
+#: main.cc:166
 #, fuzzy
 msgid "generate PostScript"
 msgstr "vytváøí PostScriptový výstup"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-msgid "print this help"
-msgstr "tato nápovìda"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "POLE"
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "zapísuje pole hlavièky do BASENAME.POLE"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "ADRESÁØ"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "pøidává ADRESÁØ do vyhledávací cesty"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "pou¾ívá SOUBOR jako inicializaèní soubor"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "vytváøí PostScriptový výstup"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "zapisuje výstup do SOUBORu"
 
-#: main.cc:180
+#: main.cc:179
 #, fuzzy
 msgid "generate a preview of the first system"
 msgstr "vytvoøí obrázek prvního systému"
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "vypisuje èíslo verze"
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1154,81 +1184,81 @@ msgid ""
 msgstr "Copyright (c) %s by"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, fuzzy, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR..."
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Sází hudbu a/nebo pøehrává MIDI ze SOUBORu."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Pøepínaèe:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr ""
 "Chyby v programu oznamujte na adrese %s (pouze anglicky),\n"
 "pøipomínky k pøekladu zasílejte na <cs@li.org> (èesky)."
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "takové nastavení neexistuje: `%s'"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "neexistující kontext: %s"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "nelze zmìnit `%s' na `%s'"
 
-#: main.cc:349
+#: main.cc:350
 #, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "nelze vytvoøit adresáø: `%s'"
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "nelze zmìnit `%s' na `%s'"
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "nelze zmìnit `%s' na `%s'"
 
-#: main.cc:368
+#: main.cc:369
 #, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "nelze vytvoøit adresáø: `%s'"
 
 #: main.cc:415
@@ -1236,7 +1266,7 @@ msgstr "nelze vytvo
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1250,40 +1280,40 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "ligatura s ménì ne¾ dvìma hlavièkami -> vynechávám"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 #, fuzzy
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "nelze urèit vý¹ku poèátku ligatury -> vynechávám"
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 #, fuzzy
 msgid "single note ligature - skipping"
 msgstr "interval ligatury je prima -> vynechávám"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr "interval ligatury je prima -> vynechávám"
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 #, fuzzy
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "menzurální ligatura: délka není ani jedna z L, B, S -> vynechávám"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1291,7 +1321,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr "neznámý pøípad"
 
@@ -1310,115 +1340,118 @@ msgstr "Mensural_ligature: (join_left == 0)"
 msgid "no such MIDI instrument: `%s'"
 msgstr "takový nástroj neexistuje: `%s'"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "podivná vý¹ka"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "nelze otevøít soubor: `%s'"
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "nelze otevøít soubor: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "Transpozice o %s vytváøí více posuvek ne¾ dvì"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "Pøíli¹ mnoho kolizí notových sloupcù. Ignoruji je."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, fuzzy, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "notová hlavièka `%s' nebyla nalezena"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "nelze otevøít soubor: `%s'"
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "nelze nalézt font: `%s'"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr ""
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "`%s' není PostScriptovým souborem"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1457,15 +1490,15 @@ msgstr "neuzav
 msgid "Track..."
 msgstr "Stopa ... "
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI výstup do `%s'..."
@@ -1474,23 +1507,23 @@ msgstr "MIDI v
 msgid "unterminated phrasing slur"
 msgstr "neukonèené frázovací legato"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "nelze nalézt zaèátek pedálu piana: `%s'"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "nelze nalézt zaèátek pedálu piana: `%s'"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "Neznámá interní volba!"
@@ -1500,111 +1533,110 @@ msgstr "Nezn
 msgid "not a grob name, `%s'"
 msgstr "Není jménem grobu, `%s'."
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "nelze vytvoøit adresáø: `%s'"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "neexistující kontext: %s"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "neexistující kontext: %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "Relocation file %s\n"
+msgid "Relocation file: %s"
 msgstr "nelze otevøít soubor: `%s'"
 
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "nelze otevøít soubor: `%s'"
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "pøíli¹ mnoho kolidujících pomlk"
 
-#: rest.cc:143
+#: rest.cc:144
 #, fuzzy, c-format
 msgid "rest `%s' not found"
 msgstr "pomlka `%s' nebyla nalezena, "
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "nelze nalézt `%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 #, fuzzy
 msgid "Music font has not been installed properly."
 msgstr "Písma nebyla správnì nainstalována. Konèím"
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(vyhledávací cesta: `%s')"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "V partituøe je tøeba hudby"
 
-#: score.cc:223
+#: score.cc:226
 #, fuzzy
 msgid "this is the previous music"
 msgstr "Toto je záznam chyb:\n"
 
-#: score.cc:228
+#: score.cc:231
 #, fuzzy
 msgid "errors found, ignoring music expression"
 msgstr "Nalezeny chyby/*, nezpracovávám partituru*/"
@@ -1612,7 +1644,7 @@ msgstr "Nalezeny chyby/*, nezpracov
 #. FIXME:
 #: script-engraver.cc:102
 #, fuzzy
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "Nevím, jak interpretovat artikulaèní znaménko `%s'"
 
 #: script-engraver.cc:103
@@ -1624,17 +1656,18 @@ msgstr ""
 msgid "No spring between column %d and next one"
 msgstr "Chybí pru¾ný výplnìk mezi sloupcem %d a následujícím"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "neukonèená ligatura"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "nelze nalézt: `%s'"
 
 #: source-file.cc:74
@@ -1646,58 +1679,58 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "délka tremola je pøíli¹ velká"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "Pøidávám hlavièku k nekompatibilní no¾ce (typ = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "Podivná velikost no¾ky; zkontrolujte úzké trámce"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "praporek `%s' nebyl nalezen"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "symbol praporku `%s' nebyl nalezen"
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Poèet prvkù je %d."
 
-#: system.cc:270
+#: system.cc:276
 #, fuzzy, c-format
 msgid "Grob count %d"
 msgstr "Poèet grobù je %d "
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "nelze nalézt zaèátek textového pøeklenutí"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "ji¾ obsahuje textové pøeklenutí"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "neukonèené textové pøeklenutí"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "osamocená ligatura"
 
@@ -1706,14 +1739,14 @@ msgstr "osamocen
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1724,43 +1757,39 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr "neznámý pøekladaè: `%s':"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "nelze nalézt: `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "nelze nalézt zaèátek textového pøeklenutí"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "ji¾ obsahuje textové pøeklenutí"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1783,275 +1812,286 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Mensural_ligature: (join_left == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "nelze nalézt zaèátek textového pøeklenutí"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 #, fuzzy
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "Ji¾ má repetici. Pøedèasnì ji ukonèuji."
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "ji¾ obsahuje textové pøeklenutí"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "Vzdávám"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 #, fuzzy
 msgid "second argument must be pitch list"
 msgstr "Druhý argument musí být symbol"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "Pro zápis textu musíte být v módu Lyric"
 
-#: parser.yy:1612
+#: parser.yy:1604
 #, fuzzy
 msgid "expecting string as script definition"
 msgstr "Oèekáván øetìzec jako definice skriptu"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "není délkou: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "Pro zápis not musíte být v módu Note"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "Pro zápis akordù musíte být v módu Chord"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Matoucí po¾adavek: `%s'"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "uvnitø poznámky nalezen konec souboru"
 
-#: lexer.ll:290
+#: lexer.ll:288
 #, fuzzy
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput není povolen mimo inicializaèní soubory"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "¹patný nebo nedefinovaný identifikátor: `%s'"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 #, fuzzy
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Na konci textu byla nalezena závorka. Zapomnìl jste na mezeru?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 #, fuzzy
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Na konci textu byla nalezena závorka. Zapomnìl jste na mezeru?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "neplatný znak: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "neznámá escape sekvence: `\\%s'"
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Nesprávná verze lilypondu: %s (%s, %s)"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
+#: lexer.ll:881 lexer.ll:882
 #, fuzzy
-msgid "Consider updating the input with the convert-ly script"
+msgid "consider updating the input with the convert-ly script"
 msgstr "Zva¾te konverzi zdrojového textu pomocí skriptu convert-ly"
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, fuzzy, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Vyvolávám `%s'"
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr ""
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Zapisuji `%s'..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "Zapisuji `%s'..."
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "není délkou: %d"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "nelze nalézt kontext `%s'"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "neznámý pøekladaè: `%s':"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "nelze nalézt znak èíslo: %d"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "neznámý pøekladaè: `%s':"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "Zpracovávám `%s'..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "Zapisuji `%s'..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "nelze nalézt znak èíslo: %d"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "Zapisuji `%s'..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Nevím, jak interpretovat artikulaèní znaménko `%s'"
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2060,56 +2100,56 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "jméno souboru by nemìlo obsahovat mezery: `%s'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "Poèítám pozice sloupcù..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "neznámý pøekladaè: `%s':"
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "nelze nalézt: `%s'"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "závislosti se zapisují do `%s'..."
 
@@ -2117,49 +2157,49 @@ msgstr "z
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
+#: music-functions.scm:213
 #, fuzzy
-msgid "More alternatives than repeats. Junking excess alternatives"
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr "Více alternativ ne¾ opakování. Zahazuji nadbyteèné alternativy."
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, fuzzy, lisp-format
+#: music-functions.scm:538
+#, fuzzy, scheme-format
 msgid "music expected: ~S"
 msgstr "oèekávána mezera (whitespace)"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "nelze nalézt font: `%s'"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "neznámá sazba posuvek: %s. Ignorováno"
 
@@ -2168,42 +2208,42 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "undefined: ~S"
 msgstr "nedefinované left_head"
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "nelze nalézt zaèátek ligatury"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "neznámý pøekladaè: `%s':"
 
@@ -2211,16 +2251,52 @@ msgstr "nezn
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, fuzzy, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "pøíkaz skonèil s návratovou hodnotou %d"
 
 #: to-xml.scm:190
-#, fuzzy
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "Spu¹tìní LaTeXu selhalo"
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "vypisuje záruku a copyright"
+
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "Pøevádí MIDI na zdrojový text pro LilyPond."
+
+#, fuzzy
+#~ msgid "example"
+#~ msgstr "Pøíklad:"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "Nahrávám implicitní font"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "nelze nalézt implicitní font: `%s'"
+
+#, fuzzy
+#~ msgid "crescendo too small"
+#~ msgstr "Text_spanner je pøíli¹ malý"
+
+#~ msgid "print this help"
+#~ msgstr "tato nápovìda"
+
+#~ msgid "silly pitch"
+#~ msgstr "podivná vý¹ka"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "nelze otevøít soubor: `%s'"
+
+#, fuzzy
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Nesprávná verze lilypondu: %s (%s, %s)"
+
 #~ msgid "no one to print a tremolos"
 #~ msgstr "není nikdo, kdo by tiskl tremola"
 
@@ -2237,7 +2313,7 @@ msgstr "Spu
 #~ msgid "no one to print a repeat brace"
 #~ msgstr "není nikdo, kdo by tiskl repetièní svorku"
 
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "nelze nalézt kontext `%s'"
 
 #~ msgid "Optimal demerits: %f"
@@ -2272,7 +2348,7 @@ msgstr "Spu
 #~ msgstr ""
 #~ "%s: TFM soubor má %u parametrù, co¾ je více ne¾ %u, které lze obslou¾it"
 
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "nelze nalézt ascii znak: %d"
 
 #~ msgid "no one to print a tuplet start bracket"
@@ -2291,12 +2367,9 @@ msgstr "Spu
 #~ msgstr "Více alternativ ne¾ opakování. Zahazuji nadbyteèné alternativy."
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "nelze nalézt kontext `%s'"
 
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR"
-
 #~ msgid "(ignored)"
 #~ msgstr "(ignorováno)"
 
@@ -2325,12 +2398,6 @@ msgstr "Spu
 #~ msgid "command exited with value %d"
 #~ msgstr "pøíkaz skonèil s návratovou hodnotou %d"
 
-#~ msgid "Example:"
-#~ msgstr "Pøíklad:"
-
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "Pøevede soubor mup na zdrojový text LilyPondu."
-
 #~ msgid "debug"
 #~ msgstr "debug"
 
@@ -2354,7 +2421,7 @@ msgstr "Spu
 #~ msgstr "Zapisuji `%s'..."
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "nelze otevøít soubor: `%s'"
 
 #, fuzzy
@@ -2385,7 +2452,7 @@ msgstr "Spu
 #~ msgstr "nelze vytvoøit adresáø: `%s'"
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "Nevím, jak zpracovat procentové opakování této délky."
 
 #~ msgid "lilypond -e EXPR means:"
@@ -2451,7 +2518,7 @@ msgstr "Spu
 #~ msgstr "nepøíli¹ záva¾ná chyba: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "nelze nalézt font: `%s'"
 
 #, fuzzy
@@ -2494,7 +2561,7 @@ msgstr "Spu
 #~ msgid "Programming error: "
 #~ msgstr "chyba programrátora: %s (Pokraèuji: dr¾te mi palce)\n"
 
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "Nelze pøepnout pøekladaèe. Ji¾ jsem tam."
 
 #, fuzzy
@@ -2523,11 +2590,11 @@ msgstr "Spu
 #~ msgstr "FIXME: slouèení zmìn tóniny"
 
 #, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
+#~ msgid "kpathsea cannot find %s file: `%s'"
 #~ msgstr "Kpathsea nemù¾e nalézt TFM soubor `%s'"
 
 #, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
+#~ msgid "kpathsea cannot find file: `%s'"
 #~ msgstr "Kpathsea nemù¾e nalézt TFM soubor `%s'"
 
 #, fuzzy
@@ -2558,10 +2625,6 @@ msgstr "Spu
 #~ msgid "kpathsea can not find TFM file: `%s'"
 #~ msgstr "Kpathsea nemù¾e nalézt TFM soubor `%s'"
 
-#, fuzzy
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "Nelze pøepnout pøekladaèe. Ji¾ jsem tam."
-
 #, fuzzy
 #~ msgid "Converting to `~a.ps'..."
 #~ msgstr "Zapisuji `%s'..."
@@ -2580,7 +2643,7 @@ msgstr "Spu
 #~ msgid "keep all output, output to directory %s.dir"
 #~ msgstr "ponechává ve¹keré výstupy, výstupní adresáø pojmenuje %s.dir"
 
-#~ msgid "don't run LilyPond"
+#~ msgid "do not run LilyPond"
 #~ msgstr "nespou¹tí LilyPond"
 
 #~ msgid "produce MIDI output only"
@@ -2640,7 +2703,7 @@ msgstr "Spu
 #~ msgstr "výstup %s se zapisuje do `%s'..."
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "nelze nalézt soubor: `%s'"
 
 #, fuzzy
@@ -2656,7 +2719,7 @@ msgstr "Spu
 #~ msgstr "pøidává ADRESÁØ do závislostí"
 
 #, fuzzy
-#~ msgid "don't run lilypond"
+#~ msgid "do not run lilypond"
 #~ msgstr "nespou¹tí LilyPond"
 
 #~ msgid "write Makefile dependencies for every input file"
@@ -2795,7 +2858,7 @@ msgstr "Spu
 #~ msgid "from musical definition: %s"
 #~ msgstr "z hudební definice: %s"
 
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "nelze nalézt zaèátek frázovacího legata"
 
 #, fuzzy
@@ -2923,5 +2986,5 @@ msgstr "Spu
 #~ msgid "Slur over rest?"
 #~ msgstr "Ligaturu pøes pomlku?"
 
-#~ msgid "Can't specify direction for this request"
+#~ msgid "Cannot specify direction for this request"
 #~ msgstr "Nelze urèit smìr pro tento po¾adavek"
index 67e0903b99b09e5204bef4bed841d2fde4d6ce76..81fc38df62692d2287744180fa0820c236d9790f 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 1.6.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: 2002-09-07 21:00+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2006-12-23 16:14+0100\n"
 "Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
 "Language-Team: Danish <dansk@klid.dk>\n"
 "MIME-Version: 1.0\n"
@@ -72,146 +72,157 @@ msgid "Running %s..."
 msgstr "Kør %s..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "advarsel: %s\n"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Brug: %s [FLAG]... FIL"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "skriv uddata til FIL"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr ""
+"Rapportér programfejl til %s\n"
+".Rapportér fejl i oversættelsen til <dansk@klid.dk>."
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Eksempel:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "advarsel: %s\n"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "fejl: %s\n"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "Behandler \"%s\"..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "kan ikke åbne fil: \"%s\""
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "kan ikke finde standardskrifttype: \"%s\""
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Brug: %s [FLAG]... FIL"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "skriv uddata til FIL"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "FIL"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "vis garanti og copyright"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, fuzzy, python-format
 msgid "Exiting (%d)..."
 msgstr "Afslutter... "
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright © %s af"
@@ -226,7 +237,8 @@ msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr ""
 
 #: lilypond-book.py:135
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 
 #: lilypond-book.py:138
@@ -234,6 +246,10 @@ msgstr ""
 msgid "add DIR to include path"
 msgstr "tilføj KATALOG til søgestien"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "KATALOG"
+
 #: lilypond-book.py:143
 #, fuzzy
 msgid "write output to DIR"
@@ -247,152 +263,152 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
 # Førklaring til --verbose (borde være længre)
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "vær udførlig"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "vis garanti og copyright"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, fuzzy, python-format
 msgid "file not found: %s"
 msgstr "Symbol ikke fundet, "
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "Renser \"%s\"..."
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr ""
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 #, fuzzy
 msgid "Writing snippets..."
 msgstr "Skriver \"%s\"..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 #, fuzzy
 msgid "Processing..."
 msgstr "Behandler..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 #, fuzzy
 msgid "All snippets are up to date..."
 msgstr "slap af, %s er seneste version"
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "kan ikke finde standardskrifttype: \"%s\""
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, fuzzy, python-format
 msgid "%s is up to date."
 msgstr "slap af, %s er seneste version"
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Skriver \"%s\"..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
 # hær er det spørg om rensning af en temporærkatalog
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, fuzzy, python-format
 msgid "Reading %s..."
 msgstr "Renser %s..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 #, fuzzy
 msgid "Dissecting..."
 msgstr "Lister \"%s\"..."
 
 # hær er det spørg om rensning af en temporærkatalog
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, fuzzy, python-format
 msgid "Compiling %s..."
 msgstr "Renser %s..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "Behandler \"%s\"..."
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "Starter \"%s\""
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "kan ikke oprette katalog: \"%s\""
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "advarsel: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "fejl: "
 
@@ -407,9 +423,10 @@ msgstr "Afslutter... "
 msgid "%s output to `%s'..."
 msgstr "%s udskrevet til \"%s\"..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
-msgstr "Konvertér MIDI til LilyPond-klide."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "Konvertér mup til LilyPond-kilde."
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -454,34 +471,59 @@ msgstr ""
 
 #: midi2ly.py:905
 #, fuzzy
-msgid "example"
+msgid "Examples"
 msgstr "Eksempel:"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "ingen filer angivne på kommandolinjen."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Dette er frit programmel. Det dækkes af \"GNU General Public License\",\n"
+"og du må ændre og/eller distribuere kopier af det under visse\n"
+"betingelser. Kør \"%s --warranty\" for mere information.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "skriv uddata til FIL"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "flag \"%s\" kræver et argument"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "flag.gan \"%s\" tillader intet argument"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "ukendt flag: \"%s\""
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "ugyldigt argument \"%s\" til flag \"%s\""
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, fuzzy, c-format
 msgid "programming error: %s"
 msgstr "programmeringsfejl: "
@@ -490,86 +532,75 @@ msgstr "programmeringsfejl: "
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr ""
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr ""
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "kan ikke finde skrifttype: \"%s\""
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "Indlæser standardskrifttype"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "kan ikke finde standardskrifttype: \"%s\""
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(søgesti: \"%s\")"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Giver op"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "kan ikke ændre \"%s\" til \"%s\""
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -583,19 +614,20 @@ msgstr "har allerede en bj
 msgid "unterminated beam"
 msgstr "uafsluttet bjælke"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "nodehals skal have en rytmisk struktur"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "nodehalsen passer ikke i bjælke"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "bjælken startede her"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "Ingen mulig linjebrydning fandtes"
@@ -605,24 +637,24 @@ msgstr "Ingen mulig linjebrydning fandtes"
 msgid "removing beam with no stems"
 msgstr "bjælke har mindre end to synlige nodehalse"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Ingen mellemrums-indgang fra %s til `%s'"
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "kan ikke ændre \"%s\" til \"%s\""
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "kan ikke finde omgivelsen \"%s\""
 
 #. We could change the current translator's id, but that would make
@@ -654,7 +686,7 @@ msgstr "ikke-afsluttet akkordtremolo"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr ""
@@ -668,7 +700,7 @@ msgstr "ukendt overs
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
@@ -676,26 +708,26 @@ msgstr ""
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
 #, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "kunne ikke finde nogen skrifttype som opfylder "
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, fuzzy, c-format
 msgid "program has no such type: `%s'"
 msgstr "Programmet har ingen sådan type"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "kan ikke finde eller oprette: \"%s\""
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "kan ikke finde eller oprette \"%s\" kaldet \"%s\""
 
 #: context.cc:276
@@ -705,7 +737,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "kan ikke finde eller oprette: \"%s\""
 
 #: custos.cc:77
@@ -713,17 +745,22 @@ msgstr "kan ikke finde eller oprette: \"%s\""
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "ukendt oversætter: \"%s\""
 
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "Symbol ikke fundet, "
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "kan ikke finde starten på crescendo/diminuendo"
 
 #: dynamic-engraver.cc:195
@@ -743,11 +780,7 @@ msgstr "Cresc startede her"
 msgid "unterminated (de)crescendo"
 msgstr "uafsluttet crescendo/diminuendo"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "uafsluttet udvider"
 
@@ -770,15 +803,15 @@ msgstr "kan ikke oprette katalog: \"%s\""
 msgid "adding font directory: %s"
 msgstr "kan ikke oprette katalog: \"%s\""
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "uafsluttet legatobue"
@@ -811,45 +844,37 @@ msgstr ""
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "kan ikke finde start på legatobue"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "ukendt oversætter: \"%s\""
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "diminuendo for lille"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "crescendo for lille"
-
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
 msgstr ""
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "Konfliktende tonartssignaturer fundet."
@@ -868,96 +893,101 @@ msgstr "uafsluttet bindestreg"
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "kan ikke finde fil: \"%s\""
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(søgesti: \"%s\")"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "ukendt position"
 
-#: ligature-engraver.cc:95
+#: ligature-engraver.cc:93
 #, fuzzy
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "kan ikke finde start på legatobue"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "Ingen højrekant"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 #, fuzzy
 msgid "already have a ligature"
 msgstr "har allerede en bjælke"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "Ingen venstrekant"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 #, fuzzy
 msgid "unterminated ligature"
 msgstr "uafsluttet legatobue"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr ""
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 #, fuzzy
 msgid "ligature was started here"
 msgstr "bjælken startede her"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(indlæsningssøgesti: \"%s\")"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, fuzzy, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Kan ikke finde typetjek for egenskab af '%s' (%s)."
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 #, fuzzy
 msgid "perhaps a typing error?"
 msgstr "Måske lavede du en tastefejl?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 #, fuzzy
 msgid "doing assignment anyway"
 msgstr "Laver tildeling aligevel."
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, fuzzy, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 "Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Identificerernavn er et nøgleord: \"%s\""
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "fejl ved filslutning: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "kan ikke finde tegn som hedder: \"%s\""
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "kan ikke oprette katalog: \"%s\""
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "kan ikke finde fil: \"%s\""
 
 #: lily-parser-scheme.cc:125
@@ -965,21 +995,21 @@ msgstr "kan ikke finde fil: \"%s\""
 msgid "Processing `%s'"
 msgstr "Behandler \"%s\"..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Tolker..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "Klammer passer ikke"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "kan ikke finde fil: \"%s\""
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -991,7 +1021,7 @@ msgstr ""
 "og du må ændre og/eller distribuere kopier af det under visse\n"
 "betingelser. Kør \"%s --warranty\" for mere information.\n"
 
-#: main.cc:123
+#: main.cc:122
 #, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
@@ -1003,7 +1033,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1021,134 +1051,133 @@ msgstr ""
 "dette program. Hvis ikke, skriv til Free Software Foundation, Inc., 59\n"
 "Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
+#: main.cc:155
 #, fuzzy
-msgid "SYM=VAL"
+msgid "SYM[=VAL]"
 msgstr "NØGLE=VÆRDI"
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "UDTR"
 
-#: main.cc:160
+#: main.cc:159
 #, fuzzy
 msgid "evaluate scheme code"
 msgstr "Kan ikke evaluere Scheme i sikker tilstand"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 #, fuzzy
 msgid "generate DVI (tex backend only)"
 msgstr "lav PDF-uddata"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 #, fuzzy
 msgid "generate PDF (default)"
 msgstr "lav PDF-uddata"
 
-#: main.cc:167
+#: main.cc:165
 #, fuzzy
 msgid "generate PNG"
 msgstr "lav PDF-uddata"
 
-#: main.cc:168
+#: main.cc:166
 #, fuzzy
 msgid "generate PostScript"
 msgstr "lav PostScript-uddata"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-# forklaring af flag -h
-#: main.cc:170
-msgid "print this help"
-msgstr "denne hjælp"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "FELT"
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "skriv rubrikfelt til BASENAVN.FELT"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "KATALOG"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "tilføj KATALOG til søgestien"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "brug FIL som init-fil"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "lav PostScript-uddata"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "skriv uddata til FIL"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr ""
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "vis versionsnummer"
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1156,81 +1185,81 @@ msgid ""
 msgstr "Copyright © %s af"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, fuzzy, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Brug: %s [FLAG]... FIL..."
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Typesæt musik og/eller afspil MIDI fra FIL."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Flag:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr ""
 "Rapportér programfejl til %s\n"
 ".Rapportér fejl i oversættelsen til <dansk@klid.dk>."
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "indstillingen findes ikke: '%s'"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "omgivelse findes ikke: %s"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "kan ikke ændre \"%s\" til \"%s\""
 
-#: main.cc:349
+#: main.cc:350
 #, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "kan ikke oprette katalog: \"%s\""
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "kan ikke ændre \"%s\" til \"%s\""
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "kan ikke ændre \"%s\" til \"%s\""
 
-#: main.cc:368
+#: main.cc:369
 #, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "kan ikke oprette katalog: \"%s\""
 
 #: main.cc:415
@@ -1238,7 +1267,7 @@ msgstr "kan ikke oprette katalog: \"%s\""
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1252,37 +1281,37 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1290,7 +1319,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr ""
 
@@ -1307,116 +1336,119 @@ msgstr ""
 msgid "no such MIDI instrument: `%s'"
 msgstr "instrumentet findes ikke: \"%s\""
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "tåbelig tone"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "kan ikke åbne fil: \"%s\""
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "kan ikke åbne fil: \"%s\""
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "Transponering med %s medfører løst fortegn større end to"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "For mange overlappende nodekolonner. Ignorerer dem."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr ""
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "kan ikke åbne fil: \"%s\""
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "kan ikke finde skrifttype: \"%s\""
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 #, fuzzy
 msgid "Drawing systems..."
 msgstr "Laver stemmer..."
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "ikke en PostScript fil: '%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1455,15 +1487,15 @@ msgstr "uafsluttet udvider"
 msgid "Track..."
 msgstr "Spor... "
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI-uddata til \"%s\"..."
@@ -1472,23 +1504,23 @@ msgstr "MIDI-uddata til \"%s\"..."
 msgid "unterminated phrasing slur"
 msgstr "uafsluttet fraseringsbue"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "kan ikke finde start på pianopedal: \"%s\""
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "kan ikke finde start på pianopedal: \"%s\""
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "instrumentet findes ikke: \"%s\""
@@ -1498,109 +1530,108 @@ msgstr "instrumentet findes ikke: \"%s\""
 msgid "not a grob name, `%s'"
 msgstr ""
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "kan ikke oprette katalog: \"%s\""
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "omgivelse findes ikke: %s"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "omgivelse findes ikke: %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
-#, fuzzy, c-format
-msgid "Relocation file %s\n"
-msgstr "kan ikke åbne fil: \"%s\""
-
-#: relocate.cc:358
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "can't open file %s"
+msgid "Relocation file: %s"
 msgstr "kan ikke åbne fil: \"%s\""
 
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "for mange kolliderende pauser"
 
-#: rest.cc:143
+#: rest.cc:144
 #, fuzzy, c-format
 msgid "rest `%s' not found"
 msgstr "Symbol ikke fundet, "
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "kan ikke finde: '%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr ""
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(søgesti: \"%s\")"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "Behøver musik i partitur"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 #, fuzzy
 msgid "errors found, ignoring music expression"
 msgstr "Fejl fundne/*, behandler ikke partitur*/"
@@ -1608,7 +1639,7 @@ msgstr "Fejl fundne/*, behandler ikke partitur*/"
 #. FIXME:
 #: script-engraver.cc:102
 #, fuzzy
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "Kan ikke tolke artikulering \"%s\""
 
 #: script-engraver.cc:103
@@ -1621,17 +1652,18 @@ msgstr "Scheme-flag:"
 msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "uafsluttet legatobue"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "kan ikke finde start på legatobue"
 
 #: source-file.cc:74
@@ -1643,58 +1675,58 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "Tilføjer nodehoved til inkompatibel nodehals (type = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "Mærkelig nodehalsstørrelse; tjek for smalle bjælker"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Elementantal %d."
 
-#: system.cc:270
+#: system.cc:276
 #, fuzzy, c-format
 msgid "Grob count %d"
 msgstr "Elementantal %d "
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "kan ikke finde start på tekstbro"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "har allerede en tekstbro"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "uafsluttet tekstbro"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "ensom bindebue"
 
@@ -1703,14 +1735,14 @@ msgstr "ensom bindebue"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1720,43 +1752,39 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr "ukendt oversætter: \"%s\""
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "kan ikke finde: \"%s\""
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "kan ikke finde start på tekstbro"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "har allerede en tekstbro"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1774,275 +1802,286 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "kan ikke finde start på tekstbro"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 #, fuzzy
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "Har allerede en volte-bro. Stopper denne for tidligt."
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "har allerede en tekstbro"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "Giver op"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 #, fuzzy
 msgid "second argument must be pitch list"
 msgstr "Andet argument skal være et symbol"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "Skal være i teksttilstand (Lyric mode) for tekst"
 
-#: parser.yy:1612
+#: parser.yy:1604
 #, fuzzy
 msgid "expecting string as script definition"
 msgstr "Forventer streng som skriptdefinition"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "ikke en tidslængde: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "Skal være i nodetilstand (Note mode) for noder"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "Skal være i akkordtilstand (Chord mode) for akkord"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Renser \"%s\"..."
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "filslutning fundet inden i en kommentar"
 
-#: lexer.ll:290
+#: lexer.ll:288
 #, fuzzy
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput forbudt udenfor init-filer"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "fejlagtig eller udefineret identificerer: \"%s\""
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 #, fuzzy
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 #, fuzzy
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Krølleparentes fundet i slutning af tekst. Glemte du et mellemrum?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "ugyldigt tegn: \"%c\""
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "ukendt \"escaped\" streng: \"\\%s\""
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "fejlagtig lilypond-version: %s (%s, %s)"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
+#: lexer.ll:881 lexer.ll:882
 #, fuzzy
-msgid "Consider updating the input with the convert-ly script"
+msgid "consider updating the input with the convert-ly script"
 msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\""
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, fuzzy, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Starter \"%s\""
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr ""
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Skriver \"%s\"..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "Skriver \"%s\"..."
 
-#: backend-library.scm:156
-#, fuzzy, lisp-format
+#: backend-library.scm:145
+#, fuzzy, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "skriver rubrikfelt \"%s\" til \"%s\"..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "ikke en tidslængde: %d"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "kan ikke finde omgivelsen \"%s\""
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "ukendt oversætter: \"%s\""
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "kan ikke finde tegnnummer: %d"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "ukendt oversætter: \"%s\""
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "Behandler..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "Skriver \"%s\"..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "kan ikke finde tegnnummer: %d"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "Skriver \"%s\"..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Kan ikke tolke artikulering \"%s\""
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2051,57 +2090,57 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "filnavn bør ikke indeholde mellemrum: '%s'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "Beregner kolonnepositioner..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "ukendt oversætter: \"%s\""
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "kan ikke finde: \"%s\""
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
 # hær er det spørg om skrivning til en fil
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "afhængigheder udskrevet til \"%s\"..."
 
@@ -2109,50 +2148,50 @@ msgstr "afh
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
+#: music-functions.scm:213
 #, fuzzy
-msgid "More alternatives than repeats. Junking excess alternatives"
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer."
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, fuzzy, lisp-format
+#: music-functions.scm:538
+#, fuzzy, scheme-format
 msgid "music expected: ~S"
 msgstr "forventede mellemrum"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "kan ikke finde skrifttype: \"%s\""
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "ukendt oversætter: \"%s\""
 
@@ -2161,42 +2200,42 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "kan ikke finde start på bjælke"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "ukendt oversætter: \"%s\""
 
@@ -2204,15 +2243,52 @@ msgstr "ukendt overs
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, fuzzy, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "kommandoen afsluttede med værdi %d"
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "vis garanti og copyright"
+
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "Konvertér MIDI til LilyPond-klide."
+
+#, fuzzy
+#~ msgid "example"
+#~ msgstr "Eksempel:"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "Indlæser standardskrifttype"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "kan ikke finde standardskrifttype: \"%s\""
+
+#~ msgid "crescendo too small"
+#~ msgstr "crescendo for lille"
+
+# forklaring af flag -h
+#~ msgid "print this help"
+#~ msgstr "denne hjælp"
+
+#~ msgid "silly pitch"
+#~ msgstr "tåbelig tone"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "kan ikke åbne fil: \"%s\""
+
+#, fuzzy
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "fejlagtig lilypond-version: %s (%s, %s)"
+
 #~ msgid "no one to print a tremolos"
 #~ msgstr "der er ingen som kan skrive en tremolo"
 
@@ -2223,7 +2299,7 @@ msgstr ""
 #~ msgid "no one to print a repeat brace"
 #~ msgstr "der er ingen som kan skrive et gentagelsestegn"
 
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "kan ikke finde omgivelsen \"%s\""
 
 #, fuzzy
@@ -2251,7 +2327,7 @@ msgstr ""
 #~ msgstr ""
 #~ "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere"
 
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "kan ikke finde ASCII-tegn: %d"
 
 #~ msgid "no one to print a tuplet start bracket"
@@ -2271,12 +2347,9 @@ msgstr ""
 #~ "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer."
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "kan ikke finde omgivelsen \"%s\""
 
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Brug: %s [FLAG]... FIL"
-
 #, fuzzy
 #~ msgid "Opening pipe `%s'"
 #~ msgstr "Renser \"%s\"..."
@@ -2306,12 +2379,6 @@ msgstr ""
 #~ msgid "command exited with value %d"
 #~ msgstr "kommandoen afsluttede med værdi %d"
 
-#~ msgid "Example:"
-#~ msgstr "Eksempel:"
-
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "Konvertér mup til LilyPond-kilde."
-
 #~ msgid "debug"
 #~ msgstr "fejlsøgningsuddata"
 
@@ -2332,7 +2399,7 @@ msgstr ""
 #~ msgstr "Skriver \"%s\"..."
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "kan ikke åbne fil: \"%s\""
 
 #, fuzzy
@@ -2363,7 +2430,7 @@ msgstr ""
 #~ msgstr "kan ikke oprette katalog: \"%s\""
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr ""
 #~ "Véd ikke hvordan en procenttegnsgentagelse (percent) af denne længde skal "
 #~ "håndteres."
@@ -2415,7 +2482,7 @@ msgstr ""
 #~ msgstr "ikke-fatal fejl: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "kan ikke finde skrifttype: \"%s\""
 
 #, fuzzy
@@ -2454,9 +2521,6 @@ msgstr ""
 #~ msgid "Programming error: "
 #~ msgstr "programmeringsfejl: "
 
-#~ msgid "Can't switch translators, I'm there already"
-#~ msgstr "Kan ikke skifte oversætter, jeg er her allerede"
-
 #~ msgid "I'm one myself"
 #~ msgstr "Jeg er selv én"
 
@@ -2479,11 +2543,11 @@ msgstr ""
 #~ msgstr "FIX: tonartsskiftsfletning"
 
 #, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
+#~ msgid "kpathsea cannot find %s file: `%s'"
 #~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
 
 #, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
+#~ msgid "kpathsea cannot find file: `%s'"
 #~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
 
 #, fuzzy
@@ -2514,10 +2578,6 @@ msgstr ""
 #~ msgid "kpathsea can not find TFM file: `%s'"
 #~ msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\""
 
-#, fuzzy
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "Kan ikke skifte oversætter, jeg er her allerede"
-
 #, fuzzy
 #~ msgid "Converting to `~a.ps'..."
 #~ msgstr "Skriver \"%s\"..."
@@ -2532,7 +2592,7 @@ msgstr ""
 #~ msgid "keep all output, output to directory %s.dir"
 #~ msgstr "behold al uddata, udskrivo i kataloget %s.dir"
 
-#~ msgid "don't run LilyPond"
+#~ msgid "do not run LilyPond"
 #~ msgstr "kør ikke LilyPond"
 
 #~ msgid "produce MIDI output only"
@@ -2577,7 +2637,7 @@ msgstr ""
 #~ msgstr "%s udskrevet til \"%s\"..."
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "kan ikke finde fil: \"%s\""
 
 #, fuzzy
@@ -2593,7 +2653,7 @@ msgstr ""
 #~ msgstr "tilføj KATALOG efter afhængigheder"
 
 #, fuzzy
-#~ msgid "don't run lilypond"
+#~ msgid "do not run lilypond"
 #~ msgstr "kør ikke LilyPond"
 
 #~ msgid "write Makefile dependencies for every input file"
@@ -2687,7 +2747,7 @@ msgstr ""
 #~ msgid "from musical definition: %s"
 #~ msgstr "fra musikdefinition: %s"
 
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "kan ikke finde start på fraseringsbue"
 
 #~ msgid "unbound spanner `%s'"
@@ -2785,7 +2845,7 @@ msgstr ""
 #~ msgid "Text_spanner too small"
 #~ msgstr "Tekst_bro for lille"
 
-#~ msgid "Can't specify direction for this request"
+#~ msgid "Cannot specify direction for this request"
 #~ msgstr "Kan ikke angive retning for denne forespørgsel"
 
 #~ msgid "Generate .dvi with LaTeX for LilyPond"
@@ -2799,7 +2859,7 @@ msgstr ""
 #~ msgstr "EOF i en streng"
 
 # det handlar om mmap hær
-#~ msgid "can't map file"
+#~ msgid "cannot map file"
 #~ msgstr "kan ikke lave \"mmap\" på filen"
 
 #~ msgid "<stdin>"
@@ -2852,7 +2912,7 @@ msgstr ""
 #~ msgstr "for mange noder for pausesammenstød"
 
 #~ msgid ""
-#~ "Can't find property type-check for `%s'.  Perhaps you made a typing "
+#~ "Cannot find property type-check for `%s'.  Perhaps you made a typing "
 #~ "error? Doing assignment anyway."
 #~ msgstr ""
 #~ "Kan ikke finde egenskabstypekontrol for \"%s\". Måske har du lavet en "
@@ -2911,25 +2971,25 @@ msgstr ""
 #~ msgid "enable debugging output"
 #~ msgstr "aktivér fejlsøgningsuddata"
 
-#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
+#~ msgid "do not output tuplets, double dots or rests, smallest is 32"
 #~ msgstr "udskriv ikke tupler, dobbeltpunktninger eller pauser, mindste er 32"
 
 #~ msgid "set FILE as default output"
 #~ msgstr "sæt FIL som standarduddata"
 
-#~ msgid "don't output tuplets"
+#~ msgid "do not output tuplets"
 #~ msgstr "udskriv ikke tupler"
 
 #~ msgid "be quiet"
 #~ msgstr "vær stille"
 
-#~ msgid "don't output rests or skips"
+#~ msgid "do not output rests or skips"
 #~ msgstr "udskriv ikke pauser eller hop"
 
 #~ msgid "set smallest duration"
 #~ msgstr "indstil mindste længde"
 
-#~ msgid "don't timestamp the output"
+#~ msgid "do not timestamp the output"
 #~ msgstr "tidsstempl ikke uddata"
 
 #~ msgid "assume no double dotted notes"
@@ -2971,7 +3031,7 @@ msgstr ""
 #~ msgid "invalid number of tracks"
 #~ msgstr "ugyldigt antal spor"
 
-#~ msgid "can't handle non-metrical time"
+#~ msgid "cannot handle non-metrical time"
 #~ msgstr "kan ikke håndtere ikke-metrisk tid"
 
 #~ msgid "Junking note-end event: channel = %d, pitch = %d"
index 03aaa5d665b6af3d43718a4d6b9e38116cd4f42b..0b8c20f511a18c20e7249542d217856530de2549 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.9.26\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-03-20 12:53+0100\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2006-10-26 08:39+0200\n"
 "Last-Translator: Roland Stigge <stigge@antcom.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -16,96 +16,104 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: convertrules.py:9
+#: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s"
 msgstr "%s kann nicht umgewandelt werden"
 
-#: convertrules.py:10
+#: convertrules.py:13
 msgid "Please refer to the manual for details, and update manually."
 msgstr "Für Details Benutzerhandbuch lesen und manuell aktualisieren."
 
-#: convertrules.py:11
+#: convertrules.py:14
 #, python-format
 msgid "%s has been replaced by %s"
 msgstr "%s wurde durch %s ersetzt"
 
-#: convertrules.py:2395
+#: convertrules.py:2398
 msgid "LilyPond source must be UTF-8"
 msgstr "LilyPond-Quelle muss UTF-8 sein"
 
-#: convertrules.py:2398
+#: convertrules.py:2401
 msgid "Try the texstrings backend"
 msgstr "Das texstrings-Backend probieren"
 
-#: convertrules.py:2401
+#: convertrules.py:2404
 #, python-format
 msgid "Do something like: %s"
 msgstr "Folgendes versuchen: %s"
 
-#: convertrules.py:2404
+#: convertrules.py:2407
 msgid "Or save as UTF-8 in your editor"
 msgstr "Oder als UTF-8 im Editor sichern"
 
-#: fontextract.py:25
+#: fontextract.py:26
 #, python-format
 msgid "Scanning %s"
 msgstr "Warnung: %s"
 
-#: fontextract.py:70
+#: fontextract.py:71
 #, python-format
 msgid "Extracted %s"
 msgstr "%s ausgepackt"
 
-#: fontextract.py:85
+#: fontextract.py:86
 #, python-format
 msgid "Writing fonts to %s"
 msgstr "Schreiben der Schriftarten nach %s"
 
-#: lilylib.py:82
+#: lilylib.py:85 lilylib.py:136
 #, python-format
 msgid "Invoking `%s'"
 msgstr "`%s' wird aufgerufen"
 
-#: lilylib.py:84
+#: lilylib.py:87 lilylib.py:138
 #, python-format
 msgid "Running %s..."
 msgstr "%s wird ausgeführt..."
 
-#: lilylib.py:165
-#, python-format
-msgid "Usage: %s\n"
+#: lilylib.py:203
+#, fuzzy, python-format
+msgid "Usage: %s"
 msgstr "Aufruf: %s\n"
 
-#: abc2ly.py:1357
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Aufruf: %s [OPTIONEN]... DATEI"
+
+#: abc2ly.py:1351
+#, fuzzy, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 "Dieses Programm wandelt ABC-Musikdateien in LilyPond-Eingabe um\n"
 "(siehe auch http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt)."
 
-#: abc2ly.py:1360
-msgid "set output filename to FILE"
-msgstr "Ausgabedateiname auf DATEI setzen"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
+msgstr "Ausgabe in DATEI schreiben"
 
-#: abc2ly.py:1362
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr "bzgl. Erfolg streng sein"
 
-#: abc2ly.py:1364
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr "ABC's Prinzip der Balken beibehalten"
 
-#: convert-ly.py:49
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "Melden Sie Fehler an %s"
+
+#: convert-ly.py:41
+#, fuzzy
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 "LilyPond auf neuere Version bringen. Standardmäßig wird von der Version vom\n"
 "Kommando \\version zur aktuellen LilyPond-Version gegangen.\n"
@@ -115,403 +123,447 @@ msgstr ""
 "  convert-ly -e old.ly\n"
 "  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
 
-#: convert-ly.py:67 lilypond-book.py:115 warn.cc:48 input.cc:81
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Beispiel:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "Warnung: %s"
 
-#: convert-ly.py:70 lilypond-book.py:118 warn.cc:54 input.cc:87 input.cc:95
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr "Fehler: %s"
 
-#: convert-ly.py:86 etf2ly.py:1200 lilypond-book.py:138 midi2ly.py:114
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Vertrieben unter den Bedingungen der GNU General Public License."
 
-#: convert-ly.py:87 etf2ly.py:1201 lilypond-book.py:139 midi2ly.py:115
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "Es wird OHNE GARANTIE ausgeliefert."
 
-#: convert-ly.py:98 convert-ly.py:118
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr "VERSION"
 
-#: convert-ly.py:100
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "bei VERSION anfangen [Standard: \\version in Datei gefunden]"
 
-#: convert-ly.py:103
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr "vor Ort ändern"
 
-#: convert-ly.py:106
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr "kein Kommando \\version hinzufügen, falls es fehlt"
 
-#: convert-ly.py:112
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+#, fuzzy
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr "Regeln ausdrucken [Standard: --from=0, --to=@TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:117
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr "zu VERSION konvertieren [Standard: @TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:164
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr "Anwenden der Umwandlung: "
 
-#: convert-ly.py:176
-msgid "error while converting"
+#: convert-ly.py:166
+#, fuzzy
+msgid "Error while converting"
 msgstr "Fehler beim Umwandeln"
 
-#: convert-ly.py:178 score-engraver.cc:73
-msgid "Aborting"
-msgstr "Abbruch"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr ""
 
-#: convert-ly.py:202
+#: convert-ly.py:190
 #, python-format
 msgid "Processing `%s'... "
 msgstr "»%s« wird verarbeitet..."
 
-#: convert-ly.py:289 source-file.cc:56
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "Kann Datei nicht öffnen: `%s'"
 
-#: convert-ly.py:296
-#, python-format
-msgid "can't determine version for `%s'. Skipping"
+#: convert-ly.py:284
+#, fuzzy, python-format
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "Version für »%s« kann nicht erkannt werden. Wird übersprungen"
 
-#: etf2ly.py:1208
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Aufruf: %s [OPTIONEN]... DATEI"
+
+#: etf2ly.py:1198
+#, fuzzy
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 "Enigma Transport-Format ist ein von Coda Music Technology's Finale\n"
 "verwendetes Format. Dieses Programm wird eine Teilmenge von ETF in\n"
 "eine von Lilypond-verwendbare Datei umwandeln."
 
-#: etf2ly.py:1211 midi2ly.py:901
-msgid "write output to FILE"
-msgstr "Ausgabe in DATEI schreiben"
-
-#: etf2ly.py:1212 midi2ly.py:902 main.cc:172 main.cc:178
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "DATEI"
 
-#: etf2ly.py:1214 midi2ly.py:915
-msgid "show warranty"
-msgstr "Gewährleistung anzeigen"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
+msgstr "Informationen zu Gewährleistung und Copyright anzeigen"
 
-#: lilypond-book.py:88
+#: lilypond-book.py:71
+#, fuzzy
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-"   lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "LilyPond-Teile in Mischdatei (HTML, LaTeX oder texinfo) verarbeiten"
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
-"LilyPond-Auszüge in gemischtem HTML-, LaTeX- oder texinfo-Dokument verarbeiten.\n"
-"\n"
-"Beispiel-Aufrufe:\n"
-"\n"
-"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BUCH\n"
-"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BUCH\n"
-"   lilypond-book --process='lilypond -I include' BUCH\n"
 
-#: lilypond-book.py:104
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Beenden (%d)..."
 
-#: lilypond-book.py:136
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s bei"
 
-#: lilypond-book.py:147
+#: lilypond-book.py:129
 msgid "FILTER"
 msgstr "FILTER"
 
-#: lilypond-book.py:150
+#: lilypond-book.py:132
 msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr "Auszüge durch FILTER [convert-ly -n -] leiten (Pipe)"
 
-#: lilypond-book.py:152
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
-msgstr "Ausgabeformat FORMAT (texi [Vorgabe], texi-html, latex, html) verwenden"
+#: lilypond-book.py:135
+#, fuzzy
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr ""
+"Ausgabeformat FORMAT (texi [Vorgabe], texi-html, latex, html) verwenden"
 
-#: lilypond-book.py:154
+#: lilypond-book.py:138
 msgid "add DIR to include path"
 msgstr "VERZ zum Einfügepfad hinzufügen"
 
-#: lilypond-book.py:159
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "VERZ"
+
+#: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr "Ausgabe in DATEI schreiben"
 
-#: lilypond-book.py:162
+#: lilypond-book.py:147
 msgid "COMMAND"
 msgstr "BEFEHL"
 
-#: lilypond-book.py:163
+#: lilypond-book.py:148
 msgid "process ly_files using COMMAND FILE..."
 msgstr "ly_files mit BEFEHL DATEI... verarbeiten"
 
-#: lilypond-book.py:168
-msgid "extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with dvips -h INPUT.psfonts"
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
+#, fuzzy
+msgid ""
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
-"alle PostScript-Schriftarten für LaTeX entnehmen und in EINGABE.psfonts schreiben.\n"
+"alle PostScript-Schriftarten für LaTeX entnehmen und in EINGABE.psfonts "
+"schreiben.\n"
 "Dies muss mit dvips -h EINGABE.psfonts verwendet werden"
 
-#: lilypond-book.py:171 midi2ly.py:912 main.cc:182
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "wortreich sein"
 
-#: lilypond-book.py:177 main.cc:183
-msgid "show warranty and copyright"
-msgstr "Informationen zu Gewährleistung und Copyright anzeigen"
-
-#: lilypond-book.py:734
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr "Datei `%s' nicht gefunden"
 
-#: lilypond-book.py:963
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "veraltete ly-option verwendet: %s=%s"
 
-#: lilypond-book.py:966
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "Übersetzung im Kompatibilitätsmodus: %s=%s"
 
-#: lilypond-book.py:970
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "veraltete ly-option verwendet: %s"
 
-#: lilypond-book.py:973
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "Übersetzung im Kompatibilitätsmodus: %s"
 
-#: lilypond-book.py:992
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "unbekannte Option ignoriert: %s"
 
-#: lilypond-book.py:1327
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr "Filter »%s« wird geöffnet"
 
-#: lilypond-book.py:1344
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "»%s« gescheitert (%d)"
 
-#: lilypond-book.py:1345
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "Das Fehlerprotokoll lautet wie folgt:"
 
-#: lilypond-book.py:1512
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr ""
+
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr "Auszüge werden geschrieben..."
 
-#: lilypond-book.py:1517
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "Verarbeiten..."
 
-#: lilypond-book.py:1521
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr "Alle Auszüge sind auf dem neuesten Stand..."
 
-#: lilypond-book.py:1531
+#: lilypond-book.py:1605
 #, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "Format für %s kann nicht ermittelt werden"
 
-#: lilypond-book.py:1542
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr "%s ist aktuell."
 
-#: lilypond-book.py:1548
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "»%s« wird geschrieben..."
 
-#: lilypond-book.py:1595
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr "Ausgabe würde Eingabedatei überschreiben; verwenden Sie --output."
 
-#: lilypond-book.py:1599
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr "%s lesen..."
 
-#: lilypond-book.py:1618
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr "Zerlegen..."
 
-#: lilypond-book.py:1634
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr "%s kompilieren..."
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr "Einfügung wird verarbeitet: %s"
 
-#: lilypond-book.py:1657
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr "»%s« wird gelöscht"
 
-#: lilypond-book.py:1717
+#: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr "Schriftarten werden nach %s geschrieben..."
 
-#: lilypond-book.py:1729
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr "Option --psfonts nicht verwendet"
 
-#: lilypond-book.py:1730
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr "Verarbeitung mit dvips wird keine Schriftarten haben"
 
-#: lilypond-book.py:1736
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr "DVIPS-Aufruf:"
 
-#: midi2ly.py:122 lily-library.scm:489 lily-library.scm:497
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "Warnung: "
 
-#: midi2ly.py:125 midi2ly.py:941
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "Fehler: "
 
-#: midi2ly.py:126
+#: midi2ly.py:110
 msgid "Exiting ... "
 msgstr "Beenden ... "
 
-#: midi2ly.py:873
+#: midi2ly.py:857
 #, python-format
 msgid "%s output to `%s'..."
 msgstr "%s nach »%s« ausgeben..."
 
-#: midi2ly.py:887
-msgid "Convert MIDI to LilyPond source."
-msgstr "MIDI nach LilyPond-Quelltext konvertieren."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "mup nach LilyPond-Quelltext konvertieren."
 
-#: midi2ly.py:891
+#: midi2ly.py:875
 msgid "print absolute pitches"
 msgstr "Absolute Tonhöhen ausgeben"
 
-#: midi2ly.py:893 midi2ly.py:905
+#: midi2ly.py:877 midi2ly.py:889
 msgid "DUR"
 msgstr "DAUER"
 
-#: midi2ly.py:894
+#: midi2ly.py:878
 msgid "quantise note durations on DUR"
 msgstr "Notenlängen auf DAUER quantisieren"
 
-#: midi2ly.py:897
+#: midi2ly.py:881
 msgid "print explicit durations"
 msgstr "Explizite Notenlängen ausgeben"
 
-#: midi2ly.py:898
+#: midi2ly.py:882
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
 msgstr "Tonart setzen: VORZ=+Kreuze|-B's; MOLL=1"
 
-#: midi2ly.py:899
+#: midi2ly.py:883
 msgid "ALT[:MINOR]"
 msgstr "VORZ[:MOLL]"
 
-#: midi2ly.py:904
+#: midi2ly.py:888
 msgid "quantise note starts on DUR"
 msgstr "Notenanfänge auf DAUER quantisieren"
 
-#: midi2ly.py:907
+#: midi2ly.py:891
 msgid "DUR*NUM/DEN"
 msgstr "DAUER*ZÄHLER/NENNER"
 
 # tuplet = Wertaufteilung nach: Peter Giger: Die Kunst des Rhythmus, Seite 25
-#: midi2ly.py:910
+#: midi2ly.py:894
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr "Wertaufteilungsdauern DAUER*ZÄHLER/NENNER erlauben"
 
-#: midi2ly.py:918
+#: midi2ly.py:902
 msgid "treat every text as a lyric"
 msgstr "Jeden Text als Liedtext behandeln"
 
-#: midi2ly.py:921
-msgid "example"
-msgstr "Beispiel"
+#: midi2ly.py:905
+#, fuzzy
+msgid "Examples"
+msgstr "Beispiel:"
 
-#: midi2ly.py:942
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "Keine Dateien auf der Kommandozeile angegeben."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Dieses Programm ist Freie Software. Sie wird von der GNU General Public "
+"License\n"
+"geschützt, und Sie können sie gerne ändern und/oder Kopien unter bestimmten\n"
+"Bedingungen weitergeben. Rufen Sie »%s --warranty« für weitere\n"
+"Informationen auf.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr "Ausgabedateiname auf DATEI setzen"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "Option »%s« benötigt ein Argument"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "Option `%s' erlaubt kein Argument"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "unerkannte Option: »%s«"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "ungültiges Argument »%s« für Option »%s«"
 
-#: warn.cc:68 grob.cc:462
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr "Programmierfehler: %s"
 
-#: warn.cc:69
+#: warn.cc:69 input.cc:83
 msgid "continuing, cross fingers"
 msgstr "Fortsetzung, die Finger kreuzen"
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "Vorzeichensatzliste muss mit Kontextnamen beginnen: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "unbekannte Option ignoriert: %s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr "Paar oder Kontextname für Vorzeichenregel erwartet, %s gefunden"
 
-#: accidental.cc:239 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "Vorzeichen `%s' nicht gefunden"
 
-#: align-interface.cc:160
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
@@ -519,100 +571,103 @@ msgstr ""
 "vertikale Ausrichtung vor Zeilenumbruch aufgerufen.\n"
 "Nur Zeilenzusammenfassungen mit PianoStaff erzeugen."
 
-#: all-font-metrics.cc:213
-#, c-format
-msgid "can't find font: `%s'"
-msgstr "Schriftart kann nicht gefunden werden: »%s«"
-
-#: all-font-metrics.cc:214
-msgid "loading default font"
-msgstr "Standardschriftart wird geladen"
-
-#: all-font-metrics.cc:224
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "Standardschriftart kann nicht gefunden werden: »%s«"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
+msgstr ""
 
-#: all-font-metrics.cc:225 includable-lexer.cc:62 lily-parser-scheme.cc:97
+#: all-font-metrics.cc:173
 #, c-format
-msgid "(search path: `%s')"
-msgstr "(Suchpfad: »%s«)"
-
-#: all-font-metrics.cc:226 volta-engraver.cc:157
-msgid "giving up"
-msgstr "aufgeben"
+msgid "cannot find font: `%s'"
+msgstr "Schriftart kann nicht gefunden werden: »%s«"
 
-#: apply-context-iterator.cc:34
+#: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr "Argument für \\applycontext ist keine Prozedur"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "kann nicht geändert werden, bereits im Übersetzer: %s"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: vertikale Gruppe hat bereits einen Vater"
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr "gibt es zwei Axis_group_engravers?"
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr "entfernen dieser vertikalen Gruppe"
 
+#: axis-group-interface.cc:96
+msgid "tried to calculate pure-height at a non-breakpoint"
+msgstr ""
+
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
 msgstr "Taktüberprüfung gescheitert bei: %s"
 
-#: beam-engraver.cc:136
+#: beam-engraver.cc:128
 msgid "already have a beam"
 msgstr "Balken bereits vorhanden"
 
-#: beam-engraver.cc:205
+#: beam-engraver.cc:196
 msgid "unterminated beam"
 msgstr "unbegrenzter Balken"
 
-#: beam-engraver.cc:246 chord-tremolo-engraver.cc:162
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "Notenhals muss rhythmische Struktur aufweisen"
 
-#: beam-engraver.cc:259
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "Notenhals passt nicht zum Balken"
 
-#: beam-engraver.cc:260
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "Balken wurde hier begonnen"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
 msgstr "Keine praktikable Balkenposition"
 
-#: beam.cc:126
-msgid "removing beam with less than two stems"
+#: beam.cc:144
+#, fuzzy
+msgid "removing beam with no stems"
 msgstr "Balken mit weniger als zwei Notenhälsen wird entfernt"
 
-#: beam.cc:981
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
-msgstr "Keine funktionsfähige Anfangskonfiguration gefunden: Es kann evtl. keine optimale Balkenneigung gefunden werden"
+msgstr ""
+"Keine funktionsfähige Anfangskonfiguration gefunden: Es kann evtl. keine "
+"optimale Balkenneigung gefunden werden"
 
-#: break-align-interface.cc:194
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Kein Leerraumeintrag von %s nach »%s«"
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "»%s« kann nicht nach »%s« geändert werden"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "es kann kein Kontext zum Umschalten gefunden werden"
 
 #. We could change the current translator's id, but that would make
@@ -630,20 +685,21 @@ msgstr "kein Umschalten zum gleichen Kontexttypen: %s"
 msgid "none of these in my family"
 msgstr "keiner davon befindet sich in meiner Familie"
 
-#: chord-tremolo-engraver.cc:96
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
+#: chord-tremolo-engraver.cc:88
+#, fuzzy
+msgid "No tremolo to end"
+msgstr "Kein Bindebogen zu beenden"
 
-#: chord-tremolo-engraver.cc:132
+#: chord-tremolo-engraver.cc:110
 msgid "unterminated chord tremolo"
 msgstr "unbegrenztes Akkord-Tremolo"
 
-#: chord-tremolo-iterator.cc:60
-msgid "no one to print a tremolos"
-msgstr "niemand vorhanden für Tremoloausgabe"
+#: chord-tremolo-iterator.cc:33
+#, c-format
+msgid "expect 2 elements for chord tremolo, found %d"
+msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "Schlüssel »%s« nicht gefunden"
@@ -657,61 +713,44 @@ msgstr "unbekannter Gruppierungsstil: »%s«"
 msgid "junking empty cluster"
 msgstr "Leere Menge wird verworfen"
 
-#: coherent-ligature-engraver.cc:86
-#, c-format
-msgid "gotcha: ptr=%ul"
-msgstr "erwischt: ptr=%ul"
-
-#: coherent-ligature-engraver.cc:93
-msgid "distance undefined, assuming 0.1"
-msgstr "Abstand undefiniert, 0.1 angenommen"
-
-#: coherent-ligature-engraver.cc:96
-#, c-format
-msgid "distance=%f"
-msgstr "Abstand=%f"
-
-#: coherent-ligature-engraver.cc:136
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: setze »spacing-increment=0.01«: ptr=%ul"
 
-#: constrained-breaking.cc:124
-msgid "no system number set in constrained-breaking"
-msgstr "keine Systemzahl bei Bedingungsverletzung gesetzt"
-
 #. if we get to here, just put everything on one line
-#: constrained-breaking.cc:225 constrained-breaking.cc:241
-msgid "couldn't find line breaking that satisfies constraints"
-msgstr "es können keine Zeilenumbrüche gefunden werden, die die Bedingungen erfüllen"
+#: constrained-breaking.cc:176 constrained-breaking.cc:193
+msgid "cannot find line breaking that satisfies constraints"
+msgstr ""
+"es können keine Zeilenumbrüche gefunden werden, die die Bedingungen erfüllen"
 
-#: context-def.cc:123
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr "Das Programm hat keinen solchen Typen: »%s«"
 
-#: context-def.cc:311
-#, c-format
-msgid "can't find: `%s'"
-msgstr "»%s« kann nicht gefunden werden"
-
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "Symbol-Argumente für \\override und \\revert benötigt"
 
-#: context.cc:160
+#: context.cc:151
 #, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "ein neues »%s« kann weder gefunden noch erzeugt werden"
 
-#: context.cc:222
+#: context.cc:213
 #, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "»%s« (»%s« genannt) kann weder gefunden noch erzeugt werden"
 
 #: context.cc:276
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "Invalid CreateContext event: Cannot create %s context"
+msgstr ""
+
+#: context.cc:388
+#, c-format
+msgid "cannot find or create: `%s'"
 msgstr "»%s« kann weder gefunden noch erzeugt werden"
 
 #: custos.cc:77
@@ -719,143 +758,132 @@ msgstr "»%s« kann weder gefunden noch erzeugt werden"
 msgid "custos `%s' not found"
 msgstr "custos »%s« nicht gefunden"
 
-#: dynamic-engraver.cc:181 span-dynamic-performer.cc:84
-msgid "can't find start of (de)crescendo"
+#: dispatcher.cc:71
+msgid "Event class should be a symbol"
+msgstr ""
+
+#: dispatcher.cc:78
+#, fuzzy, c-format
+msgid "Unknown event class %s"
+msgstr "Unbekannte Schnittstelle »%s«"
+
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "Pause »%s« nicht gefunden"
+
+#: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
+msgid "cannot find start of (de)crescendo"
 msgstr "Anfang des (De-) Crescendos kann nicht gefunden werden"
 
-#: dynamic-engraver.cc:190
+#: dynamic-engraver.cc:195
 msgid "already have a decrescendo"
 msgstr "Decrescendo bereits vorhanden"
 
-#: dynamic-engraver.cc:192
+#: dynamic-engraver.cc:197
 msgid "already have a crescendo"
 msgstr "Crescendo bereits vorhanden"
 
-#: dynamic-engraver.cc:195
+#: dynamic-engraver.cc:200
 msgid "cresc starts here"
 msgstr "Crescendo beginnt hier"
 
-#: dynamic-engraver.cc:318
+#: dynamic-engraver.cc:323
 msgid "unterminated (de)crescendo"
 msgstr "unbegrenztes (De-) Crescendo"
 
-#: event-chord-iterator.cc:53 output-property-music-iterator.cc:31
-#, c-format
-msgid "junking event: `%s'"
-msgstr "Ereignis wird ignoriert: »%s«"
-
 #: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "unbegrenzte Erweiterung"
 
-#: folded-repeat-iterator.cc:63
-msgid "no one to print a repeat brace"
-msgstr "niemand zur Erzeugung einer Wiederholung"
-
 #: font-config.cc:28
 msgid "Initializing FontConfig..."
 msgstr "FontConfig wird initialisiert..."
 
-#: font-config.cc:38
-#, c-format
-msgid "Rebuilding FontConfig cache %s. this may take a while..."
+#: font-config.cc:44
+#, fuzzy, c-format
+msgid "Rebuilding FontConfig cache %s, this may take a while..."
 msgstr "FontConfig-Cache %s wird erneuert. Dies kann eine Weile dauern..."
 
-#: font-config.cc:49 font-config.cc:51
+#: font-config.cc:55
+#, fuzzy, c-format
+msgid "failed adding font directory: %s"
+msgstr "Schriftartverzeichnis wird hinzugefügt: %s"
+
+#: font-config.cc:57
 #, c-format
 msgid "adding font directory: %s"
 msgstr "Schriftartverzeichnis wird hinzugefügt: %s"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr "Unendlichkeit oder NaN bei Umwandlung einer Real-Zahl gefunden"
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr "auf Null gesetzt"
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
 msgstr "unbegrenztes Glissando."
 
-#: global-context-scheme.cc:50 global-context-scheme.cc:77
+#: global-context-scheme.cc:91 global-context-scheme.cc:107
 msgid "no music found in score"
 msgstr "keine Musik in der Partitur gefunden"
 
-#: global-context-scheme.cc:68
+#: global-context-scheme.cc:97
 msgid "Interpreting music... "
 msgstr "Interpretation der Musik..."
 
-#: global-context-scheme.cc:88
+#: global-context-scheme.cc:120
 #, c-format
 msgid "elapsed time: %.2f seconds"
 msgstr "verstrichene Zeit: %.2f Sekunden"
 
-#: global-context.cc:159
-#, c-format
-msgid "can't find `%s' context"
-msgstr "Kontext »%s« kann nicht gefunden werden"
-
-#: gourlay-breaking.cc:202
-#, c-format
-msgid "Optimal demerits: %f"
-msgstr "Optimale Bewertung: %f"
-
-#: gourlay-breaking.cc:207
-msgid "no feasible line breaking found"
-msgstr "Keine praktikablen Zeilenumbrüche gefunden"
-
-#: gourlay-breaking.cc:215
-msgid "can't find line breaking that satisfies constraints"
-msgstr "es können keine Zeilenumbrüche gefunden werden, die die Bedingungen erfüllen"
-
-#: gregorian-ligature-engraver.cc:61
+#: gregorian-ligature-engraver.cc:59
 #, c-format
 msgid "\\%s ignored"
 msgstr "\\%s ignoriert"
 
-#: gregorian-ligature-engraver.cc:66
+#: gregorian-ligature-engraver.cc:64
 #, c-format
 msgid "implied \\%s added"
 msgstr "implizites \\%s hinzugefügt"
 
 #. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:214
-msgid "can't apply `\\~' on first head of ligature"
+#: gregorian-ligature-engraver.cc:212
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "»\\~« kann nicht auf ersten Kopf der Bindung angewendet werden"
 
 #. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:226
-msgid "can't apply `\\~' on heads with identical pitch"
+#: gregorian-ligature-engraver.cc:224
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr "»\\~« kann nicht auf Köpfe mit gleicher Höhe angewendet werden"
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr "Unbekannte Schnittstelle »%s«"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr "Grob »%s« hat keine Schnittstelle für Eigenschaft »%s«"
 
-#: grob.cc:242
+#: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr "Unendlichkeit oder NaN bei Umwandlung einer Real-Zahl gefunden"
 
-#: hairpin.cc:149
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "Decrescendo zu kurz"
 
-#: hairpin.cc:150
-msgid "crescendo too small"
-msgstr "Crescendo zu kurz"
-
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+#, fuzzy
+msgid "do not have that many brackets"
 msgstr "so viele Klammern gibt es nicht"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr "in Konflikt stehende Notengruppenereignisse"
 
@@ -871,72 +899,77 @@ msgstr "unbegrenzter Bindestrich; entfernt"
 msgid "include files are not allowed in safe mode"
 msgstr "eingefügte Dateien sind im abgesicherten Modus nicht erlaubt"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:104
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "Datei »%s« kann nicht gefunden werden"
 
-#: input.cc:103 source-file.cc:153 source-file.cc:168
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(Suchpfad: »%s«)"
+
+#: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "Position unbekannt"
 
-#: ligature-engraver.cc:100
-msgid "can't find start of ligature"
+#: ligature-engraver.cc:93
+msgid "cannot find start of ligature"
 msgstr "Anfang der Bindung kann nicht gefunden werden"
 
-#: ligature-engraver.cc:105
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "keine rechte Begrenzung"
 
-#: ligature-engraver.cc:127
+#: ligature-engraver.cc:120
 msgid "already have a ligature"
 msgstr "habe bereits eine Bindung"
 
-#: ligature-engraver.cc:136
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "keine linke Begrenzung"
 
-#: ligature-engraver.cc:180
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
 msgstr "unbegrenzte Bindung"
 
-#: ligature-engraver.cc:209
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "Pause wird ignoriert: Bindung darf keine Pause enthalten"
 
-#: ligature-engraver.cc:210
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
 msgstr "Bindung wurde hier begonnen"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(Lade-Pfad: `%s')"
 
-#: lily-guile.cc:441
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Eigenschafts-Typprüfung für »%s« (%s) kann nicht gefunden werden."
 
-#: lily-guile.cc:444
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr "vielleicht ein Tippfehler?"
 
-#: lily-guile.cc:450
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr "Zuweisung wird trotzdem durchgeführt"
 
-#: lily-guile.cc:462
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "Typprüfung für »%s« gescheitert; Wert »%s« muss vom Typ »%s« sein"
 
-#: lily-lexer.cc:223
+#: lily-lexer.cc:254
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Bezeichnername ist ein Schlüsselwort: »%s«"
 
-#: lily-lexer.cc:238
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "Fehler am Dateiende (EOF): %s"
@@ -946,30 +979,31 @@ msgstr "Fehler am Dateiende (EOF): %s"
 msgid "deprecated function called: %s"
 msgstr "veraltete Funktion aufgerufen: %s"
 
-#: lily-parser-scheme.cc:76
-#, c-format
-msgid "Changing working directory to `%s'"
+#: lily-parser-scheme.cc:88
+#, fuzzy, c-format
+msgid "Changing working directory to: `%s'"
 msgstr "aktuelles Verzeichnis kann nicht zu »%s« geändert werden"
 
-#: lily-parser-scheme.cc:96
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "Init-Datei kann nicht gefunden werden: »%s«"
 
-#: lily-parser-scheme.cc:114
+#: lily-parser-scheme.cc:125
 #, c-format
 msgid "Processing `%s'"
 msgstr "»%s« wird verarbeitet"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Analysieren..."
 
-#: lily-parser.cc:126
-msgid "braces don't match"
+#: lily-parser.cc:127
+#, fuzzy
+msgid "braces do not match"
 msgstr "Klammern passen nicht zueinander"
 
-#: lyric-combine-music-iterator.cc:256
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr "Stimme kann nicht gefunden werden: »%s«"
@@ -982,12 +1016,14 @@ msgid ""
 "under certain conditions.  Invoke as `%s --warranty' for more\n"
 "information.\n"
 msgstr ""
-"Dieses Programm ist Freie Software. Sie wird von der GNU General Public License\n"
+"Dieses Programm ist Freie Software. Sie wird von der GNU General Public "
+"License\n"
 "geschützt, und Sie können sie gerne ändern und/oder Kopien unter bestimmten\n"
 "Bedingungen weitergeben. Rufen Sie »%s --warranty« für weitere\n"
 "Informationen auf.\n"
 
 #: main.cc:122
+#, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -998,7 +1034,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1015,7 +1051,8 @@ msgstr ""
 "\n"
 "    Sie sollten eine Kopie (siehe Datei COPYING) der GNU General Public\n"
 "License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben\n"
-"Sie bitte an die Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+"Sie bitte an die Free Software Foundation, Inc., 59 Temple Place - Suite "
+"330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
 #: main.cc:153
@@ -1023,23 +1060,25 @@ msgid "BACK"
 msgstr "ZURÜCK"
 
 #: main.cc:153
+#, fuzzy
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 "Backend BACK verwenden (gnome, ps, eps,\n"
 "scm, svg, tex, texstr)\n"
 "Standard: PS"
 
 #: main.cc:155
-msgid "SYM=VAL"
+#, fuzzy
+msgid "SYM[=VAL]"
 msgstr "SYM=WERT"
 
 #: main.cc:156
+#, fuzzy
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 "Eine Scheme-Programmoption setzen. #t wird verwendet, wenn WERT\n"
 "nicht angegeben wurde. -dhelp für Hilfe verwenden."
@@ -1067,41 +1106,36 @@ msgid "generate DVI (tex backend only)"
 msgstr "DVI erzeugen (nur TeX-Backend)"
 
 #: main.cc:164
-msgid "relocate using directory of lilypond program"
-msgstr "wiederfinden mit Hilfe des Lilypond-Programmverzeichnisses"
-
-#: main.cc:165
 msgid "generate PDF (default)"
 msgstr "PDF erzeugen (Standard)"
 
-#: main.cc:166
+#: main.cc:165
 msgid "generate PNG"
 msgstr "PNG erzeugen"
 
-#: main.cc:167
+#: main.cc:166
 msgid "generate PostScript"
 msgstr "PostScript erzeugen"
 
-#: main.cc:168
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr "TeX erzeugen (nur TeX-Backend)"
 
-#: main.cc:169
-msgid "print this help"
-msgstr "diese Hilfe ausgeben"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:170
+#: main.cc:169
 msgid "FIELD"
 msgstr "FELD"
 
-#: main.cc:170
-msgid "dump a header field to file BASENAME.FIELD"
+#: main.cc:169
+#, fuzzy
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "Header-Feld in BASISNAME.FELD schreiben"
 
-#: main.cc:171
-msgid "DIR"
-msgstr "VERZ"
-
 #: main.cc:171
 msgid "add DIR to search path"
 msgstr "VERZ zum Suchpfad hinzufügen"
@@ -1135,14 +1169,22 @@ msgid "generate a preview of the first system"
 msgstr "ein Bild des ersten Systems erzeugen"
 
 #: main.cc:180
-msgid "disallow unsafe Scheme and PostScript operations"
-msgstr "unsichere Scheme- und PostScript-Operationen verweigern"
+msgid "relocate using directory of lilypond program"
+msgstr "wiederfinden mit Hilfe des Lilypond-Programmverzeichnisses"
 
 #: main.cc:181
-msgid "print version number"
+#, fuzzy
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
+msgstr "unsichere Scheme- und PostScript-Operationen verweigern"
+
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "Versionsnummer ausgeben"
 
-#: main.cc:221
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1152,125 +1194,125 @@ msgstr ""
 "%s und anderen."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:248
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Aufruf: %s [OPTION]... DATEI..."
 
-#: main.cc:250
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Musiksatz und/oder MIDI aus DATEI erzeugen."
 
-#: main.cc:252
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond erzeugt ansprechende Musiknotation."
 
-#: main.cc:254
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr "Für weitere Informationen: siehe %s"
 
-#: main.cc:256
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Optionen:"
 
-#: main.cc:260
+#: main.cc:263
 #, c-format
 msgid "Report bugs via %s"
 msgstr "Melden Sie Fehler an %s"
 
-#: main.cc:306
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "%d Argumente mit Kerker erwartet, %u gefunden"
 
-#: main.cc:320
+#: main.cc:323
 #, c-format
 msgid "no such user: %s"
 msgstr "kein solcher Benutzer: %s"
 
-#: main.cc:322
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr "Benutzer-ID von Benutzer kann nicht gefunden werden: %s: %s"
 
-#: main.cc:337
+#: main.cc:340
 #, c-format
 msgid "no such group: %s"
 msgstr "keine solche Gruppe: %s"
 
-#: main.cc:339
+#: main.cc:342
 #, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "Gruppen-ID kann nicht von Gruppennamen ermittelt werden: %s: %s"
 
-#: main.cc:347
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "kein chroot möglich nach: %s: %s"
 
-#: main.cc:354
+#: main.cc:357
 #, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "Gruppen-ID kann nicht geändert werden in: %d: %s"
 
-#: main.cc:360
+#: main.cc:363
 #, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "Benutzer-ID kann nicht geändert werden in: %d: %s"
 
-#: main.cc:366
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "aktuelles Verzeichnis kann nicht geändert werden in: %s: %s"
 
-#: main.cc:413
+#: main.cc:415
 #, c-format
 msgid "Evaluating %s"
 msgstr "%s wird ausgewertet"
 
-#: main.cc:627
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr "Ausnahme gefangen: %s"
 
 #. FIXME: constant error message.
-#: mark-engraver.cc:131
+#: mark-engraver.cc:154
 msgid "rehearsalMark must have integer value"
 msgstr "rehearsalMark muss Ganzzahlwert haben"
 
-#: mark-engraver.cc:137
+#: mark-engraver.cc:160
 msgid "mark label must be a markup object"
 msgstr "Marke muss ein Markierungsobjekt sein"
 
-#: mensural-ligature-engraver.cc:77
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "Bindung mit weniger als 2 Notenköpfen -> überspringen"
 
-#: mensural-ligature-engraver.cc:104
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "Tonhöhe der Bindung kann nicht ermittelt werden -> überspringen"
 
-#: mensural-ligature-engraver.cc:118
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr "Bindung einer einzelnen Note -> überspringen"
 
-#: mensural-ligature-engraver.cc:130
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr "Prime unter Bindung -> überspringen"
 
-#: mensural-ligature-engraver.cc:142
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "Mensuralbindung: Dauer weder Mx, L, B noch S -> überspringen"
 
-#: mensural-ligature-engraver.cc:190
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "Halb-Brevis muss von einem weiteren gefolgt werden -> überspringen"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
@@ -1278,7 +1320,7 @@ msgstr ""
 "Halb-Brevis kann nur am Anfang einer Bindung auftreten,\n"
 "und es können nur null oder zwei davon auftreten"
 
-#: mensural-ligature-engraver.cc:228
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1290,7 +1332,7 @@ msgstr ""
 "muss die vorletzte Note eine weitere sein,\n"
 "oder die Bindung muss LB oder SSB sein"
 
-#: mensural-ligature-engraver.cc:348
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr "unbehandelter case-Zweig"
 
@@ -1307,102 +1349,118 @@ msgstr "Mensural_ligature: (join_right == 0)"
 msgid "no such MIDI instrument: `%s'"
 msgstr "kein solches MIDI-Instrument: `%s'"
 
-#: midi-item.cc:264
-msgid "silly pitch"
-msgstr "sinnlose Tonhöhe"
-
-#: midi-item.cc:280
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr "Experimentell: temporäre Feinabstimmung (von %d Hundertsteln) des Kanals."
+msgstr ""
+"Experimentell: temporäre Feinabstimmung (von %d Hundertsteln) des Kanals."
 
 #: midi-stream.cc:28
 #, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "Datei kann nicht zum Schreiben geöffnet werden: %s: %s"
 
 #: midi-stream.cc:44
 #, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "in Datei konnte nicht geschrieben werden: »%s«"
 
-#: music.cc:140
-#, c-format
-msgid "octave check failed; expected %s, found: %s"
+#: music-iterator.cc:171
+msgid "Sending non-event to context"
+msgstr ""
+
+#: music.cc:141
+#, fuzzy, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "Oktavenüberprüfung gescheitert; %s erwartet, %s gefunden"
 
-#: music.cc:203
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "Transponieren um %s erzeugt Vorzeichen größer als zwei"
 
-#: new-fingering-engraver.cc:84
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr "es kann kein Text zu einzelnen Notenköpfen hinzugefügt werden"
 
-#.
-#. music for the softenon children?
-#.
-#: new-fingering-engraver.cc:153
-msgid "music for the martians."
-msgstr "Musik für Marsmenschen."
-
-#: new-fingering-engraver.cc:261
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr "Keine Platzierung für Griffe gefunden"
 
-#: new-fingering-engraver.cc:262
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr "Platzierung darunter"
 
-#: note-collision.cc:405
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
 msgstr "zu viele kollidierende Notenspalten werden ignoriert"
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr "Notenköpfe und Pausen können nicht zusammen an einem Hals auftreten"
 
-#: note-head.cc:67
-#, c-format
-msgid "note head `%s' not found"
+#: note-head.cc:63
+#, fuzzy, c-format
+msgid "none of note heads `%s' or `%s' found"
 msgstr "Notenkopf »%s« nicht gefunden"
 
-#: note-heads-engraver.cc:84
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent ohne Tonhöhe"
 
 #: open-type-font.cc:33
 #, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "es können keine %lu Bytes angefordert werden"
 
 #: open-type-font.cc:37
 #, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "Schriftarttabelle kann nicht geladen werden: %s"
 
-#: open-type-font.cc:108
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "nicht unterstütztes Format: %s"
 
-#: open-type-font.cc:110
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr "unbekannter Fehler: %d beim Lesen der Schriftartdatei: %s"
 
-#: open-type-font.cc:183 open-type-font.cc:307
-#, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+#: open-type-font.cc:173 open-type-font.cc:297
+#, fuzzy, c-format
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr "FT_Get_Glyph_Name() gab Fehler zurück: %d"
 
-#: pango-font.cc:157
+#: page-turn-page-breaking.cc:205
+msgid ""
+"cannot fit the first page turn onto a single page.  Consider setting first-"
+"page-number to an even number."
+msgstr ""
+
+#: page-turn-page-breaking.cc:218
+#, c-format
+msgid "Calculating page and line breaks (%d possible page breaks)..."
+msgstr ""
+
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
+msgid "Drawing systems..."
+msgstr ""
+
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "Keine PostScript-Schriftartname für Schriftart: »%s«"
 
-#: pango-font.cc:205
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr "FreeType-Ansicht hat keinen PostScript-Schriftartnamen"
 
@@ -1411,12 +1469,16 @@ msgstr "FreeType-Ansicht hat keinen PostScript-Schriftartnamen"
 msgid "Layout output to `%s'..."
 msgstr "Layout nach »%s« ausgeben..."
 
-#: paper-score.cc:104
+#: paper-score.cc:105
+msgid "Calculating line breaks..."
+msgstr "Zeilenumbrüche werden berechnet..."
+
+#: paper-score.cc:118
 #, c-format
 msgid "Element count %d (spanners %d) "
 msgstr "Elementanzahl: %d (Klammern: %d)"
 
-#: paper-score.cc:108
+#: paper-score.cc:122
 msgid "Preprocessing graphical objects..."
 msgstr "Vorverarbeitung der grafischen Elemente..."
 
@@ -1424,114 +1486,102 @@ msgstr "Vorverarbeitung der grafischen Elemente..."
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr "GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck"
 
-#: percent-repeat-engraver.cc:209
+#: percent-repeat-engraver.cc:200
 msgid "unterminated percent repeat"
 msgstr "unbegrenzte Prozentwiederholung"
 
-#: percent-repeat-iterator.cc:52
-msgid "no one to print a percent"
-msgstr "nichts bekannt, ein Prozent auszugeben"
-
-#: performance.cc:46
+#: performance.cc:45
 msgid "Track..."
 msgstr "Spur..."
 
-#: performance.cc:70
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr "MIDI-Kanal zurückgesprungen"
 
-#: performance.cc:71
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr "Abbildung modulo 16"
 
-#: performance.cc:90
-msgid "Creator: "
-msgstr "Erzeuger: "
-
-#: performance.cc:110
-msgid "at "
-msgstr "bei "
-
-#: performance.cc:162
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI-Ausgabe nach »%s«..."
 
-#: phrasing-slur-engraver.cc:170
+#: phrasing-slur-engraver.cc:146
 msgid "unterminated phrasing slur"
 msgstr "nicht beendeter Phrasierungsbogen"
 
-#: piano-pedal-engraver.cc:223
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr "3 Striche für Piano-Pedal erwartet, %ld gefunden"
 
-#: piano-pedal-engraver.cc:238 piano-pedal-engraver.cc:249
-#: piano-pedal-performer.cc:82
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
+#: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "kann keinen Anfang für Pedal finden: »%s«"
 
-#: piano-pedal-engraver.cc:296
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "kann keinen Anfang für Piano-Pedal finden: »%s«"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
 msgstr "keine solche interne Option: %s"
 
-#: property-iterator.cc:81
+#: property-iterator.cc:74
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "Kein Name für grafische Objekte (grob): »%s«"
 
-#: quote-iterator.cc:255
-#, c-format
-msgid "in quotation: junking event %s"
-msgstr "in Zitat: Ereignis %s wird verworfen"
-
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr "Oktavprüfung gescheitert, Rückgabe: "
 
-#: relocate.cc:52
+#: relocate.cc:44
+#, fuzzy, c-format
+msgid "Setting %s to %s"
+msgstr "Schreiben der Schriftarten nach %s"
+
+#: relocate.cc:59
 #, c-format
 msgid "no such file: %s for %s"
 msgstr "keine solche Datei: %s für %s"
 
-#: relocate.cc:62 relocate.cc:80
+#: relocate.cc:69 relocate.cc:87
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr "kein solches Verzeichnis: %s für %s"
 
-#: relocate.cc:72
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr "%s=%s (voranstellen)\n"
 
-#: relocate.cc:104
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr "Verlagerung: Übersetzungsvorsilbe=%s, neue Vorsilbe=%s"
 
-#: relocate.cc:130
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr "Verlagerung: framework_prefix=%s"
 
-#: relocate.cc:212
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr "Verlagerung: ist absolut: argv0=%s"
 
-#: relocate.cc:219
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr "Verlagerung: von cwd: argv0=%s"
 
-#: relocate.cc:228
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -1540,15 +1590,25 @@ msgstr ""
 "Verlagerung: von PATH=%s\n"
 "argv0=%s"
 
-#: rest-collision.cc:149
-msgid "can't resolve rest collision: rest direction not set"
+#: relocate.cc:354
+#, fuzzy, c-format
+msgid "Relocation file: %s"
+msgstr "Verlagerung: ist absolut: argv0=%s"
+
+#: relocate.cc:390
+#, c-format
+msgid "Unknown relocation command %s"
+msgstr ""
+
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr "Restkollision kann nicht aufgelöst werden: Restrichtung nicht gesetzt"
 
-#: rest-collision.cc:163 rest-collision.cc:208
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "zu viele kollidierende Pausen"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr "Pause »%s« nicht gefunden"
@@ -1567,38 +1627,48 @@ msgstr "Musik-Schriftart wurde nicht ordnungsgemäß installiert."
 msgid "Search path `%s'"
 msgstr "Suchpfad »%s«"
 
-#: score.cc:211
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "Abbruch"
+
+#: score.cc:225
 msgid "already have music in score"
 msgstr "es ist bereits Musik in der Partitur"
 
-#: score.cc:212
+#: score.cc:226
 msgid "this is the previous music"
 msgstr "Dies ist die vorhergehende Musik"
 
-#: score.cc:217
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr "Fehler gefunden, musikalischer Ausdruck wird ignoriert"
 
 #. FIXME:
-#: script-engraver.cc:105
-msgid "don't know how to interpret articulation: "
+#: script-engraver.cc:102
+#, fuzzy
+msgid "do not know how to interpret articulation: "
 msgstr "Keine Interpretation für Artikulation bekannt: "
 
-#: script-engraver.cc:106
+#: script-engraver.cc:103
 msgid "scheme encoding: "
 msgstr "Schemakodierung: "
 
-#: simple-spacer.cc:406
+#: simple-spacer.cc:375
 #, c-format
 msgid "No spring between column %d and next one"
 msgstr "Kein (dynamischer) Abstand zwischen Spalte %d und Nachfolger"
 
-#: slur-engraver.cc:176
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr ""
+
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "unbegrenzter Bogen"
 
-#: slur-engraver.cc:185
-msgid "can't end slur"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
 msgstr "Bindebogen kann nicht beendet werden"
 
 #: source-file.cc:74
@@ -1606,103 +1676,77 @@ msgstr "Bindebogen kann nicht beendet werden"
 msgid "expected to read %d characters, got %d"
 msgstr "%d Zeichen erwartet, %d erhalten"
 
-#: spacing-spanner.cc:48
-#, c-format
-msgid "Global shortest duration is %s"
-msgstr "Kleinste globale Zeiteinheit ist %s"
+#: staff-symbol-engraver.cc:62
+msgid "staff-span event has no direction"
+msgstr ""
 
-#: stem-engraver.cc:93
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "Tremolodauer ist zu lang"
 
 #. FIXME:
-#: stem-engraver.cc:130
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "Notenkopf wird zu inkompatiblem Hals (Typ = %d) hinzugefügt"
 
-#: stem-engraver.cc:132
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr "vielleicht sollte die Eingabe mehrstimmig sein"
 
-#: stem.cc:98
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr "Eigenartige Notenhalslänge; auf enge Balken überprüfen"
 
-#: stem.cc:592
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "Fähnchen »%s« nicht gefunden"
 
-#: stem.cc:603
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "Fähnchenstrich »%s« nicht gefunden"
 
-#: system.cc:181
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Elementanzahl: %d."
 
-#: system.cc:268
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr "Anzahl der grafischen Objekte (grob): %d"
 
-#: system.cc:289
-msgid "Calculating line breaks..."
-msgstr "Zeilenumbrüche werden berechnet..."
-
-#: text-spanner-engraver.cc:62
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "Anfang der Textklammer kann nicht gefunden werden"
 
-#: text-spanner-engraver.cc:74
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "Textklammer bereits vorhanden"
 
-#: text-spanner-engraver.cc:134
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "unbegrenzte Textklammer"
 
-#. Not using ngettext's plural feature here, as this message is
-#. more of a programming error.
-#: tfm-reader.cc:107
-#, c-format
-msgid "TFM header of `%s' has only %u word (s)"
-msgstr "TFM Header von »%s« hat nur %u Wort(e)"
-
-#: tfm-reader.cc:140
-#, c-format
-msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
-msgstr "%s: TFM-Datei hat %u Parameter - mehr als die Maximalzahl %u"
-
-#: tfm.cc:72
-#, c-format
-msgid "can't find ascii character: %d"
-msgstr "folgendes ASCII-Zeichen kann nicht gefunden werden: %d"
-
-#: tie-engraver.cc:181
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "einsamer Bindebogen"
 
-#: time-scaled-music-iterator.cc:24
-msgid "no one to print a tuplet start bracket"
-msgstr "nichts für die Ausgabe einer öffnenden Wertaufteilungsklammer vorhanden"
-
 #.
 #. Todo: should make typecheck?
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "seltsame Taktart gefunden: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "Taktart »%s« nicht gefunden; Rückkehr zum nummerierten Stil"
@@ -1712,24 +1756,39 @@ msgstr "Taktart »%s« nicht gefunden; Rückkehr zum nummerierten Stil"
 msgid "unknown translator: `%s'"
 msgstr "unbekannter Übersetzer: »%s«"
 
-#: trill-spanner-engraver.cc:71
-msgid "can't find start of trill spanner"
+#: translator-group.cc:151
+#, c-format
+msgid "cannot find: `%s'"
+msgstr "»%s« kann nicht gefunden werden"
+
+#: translator.cc:332
+#, c-format
+msgid "Two simultaneous %s events, junking this one"
+msgstr ""
+
+#: translator.cc:333
+#, c-format
+msgid "Previous %s event here"
+msgstr ""
+
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
 msgstr "Anfang des Trillers kann nicht gefunden werden"
 
-#: trill-spanner-engraver.cc:83
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
 msgstr "Triller bereits aktiv"
 
-#: trill-spanner-engraver.cc:142
-msgid "unterminated trill spanner"
-msgstr "unbegrenzter Triller"
-
-#: vaticana-ligature-engraver.cc:347
+#: vaticana-ligature-engraver.cc:388
 #, c-format
-msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style"
-msgstr "Vorzeichen (es) »%s« dieses Kopfes gemäß den Einschränkungen des ausgewählten Bindungs-Stils ignoriert"
+msgid ""
+"ignored prefix (es) `%s' of this head according to restrictions of the "
+"selected ligature style"
+msgstr ""
+"Vorzeichen (es) »%s« dieses Kopfes gemäß den Einschränkungen des "
+"ausgewählten Bindungs-Stils ignoriert"
 
-#: vaticana-ligature-engraver.cc:584
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Vaticana_ligature_engraver: setzen »spacing-increment = %f«: ptr=%ul"
@@ -1747,271 +1806,280 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Vaticana_ligature: nichts zusammengefügt (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:142
-msgid "can't end volta spanner"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
 msgstr "Anfang der Textklammer kann nicht gefunden werden"
 
-#: volta-engraver.cc:152
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "Wiederholungskasten bereits vorhanden, wird vorzeitig beendet"
 
-#: volta-engraver.cc:156
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
 msgstr "endende Textklammer auch bereits vorhanden"
 
-#. no longer valid with dashes in \paper{} block.
-#: parser.yy:535
-msgid "identifier should have alphabetic characters only"
-msgstr "Bezeichner sollte nur aus alphabetischen Zeichen bestehen"
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr "aufgeben"
 
-#: parser.yy:705
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr "\\paper kann nicht in \\source verwendet werden; stattdessen \\layout verwenden"
+msgstr ""
+"\\paper kann nicht in \\source verwendet werden; stattdessen \\layout "
+"verwenden"
 
-#: parser.yy:729
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr "Für Papier-Block wird \\paper benötigt"
 
-#: parser.yy:879
-msgid "more alternatives than repeats"
-msgstr "mehr Alternativen als Wiederholungen"
-
-#: parser.yy:916
-#, c-format
-msgid "expect 2 elements for Chord tremolo, found %d"
-msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
-
-#: parser.yy:1316
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr "Grob-Name sollte alphanumerisch sein"
 
-#: parser.yy:1681
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr "zweites Argument muss eine Tonhöhenliste sein"
 
-#: parser.yy:1724 parser.yy:1729 parser.yy:2235
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
 msgstr "muss in Liedtextmodus sein um Liedtext setzen zu können"
 
-#: parser.yy:1822
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr "Zeichenkette als Skriptdefinition erwartet"
 
-#: parser.yy:1981 parser.yy:2031
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "keine gültige Dauer: %d"
 
-#: parser.yy:2154
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
 msgstr "Muss im Notenmodus sein für Noten"
 
-#: parser.yy:2248
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
 msgstr "Muss im Akkordmodus sein für Akkorde"
 
-#: parser.yy:2730
-msgid "music head function must return Music object"
-msgstr "Musikkopf-Funktion muss Musikobjekt zurückliefern."
-
-#: lexer.ll:158
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr "verirrtes UTF-8 BOM gefunden"
 
-#: lexer.ll:162
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr "UTF-8 BOM wird übersprungen"
 
-#: lexer.ll:206
+#: lexer.ll:235
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Eingabe in »%s« umbenannt"
 
-#: lexer.ll:214
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr "zitierte Zeichenkette hinter \\version erwartet"
 
-#: lexer.ll:218
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet"
 
-#: lexer.ll:231
+#: lexer.ll:260
+#, fuzzy
+msgid "integer expected after \\sourcefileline"
+msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet"
+
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "EOF innerhalb eines Kommentares gefunden"
 
-#: lexer.ll:246
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput ist außerhalb von Init-Dateien nicht erlaubt"
 
-#: lexer.ll:270
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "falscher oder ungültiger Bezeichner: »%s«"
 
 #. backup rule
-#: lexer.ll:279
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr "schließendes Anführungszeichen fehlt"
 
-#: lexer.ll:441
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?"
+msgstr ""
+"Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?"
 
-#: lexer.ll:540
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?"
+msgstr ""
+"Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?"
 
-#: lexer.ll:640
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "Ungültiges Zeichen: »%c«"
 
-#: lexer.ll:727
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "Ungültige Fluchtsequenz: »\\%s«"
 
-#: lexer.ll:824
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Falsche lilypond-Version: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:825
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+#, fuzzy
+msgid "consider updating the input with the convert-ly script"
 msgstr "Erwägen Sie die Aktualisierung der Eingabe mit dem Skript convert-ly"
 
-#. TODO: print location
-#: lexer.ll:945
-msgid "can't find signature for music function"
-msgstr "Signatur für Musikfunktion kann nicht gefunden werden"
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
 
-#: backend-library.scm:19 lily.scm:439 ps-to-png.scm:88
-#, lisp-format
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr "»~s« wird aufgerufen..."
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "»~a« gescheitert (~a)"
 
-#: backend-library.scm:84 framework-tex.scm:339 framework-tex.scm:364
-#, lisp-format
+#: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Konvertierung nach »~a«..."
 
-#: backend-library.scm:100
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr "Konvertierung nach ~a..."
 
 #: backend-library.scm:145
-#, lisp-format
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Kopfzeile »~a« wird nach »~a« geschrieben"
 
-#: define-context-properties.scm:13 define-grob-properties.scm:10
+#: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr "Symbol ~S redefiniert"
 
-#: define-markup-commands.scm:251
+#: define-event-classes.scm:119
+#, scheme-format
+msgid "event class ~A seems to be unused"
+msgstr ""
+
+#. should be programming-error
+#: define-event-classes.scm:125
+#, scheme-format
+msgid "translator listens to nonexisting event class ~A"
+msgstr ""
+
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "keine Systeme in \\score-Markup gefunden, hat es einen \\layout-Block?"
 
-#: define-markup-commands.scm:1205
-#, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "keine gültige Dauer: ~a"
 
-#: define-music-types.scm:738
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr "Symbol erwartet: ~S"
 
-#: define-music-types.scm:741
-#, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "Musikobjekt kann nicht gefunden werden: ~S"
 
-#: define-music-types.scm:761
-#, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "unbekannter Wiederholungstyp »~S«"
 
-#: define-music-types.scm:762
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr "Siehe music-types.scm für unterstützte Wiederholungen"
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr "Paar erwartet in doc ~s"
 
 #: document-backend.scm:135
-#, lisp-format
-msgid "can't find interface for property: ~S"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "Schnittstelle für Eigenschaft ~S kann nicht gefunden werden"
 
 #: document-backend.scm:145
-#, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "Unbekannte Grob-Schnittstelle: ~S"
 
 #: documentation-lib.scm:45
-#, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
 msgstr "~S wird verarbeitet..."
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr "~S wird geschrieben..."
 
 #: documentation-lib.scm:172
-#, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "Beschreibung für Eigenschaft ~S (~S) kann nicht gefunden werden"
 
-#: framework-eps.scm:71 framework-eps.scm:72
-#, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
 msgstr "~a wird geschrieben..."
 
-#: framework-ps.scm:275
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr "~S=~S kann nicht eingebettet werden"
 
-#: framework-ps.scm:326
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr "Eine zu ~a passende Datei kann nicht aus ~a gewonnen werden"
 
-#: framework-ps.scm:343
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, fuzzy, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr "Unbekannte Einbettung ~S=~S"
 
-#: framework-ps.scm:373
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Unbekannte Schriftsatzeinbettung ~s ~s ~s"
 
-#: framework-ps.scm:579
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr "<stdout> kann nicht in ~S konvertiert werden"
 
-#: framework-ps.scm:596 framework-ps.scm:599
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr "~S kann nicht mit PostScript-Backend erzeugt werden"
 
-#: framework-ps.scm:606
+#: framework-ps.scm:758
+#, fuzzy
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2023,145 +2091,303 @@ msgstr ""
 "\n"
 "  lilypond -b eps <file>\n"
 "\n"
-"oder die Lilypond-Buch-spezifischen Einstellungen aus der Eingabe entfernen.\n"
+"oder die Lilypond-Buch-spezifischen Einstellungen aus der Eingabe "
+"entfernen.\n"
 
-#: framework-tex.scm:356
-#, lisp-format
+#: framework-tex.scm:360
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "TeX-Dateiname darf keine Leerzeichen enthalten: »~a«"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr "Fehler bei Balkenzuschnitt. (~S,~S) erwartet, ~S gefunden."
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Fehler bei Balkenzuschnitt. ~S 0 erwartet, ~S gefunden."
 
-#: layout-page-layout.scm:439
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
 msgstr "Zeilenumbrüche werden berechnet..."
 
-#: lily-library.scm:458
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unbekannte Einheit: ~S"
 
-#: lily-library.scm:491
-#, lisp-format
-msgid "no \\version statement found,  add~afor future compatibility"
-msgstr "keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität hinzufügen"
+#: lily-library.scm:626
+#, fuzzy, scheme-format
+msgid "no \\version statement found, please add~afor future compatibility"
+msgstr ""
+"keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität "
+"hinzufügen"
 
-#: lily-library.scm:498
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr "alte relative Kompatibilität nicht verwendet"
 
-#: lily.scm:172
-#, lisp-format
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
+msgstr "»%s« kann nicht gefunden werden"
+
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "falscher Typ für Argument ~a; ~a erwartet, ~s gefunden"
 
-#: lily.scm:377 lily.scm:429
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr "gescheiterte Dateien: ~S"
 
-#: lily.scm:419
-#, lisp-format
+#: lily.scm:579
+#, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Ausgabeumleitung nach ~a..."
 
-#: markup.scm:88
-#, lisp-format
+#: ly-syntax-constructors.scm:40
+#, fuzzy
+msgid "Music head function must return Music object"
+msgstr "Musikkopf-Funktion muss Musikobjekt zurückliefern."
+
+#: ly-syntax-constructors.scm:136
+#, scheme-format
+msgid "Invalid property operation ~a"
+msgstr ""
+
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "Falsche Anzahl an Argumenten: ~A erwartet, ~A gefunden: ~S"
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr "Ungültiges Argument an Position ~A. ~A erwartet, ~S gefunden."
 
-#: music-functions.scm:533
-#, lisp-format
+#: music-functions.scm:213
+#, fuzzy
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr "mehr Alternativen als Wiederholungen"
+
+#: music-functions.scm:232
+#, fuzzy, scheme-format
+msgid "expecting 2 elements for chord tremolo, found ~a"
+msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
+
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr "Musik erwartet: ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:584
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr "Taktüberprüfung gescheitert. bei ~a erwartet, stattdessen bei ~a"
 
-#: music-functions.scm:739
-#, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "zitierte Musik »~S« kann nicht gefunden werden"
 
-#: music-functions.scm:947
-#, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "unbekannter Vorzeichenstil: ~S"
 
-#: output-ps.scm:282
+#: output-ps.scm:315
 msgid "utf-8-string encountered in PS backend"
 msgstr "UTF-8-Zeichenkette in PostScript-Backend gefunden"
 
-#: output-svg.scm:41
-#, lisp-format
+#: output-svg.scm:42
+#, scheme-format
 msgid "undefined: ~S"
 msgstr "nicht definiert: ~S"
 
-#: output-svg.scm:121
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#: output-svg.scm:132
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr "Pango-Beschreibung kann nicht entschlüsselt werden: ~a"
 
 #: output-tex.scm:98
-#, lisp-format
-msgid "can't find ~a in ~a"
+#, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "~a kann nicht in ~a gefunden werden"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr "Nicht auf höchster Ebene im Gültigkeitsbereich"
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Dies ist kein \\layout {} Objekt, ~S"
 
+#: paper.scm:129
+#, scheme-format
+msgid "Unknown papersize: ~a"
+msgstr ""
+
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:142
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr "#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden"
+msgstr ""
+"#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden"
 
-#: parser-clef.scm:124
-#, lisp-format
+#: parser-clef.scm:126
+#, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "unbekannter Notenschlüsseltyp »~a«"
 
-#: parser-clef.scm:125
+#: parser-clef.scm:127
 msgid "see scm/clef.scm for supported clefs"
 msgstr "unterstützte Notenschlüssel können in scm/clef.scm gefunden werden"
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "~a mit Rückgabewert ~S beendet"
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "Behauptung gescheitert"
 
+#~ msgid "silly pitch"
+#~ msgstr "sinnlose Tonhöhe"
+
+#~ msgid "show warranty"
+#~ msgstr "Gewährleistung anzeigen"
+
+#~ msgid ""
+#~ "Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
+#~ "\n"
+#~ "Example usage:\n"
+#~ "\n"
+#~ "   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+#~ "   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
+#~ "BOOK\n"
+#~ "   lilypond-book --process='lilypond -I include' BOOK\n"
+#~ msgstr ""
+#~ "LilyPond-Auszüge in gemischtem HTML-, LaTeX- oder texinfo-Dokument "
+#~ "verarbeiten.\n"
+#~ "\n"
+#~ "Beispiel-Aufrufe:\n"
+#~ "\n"
+#~ "   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BUCH\n"
+#~ "   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
+#~ "BUCH\n"
+#~ "   lilypond-book --process='lilypond -I include' BUCH\n"
+
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "MIDI nach LilyPond-Quelltext konvertieren."
+
+#~ msgid "example"
+#~ msgstr "Beispiel"
+
+#~ msgid "loading default font"
+#~ msgstr "Standardschriftart wird geladen"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "Standardschriftart kann nicht gefunden werden: »%s«"
+
+#~ msgid "no one to print a tremolos"
+#~ msgstr "niemand vorhanden für Tremoloausgabe"
+
+#~ msgid "gotcha: ptr=%ul"
+#~ msgstr "erwischt: ptr=%ul"
+
+#~ msgid "distance undefined, assuming 0.1"
+#~ msgstr "Abstand undefiniert, 0.1 angenommen"
+
+#~ msgid "distance=%f"
+#~ msgstr "Abstand=%f"
+
+#~ msgid "no system number set in constrained-breaking"
+#~ msgstr "keine Systemzahl bei Bedingungsverletzung gesetzt"
+
+#~ msgid "couldnnot find line breaking that satisfies constraints"
+#~ msgstr ""
+#~ "es können keine Zeilenumbrüche gefunden werden, die die Bedingungen "
+#~ "erfüllen"
+
+#~ msgid "junking event: `%s'"
+#~ msgstr "Ereignis wird ignoriert: »%s«"
+
+#~ msgid "no one to print a repeat brace"
+#~ msgstr "niemand zur Erzeugung einer Wiederholung"
+
+#~ msgid "cannot find `%s' context"
+#~ msgstr "Kontext »%s« kann nicht gefunden werden"
+
+#~ msgid "Optimal demerits: %f"
+#~ msgstr "Optimale Bewertung: %f"
+
+#~ msgid "no feasible line breaking found"
+#~ msgstr "Keine praktikablen Zeilenumbrüche gefunden"
+
+#~ msgid "crescendo too small"
+#~ msgstr "Crescendo zu kurz"
+
+#~ msgid "print this help"
+#~ msgstr "diese Hilfe ausgeben"
+
+#~ msgid "music for the martians."
+#~ msgstr "Musik für Marsmenschen."
+
+#~ msgid "no one to print a percent"
+#~ msgstr "nichts bekannt, ein Prozent auszugeben"
+
+#~ msgid "Creator: "
+#~ msgstr "Erzeuger: "
+
+#~ msgid "at "
+#~ msgstr "bei "
+
+#~ msgid "in quotation: junking event %s"
+#~ msgstr "in Zitat: Ereignis %s wird verworfen"
+
+#~ msgid "Global shortest duration is %s"
+#~ msgstr "Kleinste globale Zeiteinheit ist %s"
+
+#~ msgid "TFM header of `%s' has only %u word (s)"
+#~ msgstr "TFM Header von »%s« hat nur %u Wort(e)"
+
+#~ msgid ""
+#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
+#~ msgstr "%s: TFM-Datei hat %u Parameter - mehr als die Maximalzahl %u"
+
+#~ msgid "cannot find ascii character: %d"
+#~ msgstr "folgendes ASCII-Zeichen kann nicht gefunden werden: %d"
+
+#~ msgid "no one to print a tuplet start bracket"
+#~ msgstr ""
+#~ "nichts für die Ausgabe einer öffnenden Wertaufteilungsklammer vorhanden"
+
+#~ msgid "unterminated trill spanner"
+#~ msgstr "unbegrenzter Triller"
+
+#~ msgid "identifier should have alphabetic characters only"
+#~ msgstr "Bezeichner sollte nur aus alphabetischen Zeichen bestehen"
+
+#~ msgid "expect 2 elements for Chord tremolo, found %d"
+#~ msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
+
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Falsche lilypond-Version: %s (%s, %s)"
+
+#~ msgid "cannot find signature for music function"
+#~ msgstr "Signatur für Musikfunktion kann nicht gefunden werden"
+
 #~ msgid "lilylib module"
 #~ msgstr "Modul lilylib"
 
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Aufruf: %s [OPTIONEN]... DATEI"
-
 #~ msgid "Binary %s has version %s, looking for version %s"
 #~ msgstr "Binärdatei %s hat Version %s, bei Suche nach Version %s"
 
@@ -2182,19 +2408,25 @@ msgstr "Behauptung gescheitert"
 
 #~ msgid ""
 #~ "  -e, --edit             edit in place\n"
-#~ "  -f, --from=VERSION     start from VERSION [default: \\version found in file]\n"
+#~ "  -f, --from=VERSION     start from VERSION [default: \\version found in "
+#~ "file]\n"
 #~ "  -h, --help             print this help\n"
 #~ "  -n, --no-version       do not add \\version command if missing\n"
-#~ "  -s, --show-rules       print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]\n"
-#~ "  -t, --to=VERSION       convert to VERSION [default: @TOPLEVEL_VERSION@]\n"
+#~ "  -s, --show-rules       print rules [default: --from=0, --"
+#~ "to=@TOPLEVEL_VERSION@]\n"
+#~ "  -t, --to=VERSION       convert to VERSION [default: "
+#~ "@TOPLEVEL_VERSION@]\n"
 #~ "  -v, --version          print program version"
 #~ msgstr ""
 #~ "  -e, --edit             auf der Stelle ändern\n"
-#~ "  -f, --from=VERSION     von VERSION starten [Standard: in Datei gefundene \\version]\n"
+#~ "  -f, --from=VERSION     von VERSION starten [Standard: in Datei "
+#~ "gefundene \\version]\n"
 #~ "  -h, --help             diese Hilfe ausgeben\n"
 #~ "  -n, --no-version       Befehl \\version nicht verwenden, wenn er fehlt\n"
-#~ "  -s, --show-rules       Regeln ausgeben [Standard: --from=0, --to=@TOPLEVEL_VERSION@]\n"
-#~ "  -t, --to=VERSION       in VERSION umwandeln [Standard: @TOPLEVEL_VERSION@]\n"
+#~ "  -s, --show-rules       Regeln ausgeben [Standard: --from=0, --"
+#~ "to=@TOPLEVEL_VERSION@]\n"
+#~ "  -t, --to=VERSION       in VERSION umwandeln [Standard: "
+#~ "@TOPLEVEL_VERSION@]\n"
 #~ "  -v, --version          Programmversion ausgeben"
 
 #~ msgid "%s: skipping: `%s'"
@@ -2218,12 +2450,6 @@ msgstr "Behauptung gescheitert"
 #~ msgid "command exited with value %d"
 #~ msgstr "Kommando mit Rückgabewert %d beendet"
 
-#~ msgid "Example:"
-#~ msgstr "Beispiel:"
-
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "mup nach LilyPond-Quelltext konvertieren."
-
 #~ msgid "debug"
 #~ msgstr "Fehlersuche"
 
@@ -2257,7 +2483,7 @@ msgstr "Behauptung gescheitert"
 #~ msgid "Wrote `%s'"
 #~ msgstr "`%s' geschrieben"
 
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "dlopen erfolglos: %s: %s"
 
 #~ msgid "install package: %s or %s"
@@ -2279,13 +2505,17 @@ msgstr "Behauptung gescheitert"
 #~ msgstr "Passt nicht: `%s'"
 
 #~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr "Bauen Sie alle .afm-Dateien neu, und löschen Sie alle .pk- und .tfm-Dateien."
+#~ msgstr ""
+#~ "Bauen Sie alle .afm-Dateien neu, und löschen Sie alle .pk- und .tfm-"
+#~ "Dateien."
 
 #~ msgid "Rerun with -V to show font paths."
 #~ msgstr "Starten Sie erneut mit -V, um Suchpfade für Schriftarten anzuzeigen"
 
 #~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr "Ein Skript zum Entfernen von Schriftartdateien wird mit dem Quellcode ausgeliefert:"
+#~ msgstr ""
+#~ "Ein Skript zum Entfernen von Schriftartdateien wird mit dem Quellcode "
+#~ "ausgeliefert:"
 
 #~ msgid "beam has less than two visible stems"
 #~ msgstr "Balken hat weniger als zwei sichtbare Notenhälse"
@@ -2306,11 +2536,12 @@ msgstr "Behauptung gescheitert"
 #~ msgid "run in safe mode"
 #~ msgstr "im sicheren Modus laufen lassen"
 
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "Prozentwiederholung der Länge %s kann nicht behandelt werden"
 
 #~ msgid "rest direction not set.  Cannot resolve collision."
-#~ msgstr "Pausenrichtung nicht gesetzt. Kollision kann nicht aufgelöst werden."
+#~ msgstr ""
+#~ "Pausenrichtung nicht gesetzt. Kollision kann nicht aufgelöst werden."
 
 #~ msgid "lilypond -e EXPR means:"
 #~ msgstr "lilypond -e AUSD bedeutet:"
@@ -2318,11 +2549,16 @@ msgstr "Behauptung gescheitert"
 #~ msgid "  Evalute the Scheme EXPR before parsing any .ly files."
 #~ msgstr "  Das Schema AUSD vor der Analyse aller .ly-Dateien auswerten"
 
-#~ msgid "  Multiple -e options may be given, they will be evaluated sequentially."
-#~ msgstr "  Mehrere -e Optionen dürfen angegeben werden, sie werden sequentiell ausgewertet"
+#~ msgid ""
+#~ "  Multiple -e options may be given, they will be evaluated sequentially."
+#~ msgstr ""
+#~ "  Mehrere -e Optionen dürfen angegeben werden, sie werden sequentiell "
+#~ "ausgewertet"
 
-#~ msgid "  The function ly:set-option allows for access to some internal variables."
-#~ msgstr "  Die Funktion ly:set-option erlaubt Zugriff auf einige interne Variablen."
+#~ msgid ""
+#~ "  The function ly:set-option allows for access to some internal variables."
+#~ msgstr ""
+#~ "  Die Funktion ly:set-option erlaubt Zugriff auf einige interne Variablen."
 
 #~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
 #~ msgstr "Aufruf: lilypond -e \"(ly:set-option SYMBOL WERT)\""
@@ -2408,7 +2644,7 @@ msgstr "Behauptung gescheitert"
 #~ msgid "Could not find bounding box of `~a'"
 #~ msgstr "Begrenzungskasten von »~a« konnte nicht gefunden werden"
 
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "CFF/PFA/PFB-Schriftart ~S=~S kann nicht gefunden werden"
 
 #~ msgid "unknown bar glyph: `~S'"
@@ -2441,7 +2677,7 @@ msgstr "Behauptung gescheitert"
 #~ msgid "keep all output, output to directory %s.dir"
 #~ msgstr "Alle Ausgaben aufbewahren, ins Verzeichnis %s.dir ausgeben"
 
-#~ msgid "don't run LilyPond"
+#~ msgid "do not run LilyPond"
 #~ msgstr "LilyPond nicht aufrufen"
 
 #~ msgid "produce MIDI output only"
@@ -2503,10 +2739,14 @@ msgstr "Behauptung gescheitert"
 #~ msgstr "Keine Dateien auf der Kommandozeile angegeben"
 
 #~ msgid "Running LilyPond failed. Rerun with --verbose for a trace."
-#~ msgstr "LilyPond-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für ein Protokoll (Trace)."
+#~ msgstr ""
+#~ "LilyPond-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für "
+#~ "ein Protokoll (Trace)."
 
 #~ msgid "Failed to make PS file. Rerun with --verbose for a trace."
-#~ msgstr "Erzeugung der PS-Datei gescheitert. Versuchen Sie es erneut mit --verbose für ein Protokoll."
+#~ msgstr ""
+#~ "Erzeugung der PS-Datei gescheitert. Versuchen Sie es erneut mit --verbose "
+#~ "für ein Protokoll."
 
 #~ msgid "%s output to <stdout>..."
 #~ msgstr "Ausgabe von %s nach <stdout>..."
@@ -2514,13 +2754,13 @@ msgstr "Behauptung gescheitert"
 #~ msgid "%s output to %s..."
 #~ msgstr "Ausgabe von %s nach %s..."
 
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "Kann Datei nicht finden: `%s.%s'"
 
 #~ msgid "Accidental rule must be pair or context-name; Found %s"
 #~ msgstr "Vorzeichensatz paarweise oder mit Kontextname erwartet; %s gefunden"
 
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "Kann Übersetzer nicht ändern, ist bereits geschehen"
 
 #~ msgid "I'm one myself"
@@ -2577,13 +2817,10 @@ msgstr "Behauptung gescheitert"
 #~ msgid "Install the ec-mftraced package from %s. Aborting"
 #~ msgstr "Abbruch. Paket ec-mftraced von %s installieren."
 
-#~ msgid "No slur to end"
-#~ msgstr "Kein Bindebogen zu beenden"
-
 #~ msgid "Huh?  Got %d, expected %d characters"
 #~ msgstr "Hä? %d Zeichen erhalten, %d erwartet"
 
-#~ msgid "Don't you want polyphonic voices instead?"
+#~ msgid "Donnot you want polyphonic voices instead?"
 #~ msgstr "Wollen Sie nicht stattdessen Mehrstimmigkeit?"
 
 #~ msgid "No volta spanner to end"
@@ -2623,10 +2860,9 @@ msgstr "Behauptung gescheitert"
 #~ msgstr "Schreibe HTML-Menü `%s'..."
 
 #~ msgid "Running LaTeX failed. Rerun with --verbose for a trace."
-#~ msgstr "LaTeX-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für ein Protokoll."
-
-#~ msgid "Process LilyPond snippets in hybrid HTML, LaTeX or texinfo document"
-#~ msgstr "LilyPond-Teile in Mischdatei (HTML, LaTeX oder texinfo) verarbeiten"
+#~ msgstr ""
+#~ "LaTeX-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für ein "
+#~ "Protokoll."
 
 #~ msgid "DIM"
 #~ msgstr "GROE"
@@ -2643,8 +2879,11 @@ msgstr "Behauptung gescheitert"
 #~ msgid "pass OPT quoted to the lilypond command line"
 #~ msgstr "OPT \"zitiert\" an die LilyPond-Kommandozeile übergeben"
 
-#~ msgid "force fontsize for all inline lilypond. DIM is assumed to be in points"
-#~ msgstr "Schriftgröße für eingebettetes LilyPond erzwingen. Einheit für GROE: Punkte"
+#~ msgid ""
+#~ "force fontsize for all inline lilypond. DIM is assumed to be in points"
+#~ msgstr ""
+#~ "Schriftgröße für eingebettetes LilyPond erzwingen. Einheit für GROE: "
+#~ "Punkte"
 
 #~ msgid "deprecated, use --force-music-fontsize"
 #~ msgstr "veraltet, verwenden Sie --force-music-fontsize"
@@ -2661,10 +2900,10 @@ msgstr "Behauptung gescheitert"
 #~ msgid "prepend PREF before each -M dependency"
 #~ msgstr "stelle PRÄF den -M Abhängigkeiten voran"
 
-#~ msgid "don't run lilypond"
+#~ msgid "do not run lilypond"
 #~ msgstr "LilyPond nicht aufrufen"
 
-#~ msgid "don't generate pictures"
+#~ msgid "do not generate pictures"
 #~ msgstr "keine Bilder generieren"
 
 #~ msgid "strip all lilypond blocks from output"
@@ -2676,11 +2915,16 @@ msgstr "Behauptung gescheitert"
 #~ msgid "where to place generated files"
 #~ msgstr "Ziel der generierten Dateien"
 
-#~ msgid "round filled box horizontal extent smaller than blot; decreasing blot"
-#~ msgstr "Breite des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere Kreis"
+#~ msgid ""
+#~ "round filled box horizontal extent smaller than blot; decreasing blot"
+#~ msgstr ""
+#~ "Breite des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere "
+#~ "Kreis"
 
 #~ msgid "round filled box vertical extent smaller than blot; decreasing blot"
-#~ msgstr "Höhe des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere Kreis"
+#~ msgstr ""
+#~ "Höhe des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere "
+#~ "Kreis"
 
 #~ msgid "use output format EXT"
 #~ msgstr "Ausgabeformat EXT benutzen"
@@ -2691,7 +2935,7 @@ msgstr "Behauptung gescheitert"
 #~ msgid "prepend DIR to dependencies"
 #~ msgstr "stelle VERZ den Abhängigkeiten voran"
 
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "kann Anfang des Phrasierungsbogens nicht finden"
 
 #~ msgid "Where SYMBOL VAL pair is any of:"
@@ -2730,22 +2974,29 @@ msgstr "Behauptung gescheitert"
 #~ msgid "Symbol is not a parent context: %s. Ignored"
 #~ msgstr "Symbol ist kein Elternkontext: %s. Ignoriert"
 
-#~ msgid "can't find character number: %d"
+#~ msgid "cannot find character number: %d"
 #~ msgstr "Zeichennummer kann nicht gefunden werden: %d"
 
-#~ msgid "can't find character called: `%s'"
+#~ msgid "cannot find character called: `%s'"
 #~ msgstr "Zeichen kann nicht gefunden werden: `%s'"
 
 #~ msgid "Beam has less than two stems. Removing beam."
 #~ msgstr "Balken hat weniger als zwei Notenhälse. Notenhals wird entfernt."
 
-#~ msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)."
-#~ msgstr "Es kann wahrscheinlich keine optimale Balkenneigung ermittelt werden (keine funktionsfähige Anfangskonfiguration gefunden)"
+#~ msgid ""
+#~ "Not sure that we can find a nice beam slope (no viable initial "
+#~ "configuration found)."
+#~ msgstr ""
+#~ "Es kann wahrscheinlich keine optimale Balkenneigung ermittelt werden "
+#~ "(keine funktionsfähige Anfangskonfiguration gefunden)"
 
-#~ msgid "Nothing to connect extender to on the left.  Ignoring extender event."
-#~ msgstr "Nichts vorhanden, um die Erweiterung nach links zu verbinden. Erweiterungsanforderung wird ignoriert."
+#~ msgid ""
+#~ "Nothing to connect extender to on the left.  Ignoring extender event."
+#~ msgstr ""
+#~ "Nichts vorhanden, um die Erweiterung nach links zu verbinden. "
+#~ "Erweiterungsanforderung wird ignoriert."
 
-#~ msgid "couldn't find any font satisfying "
+#~ msgid "couldnnot find any font satisfying "
 #~ msgstr "konnte keine passende Schriftart finden für "
 
 #~ msgid ""
@@ -2756,7 +3007,9 @@ msgstr "Behauptung gescheitert"
 #~ "Grob %s endet, bevor dies erwartet wurde."
 
 #~ msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen event."
-#~ msgstr "Nichts vorhanden, um den Bindestrich nach links zu verbinden. Bindestrichanforderung wird ignoriert."
+#~ msgstr ""
+#~ "Nichts vorhanden, um den Bindestrich nach links zu verbinden. "
+#~ "Bindestrichanforderung wird ignoriert."
 
 #~ msgid "Score contains errors; will not process it"
 #~ msgstr "Noten enthalten Fehler; keine weitere Verarbeitung"
@@ -2789,7 +3042,8 @@ msgstr "Behauptung gescheitert"
 #~ msgstr "Mensural_ligature: delta-pitch undefiniert bei flexa %d; nehme 0 an"
 
 #~ msgid "Mensural_ligature:flexa-width undefined on flexa %d; assuming 2.0"
-#~ msgstr "Mensural_ligature: flexa-width undefiniert bei flexa %d; nehme 2.0 an"
+#~ msgstr ""
+#~ "Mensural_ligature: flexa-width undefiniert bei flexa %d; nehme 2.0 an"
 
 #~ msgid "silly duration"
 #~ msgstr "sinnlose Dauer"
@@ -2816,7 +3070,8 @@ msgstr "Behauptung gescheitert"
 #~ msgstr "Staff_symbol: Einrückung reicht über das Zeilenende hinaus"
 
 #~ msgid "Error syncing file (disk full?)"
-#~ msgstr "Datei konnte nicht synchronisiert (geschrieben) werden. (Platte voll?)"
+#~ msgstr ""
+#~ "Datei konnte nicht synchronisiert (geschrieben) werden. (Platte voll?)"
 
 #~ msgid "No ties were created!"
 #~ msgstr "Es wurden keine Bindebögen erzeugt!"
@@ -2831,7 +3086,8 @@ msgstr "Behauptung gescheitert"
 #~ msgstr "Vaticana_ligature:delta-pitch -> Kombination wird ignoriert"
 
 #~ msgid "First argument must be a procedure taking one argument"
-#~ msgstr "Das erste Argument muss eine Prozedur sein, welche ein Argument erwartet"
+#~ msgstr ""
+#~ "Das erste Argument muss eine Prozedur sein, welche ein Argument erwartet"
 
 #~ msgid "Expecting musical-pitch value"
 #~ msgstr "Erwarte musikalischen Tonhöhenwert"
@@ -2920,5 +3176,5 @@ msgstr "Behauptung gescheitert"
 #~ msgid "Text_spanner too small"
 #~ msgstr "Textklammer zu klein"
 
-#~ msgid "Can't specify direction for this request"
+#~ msgid "Cannot specify direction for this request"
 #~ msgstr "Es kann keine Richtung für diese Anforderung angegeben werden"
index 9d53d30066045bec03e8bd0797ea9c4ebc0ea3b7..d32790e9d207bb35c956da96d94626d05f2955ba 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,64 +1,67 @@
+# translation of es.po to Spanish
 # Spanish translation of GNU LilyPond - http://lilypond.org
-# Copyright (C) 2002 Free Software Foundation, Inc.
-# Quique <quique@sindominio.net>, 2002.
+# Copyright (C) 2002, 2007 Free Software Foundation, Inc.
 #
+# Quique <quique@sindominio.net>, 2002.
+# Daniel Tonda Castillo <daniel.tonda@gmail.com>, 2007.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 1.4.13\n"
+"Project-Id-Version: lilypond 2.11.11\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: 2002-06-28 15:46CET\n"
-"Last-Translator: Quique <quique@sindominio.net>\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2007-01-14 00:01+0100\n"
+"Last-Translator: Daniel Tonda Castillo <daniel.tonda@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
 
 #: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s"
-msgstr ""
+msgstr "No soy capaz de convertir: %s"
 
 #: convertrules.py:13
 msgid "Please refer to the manual for details, and update manually."
-msgstr ""
+msgstr "Por favor dirígase al manual para más detalles y actualice manualmente."
 
 #: convertrules.py:14
 #, python-format
 msgid "%s has been replaced by %s"
-msgstr ""
+msgstr "%s se reemplazado por %s"
 
 #: convertrules.py:2398
 msgid "LilyPond source must be UTF-8"
-msgstr ""
+msgstr "La fuente LilyPond debe ser UTF-8"
 
 #: convertrules.py:2401
 msgid "Try the texstrings backend"
-msgstr ""
+msgstr "Intente el procesador texstrings"
 
 #: convertrules.py:2404
 #, python-format
 msgid "Do something like: %s"
-msgstr ""
+msgstr "Haga algo cómo: %s"
 
 #: convertrules.py:2407
 msgid "Or save as UTF-8 in your editor"
-msgstr ""
+msgstr "O guárdelo como UTF-8 en su editor."
 
 #: fontextract.py:26
-#, fuzzy, python-format
+#, python-format
 msgid "Scanning %s"
-msgstr "advertencia: "
+msgstr "Analizando %s"
 
 #: fontextract.py:71
 #, python-format
 msgid "Extracted %s"
-msgstr ""
+msgstr "Se ha extraído: %s"
 
 #: fontextract.py:86
-#, fuzzy, python-format
+#, python-format
 msgid "Writing fonts to %s"
-msgstr "no se puede crear el directorio: `%s'"
+msgstr "Escribiendo fuentes a %s"
 
 #: lilylib.py:85 lilylib.py:136
 #, python-format
@@ -72,324 +75,334 @@ msgstr "Ejecutando %s..."
 
 #: lilylib.py:203
 #, python-format
-msgid "Usage: %s\n"
-msgstr ""
+msgid "Usage: %s"
+msgstr "Uso: %s"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Sintaxis: %s [OPCION]... FICHERO"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
+"abc2ly convierte archivos de música ABC (vea\n"
+"%s) a código LilyPond."
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
-msgstr "escribir la salida en el FICHERO"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
+msgstr "escribir la salida a FICHERO"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
-msgstr ""
+msgstr "Sea estricto sobre el éxito"
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
-msgstr ""
+msgstr "preservar la idea de ABC sobre las barras"
+
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+msgid "Report bugs via"
+msgstr "Reporte errores por medio de"
 
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
+"Actualice el código LilyPond a una versión más reciente. Por defecto, actualice desde la \n"
+"versión tomada del comando \\version, a la versión actual de LilyPond."
+
+#: convert-ly.py:43 lilypond-book.py:73
+msgid "Examples:"
+msgstr "Ejemplos:"
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
-#, fuzzy, c-format, python-format
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
+#, c-format, python-format
 msgid "warning: %s"
-msgstr "advertencia: "
+msgstr "advertencia: %s"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
-#, fuzzy, c-format, python-format
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
+#, c-format, python-format
 msgid "error: %s"
-msgstr "error: "
+msgstr "error: %s"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
-msgstr ""
+msgstr "Distribuido bajo los términos de la GNU General Public License."
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
-msgstr ""
+msgstr "No se entrega con GARANTIA."
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
-msgstr ""
+msgstr "VERSIÓN"
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
-msgstr ""
+msgstr "iniciando desde VERSIÓN [por defecto \\version encontrada en archivo]"
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
-msgstr ""
+msgstr "editar en sitio"
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
-msgstr ""
+msgstr "no añadir comando \\version si es que falta"
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr ""
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+msgstr "mostrar reglas [por defecto: --from=0, --to=@TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr ""
+msgstr "convertir a VERSION [default: @TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
-msgstr ""
+msgstr "Aplicando conversión:"
 
 #: convert-ly.py:166
-msgid "error while converting"
-msgstr ""
+msgid "Error while converting"
+msgstr "Error al hacer la conversión"
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr ""
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr "Deteniéndose en la última regla exitosa"
 
-#: convert-ly.py:192
-#, fuzzy, python-format
+#: convert-ly.py:190
+#, python-format
 msgid "Processing `%s'... "
 msgstr "Procesando `%s'..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "no se puede abrir el fichero: `%s'"
 
-#: convert-ly.py:286
-#, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
-msgstr "no puedo encontrar la fuente por defecto: `%s'"
+#: convert-ly.py:284
+#, python-format
+msgid "cannot determine version for `%s'.  Skipping"
+msgstr "no se puede determinar la versión para `%s'.  Saltando"
+
+#: etf2ly.py:1196
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "%s [OPTIONS]... FICHERO ETF"
 
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
-msgstr ""
-
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "escribir la salida en el FICHERO"
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
+msgstr "Enigma Transport Format es un formato usado por el producto Finale de Coda Music.  etf2ly convierte un subconjunto de ETF a un código LilyPond listo para usarse."
 
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "FICHERO"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
-msgstr "mostrar los avisos de garantía y de copyright"
-
-#: lilypond-book.py:70
-msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr ""
+"mostrar los avisos de garantía y de\n"
+"copyright"
+
+#: lilypond-book.py:71
+msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "Procesar fragmentos LilyPond en híbridos de HTML, LaTeX, texinfo o documentos DocBook."
 
-#: lilypond-book.py:86
-#, fuzzy, python-format
+#: lilypond-book.py:78
+msgid "BOOK"
+msgstr "BOOK"
+
+#: lilypond-book.py:87
+#, python-format
 msgid "Exiting (%d)..."
-msgstr "Saliendo..."
+msgstr "Saliendo (%d)..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s "
 
 #: lilypond-book.py:129
-#, fuzzy
 msgid "FILTER"
-msgstr "FICHERO"
+msgstr "FILTRO"
 
 #: lilypond-book.py:132
 msgid "pipe snippets through FILTER [convert-ly -n -]"
-msgstr ""
+msgstr "redirigir fragmentos a través del FILTRO [convert-ly -n -]"
 
 #: lilypond-book.py:135
-#, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
-msgstr "utilizar el formato de salida EXT (scm, ps, tex o as) "
+msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr "use formato de salida FORMATO (texi [default], texi-html, latex, html, docbook)"
 
 #: lilypond-book.py:138
-#, fuzzy
 msgid "add DIR to include path"
-msgstr "añadir DIR a la ruta de búsqueda"
+msgstr "añadir DIR a la ruta de búsqueda"
+
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "DIR"
 
 #: lilypond-book.py:143
-#, fuzzy
 msgid "write output to DIR"
-msgstr "escribir la salida en el FICHERO"
+msgstr "escribir la salida en el DIRECTORIO"
 
 #: lilypond-book.py:147
 msgid "COMMAND"
-msgstr ""
+msgstr "COMANDO"
 
 #: lilypond-book.py:148
 msgid "process ly_files using COMMAND FILE..."
-msgstr ""
+msgstr "procesar archivos_ly usando COMMANDO FICHERO"
+
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr "Crear archivos PDF para usarse con PDFTeX"
 
-#: lilypond-book.py:159
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
+"extraer todas las fuentes POSTCRIPT en INPUT.psfonts, para  LaTeX\n"
+"debe usar esto para dvips -h INPUT.psfonts "
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "ser prolijo"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "mostrar los avisos de garantía y de copyright"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
-msgstr ""
+msgstr "archivo no encontrado: %s"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
-msgstr ""
+msgstr "opción ly en desuso: %s=%s"
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
-msgstr ""
+msgstr "modo de traducción de compatibilidad: %s=%s"
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
-msgstr ""
+msgstr "opción ly en desuso: %s"
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
-msgstr ""
+msgstr "modo de traducción de compatibilidad: %s"
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
-msgstr ""
+msgstr "ignorando opicón ly desconocida: %s"
 
-#: lilypond-book.py:1318
-#, fuzzy, python-format
+#: lilypond-book.py:1388
+#, python-format
 msgid "Opening filter `%s'"
-msgstr "Limpiando `%s'..."
+msgstr "Abriendo filtro `%s'..."
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
-msgstr ""
+msgstr "%s falló (%d)"
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
-msgstr ""
+msgstr "La bitácora de error a continuación:"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
-msgstr ""
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr "no se puede encontrar \\begin{document} en el documento LaTeX"
 
-#: lilypond-book.py:1513
-#, fuzzy
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
-msgstr "Escribiendo `%s'..."
+msgstr "Escribiendo fragmentos..."
 
-#: lilypond-book.py:1518
-#, fuzzy
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "Procesando..."
 
-#: lilypond-book.py:1522
-#, fuzzy
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
-msgstr "calma, %s está al día"
+msgstr "Todos los fragmentos están actualizados"
 
-#: lilypond-book.py:1532
-#, fuzzy, python-format
-msgid "can't determine format for: %s"
-msgstr "no puedo encontrar la fuente por defecto: `%s'"
+#: lilypond-book.py:1605
+#, python-format
+msgid "cannot determine format for: %s"
+msgstr "no puedo determinar el formato para: %s"
 
-#: lilypond-book.py:1543
-#, fuzzy, python-format
+#: lilypond-book.py:1616
+#, python-format
 msgid "%s is up to date."
-msgstr "calma, %s está al día"
+msgstr "%s está actualizado."
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Escribiendo `%s'..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
-msgstr ""
+msgstr "La salida sobreescribirá el archivo de entrada, use --output."
 
-#: lilypond-book.py:1608
-#, fuzzy, python-format
+#: lilypond-book.py:1681
+#, python-format
 msgid "Reading %s..."
-msgstr "Limpiando %s..."
+msgstr "Leyendo %s..."
 
-#: lilypond-book.py:1627
-#, fuzzy
+#: lilypond-book.py:1700
 msgid "Dissecting..."
-msgstr "Listando `%s'..."
+msgstr "Analizando..."
 
-#: lilypond-book.py:1643
-#, fuzzy, python-format
+#: lilypond-book.py:1716
+#, python-format
 msgid "Compiling %s..."
-msgstr "Limpiando %s..."
+msgstr "Compilando %s..."
 
-#: lilypond-book.py:1652
-#, fuzzy, python-format
+#: lilypond-book.py:1725
+#, python-format
 msgid "Processing include: %s"
-msgstr "Procesando `%s'..."
+msgstr "Procesando inclusión: %s"
 
-#: lilypond-book.py:1666
-#, fuzzy, python-format
+#: lilypond-book.py:1739
+#, python-format
 msgid "Removing `%s'"
-msgstr "Invocando `%s'"
+msgstr "Borrando `%s'"
 
-#: lilypond-book.py:1743
-#, fuzzy, python-format
+#: lilypond-book.py:1815
+#, python-format
 msgid "Writing fonts to %s..."
-msgstr "no se puede crear el directorio: `%s'"
+msgstr "Escribiendo fuentes a %s..."
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
-msgstr ""
+msgstr "opción --psfonts no usada"
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
-msgstr ""
+msgstr "al procesar con dvips no contendrá fuentes"
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
-msgstr ""
+msgstr "uso para DVIPS:"
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "advertencia: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "error: "
 
@@ -402,13 +415,14 @@ msgstr "Saliendo..."
 msgid "%s output to `%s'..."
 msgstr "%s producidos en `%s'..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
-msgstr ""
+#: midi2ly.py:871 musicxml2ly.py:485
+#, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "Convertir %s a código LilyPond"
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
-msgstr ""
+msgstr "imprimir notas absolutos"
 
 #: midi2ly.py:877 midi2ly.py:889
 msgid "DUR"
@@ -416,24 +430,23 @@ msgstr "DUR"
 
 #: midi2ly.py:878
 msgid "quantise note durations on DUR"
-msgstr ""
+msgstr "quantizar duraciones de notas en DUR"
 
 #: midi2ly.py:881
 msgid "print explicit durations"
-msgstr ""
+msgstr "imprimir duraciones explícitas"
 
 #: midi2ly.py:882
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
 msgstr ""
 
 #: midi2ly.py:883
-#, fuzzy
 msgid "ALT[:MINOR]"
-msgstr "ACC[:MENOR]"
+msgstr "ALT[:MINOR]"
 
 #: midi2ly.py:888
 msgid "quantise note starts on DUR"
-msgstr ""
+msgstr "quantizar inicios de notas en DUR"
 
 #: midi2ly.py:891
 msgid "DUR*NUM/DEN"
@@ -441,182 +454,194 @@ msgstr ""
 
 #: midi2ly.py:894
 msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr ""
+msgstr "permitir duracione de grupetos DUR*NUM/DEN"
 
 #: midi2ly.py:902
 msgid "treat every text as a lyric"
-msgstr ""
+msgstr "tratar cualquier texto como letra"
 
 #: midi2ly.py:905
-msgid "example"
-msgstr ""
+msgid "Examples"
+msgstr "Ejemplos"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
-msgstr "no se ha especificado ningún fichero en la línea de órdenes."
+msgstr "no se ha especificado ningún fichero en la línea de órdenes."
+
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr "musicxml2ly FICHERO.xml"
+
+#: musicxml2ly.py:476
+#, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Este software es libre. Está protegido por la Licencia Pública\n"
+"General de GNU, y es libre de modificarlo y/o distribuir copias de él bajo ciertas condiciones.  Invoquese como `%s --warranty' para más información."
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr "Usar lxml.etree; usa menos memoria y tiempo del cpu."
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr "escribir la salida en el FICHERO"
 
-#: getopt-long.cc:141
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
-msgstr "la opción `%s' requiere un argumento"
+msgstr "la opción `%s' requiere un argumento"
 
-#: getopt-long.cc:145
+#: getopt-long.cc:144
 #, c-format
-msgid "option `%s' doesn't allow an argument"
-msgstr "la opción `%s' no permite argumentos"
+msgid "option `%s' does not allow an argument"
+msgstr "la opción `%s' no permite argumentos"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
-msgstr "opción no reconocida: `%s'"
+msgstr "opción no reconocida: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
-msgstr "argúmento no válido `%s' para la opción `%s'"
+msgstr "argúmento no válido `%s' para la opción `%s'"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
-#, fuzzy, c-format
+#: warn.cc:68 grob.cc:559 input.cc:82
+#, c-format
 msgid "programming error: %s"
-msgstr "error de programación: "
+msgstr "error de programación: %s"
 
 #: warn.cc:69 input.cc:83
 msgid "continuing, cross fingers"
-msgstr ""
+msgstr "continuando, cruzando los dedos"
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
-msgstr ""
+msgstr "lista de grabado de accidentes debe iniciar con un nombre de contexto: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
-msgstr ""
+msgstr "ignorando accidentes desconocidos: %s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
-msgstr ""
+msgstr "se encontró regla para: se esperaba un par o nombre de contexto para accidente: %s"
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
-msgstr ""
+msgstr "accidente `%s' no encontrado"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
+"vertical alignment llamado antes de un corte de línea.\n"
+"Solamente hacer cross-staff-spanners con PianoStaff."
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
-msgstr ""
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
+msgstr "intentando obtener una traducción para algo que no está en mi ámbito"
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "no encuentro la fuente: `%s'"
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "Cargando la fuente por defecto"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "no puedo encontrar la fuente por defecto: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(ruta de búsqueda: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Abandonando"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
-msgstr ""
+msgstr "El argumento \\applycontext no es un procedimiento"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
-#, fuzzy, c-format
-msgid "can't change, already in translator: %s"
-msgstr "no puedo cambiar de `%s' a `%s'"
+#: auto-change-iterator.cc:63 change-iterator.cc:61
+#, c-format
+msgid "cannot change, already in translator: %s"
+msgstr "no se puede cambiar, ya está en el traductor: %s"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
-msgstr ""
+msgstr "El grupo vertical Axis_group_engraver: ya tiene un padre"
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
-msgstr ""
+msgstr "hay dos Axis_group_engravers?"
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
-msgstr ""
+msgstr "quitando este grupo vertical"
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
-msgstr ""
+msgstr "se trató de calcular la altura pura en un lugar que no es punto de quiebre"
+
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr "un objeto externo al pentagrama debe tener dirección, por defecto deiniéndolo hacia arriba"
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr "Objeto externo al pentagrama %s tiene una extensión vacía"
 
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
-msgstr ""
+msgstr "revisión de compases falló en: %s"
 
 #: beam-engraver.cc:128
 msgid "already have a beam"
-msgstr ""
+msgstr "ya hay una barra de compás "
 
 #: beam-engraver.cc:196
 msgid "unterminated beam"
-msgstr ""
+msgstr "barra sin terminar"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
-msgstr ""
-
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
-msgstr ""
+msgstr "la plica debe tener una estructura rítmica"
 
 #: beam-engraver.cc:246
+msgid "stem does not fit in beam"
+msgstr "la plica no cabe en la barra"
+
+#: beam-engraver.cc:247
 msgid "beam was started here"
-msgstr ""
+msgstr "se inició barra aquí"
 
-#: beam-quanting.cc:306
-#, fuzzy
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
-msgstr "No se ha encontrado ninguna ruptura de línea factible"
+msgstr "No se ha encontrado posicionamiento de barra factible"
 
 #: beam.cc:144
 msgid "removing beam with no stems"
-msgstr ""
+msgstr "quitando barra sin plicas"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
+msgstr "no se pudo encontrar una configuración inicial factible: la inclinación de la barra puede no ser correcta"
 
-#: break-align-interface.cc:208
-#, fuzzy, c-format
+#: break-alignment-interface.cc:208
+#, c-format
 msgid "No spacing entry from %s to `%s'"
-msgstr "No se añade el traductor: `%s'"
+msgstr "No hay entrada de espaciado desde %s a `%s'"
 
 #: change-iterator.cc:23
-#, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
-msgstr "no puedo cambiar de `%s' a `%s'"
+#, c-format
+msgid "cannot change `%s' to `%s'"
+msgstr "no se puede cambiar `%s' a `%s'"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-#, fuzzy
-msgid "can't find context to switch to"
-msgstr "no se puede encontrar el contexto de `%s'"
+msgid "cannot find context to switch to"
+msgstr "no se encuentra encontrar a qué contexto cambiar"
 
 #. We could change the current translator's id, but that would make
 #. errors hard to catch.
@@ -624,98 +649,102 @@ msgstr "no se puede encontrar el contexto de `%s'"
 #. last->translator_id_string () = get_change
 #. ()->change_to_id_string ();
 #: change-iterator.cc:91
-#, fuzzy, c-format
+#, c-format
 msgid "not changing to same context type: %s"
-msgstr "no hay tal contexto: %s"
+msgstr "no se cambiará al mismo tipo de contexto: %s"
 
 #. FIXME: uncomprehensable message
 #: change-iterator.cc:95
 msgid "none of these in my family"
-msgstr "ninguno de éstos en mi familia"
+msgstr "ninguno de éstos en mi familia"
 
 #: chord-tremolo-engraver.cc:88
 msgid "No tremolo to end"
-msgstr ""
+msgstr "No hay trémolo que terminar"
 
 #: chord-tremolo-engraver.cc:110
 msgid "unterminated chord tremolo"
-msgstr "acorde de trémolo sin terminar"
+msgstr "acorde de trémolo sin terminar"
 
 #: chord-tremolo-iterator.cc:33
 #, c-format
 msgid "expect 2 elements for chord tremolo, found %d"
-msgstr ""
+msgstr "esperaba dos elementos para acorde con trémolo, encontré %d"
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
-msgstr ""
+msgstr "no se encontró la clave de %s"
 
 #: cluster.cc:110
-#, fuzzy, c-format
+#, c-format
 msgid "unknown cluster style `%s'"
-msgstr "traductor desconocido: `%s'"
+msgstr "tipo de grupo (cluster) desconocido `%s'"
 
 #: cluster.cc:135
 msgid "junking empty cluster"
-msgstr ""
+msgstr "ignorando cluster vacío"
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr ""
+msgstr "Coherent_ligature_engraver: incrementando `spacing-increment=0.01': ptr=%ul"
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-#, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
-msgstr "no he podido encontrar ninguna fuente satisfactoria "
+msgid "cannot find line breaking that satisfies constraints"
+msgstr "no puedo determinar un corte de línea que satisfaga las restricciones"
 
-#: context-def.cc:128
-#, fuzzy, c-format
+#: context-def.cc:130
+#, c-format
 msgid "program has no such type: `%s'"
-msgstr "El programa no tiene este tipo"
+msgstr "el programa no tiene tal tipo: `%s'"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
-msgstr ""
+msgstr "faltan argumentos del símbolo para \\override y \\revert"
 
 #: context.cc:151
-#, fuzzy, c-format
-msgid "can't find or create new `%s'"
-msgstr "no se puede encontrar o crear: `%s'"
+#, c-format
+msgid "cannot find or create new `%s'"
+msgstr "no se puede encontrar o crear nuevo: `%s'"
 
 #: context.cc:213
-#, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+#, c-format
+msgid "cannot find or create `%s' called `%s'"
 msgstr "no se puede encontrar o crear `%s' llamado `%s'"
 
 #: context.cc:276
 #, c-format
 msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
+msgstr "Evento CreateContext inválido: No puedo crear contexto %s"
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "no se puede encontrar o crear: `%s'"
 
 #: custos.cc:77
 #, c-format
 msgid "custos `%s' not found"
-msgstr ""
+msgstr "custos `%s' no encontrado"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
-msgstr ""
+msgstr "Clase de evento debe ser un símbolo"
 
-#: dispatcher.cc:79
-#, fuzzy, c-format
+#: dispatcher.cc:78
+#, c-format
 msgid "Unknown event class %s"
-msgstr "traductor desconocido: `%s'"
+msgstr "Clase de evento desconocida: `%s'"
+
+#: dots.cc:38
+#, c-format
+msgid "dot `%s' not found"
+msgstr "puntillo `%s' no encontrado"
 
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "no puedo encontrar el principio del (de)crescendo"
 
 #: dynamic-engraver.cc:195
@@ -728,256 +757,240 @@ msgstr "ya tengo un crescendo"
 
 #: dynamic-engraver.cc:200
 msgid "cresc starts here"
-msgstr ""
+msgstr "crescendo inicia aquí"
 
 #: dynamic-engraver.cc:323
 msgid "unterminated (de)crescendo"
 msgstr "(de)crescendo sin terminar"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
-msgstr "prolongación sin terminar"
+msgstr "prolongación sin terminar"
 
 #: font-config.cc:28
 msgid "Initializing FontConfig..."
-msgstr ""
+msgstr "Inicializando FontConfig..."
 
 #: font-config.cc:44
 #, c-format
 msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
+msgstr "Reconstruyendo caché de FontConfig %s, puede tomar un rato..."
 
 #: font-config.cc:55
-#, fuzzy, c-format
+#, c-format
 msgid "failed adding font directory: %s"
-msgstr "no se puede crear el directorio: `%s'"
+msgstr "falló al añadir directorio de fuentes: %s"
 
 #: font-config.cc:57
-#, fuzzy, c-format
+#, c-format
 msgid "adding font directory: %s"
-msgstr "no se puede crear el directorio: `%s'"
+msgstr "añadiendo directorio de fuentes: %s"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
-msgstr ""
+msgstr "Se encontró infinito o NaN al tratar de convertir a un número Real"
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
-msgstr ""
+msgstr "asignando valor de cero"
 
-#: glissando-engraver.cc:91
-#, fuzzy
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
-msgstr "prolongación sin terminar"
+msgstr "glissando sin terminar"
 
 #: global-context-scheme.cc:91 global-context-scheme.cc:107
-#, fuzzy
 msgid "no music found in score"
-msgstr "ya tengo un crescendo"
+msgstr "no se encontró música en la partitura"
 
 #: global-context-scheme.cc:97
-#, fuzzy
 msgid "Interpreting music... "
-msgstr "Interpretación de la música..."
+msgstr "Interpretando música... "
 
 #: global-context-scheme.cc:120
 #, c-format
 msgid "elapsed time: %.2f seconds"
-msgstr ""
+msgstr "tiempo transcurrido: %.2f segundos"
 
 #: gregorian-ligature-engraver.cc:59
-#, fuzzy, c-format
+#, c-format
 msgid "\\%s ignored"
-msgstr "(ignorado)"
+msgstr "\\%s ignorado"
 
 #: gregorian-ligature-engraver.cc:64
 #, c-format
 msgid "implied \\%s added"
-msgstr ""
+msgstr "\\%s implicados añadidos"
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
-#, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
-msgstr "no puedo encontrar el principio del (de)crescendo"
+msgid "cannot apply `\\~' on first head of ligature"
+msgstr "no se puede aplicar `\\~' en pricipio de la ligadura"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
-msgstr ""
+msgid "cannot apply `\\~' on heads with identical pitch"
+msgstr "no se puede aplicar \\~' en cabezas con la misma nota"
 
-#: grob-interface.cc:48
-#, fuzzy, c-format
+#: grob-interface.cc:57
+#, c-format
 msgid "Unknown interface `%s'"
-msgstr "traductor desconocido: `%s'"
+msgstr "Interfase desconocida: `%s'"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
-msgstr ""
-
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
+msgstr "El elemento `%s' no tiene interface para la propiedad `%s'"
 
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
-msgstr ""
+msgstr "Se encontró infinito o NaN"
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
-msgstr "decrescendo demasiado pequeño"
+msgstr "decrescendo demasiado pequeño"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "crescendo demasiado pequeño"
-
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
-msgstr ""
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
+msgstr "no hay tantos corchetes"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
-msgstr ""
+msgstr "grupo de eventos de notas en conflicto"
 
 #: hyphen-engraver.cc:93
-#, fuzzy
 msgid "removing unterminated hyphen"
-msgstr "prolongación sin terminar"
+msgstr "eliminando prolongación sin terminar"
 
 #: hyphen-engraver.cc:107
-#, fuzzy
 msgid "unterminated hyphen; removing"
-msgstr "acorde de trémolo sin terminar"
+msgstr "prolongación sin terminar; eliminando"
 
 #: includable-lexer.cc:53
 msgid "include files are not allowed in safe mode"
-msgstr ""
+msgstr "incluir archivos no se permite en modo seguro"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "no puedo encontrar el fichero: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(ruta de búsqueda: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
-msgstr "posición desconocida"
+msgstr "posición desconocida"
 
-#: ligature-engraver.cc:95
-#, fuzzy
-msgid "can't find start of ligature"
-msgstr "no puedo encontrar el principio del (de)crescendo"
+#: ligature-engraver.cc:93
+msgid "cannot find start of ligature"
+msgstr "no puedo encontrar el principio del ligadura"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
-msgstr ""
+msgstr "no hay límite derecho"
 
-#: ligature-engraver.cc:122
-#, fuzzy
+#: ligature-engraver.cc:120
 msgid "already have a ligature"
-msgstr "ya tengo un crescendo"
+msgstr "ya hay una ligadura"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
-msgstr ""
+msgstr "no hay límite izquierdo"
 
-#: ligature-engraver.cc:175
-#, fuzzy
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
-msgstr "prolongación sin terminar"
+msgstr "ligadura sin terminar"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
-msgstr ""
+msgstr "ignorando silencio: una ligadura no puede contener silencio"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
-msgstr ""
+msgstr "la ligadura no se inició aquí"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(ruta de carga: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
-msgstr ""
+msgid "cannot find property type-check for `%s' (%s)."
+msgstr "no puedo encontrar revisión de propiedad para `%s' (%s)."
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
-msgstr ""
+msgstr "posiblemente un error de dedo?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
-msgstr ""
+msgstr "realizando asignación de todas maneras"
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr ""
+msgstr "revisión de tipo para `%s' falló; el valor `%s' debe ser de tipo  `%s'"
 
-#: lily-lexer.cc:222
-#, fuzzy, c-format
+#: lily-lexer.cc:254
+#, c-format
 msgid "identifier name is a keyword: `%s'"
-msgstr "El nombre del identificativo es una palabra clave: `%s'"
+msgstr "el identificador es una palabra clave: `%s'"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "error al final del fichero (EOF): %s"
 
-#: lily-parser-scheme.cc:30
-#, fuzzy, c-format
+#: lily-parser-scheme.cc:29
+#, c-format
 msgid "deprecated function called: %s"
-msgstr "no puedo encontrar el carácter llamado: `%s'"
+msgstr "función en desuso llamada: %s"
 
-#: lily-parser-scheme.cc:89
-#, fuzzy, c-format
-msgid "Changing working directory to `%s'"
-msgstr "no se puede crear el directorio: `%s'"
+#: lily-parser-scheme.cc:88
+#, c-format
+msgid "Changing working directory to: `%s'"
+msgstr "Cambiando directorio de trabajo a: `%s'"
 
-#: lily-parser-scheme.cc:107
-#, fuzzy, c-format
-msgid "can't find init file: `%s'"
-msgstr "no puedo encontrar el fichero: `%s'"
+#: lily-parser-scheme.cc:106
+#, c-format
+msgid "cannot find init file: `%s'"
+msgstr "no puedo encontrar archivo de inicialización: `%s'"
 
 #: lily-parser-scheme.cc:125
-#, fuzzy, c-format
+#, c-format
 msgid "Processing `%s'"
-msgstr "Procesando `%s'..."
+msgstr "Procesando `%s'"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Analizando..."
 
-#: lily-parser.cc:126
-msgid "braces don't match"
-msgstr ""
+#: lily-parser.cc:127
+msgid "braces do not match"
+msgstr "Llaves no concuerdan"
 
-#: lyric-combine-music-iterator.cc:286
-#, fuzzy, c-format
+#: lyric-combine-music-iterator.cc:291
+#, c-format
 msgid "cannot find Voice `%s'"
-msgstr "no puedo encontrar el fichero: `%s'"
+msgstr "no se puede encontrar Voice `%s'"
 
-#: main.cc:117
-#, fuzzy, c-format
+#: main.cc:116
+#, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
 "License and you are welcome to change it and/or distribute copies of it\n"
 "under certain conditions.  Invoke as `%s --warranty' for more\n"
 "information.\n"
 msgstr ""
-"Este software es libre. Está protegido por la Licencia Pública\n"
-"General de GNU, y quedas invitado a modificarlo y/o distribuir copias de\n"
-"él bajo ciertas condiciones. Invócalo como `%s --warranty' para más\n"
-"información.\n"
+"Este software es libre. Está protegido por la Licencia Pública\n"
+"General de GNU, y es libre para modificarlo y/o distribuir copias de\n"
+"él bajo ciertas condiciones. Invóquelo como `%s --warranty' para más\n"
+"información.\n"
 
-#: main.cc:123
+#: main.cc:122
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -988,1729 +1001,1211 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 msgstr ""
+"    Este programa es libre, puede redistribuirlo y/o \n"
+"modificarlo bajo los términos de la Licencia Públic General GNU versión 2\n"
+"tal como está publicada por la Fundación de Software Libre (FSF).\n"
+"    Este programa se distribuye con la esperanza de que será de utilidad,\n"
+"pero sin NINGUNA CLASE DE GARANTÍA, ni siquiera implicada por COMERCIO o para PROPOSITO PARTICULAR.  Vea la: "
+"Licencia Pública General GNU para más detalles.\n"
+"    Debe haber recibido una copia de la Licencia Públic General GNU con este programa; si no es así, escriba a:\n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+"Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
-msgstr ""
+msgstr "REGRESAR"
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
+"usar procesador BACK (eps, gnome, \n"
+"ps [predet], scm, svg, tex, texstr)"
 
-#: main.cc:156
-#, fuzzy
-msgid "SYM=VAL"
-msgstr "CLAVE=VALOR"
+#: main.cc:155
+msgid "SYM[=VAL]"
+msgstr "SYM[=VAL]"
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
+"asignando opción Scheme SYM a VAL \n"
+"(por defecto: #t)\n"
+"Use -dhelp para obtener ayuda."
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
-msgstr ""
+msgstr "evaluar código scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
-msgstr ""
+msgstr "FORMATOS"
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
+"volcar FORMATO,...  \n"
+"También cómo opciones separadas:"
 
-#: main.cc:164
-#, fuzzy
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
-msgstr "generar una salida PostScript"
-
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
+msgstr "generar DVI (sólo procesador tex)"
 
-#: main.cc:166
-#, fuzzy
+#: main.cc:164
 msgid "generate PDF (default)"
-msgstr "generar una salida PostScript"
+msgstr "generar salida PDF (predeterminado)"
 
-#: main.cc:167
-#, fuzzy
+#: main.cc:165
 msgid "generate PNG"
-msgstr "generar una salida PostScript"
+msgstr "generar salida PNG"
 
-#: main.cc:168
-#, fuzzy
+#: main.cc:166
 msgid "generate PostScript"
-msgstr "generar una salida PostScript"
+msgstr "generar salida PostScript"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
-msgstr ""
+msgstr "generar TeX (sólo procesador tex)"
 
-#: main.cc:170
-msgid "print this help"
-msgstr "esta ayuda"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr "mostrar esta ayuda y salir"
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "CAMPO"
 
-#: main.cc:171
-#, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
-msgstr "escribir campo de cabecera a BASENAME.FIELD"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
+msgstr ""
+"vaciar campo de cabecera FIELD a fichero\n"
+"llamado BASENAME.FIELD"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "DIR"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
-msgstr "añadir DIR a la ruta de búsqueda"
+msgstr "añadir DIR a la ruta de búsqueda"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
-msgstr "usar FICHERO como fichero de inicialización"
+msgstr "usar FICHERO como fichero de inicialización"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
+"chroot a JAIL, convertirse en USER:GROUP\n"
+"y cd en DIR"
 
-#: main.cc:178
-#, fuzzy
+#: main.cc:177
 msgid "do not generate printed output"
-msgstr "generar una salida PostScript"
+msgstr "no generar salida de impresión"
 
-#: main.cc:179
-#, fuzzy
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
-msgstr "escribir la salida en el FICHERO"
+msgstr ""
+"escribir la salida en FICHERO\n"
+"(añadirá extensión)"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
+msgstr "generar previsualización del primer sistema"
+
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
 msgstr ""
+"relocalice usando directorio del \n"
+"programa lilypond"
 
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
+"evitar operaciones inseguras de Scheme y \n"
+"PostScript"
 
-#: main.cc:182
-msgid "print version number"
-msgstr "mostrar número de versión"
+#: main.cc:183
+msgid "show version number and exit"
+msgstr "mostrar número de versión y salir"
 
-#: main.cc:223
-#, fuzzy, c-format
+#: main.cc:224
+#, c-format
 msgid ""
 "Copyright (c) %s by\n"
 "%s  and others."
-msgstr "Copyright (c) %s "
+msgstr ""
+"Copyright (c) %s  por\n"
+"%s  y otros."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
-#, fuzzy, c-format
+#: main.cc:251
+#, c-format
 msgid "Usage: %s [OPTION]... FILE..."
-msgstr "Sintaxis: %s [OPCIÓN]... FICHERO..."
+msgstr "Uso: %s [OPCIÓN]... FICHERO..."
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
-msgstr ""
+msgstr "Grabar música y/o producir MIDI desde FICHERO"
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
-msgstr ""
+msgstr "LilyPond produce una hermosa notación musical"
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
-msgstr ""
+msgstr "Para más información, vea %s"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Opciones: "
 
-#: main.cc:262
-#, fuzzy, c-format
+#: main.cc:263
+#, c-format
 msgid "Report bugs via %s"
-msgstr "Informar de gazapos a %s."
+msgstr "Informe de errores por medio de %s"
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
-msgstr ""
+msgstr "se esperaba(n) %d argumentos con jail, se encontró: %u"
 
-#: main.cc:322
-#, fuzzy, c-format
+#: main.cc:323
+#, c-format
 msgid "no such user: %s"
-msgstr "no existe tal parámetro: %s"
+msgstr "no hay tal usuario: %s"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
-msgstr ""
+msgid "cannot get user id from user name: %s: %s"
+msgstr "no puedo obtener id de usuario a partir del nombre: %s: %s"
 
-#: main.cc:339
-#, fuzzy, c-format
+#: main.cc:340
+#, c-format
 msgid "no such group: %s"
-msgstr "no hay tal contexto: %s"
+msgstr "no hay tal grupo: %s"
 
-#: main.cc:341
-#, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
-msgstr "no puedo cambiar de `%s' a `%s'"
+#: main.cc:342
+#, c-format
+msgid "cannot get group id from group name: %s: %s"
+msgstr "imposible obtener id del grupo desde nombre del grupo: %s: %s"
 
-#: main.cc:349
-#, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
-msgstr "no se puede crear el directorio: `%s'"
+#: main.cc:350
+#, c-format
+msgid "cannot chroot to: %s: %s"
+msgstr "no se puede hacer chroot a: %s: %s"
 
-#: main.cc:356
-#, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
-msgstr "no puedo cambiar de `%s' a `%s'"
+#: main.cc:357
+#, c-format
+msgid "cannot change group id to: %d: %s"
+msgstr "imposible cambiar id de grupo a: %d: %s"
 
-#: main.cc:362
-#, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
-msgstr "no puedo cambiar de `%s' a `%s'"
+#: main.cc:363
+#, c-format
+msgid "cannot change user id to: %d: %s"
+msgstr "imposible cambiar id de usuario a: %d: %s"
 
-#: main.cc:368
-#, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
-msgstr "no se puede crear el directorio: `%s'"
+#: main.cc:369
+#, c-format
+msgid "cannot change working directory to: %s: %s"
+msgstr "imposible cambiar directorio de trabajo a: %s: %s"
 
 #: main.cc:415
 #, c-format
 msgid "Evaluating %s"
-msgstr ""
+msgstr "Evaluando %s"
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
-msgstr ""
+msgstr "ocurrió una excepción: %s"
 
 #. FIXME: constant error message.
 #: mark-engraver.cc:154
 msgid "rehearsalMark must have integer value"
-msgstr ""
+msgstr "rehearsalMark debe tener un valor de entero"
 
 #: mark-engraver.cc:160
 msgid "mark label must be a markup object"
-msgstr ""
+msgstr "etiqueta mark debe tener un objeto markup"
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
-msgstr ""
+msgstr "ligadura con menos de dos notas -> saltando"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr ""
+msgstr "no puedo determinar nota de la primitiva de la ligadura -> saltando"
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
-msgstr ""
+msgstr "ligadura de una sola nota - saltando"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
-msgstr ""
+msgstr "intervalo primo dentro de ligadura -> saltando"
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
-msgstr ""
+msgstr "duración de ligadura mensural no es una de Mx, L, B o S -> saltando"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
+msgstr "semibrevis debe ser seguida de otra igual -> saltando"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
+"sólo puede aparecer una semibreve al principio de una ligadura.\n"
+"y sólo puede haber cero o dos de ellas"
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
 "the penultimate note must be another one,\n"
 "or the ligatura must be LB or SSB"
 msgstr ""
+"terminación de ligadura inválida:\n"
+"cuando la última nota es una brevis descendente.\n"
+"la penúltima nota debe ser otra igual,\n"
+"o la ligadura debe ser LB o SSB"
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
-msgstr ""
+msgstr "no se contempló este caso"
 
 #: mensural-ligature.cc:141
 msgid "Mensural_ligature: unexpected case fall-through"
-msgstr ""
+msgstr "Mensural_ligature: no se esperaba caso no contemplado"
 
 #: mensural-ligature.cc:192
 msgid "Mensural_ligature: (join_right == 0)"
 msgstr ""
 
 #: midi-item.cc:152
-#, fuzzy, c-format
+#, c-format
 msgid "no such MIDI instrument: `%s'"
-msgstr "no hay este instrumento: `%s'"
-
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr ""
+msgstr "no hay tal instrumento MIDI: `%s'"
 
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr ""
+msgstr "experimental: tempralmente afinando (%d) el canal"
 
 #: midi-stream.cc:28
-#, fuzzy, c-format
-msgid "can't open for write: %s: %s"
-msgstr "no se puede abrir el fichero: `%s'"
+#, c-format
+msgid "cannot open for write: %s: %s"
+msgstr "no se puede abrir para escritura: %s: %s"
 
 #: midi-stream.cc:44
-#, fuzzy, c-format
-msgid "can't write to file: `%s'"
-msgstr "no se puede abrir el fichero: `%s'"
+#, c-format
+msgid "cannot write to file: `%s'"
+msgstr "imposible escribir al fichero: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
-msgstr ""
+msgstr "Enviando evento nulo a contexto"
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
-msgstr ""
+msgid "octave check failed; expected \"%s\", found: \"%s\""
+msgstr "revisión de octava falló; esperaba \"%s\", encontré: \"%s\""
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
-msgstr ""
+msgstr "transposición por %s hace que la alteración sea mayor que doble"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
-msgstr ""
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
+msgstr "no se puede agregar textos a notas individuales"
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
-msgstr ""
+msgstr "no se pudo colocar la digitación"
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
-msgstr ""
+msgstr "colocando abajo"
 
-#: note-collision.cc:415
-#, fuzzy
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
-msgstr "Demasiadas columnas de notas que chocan entre sí. Se las ignora."
+msgstr "ignorando demasiadas columnas de notas en conflicto"
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
-msgstr ""
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
+msgstr "no se pueden colocar cabezas de notas y silencios en la misma plica"
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
-msgstr ""
+msgstr "ninguna de las notas `%s' o `%s' encontradas"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
-msgstr ""
+msgstr "Evento de Nota sin tonalidad"
 
 #: open-type-font.cc:33
-#, fuzzy, c-format
-msgid "can't allocate %lu bytes"
-msgstr "no se puede abrir el fichero: `%s'"
+#, c-format
+msgid "cannot allocate %lu bytes"
+msgstr "No se puede asignar %lu bytes"
 
 #: open-type-font.cc:37
-#, fuzzy, c-format
-msgid "can't load font table: %s"
-msgstr "no encuentro la fuente: `%s'"
+#, c-format
+msgid "cannot load font table: %s"
+msgstr "no se puede cargar tabla de fuentes: %s"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
-msgstr ""
+msgstr "formato de fuente no soportado: %s"
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
-msgstr ""
+msgstr "error desconocido: %d al leer archivo de fuente: %s"
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
-msgstr ""
+msgid "FT_Get_Glyph_Name() returned error: %u"
+msgstr "FT_Get_Glyph_Name() regresó error: %u"
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
-msgstr ""
+msgstr "no puedo ajustar primer vuelta de página a una sóla página.  Considere asignar primero un número par para la primer página."
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
+msgstr "Calculando paginación y cortes de línea (%d posibles cortes de página)"
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
-#, fuzzy
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
-msgstr "Creando voces..."
+msgstr "Creando sistemas..."
 
-#: pango-font.cc:215
-#, fuzzy, c-format
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+"El glifo no tiene nombre, pero la fuente soporta el nombrado de glifos.\n"
+"Saltando glifo U+%0X, archivo %s"
+
+#: pango-font.cc:224
+#, c-format
 msgid "no PostScript font name for font `%s'"
-msgstr "no es un fichero PostScript: `%s'"
+msgstr "no existe esa fuente PostScript: `%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
-msgstr ""
+msgstr "Fuente FreeType no tiene un nombre de fuente PostScript"
 
 #: paper-outputter-scheme.cc:33
-#, fuzzy, c-format
+#, c-format
 msgid "Layout output to `%s'..."
-msgstr "%s producidos en `%s'..."
+msgstr "Diseño de página generado en `%s'..."
 
 #: paper-score.cc:105
-#, fuzzy
 msgid "Calculating line breaks..."
-msgstr "Calculando las posiciones de las columnas"
+msgstr "Calculando cortes de línea..."
 
 #: paper-score.cc:118
-#, fuzzy, c-format
+#, c-format
 msgid "Element count %d (spanners %d) "
-msgstr "Elementos contados %d"
+msgstr "Elementos contados %d (spanners %d) "
 
 #: paper-score.cc:122
-#, fuzzy
 msgid "Preprocessing graphical objects..."
-msgstr "Preprocesando elementos..."
+msgstr "Preprocesando objetos gráficos..."
 
 #: parse-scm.cc:83
 msgid "GUILE signaled an error for the expression beginning here"
-msgstr ""
+msgstr "GUILE señaló un error para la expresión iniciada aquí"
 
 #: percent-repeat-engraver.cc:200
-#, fuzzy
 msgid "unterminated percent repeat"
-msgstr "prolongación sin terminar"
+msgstr "repetición de porcentaje sin terminar"
 
 #: performance.cc:45
-#, fuzzy
 msgid "Track..."
-msgstr "Pista ... "
+msgstr "Pista..."
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
-msgstr ""
+msgstr "Se envolvió al canal MIDI"
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
-msgstr ""
+msgstr "remapeando modulo 16"
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "Salida MIDI a `%s'..."
 
 #: phrasing-slur-engraver.cc:146
 msgid "unterminated phrasing slur"
-msgstr ""
+msgstr "ligadura de praseo no terminada"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr ""
+msgstr "esperaba tres cadenas de texto para pedales de piano, se encontraron: %ld"
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
-msgstr ""
+msgid "cannot find start of piano pedal: `%s'"
+msgstr "No se encuentra pedal de piano inicial: `%s'"
 
-#: piano-pedal-engraver.cc:377
-#, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
-msgstr "no puedo encontrar el principio del (de)crescendo"
+#: piano-pedal-engraver.cc:347
+#, c-format
+msgid "cannot find start of piano pedal bracket: `%s'"
+msgstr "no se encuentra el principio del pedal: `%s'"
 
-#: program-option.cc:195
-#, fuzzy, c-format
+#: program-option.cc:205
+#, c-format
 msgid "no such internal option: %s"
-msgstr "no hay este instrumento: `%s'"
+msgstr "no existe esa opción: %s"
 
 #: property-iterator.cc:74
 #, c-format
 msgid "not a grob name, `%s'"
-msgstr ""
+msgstr "No es un nombre de elemento, `%s'"
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
-msgstr ""
+msgstr "Falló la revisión de octava, se obtuvo: "
 
 #: relocate.cc:44
-#, fuzzy, c-format
-msgid "Setting %s to %s\n"
-msgstr "no se puede crear el directorio: `%s'"
+#, c-format
+msgid "Setting %s to %s"
+msgstr "Asignando %s a %s"
 
-#: relocate.cc:58
-#, fuzzy, c-format
+#: relocate.cc:59
+#, c-format
 msgid "no such file: %s for %s"
-msgstr "no hay tal contexto: %s"
+msgstr "no hay tal archivo: %s para %s"
 
-#: relocate.cc:68 relocate.cc:86
-#, fuzzy, c-format
+#: relocate.cc:69 relocate.cc:87
+#, c-format
 msgid "no such directory: %s for %s"
-msgstr "no hay tal contexto: %s"
+msgstr "no existe el directorio: %s para %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
-msgstr ""
+msgstr "Relocación: prefijo de compilación=%s, nuevo prefijo=%s"
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
-msgstr ""
+msgstr "Relocación: framework_prefix=%s"
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
+msgstr "Relocación: es absoluta: argv0=%s"
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
-msgstr ""
+msgstr "Relocación: desde cwd: argv0=%s"
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
+"Relocación: desde TRAYECTO=%s\n"
+"argv0=%s"
 
-#: relocate.cc:353
-#, fuzzy, c-format
-msgid "Relocation file %s\n"
-msgstr "no se puede abrir el fichero: `%s'"
-
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "no se puede abrir el fichero: `%s'"
+#: relocate.cc:354
+#, c-format
+msgid "Relocation file: %s"
+msgstr "Archivo de relocación: %s"
 
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
-msgstr ""
+msgstr "Comando de relocación desconocido: %s"
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
-msgstr ""
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
+msgstr "no puedo resolver colisión de silencios: no se fijó dirección de silencio"
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
-msgstr ""
+msgstr "demasiados silencios en colisión"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
-msgstr ""
+msgstr "silencio `%s' no encontrado"
 
-#: score-engraver.cc:68
-#, fuzzy, c-format
+#: score-engraver.cc:67
+#, c-format
 msgid "cannot find `%s'"
-msgstr "no se puede encontrar: `%s'"
+msgstr "imposible encontrar: `%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
-msgstr ""
+msgstr "La fuente de música no ha sido instalada correctamente"
 
-#: score-engraver.cc:72
-#, fuzzy, c-format
+#: score-engraver.cc:71
+#, c-format
 msgid "Search path `%s'"
-msgstr "(ruta de búsqueda: `%s')"
+msgstr "Ruta de búsqueda: `%s'"
+
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "Abortando"
 
-#: score.cc:222
-#, fuzzy
+#: score.cc:225
 msgid "already have music in score"
-msgstr "ya tengo un crescendo"
+msgstr "debe existir música en la partitura"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
-msgstr ""
+msgstr "esta es la música previa"
 
-#: score.cc:228
-#, fuzzy
+#: score.cc:231
 msgid "errors found, ignoring music expression"
-msgstr ""
-"Erreurs trouvées/*, pas de traitement de la feuille de musique*/ Se han "
-"encontrado errores/*, no se procesa la partitura*/"
+msgstr "se encontraron errores, ignorando expresión musical"
 
 #. FIXME:
 #: script-engraver.cc:102
-#, fuzzy
-msgid "don't know how to interpret articulation: "
-msgstr "No se sabe como interpretar la articulación `%s'"
+msgid "do not know how to interpret articulation: "
+msgstr "no se sabe como interpretar la articulación `%s'"
 
 #: script-engraver.cc:103
 msgid "scheme encoding: "
-msgstr ""
+msgstr "codificación scheme"
 
 #: simple-spacer.cc:375
 #, c-format
 msgid "No spring between column %d and next one"
-msgstr ""
+msgstr "No hay separación entre la columna %d y la siguiente"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
-msgstr ""
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "dirección de %s es inválida: %d"
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
-msgstr ""
+msgstr "ligadura sin terminar"
 
-#: slur-engraver.cc:165
-#, fuzzy
-msgid "can't end slur"
-msgstr "no se puede encontrar: `%s'"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
+msgstr "no se puede terminar frase"
 
 #: source-file.cc:74
 #, c-format
 msgid "expected to read %d characters, got %d"
-msgstr ""
+msgstr "se esperaba leer %d caracteres, se obtuvieron %d"
 
 #: staff-symbol-engraver.cc:62
 msgid "staff-span event has no direction"
-msgstr ""
+msgstr "evento de 'staff-span' sin idirección"
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
-msgstr ""
+msgstr "la duración del trémolo es demasiado larga"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
-msgstr ""
+msgstr "añadiendo cabeza de nota a plica incompatible (tipo = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
-msgstr ""
+msgstr "Quizás la entrada deba especificar voces polifónicas"
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
-msgstr ""
+msgstr "longitud extraña de plica, revisando barras angostas"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
-msgstr ""
+msgstr "bandera `%s' no encontrada"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
-msgstr ""
+msgstr "flag stroke `%s' no encontrada"
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Elementos contados %d."
 
-#: system.cc:270
-#, fuzzy, c-format
+#: system.cc:276
+#, c-format
 msgid "Grob count %d"
 msgstr "Elementos contados %d"
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
-msgstr ""
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
+msgstr "no se puede encontrar inicio de spanner de texto"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
-msgstr ""
+msgstr "ya hay un spanner de texto"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
-msgstr ""
+msgstr "spanner de texto sin terminar"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
-msgstr ""
+msgstr "ligadura solitaria"
 
 #.
 #. Todo: should make typecheck?
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
-msgstr ""
+msgstr "se encontró un compás extraño: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr ""
+msgstr "no se encontró un símbolo de compás `%s'; revirtiendo a estilo numerado"
 
 #: translator-ctors.cc:52
 #, c-format
 msgid "unknown translator: `%s'"
 msgstr "traductor desconocido: `%s'"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "no se puede encontrar: `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
-msgstr ""
+msgstr "Dos eventos %s simultáneos, descartando este"
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
-msgstr ""
+msgstr "Evento %s previo aquí"
 
-#: trill-spanner-engraver.cc:67
-#, fuzzy
-msgid "can't find start of trill spanner"
-msgstr "no puedo encontrar el principio del (de)crescendo"
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
+msgstr "no se encuentra el inicio del trino"
 
-#: trill-spanner-engraver.cc:79
-#, fuzzy
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
-msgstr "ya tengo un crescendo"
+msgstr "ya hay un trino"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
-msgstr ""
+msgstr "se ignora prefijo(s) `%s' de esta nota de acuerdo a las restricciones de estilo de ligadura seleccionada"
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr ""
+msgstr "Vaticana_ligature_engraver: asignando `spacing-increment = %f': ptr =%ul"
 
 #: vaticana-ligature.cc:84
 msgid "flexa-height undefined; assuming 0"
-msgstr ""
+msgstr "flexa-height no definida, se asume 0"
 
 #: vaticana-ligature.cc:89
 msgid "ascending vaticana style flexa"
-msgstr ""
+msgstr "estilo ascendente vaticana flexa"
 
 #: vaticana-ligature.cc:177
 msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
-msgstr ""
+msgstr "Vaticana_ligature: unión cero join (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
-#, fuzzy
-msgid "can't end volta spanner"
-msgstr "no puedo encontrar el principio del (de)crescendo"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
+msgstr "no se encuentra en final de la repetición"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
-msgstr ""
+msgstr "ya existe un spanner de volta, terminando este de forma prematura"
 
-#: volta-engraver.cc:157
-#, fuzzy
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
-msgstr "ya tengo un crescendo"
+msgstr "ya hay un final de volta"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr "Abandonando"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr ""
+msgstr "\\paper no puede ser usado en \\score, mejor use \\layout"
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
-msgstr ""
+msgstr "se requiere \\paper para la sección paper"
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
-msgstr ""
+msgstr "El nombre del elemento debe ser alfanumérico"
 
-#: parser.yy:1481
-#, fuzzy
+#: parser.yy:1475
 msgid "second argument must be pitch list"
-msgstr "El segundo argumento debe ser un símbolo"
+msgstr "El segundo argumento debe ser una lista de tonos"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
-msgstr ""
+msgstr "Debe estar en modo Lyric para letra"
 
-#: parser.yy:1612
+#: parser.yy:1604
 msgid "expecting string as script definition"
-msgstr ""
+msgstr "esperando una cadena de texto como definición del script"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
-msgstr "no es una duración: %d"
+msgstr "no es una duración: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
-msgstr ""
+msgstr "debe estar en modo de Note para notas"
 
-#: parser.yy:2004
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
-msgstr ""
+msgstr "debe estar en modo Chord para acordes"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
-msgstr ""
+msgstr "se encontró caracter UTF-8 BOM aislado"
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
-msgstr ""
+msgstr "Saltando UTF-8 BOM"
 
-#: lexer.ll:236
-#, fuzzy, c-format
+#: lexer.ll:235
+#, c-format
 msgid "Renaming input to: `%s'"
-msgstr "Limpiando `%s'..."
+msgstr "Renombrando entrada a: `%s'"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
-msgstr ""
+msgstr "se esperaba cadena entre comillas después de \\version"
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
-msgstr ""
+msgstr "se esperaba cadena entre comillas después de \\sourcefilename"
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
-msgstr ""
+msgstr "se esperaba un entero después de \\sourcefileline"
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
-msgstr ""
+msgstr "Se encontró FIN de FICHERO dentro de un comentario"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
-msgstr ""
+msgstr "\\maininput no es permitido fuera de los archivos de incicialización"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "identificativo equivocado o no definido: `%s'"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
-msgstr ""
+msgstr "comillas de cierre faltantes"
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr ""
+msgstr "Se encontró un corchete al final de una letra. ¿Olvidó poner espacio?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr ""
+msgstr "Se encontró un corchete al final de un markup. ¿Olvidó poner espacio?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
-msgstr "carácter no válido: `%c'"
+msgstr "carácter no válido: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
-msgstr ""
+msgstr "cadena de escape desconocida: `\\%s'"
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "versión de lilypond incorrecta: %s (%s, %s)"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr "versión de archivo demasiado vieja: %s (más antigua soportada: %s)"
 
-#: lexer.ll:883
-#, fuzzy
-msgid "Consider updating the input with the convert-ly script"
-msgstr ""
-"Considere la conversión de la entrada con ayuda del guión (script) convert-ly"
+#: lexer.ll:881 lexer.ll:882
+msgid "consider updating the input with the convert-ly script"
+msgstr "considere actualizar la entrada con el script convert-ly"
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr "programa demasiado viejo: %s (archivo requiere: %s)"
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
-msgstr "Invocando `%s'"
+msgstr "Invocando `~a'..."
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
-msgstr ""
+msgstr "`~a' falló (~a)"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
-msgstr "Escribiendo `%s'..."
+msgstr "Convirtiendo a `~a'..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
-msgstr "Escribiendo `%s'..."
+msgstr "Convirtiendo a ~a..."
 
-#: backend-library.scm:156
-#, fuzzy, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
-msgstr "escribiendo el campo de cabecera `%s' a `%s'"
+msgstr "Escribiendo el campo de cabecera `~a' to `~a'..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
-msgstr ""
+msgstr "símbolo ~S redefinido"
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
-msgstr ""
+msgstr "evento de clase ~A parece no ser usado"
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
-msgstr ""
+msgstr "traductor escucha a un evento de clase inexistente ~A"
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr ""
+msgstr "No se encontraron sistemas en el bloque \\score, tiene un bloque de \\layout?"
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
-msgstr "no es una duración: %d"
+msgstr "no representa una duración válida: ~a"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
-msgstr ""
+msgstr "se esperaba un símbolo:~S"
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
-msgstr "no se puede encontrar el contexto de `%s'"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
+msgstr "no se encuentra objeto musical: ~S"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
-msgstr "traductor desconocido: `%s'"
+msgstr "tipo de repetición desconocido `~S'"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
-msgstr ""
+msgstr "Vea music-types.scp para repeticiones soportadas"
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
-msgstr ""
+msgstr "se esperaba un par en doc ~s"
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
-msgstr "no puedo encontrar el carácter número: %d"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
+msgstr "no se encuentra interface para la propiedad: ~S"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
-msgstr "traductor desconocido: `%s'"
+msgstr "Interface de elemento desconocida: ~S"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
-msgstr "Procesando..."
+msgstr "Procesando ~S..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
-msgstr "Escribiendo `%s'..."
+msgstr "Escribiendo ~S..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
-msgstr "no puedo encontrar el carácter número: %d"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
+msgstr "no se encuentra la descripción para la propiedad ~S(~S)"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
-msgstr "Escribiendo `%s'..."
-
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
-msgstr ""
-
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
-msgstr "No se sabe como interpretar la articulación `%s'"
-
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
-msgstr ""
-
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
-msgstr ""
-
-#: framework-ps.scm:639
+msgstr "Escribiendo ~a..."
+
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
+msgstr "no se puede empotrar ~S=~S"
+
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
+msgstr "no se puede extraer archivo que concuerde ~a desde ~a"
+
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr "se ignora como empotrar ~S=~S"
+
+#: framework-ps.scm:380
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
+msgstr "no se sabe como empotrar la fuente ~s ~s ~s"
+
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
+msgstr "no se puede convertir <stdout> a ~S"
+
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
+msgstr "no se puede generar ~S usando el backend postscript"
+
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
 "\n"
 "or remove the lilypond-book specific settings from the input.\n"
 msgstr ""
+"\n"
+"El procesador PostScript no soporta la infraestructura 'clásica'.\n"
+"Use el procesador EPS en su lugar.\n"
+"  lilipond -b eps <archivo>\n"
+"\\ "
+"o elimine sintaxis específicas de lilypond-book de la entrada.\n"
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
-msgstr "el nombre del fichero no debería contener espacios: `%s'"
+msgstr "El nombre del archivo TeX no puede contener espacios: `~a'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
+msgstr "Error en cuantizado de barras. Esperaba (~S,~S) se encontró ~S"
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
+msgstr "Error en cuantizado de barras. Esperaba ~S 0, se encontró ~S"
 
-#: layout-page-layout.scm:353
-#, fuzzy
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
-msgstr "Calculando las posiciones de las columnas"
+msgstr "Calculando cortes de página..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
-msgstr "traductor desconocido: `%s'"
+msgstr "unidad desconocida: ~S"
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
-msgstr ""
+msgstr "no se encontró enunciado \\version, por favor añáda ~a para compatibilidad futura."
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
-msgstr ""
+msgstr "old relative: compatibilidad anitgua no se usó"
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
-msgstr "no se puede encontrar: `%s'"
+#: lily.scm:144
+#, scheme-format
+msgid "cannot find: ~A"
+msgstr "no se puede encontrar: ~A"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr ""
+msgstr "argumento erróneo ~a.  Se esperaba ~a, se encontró ~s"
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
-msgstr ""
+msgstr "se falló en los archivos: ~S"
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, scheme-format
 msgid "Redirecting output to ~a..."
-msgstr "dependencias producidas en `%s'..."
+msgstr "Redirigiendo salida a ~a..."
 
 #: ly-syntax-constructors.scm:40
 msgid "Music head function must return Music object"
-msgstr ""
+msgstr "Función de cabecera de Music debe regresar un objeto Music."
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
-msgstr ""
+msgstr "Operación de propiedad inválida ~a"
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr ""
+msgstr "Cantidad errónea de argumentos.  Esperaba: ~A, se encontró ~A: ~S"
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr ""
+msgstr "Argumento erróneo en la posición ~A. .Esperaba: ~A, se encontró: ~S"
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
-msgstr ""
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr "Más alternativas que repeticiones.  Descartando alternativas excedentes."
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr ""
+msgstr "se esperaban dos elementos den trémolo de acorde, se encontró ~a"
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
-msgstr ""
+msgstr "se esperaba música: ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
-msgstr ""
+msgstr "Revisión de compases falló. Esperaba estar en ~a, en vez de ~a "
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
-msgstr "no encuentro la fuente: `%s'"
+#: music-functions.scm:748
+#, scheme-format
+msgid "cannot find quoted music: `~S'"
+msgstr "no se encuentra la música: `~S'"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
-msgstr "traductor desconocido: `%s'"
+msgstr "estilo desconocido de accidentes: ~S"
 
 #: output-ps.scm:315
 msgid "utf-8-string encountered in PS backend"
-msgstr ""
+msgstr "se encontró una cadena utf-8 en el procesador PS"
 
 #: output-svg.scm:42
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
-msgstr "prolongación sin terminar"
+msgstr "indefinido: ~S"
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
-msgstr ""
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
+msgstr "no puedo descifrar descripción Pango: ~a"
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
-msgstr "no encuentro la fuente: `%s'"
+#, scheme-format
+msgid "cannot find ~a in ~a"
+msgstr "no se puede enconrtar ~a en ~a"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
-msgstr ""
+msgstr "No en el ámbito superior"
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
-msgstr ""
+msgstr "Este no es un objeto \\layout{}, ~S"
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
-msgstr ""
+msgstr "papersize (tamaño de papel) desconocido: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr ""
+msgstr "Debe usar #(set-paper-size .. ) dentro de \\paper { ... }"
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "unknown clef type `~a'"
-msgstr "traductor desconocido: `%s'"
+msgstr "tipo de clave desconocida `~a'"
 
 #: parser-clef.scm:127
 msgid "see scm/clef.scm for supported clefs"
-msgstr ""
+msgstr "vea scm/clef.scm para las claves soportadas"
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
-msgstr "fin de la orden con valor %d"
+msgstr "~a terminó con estado: ~S"
 
 #: to-xml.scm:190
-msgid "assertion failed"
-msgstr ""
-
-#~ msgid "no one to print a tremolos"
-#~ msgstr "ninguno para la impresión de trémolos"
-
-#, fuzzy
-#~ msgid "junking event: `%s'"
-#~ msgstr "Invocando `%s'"
-
-#~ msgid "no one to print a repeat brace"
-#~ msgstr "ninguno para la impresión de llaves repetidas"
-
-#~ msgid "can't find `%s' context"
-#~ msgstr "no se puede encontrar el contexto de `%s'"
-
-#, fuzzy
-#~ msgid "no feasible line breaking found"
-#~ msgstr "No se ha encontrado ninguna ruptura de línea factible"
-
-#~ msgid "Creator: "
-#~ msgstr "Creador: "
-
-#, fuzzy
-#~ msgid "at "
-#~ msgstr ", en "
-
-#, fuzzy
-#~ msgid "in quotation: junking event %s"
-#~ msgstr "Invocando `%s'"
-
-#, fuzzy
-#~ msgid "unterminated trill spanner"
-#~ msgstr "prolongación sin terminar"
-
-#, fuzzy
-#~ msgid "identifier should have alphabetic characters only"
-#~ msgstr "El identificativo debería contener solamente caracteres alfabéticos"
-
-#, fuzzy
-#~ msgid "can't find signature for music function"
-#~ msgstr "no se puede encontrar el contexto de `%s'"
-
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Sintaxis: %s [OPTIONS]... FICHERO"
-
-#, fuzzy
-#~ msgid "Opening pipe `%s'"
-#~ msgstr "Limpiando `%s'..."
-
-#~ msgid "(ignored)"
-#~ msgstr "(ignorado)"
-
-#~ msgid "Cleaning %s..."
-#~ msgstr "Limpiando %s..."
-
-#, fuzzy
-#~ msgid "Usage: %s [OPTION]... [FILE]..."
-#~ msgstr "Sintaxis: %s [OPCIÓN]... FICHERO..."
-
-#, fuzzy
-#~ msgid "%s: skipping: `%s'"
-#~ msgstr "no existe tal parámetro: %s"
-
-#, fuzzy
-#~ msgid "print version information"
-#~ msgstr "mostrar número de versión"
-
-#~ msgid "getopt says: `%s'"
-#~ msgstr "getopt() dice: `%s'"
-
-#~ msgid "command exited with value %d"
-#~ msgstr "fin de la orden con valor %d"
-
-#, fuzzy
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "Convertir mup a ly."
-
-#~ msgid "debug"
-#~ msgstr "depurar"
-
-#~ msgid "define macro NAME [optional expansion EXP]"
-#~ msgstr "define la macro NOMBRE [EXPRESIÓN de expansión opcional]"
-
-#~ msgid "only pre-process"
-#~ msgstr "solamente preprocesar"
-
-#~ msgid "no such context: %s"
-#~ msgstr "no hay tal contexto: %s"
-
-#~ msgid "Processing `%s'..."
-#~ msgstr "Procesando `%s'..."
-
-#, fuzzy
-#~ msgid "Wrote `%s'"
-#~ msgstr "Escribiendo `%s'..."
-
-#, fuzzy
-#~ msgid "can't dlopen: %s: %s"
-#~ msgstr "no se puede abrir el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "install package: %s or %s"
-#~ msgstr "no puedo cambiar de `%s' a `%s'"
-
-#, fuzzy
-#~ msgid "parsing AFM file: `%s'"
-#~ msgstr "Error de análisis sintáctico del fichero AFM: `%s'"
-
-#~ msgid "checksum mismatch for font file: `%s'"
-#~ msgstr "suma de control no acorde para el fichero de fuentes: `%s'"
-
-#~ msgid "does not match: `%s'"
-#~ msgstr "no concuerda: `%s'"
-
-#, fuzzy
-#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ "Reconstruir todos los ficheros .afm, y borrar todos los ficheros .pk y ."
-#~ "tfm. Re-ejecutar con la opción -V para mostrar las rutas de las fuentes."
-
-#, fuzzy
-#~ msgid "adding lilypond directory: %s"
-#~ msgstr "no se puede crear el directorio: `%s'"
-
-#~ msgid "Separation_item:  I've been drinking too much"
-#~ msgstr "Separation_item: He bebido demasiado"
-
-#, fuzzy
-#~ msgid "suspect duration in beam: %s"
-#~ msgstr "no es una duración: %d"
-
-#, fuzzy
-#~ msgid "syntax error: cannot back up"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "Stack now"
-#~ msgstr "pista "
-
-#, fuzzy
-#~ msgid "Reading a token: "
-#~ msgstr "Limpiando `%s'..."
-
-#, fuzzy
-#~ msgid "syntax error, unexpected %s"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "syntax error; also memory exhausted"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "syntax error"
-#~ msgstr "error no fatal: "
-
-#, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
-#~ msgstr "no encuentro la fuente: `%s'"
-
-#, fuzzy
-#~ msgid "unknown bar glyph: `~S'"
-#~ msgstr "traductor desconocido: `%s'"
-
-#, fuzzy
-#~ msgid "Extracting fonts to %s..."
-#~ msgstr "no se puede crear el directorio: `%s'"
-
-#, fuzzy
-#~ msgid "Writing %s..."
-#~ msgstr "Escribiendo `%s'..."
-
-#, fuzzy
-#~ msgid "Second argument must be pitch list."
-#~ msgstr "El segundo argumento debe ser un símbolo"
-
-#, fuzzy
-#~ msgid "programming error: "
-#~ msgstr "error de programación: "
-
-#, fuzzy
-#~ msgid "Programming error: "
-#~ msgstr "error de programación: "
-
-#~ msgid "Can't switch translators, I'm there already"
-#~ msgstr "No puedo pasar de un traductor al otro, ya estoy allí"
-
-#~ msgid "I'm one myself"
-#~ msgstr "Yo mismo soy uno"
-
-#~ msgid "Huh?  Got %d, expected %d characters"
-#~ msgstr "¿Eh? Se han obtenido %d caracteres, cuando se esperaban %d"
-
-#~ msgid "EXT"
-#~ msgstr "EXT"
-
-#, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
-#~ msgstr "no puedo encontrar el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
-#~ msgstr "no puedo encontrar el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "EXTs"
-#~ msgstr "EXT"
-
-#, fuzzy
-#~ msgid "generate DVI"
-#~ msgstr "generar una salida PostScript"
-
-#, fuzzy
-#~ msgid "generate TeX"
-#~ msgstr "generar una salida PostScript"
-
-#, fuzzy
-#~ msgid "kpathsea can not find %s file: `%s'"
-#~ msgstr "no puedo encontrar el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "kpathsea can not find AFM file `%s'"
-#~ msgstr "no puedo encontrar el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "kpathsea can not find TFM file: `%s'"
-#~ msgstr "no puedo encontrar el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "No puedo pasar de un traductor al otro, ya estoy allí"
-
-#, fuzzy
-#~ msgid "Converting to `~a.ps'..."
-#~ msgstr "Escribiendo `%s'..."
-
-#~ msgid "find pfa fonts used in FILE"
-#~ msgstr "buscar las fuentes pfa utilizadas en FICHERO"
-
-#~ msgid "add DIR to LilyPond's search path"
-#~ msgstr "añadir DIR a la ruta de búsqueda de LilyPond"
-
-#, fuzzy
-#~ msgid "keep all output, output to directory %s.dir"
-#~ msgstr "conservar todas las salidas, y nombrar el directorio %s.dir"
-
-#~ msgid "don't run LilyPond"
-#~ msgstr "no ejecutar LilyPond"
-
-#~ msgid "produce MIDI output only"
-#~ msgstr "producir solamente una salida MIDI"
-
-#, fuzzy
-#~ msgid "generate PDF output"
-#~ msgstr "generar una salida PostScript"
-
-#, fuzzy
-#~ msgid "generate PS.GZ"
-#~ msgstr "generar una salida PostScript"
-
-#~ msgid "change global setting KEY to VAL"
-#~ msgstr "cambiar el parámetro global CLAVE a VALOR"
-
-#, fuzzy
-#~ msgid "Continuing..."
-#~ msgstr "Ejecutando %s..."
-
-#~ msgid "Analyzing %s..."
-#~ msgstr "Analizando %s..."
-
-#, fuzzy
-#~ msgid "no LilyPond output found for `%s'"
-#~ msgstr "no se ha encontrado ninguna salida de lilypond para %s"
-
-#, fuzzy
-#~ msgid "no files specified on command line"
-#~ msgstr "no se ha especificado ningún fichero en la línea de órdenes."
-
-#, fuzzy
-#~ msgid "%s output to <stdout>..."
-#~ msgstr "%s producidos en `%s'..."
-
-#, fuzzy
-#~ msgid "%s output to %s..."
-#~ msgstr "%s producidos en `%s'..."
-
-#, fuzzy
-#~ msgid "can't find file: `%s.%s'"
-#~ msgstr "no puedo encontrar el fichero: `%s'"
-
-#, fuzzy
-#~ msgid "DIM"
-#~ msgstr "DIR"
-
-#, fuzzy
-#~ msgid "write dependencies"
-#~ msgstr "añadir el prefijo DIR a las dependencias"
-
-#, fuzzy
-#~ msgid "prepend PREF before each -M dependency"
-#~ msgstr "añadir el prefijo DIR a las dependencias"
-
-#, fuzzy
-#~ msgid "don't run lilypond"
-#~ msgstr "no ejecutar LilyPond"
-
-#~ msgid "write Makefile dependencies for every input file"
-#~ msgstr "crear las dependencias para Makefile de cada fichero de entrada"
-
-#, fuzzy
-#~ msgid "invalid value: `%s'"
-#~ msgstr "valor no válido: %s"
-
-#, fuzzy
-#~ msgid "Writing HTML menu `%s'"
-#~ msgstr "Escribiendo `%s'..."
-
-#, fuzzy
-#~ msgid "programming error: %s (Continuing; cross thumbs)\n"
-#~ msgstr " (Continuando; cruza los dedos)"
-
-#~ msgid "NaN"
-#~ msgstr "NaN"
-
-#, fuzzy
-#~ msgid ""
-#~ "Nothing to connect extender to on the left.  Ignoring extender event."
-#~ msgstr ""
-#~ "Nada a la izquierda a lo que conectar la prologación. Ignorando la "
-#~ "petición de prolongación."
-
-#, fuzzy
-#~ msgid "Nothing to connect hyphen to on the left.  Ignoring hyphen event."
-#~ msgstr ""
-#~ "Nada a la izquierda a lo que conectar la prologación. Ignorando la "
-#~ "petición de prolongación."
-
-#~ msgid "Score contains errors; will not process it"
-#~ msgstr "La partitura contiene errores; no será procesada."
-
-#~ msgid "Now processing: `%s'"
-#~ msgstr "Ahora en proceso: `%s'"
-
-#~ msgid "prepend DIR to dependencies"
-#~ msgstr "añadir el prefijo DIR a las dependencias"
-
-#~ msgid "inhibit file output naming and exporting"
-#~ msgstr "inhibir la denominación del fichero de salida y la exportación"
-
-#~ msgid "silly duration"
-#~ msgstr "duración ridícula"
-
-#~ msgid "I'm one myself: `%s'"
-#~ msgstr "Yo mismo soy uno: `%s'"
-
-#~ msgid "from musical definition: %s"
-#~ msgstr "a partir de la definición musical: %s"
-
-#, fuzzy
-#~ msgid "unterminated pedal bracket"
-#~ msgstr "prolongación sin terminar"
-
-#~ msgid "Already contains: `%s'"
-#~ msgstr "Ya contiene: `%s'"
-
-#~ msgid "Not adding translator: `%s'"
-#~ msgstr "No se añade el traductor: `%s'"
-
-#~ msgid "Fetch and rebuild from latest source package"
-#~ msgstr "Obtener y reconstruir a partir del último paquete fuente"
-
-#~ msgid "unpack and build in DIR [%s]"
-#~ msgstr "desempaquetar y construir en DIR [%s]"
-
-#~ msgid "execute COMMAND, subtitute:"
-#~ msgstr "ejecutar la órden de sustitución:"
-
-#~ msgid "%b: build root"
-#~ msgstr "%b: construir la raíz"
-
-#~ msgid "%n: package name"
-#~ msgstr "%n: nombre del paquete"
-
-#~ msgid "%r: release directory"
-#~ msgstr "%r: directorio de publicación"
-
-#~ msgid "%t: tarball"
-#~ msgstr "%t: tarball"
-
-#~ msgid "%v: package version"
-#~ msgstr "%v: versión del paquete"
-
-#~ msgid "keep all output, and name the directory %s"
-#~ msgstr "conservar todas las salidas, y nombrar el directorio %s"
-
-#~ msgid "upon failure notify EMAIL[,EMAIL]"
-#~ msgstr "en caso de fallo avisar por EMAIL[,EMAIL]"
-
-#~ msgid "remove previous build"
-#~ msgstr "eliminar la construcción anterior"
-
-#~ msgid "fetch and build URL [%s]"
-#~ msgstr "obtener y construir el URL [%s]"
-
-#~ msgid "latest is: %s"
-#~ msgstr "el último es: %s"
-
-#~ msgid "Fetching `%s'..."
-#~ msgstr "Obteniendo `%s'..."
-
-#~ msgid "Building `%s'..."
-#~ msgstr "Construyendo `%s'..."
-
-#~ msgid "invalid subtraction: not part of chord: %s"
-#~ msgstr "sustracción no válida: no forma parte del acorde: %s"
-
-#~ msgid "invalid inversion pitch: not part of chord: %s"
-#~ msgstr "inversión de tonos no válida: no forma parte del acorde: %s"
-
-#~ msgid ", at "
-#~ msgstr ", en "
-
-#~ msgid "Generate .dvi with LaTeX for LilyPond"
-#~ msgstr "Generar un fichero .dvi con la ayuda de LaTeX para LilyPond"
-
-#~ msgid "can't map file"
-#~ msgstr "no es posible producir el fichero map"
-
-#~ msgid "This binary was compiled with the following options:"
-#~ msgstr "Este binario fue compilado con las siguientes opciones:"
-
-#~ msgid "%s is far from completed.  Not all constructs are recognised."
-#~ msgstr ""
-#~ "%s está lejos de estar completo. No se han reconocido todas las "
-#~ "construcciones."
-
-#~ msgid "EOF in a string"
-#~ msgstr "Fin de fichero (EOF) en una cadena"
-
-#~ msgid "<stdin>"
-#~ msgstr "<stdin>"
-
-#~ msgid "unknown spacing pair `%s', `%s'"
-#~ msgstr "par de espacimiento desconocido `%s', `%s'"
-
-#~ msgid "track %d:"
-#~ msgstr "pista %d:"
-
-#~ msgid "% MIDI copyright:"
-#~ msgstr "% Copyright MIDI:"
-
-#~ msgid "% MIDI instrument:"
-#~ msgstr "% Instrumento MIDI:"
-
-#~ msgid "% Creator: "
-#~ msgstr "% Creador: "
-
-#~ msgid "% Automatically generated"
-#~ msgstr "% Generado automáticamente"
-
-#~ msgid "% from input file: "
-#~ msgstr "% a partir del fichero de entrada: "
-
-#~ msgid "set FILE as default output"
-#~ msgstr "establecer FICHERO como salida por defecto"
-
-#~ msgid "be quiet"
-#~ msgstr "trabajar en silencio"
-
-#~ msgid "don't output rests or skips"
-#~ msgstr "no producir pausas o saltos"
-
-#~ msgid "set smallest duration"
-#~ msgstr "definir la duración más pequeña"
-
-#~ msgid "don't timestamp the output"
-#~ msgstr "no datar la salida"
-
-#~ msgid "assume no double dotted notes"
-#~ msgstr "no asumir notas doblemente puntuadas"
-
-#~ msgid "Usage: %s [OPTION]... [FILE]"
-#~ msgstr "Sintaxis: %s [OPCIÓN]... [FICHERO]"
-
-#~ msgid "Translate MIDI-file to lilypond"
-#~ msgstr "Traducir un fichero MIDI a lilypond"
-
-#~ msgid "no_double_dots: %d\n"
-#~ msgstr "no_double_dots: %d\n"
-
-#~ msgid "no_rests: %d\n"
-#~ msgstr "no_rests: %d\n"
-
-#~ msgid "no_quantify_b_s: %d\n"
-#~ msgstr "no_quantify_b_s: %d\n"
-
-#~ msgid "no_smaller_than: %d (1/%d)\n"
-#~ msgstr "no_smaller_than: %d (1/%d)\n"
-
-#~ msgid "no_tuplets: %d\n"
-#~ msgstr "no_tuplets: %d\n"
-
-#~ msgid "zero length string encountered"
-#~ msgstr "encontrada cadena de longitud cero"
-
-#~ msgid "MIDI header expected"
-#~ msgstr "Esperado encabezado de formato MIDI"
-
-#~ msgid "invalid header length"
-#~ msgstr "longitud del encabezado no válida"
-
-#~ msgid "invalid MIDI format"
-#~ msgstr "formato MIDI no válido"
-
-#~ msgid "invalid number of tracks"
-#~ msgstr "número de pistas no válido"
-
-#~ msgid "can't handle non-metrical time"
-#~ msgstr "no se pueden manejar tiempos no métricos"
-
-#~ msgid "invalid running status"
-#~ msgstr "estado de ejecución no válido"
-
-#~ msgid "unimplemented MIDI meta-event"
-#~ msgstr "meta-evento MIDI no implementado"
-
-#~ msgid "invalid MIDI event"
-#~ msgstr "evento MIDI no válido"
-
-#~ msgid "MIDI track expected"
-#~ msgstr "Esperada pista MIDI"
+#, scheme-format
+msgid "assertion failed: ~S"
+msgstr "declaración falló: ~S"
 
-#~ msgid "invalid track length"
-#~ msgstr "longitud de pista no válida"
index 39bc41a695e5af651065c229a264ea4b545aebfa..bf843bb63e14718640c5b3630c85b34cf4cade23 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: fi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-04 02:13+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2006-11-04 02:19+0200\n"
 "Last-Translator: hjunes\n"
 "Language-Team:  <en@li.org>\n"
@@ -75,39 +75,47 @@ msgid "Running %s..."
 msgstr "Ajetaan %s..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
+#, fuzzy, python-format
+msgid "Usage: %s"
 msgstr "Käyttö: %s\n"
 
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Käyttö: %s [OPTIO]... TIEDOSTO..."
+
 #: abc2ly.py:1351
+#, fuzzy, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 "Tämä ohjelma kääntää ABC-musiikkitiedostoja (katso\n"
 "http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) LilyPond-syötteeksi."
 
-#: abc2ly.py:1354
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "tulosta tiedostoon TIEDOSTO"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr "ole tarkka onnistumisesta"
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr "säilytä ABC:n palkkimerkinnät"
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "Raportoi virheet osoitteeseen %s"
+
 #: convert-ly.py:41
+#, fuzzy
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 "Päivitä LilyPond syöte uudempaan versioon.  Oletuksena päivittää\n"
 "versiosta joka on annettu \\version komennolla nykyiseksi LilyPond "
@@ -117,122 +125,121 @@ msgstr ""
 "  convert-ly -e old.ly\n"
 "  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "esimerkki"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "varoitus: %s"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr "virhe: %s"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Levitettävissä ehdoilla GNU General Public License."
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "Se toimitetaan ILMAN TAKUUTA."
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr "VERSIO"
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "aloita versiosta VERSIO [oletus: \\version joka on tiedostossa]"
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr "editoi paikassaan"
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr "älä lisää \\version komentoa jos se puuttuu"
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+#, fuzzy
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr "tulosta säännöt [oletus: --from=0, --to=@TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr "muunnaa versioon VERSIO [oletus: @TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr "Toteutetaan muunnos: "
 
 #: convert-ly.py:166
-msgid "error while converting"
+#, fuzzy
+msgid "Error while converting"
 msgstr "virhe muunnettaessa"
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr "Keskeytetään"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Prosessoidaan `%s'... "
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "tiedostoa ei voitu avata: `%s'"
 
-#: convert-ly.py:286
-#, python-format
-msgid "can't determine version for `%s'. Skipping"
+#: convert-ly.py:284
+#, fuzzy, python-format
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "ei voitu määrittää `%s':lle versiota. Sivuutetaan"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Käyttö: %s [OPTIO]... TIEDOSTO..."
+
 #: etf2ly.py:1198
+#, fuzzy
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 "Enigma Transport Format on Coda Music Technology:n Finale-tuotteen\n"
 "tallennusmuoto. Tämä ohjelma muuntaa ETF-muodon osajoukon\n"
 "LilyPondilla käytettäväksi."
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "tulosta tiedostoon TIEDOSTO"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "TIEDOSTO"
 
-#: etf2ly.py:1204 midi2ly.py:899
-msgid "show warranty"
-msgstr "näytä takuusitoumus"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
+msgstr "näytä takuu ja copyright"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook "
-"document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
-"Käsittele HTML, LaTeX, texinfo tai DocBook -documenttiin sisällytetyt "
-"LilyPond palaset.\n"
-"Käyttöesimerkkejä:\n"
-"\n"
-"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-"   lilypond-book --process='lilypond -I include' BOOK\n"
 
-#: lilypond-book.py:86
+#: lilypond-book.py:78
+msgid "BOOK"
+msgstr ""
+
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Lopetetaan (%d)..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s by"
@@ -246,13 +253,20 @@ msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr "putkita palaset kohteen FILTER läpi [convert-ly -n -]"
 
 #: lilypond-book.py:135
-msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr "käytä tulostusmuotona formaattia FMT (texi [oletus], texi-html, latex, html, docbook)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr ""
+"käytä tulostusmuotona formaattia FMT (texi [oletus], texi-html, latex, html, "
+"docbook)"
 
 #: lilypond-book.py:138
 msgid "add DIR to include path"
 msgstr "lisää HAKEMISTO hakupolkuun"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "HAKEMISTO"
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr "tulosta polkuun HAKEMISTO"
@@ -265,7 +279,11 @@ msgstr "KOMENTO"
 msgid "process ly_files using COMMAND FILE..."
 msgstr "prosessoi ly_tiedostot käyttäen komentoa COMMAND FILE..."
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
 "extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
 "must use this with dvips -h INPUT.psfonts"
@@ -273,139 +291,136 @@ msgstr ""
 "poimi kaikki PostScript-fontit tiedostoon INPUT.psfonts LaTeX:ia varten\n"
 "tätä täytyy käyttää dvips -h INPUT.psfonts :in kanssa"
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "tulosta runsaasti käsittelytietoa"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "näytä takuu ja copyright"
-
-#: lilypond-book.py:778
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr "tiedostoa %s ei löydy"
 
-#: lilypond-book.py:1009
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "vanhentunut ly-optio käytössä: %s=%s"
 
-#: lilypond-book.py:1012
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "yhteensopivuusmuodon käännös: %s=%s"
 
-#: lilypond-book.py:1016
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "vanhentunut ly-optio käytössä: %s"
 
-#: lilypond-book.py:1019
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "yhteensopivuusmuodon käännös: %s"
 
-#: lilypond-book.py:1038
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "sivuutetaan tuntematon ly -optio: %s"
 
-#: lilypond-book.py:1391
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr "Avataan filtteri `%s'"
 
-#: lilypond-book.py:1408
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "`%s' epäonnistui (%d)"
 
-#: lilypond-book.py:1409
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "Virheloki on seuraava:"
 
-#: lilypond-book.py:1479
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+#, fuzzy
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "Ei voitu löytää \\begin{document} LaTeX-documentista"
 
-#: lilypond-book.py:1589
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr "Kirjoitetaan palasia..."
 
-#: lilypond-book.py:1594
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "Prosessoidaan..."
 
-#: lilypond-book.py:1598
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr "Kaikki palaset on päivitetty..."
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1605
 #, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "ei löytynyt formaattia: %s"
 
-#: lilypond-book.py:1619
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr "%s on päivitetty."
 
-#: lilypond-book.py:1625
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Kirjoitetaan `%s'..."
 
-#: lilypond-book.py:1680
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr "Tuloste kirjautuisi syötetiedoston päälle; käytä --output."
 
-#: lilypond-book.py:1684
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr "Luetaan %s..."
 
-#: lilypond-book.py:1703
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr "Analysoidaan..."
 
-#: lilypond-book.py:1719
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr "Kootaan %s..."
 
-#: lilypond-book.py:1728
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr "Prosessoidaan sisällytetävä: %s"
 
-#: lilypond-book.py:1742
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr "Poistetaan `%s'"
 
-#: lilypond-book.py:1819
+#: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr "Kirjoitetaan fontteja hakemistoon %s..."
 
-#: lilypond-book.py:1834
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr "optiota --psfonts=FILE ei käytetty"
 
-#: lilypond-book.py:1835
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr "prosessointi dvips:illä ei sisällä fontteja"
 
-#: lilypond-book.py:1838
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr "DVIPS käyttö:"
 
-#: midi2ly.py:106 lily-library.scm:557 lily-library.scm:565
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "varoitus: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "virhe: "
 
@@ -418,8 +433,9 @@ msgstr "Lopettaa ... "
 msgid "%s output to `%s'..."
 msgstr "%s tulostetaan paikkaan `%s'..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
 msgstr "Muunna MIDI LilyPond -muotoon."
 
 #: midi2ly.py:875
@@ -465,34 +481,59 @@ msgid "treat every text as a lyric"
 msgstr "käsittele kaikki tekstit lyriikkana"
 
 #: midi2ly.py:905
-msgid "example"
+#, fuzzy
+msgid "Examples"
 msgstr "esimerkki"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "tiedostoja ei annettu komentorivillä."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Tämä on ilmaisohjelmisto. Siihen sovelletaan GNU General Public License\n"
+"ja olet tervetullut muuttamaan ohjelmaa ja/tai levittämään siitä kopioita\n"
+"tietyillä ehdoilla. Suorita `%s --warranty' saadaksesi lisäinformaatiota.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr "tulosta tiedostoon TIEDOSTO"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "optio `%s' vaatii argumentin"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "optio `%s' ei salli argumenttia"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "tunnistamaton optio: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "epäkelpo argumentti `%s' optiolle `%s'"
 
-#: warn.cc:68 grob.cc:557 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr "ohjelmointivirhe: %s"
@@ -501,27 +542,27 @@ msgstr "ohjelmointivirhe: %s"
 msgid "continuing, cross fingers"
 msgstr "jatketaan, ristitään kädet"
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "Korotusmerkkien ladontalista täytyy alkaa konteksti-nimellä: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "sivutetaan tuntematan etumerkki: %s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr "pari tai konteksti-nimi oletettiin korotusmerkkisäännölle, löytyi %s"
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "korotusmerkkiä `%s' ei löydy"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
@@ -529,40 +570,23 @@ msgstr ""
 "pystysyora sijoittelu kutsuttiin ennen rivinkatkaisua.\n"
 "Viivaston ylittävät ladokkeet tehdään vain PianoStaff:in yhteydessä."
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+#, fuzzy
+msgid "tried to get a translation for something that is no child of mine"
 msgstr "yritettiin saada käännösteksti jollekin, joka ei ole lapseni"
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "ei löytynyt fonttia: `%s'"
 
-#: all-font-metrics.cc:165
-msgid "loading default font"
-msgstr "ladataan oletusfontti"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "ei löytynyt oletusfonttia: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(hakupolku: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-msgid "giving up"
-msgstr "luovutetaan"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr "\\applycontext vaatii funktioargumentin"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "ei voitu vaihtaa, oli jo tulkitsijassa: %s"
 
 #: axis-group-engraver.cc:78
@@ -577,10 +601,19 @@ msgstr "onko käytössä kaksi Axis_group_engraver:ia?"
 msgid "removing this vertical group"
 msgstr "poistetaan tämä vertikaaliryhmä"
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr "yritettiin laskea korkeus ei-katkaisukohdassa"
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -599,14 +632,15 @@ msgid "stem must have Rhythmic structure"
 msgstr "varrella on oltava Rhytmic -rakenne"
 
 #: beam-engraver.cc:246
-msgid "stem doesn't fit in beam"
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "varsi ei sovi palkkiin"
 
 #: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "palkki aloitettiin täältä"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
 msgstr "ei löytynyt sopivaa palkin paikkaa"
 
@@ -614,23 +648,23 @@ msgstr "ei löytynyt sopivaa palkin paikkaa"
 msgid "removing beam with no stems"
 msgstr "poistetaan palkki jolla ei ole parrua"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr "toimivaa alkuasettelua ei löytynyt: hyvää palkkikaltevuuta ei löytyne"
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Ei välistyksen syöttöä paikasta %s paikkaan `%s'"
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "ei voitu vaihtaa `%s' tilalle `%s'"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "ei löytynyt kontekstia johon vaihtaa"
 
 #. We could change the current translator's id, but that would make
@@ -661,7 +695,7 @@ msgstr "päättämätön sointutremolo"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr "odotettiin 2 elementtiä sointutremololle, löytyi %d"
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "avainta `%s' ei löydy"
@@ -678,11 +712,13 @@ msgstr "heitetään pois tyhjä klusteri"
 #: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr "Coherent_ligature_engraver: asetetaan `spacing-increment=0.01': ptr=%ul"
+msgstr ""
+"Coherent_ligature_engraver: asetetaan `spacing-increment=0.01': ptr=%ul"
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "couldn't find line breaking that satisfies constraints"
+#, fuzzy
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "ei löytynyt rivinkatkaisukohtaa joka täyttäisi ehdot"
 
 #: context-def.cc:130
@@ -690,18 +726,18 @@ msgstr "ei löytynyt rivinkatkaisukohtaa joka täyttäisi ehdot"
 msgid "program has no such type: `%s'"
 msgstr "ohjelmalla ei ole tyyppiä: `%s'"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "tarvitaan symboliargumentti funktioille \\override ja \\revert"
 
 #: context.cc:151
 #, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "ei löydetty tai ei luotu uutta `%s'"
 
 #: context.cc:213
 #, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "ei löydetty tai ei luotu `%s' nimeltä `%s'"
 
 #: context.cc:276
@@ -711,7 +747,7 @@ msgstr "Epäkelpo CreateContext-tapahtuma: Ei voitu luoda %s-kontekstia"
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "ei löydetty tai ei luotu: `%s'"
 
 #: custos.cc:77
@@ -719,11 +755,11 @@ msgstr "ei löydetty tai ei luotu: `%s'"
 msgid "custos `%s' not found"
 msgstr "custos `%s' ei löytynyt"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr "Tapamahtumaluokan tulisi olla symboli"
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, c-format
 msgid "Unknown event class %s"
 msgstr "Tuntematon tapahtumaluokka %s"
@@ -734,7 +770,7 @@ msgid "dot `%s' not found"
 msgstr "pistettä `%s' ei löytynyt"
 
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "ei löytynyt alkua (de)crescendolle"
 
 #: dynamic-engraver.cc:195
@@ -753,11 +789,7 @@ msgstr "cresc aloitettiin tästä"
 msgid "unterminated (de)crescendo"
 msgstr "päättämätön (de)crescendo"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr "ei aseteta luonnin takaisinkutsua: ei ole proseduuri"
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "päättämätön pidennys"
 
@@ -768,7 +800,8 @@ msgstr "Alustetaan FontConfig..."
 #: font-config.cc:44
 #, c-format
 msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr "Käännetään uudelleen FontConfig-välimuisti %s. tämä voi kestää hetken..."
+msgstr ""
+"Käännetään uudelleen FontConfig-välimuisti %s. tämä voi kestää hetken..."
 
 #: font-config.cc:55
 #, c-format
@@ -780,15 +813,15 @@ msgstr "ei onnistuttu lisäämään fonttihakemistoa: %s"
 msgid "adding font directory: %s"
 msgstr "lisätään fonttihakemisto: %s"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr "ääretön tai NaN kohdattiin kun tehtiin reaalilukumuunnosta"
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr "asetetaan nollaksi"
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
 msgstr "päättämätön glissando"
 
@@ -817,45 +850,38 @@ msgstr "lisättiin vihjattu \\%s"
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "di voitu käyttää `\\~' ligaturen alkupäässä"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr "ei voitu käyttää `\\~' identtisien nuotinkorkeuksien päissä"
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr "Tuntematon rajapinta `%s'"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr "Ladokkeella `%s' ei ole rajapintaa ominaisuudella `%s'"
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr "ei aseteta muutoksen takaisinkutsua: ei ole proseduuri"
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr "ääretön tai NaN kohdattiin"
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "liian lyhyt decrescendo"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "liian lyhyt crescendo"
-
-#: horizontal-bracket-engraver.cc:57
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+#, fuzzy
+msgid "do not have that many brackets"
 msgstr "ei ole käytössä niin monia sulkeita"
 
-#: horizontal-bracket-engraver.cc:66
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr "ristiriitainen nuottiryhmä -tapaus"
 
@@ -871,17 +897,22 @@ msgstr "päättämätön tavuviiva"
 msgid "include files are not allowed in safe mode"
 msgstr "sisällytettävät tiedostot eivät ole sallittuja turvatilassa"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:117
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "tiedostoa ei löydy: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(hakupolku: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "sijainti tuntematon"
 
 #: ligature-engraver.cc:93
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "ei löytynyt alkua ligature:lle"
 
 #: ligature-engraver.cc:98
@@ -908,73 +939,74 @@ msgstr "ligature ei voi sisältää taukoa; sivuutetaan tauko"
 msgid "ligature was started here"
 msgstr "ligature alkoi tästä"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(hakupolku: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Ei löytynyt tyyppitarkistusta ominaisuudelle `%s' (%s)."
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr "ehkä näppäilyvirhe?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr "suoritetaan tehtävä joka tapauksessa"
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "tyypin `%s' tarkistus epäonnistui; arvon `%s' on oltava tyyppiä `%s'"
 
-#: lily-lexer.cc:233
+#: lily-lexer.cc:254
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "tunnistenimi on avainsana: `%s'"
 
-#: lily-lexer.cc:248
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "virhe tiedoston lopussa (EOF): %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, c-format
 msgid "deprecated function called: %s"
 msgstr "vanhentunut funktiokutsu: %s"
 
-#: lily-parser-scheme.cc:89
-#, c-format
-msgid "Changing working directory to `%s'"
+#: lily-parser-scheme.cc:88
+#, fuzzy, c-format
+msgid "Changing working directory to: `%s'"
 msgstr "Vaihdetaan työhakemistoksi `%s'"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "tiedostoa ei löydy: `%s'"
 
-#: lily-parser-scheme.cc:126
+#: lily-parser-scheme.cc:125
 #, c-format
 msgid "Processing `%s'"
 msgstr "Prosessoidaan `%s'"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Jäsennetään..."
 
-#: lily-parser.cc:125
-msgid "braces don't match"
+#: lily-parser.cc:127
+#, fuzzy
+msgid "braces do not match"
 msgstr "aaltosulkumerkit eivät täsmää"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr "ei löydetty Voice `%s'"
 
-#: main.cc:117
+#: main.cc:116
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -986,7 +1018,7 @@ msgstr ""
 "ja olet tervetullut muuttamaan ohjelmaa ja/tai levittämään siitä kopioita\n"
 "tietyillä ehdoilla. Suorita `%s --warranty' saadaksesi lisäinformaatiota.\n"
 
-#: main.cc:123
+#: main.cc:122
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1016,103 +1048,100 @@ msgstr ""
 "Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr "PÄÄ"
 
-#: main.cc:154
+#: main.cc:153
+#, fuzzy
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 "käytä päänä PÄÄ (gnome, ps, eps,\n"
 "scm, svg, tex, texstr)\n"
 "default: PS"
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+#, fuzzy
+msgid "SYM[=VAL]"
 msgstr "SYM=VAL"
 
-#: main.cc:157
+#: main.cc:156
+#, fuzzy
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 "aseta Scheme -ohjelman optio. Käyttää #t jos VAL ei ole määritelty\n"
 "Koeta -dhelp saadaksesi lisäapua."
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "LAUSEKE"
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr "suorita scheme koodi"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr "FORMAATIT"
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "vedosta FORMAATTI,...  Myös erilliset optiot:"
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr "tuota DVI (vain käytettäessä tex -päätä)"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr "paikallista käyttäen lilypond ohjelman hakemistoa"
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr "tuota PDF (oletus)"
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr "tuota PNG"
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr "tuota PostScript"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr "tuota TeX (vain käytettäessä tex -päätä)"
 
-#: main.cc:170
-msgid "print this help"
-msgstr "näytä tämä opaste"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "KENTTÄ"
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
+#: main.cc:169
+#, fuzzy
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "kirjoita otsake tiedostoon PERUSNIMI.KENTTÄ"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "HAKEMISTO"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "lisää HAKEMISTO hakupolkuun"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "käytä TIEDOSTO alustustiedostona"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr "USER,GROUP,JAIL,DIR"
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -1120,27 +1149,35 @@ msgstr ""
 "käytä chroot-hakemistona JAIL, ole USER:GROUP\n"
 "ja siirry hakemistoon DIR"
 
-#: main.cc:178
+#: main.cc:177
 msgid "do not generate printed output"
 msgstr "älä tuota tulostetta"
 
-#: main.cc:179
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "tulosta tiedostoon TIEDOSTO (pääte lisätään)"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr "tee kuva ensimmäisestä kokonaisuudesta"
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr "paikallista käyttäen lilypond ohjelman hakemistoa"
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+#, fuzzy
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr "älä salli turvattomia Scheme ja PostScript -operaatioita"
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "tulosta versionumero"
 
-#: main.cc:223
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1150,79 +1187,79 @@ msgstr ""
 "%s  ja muut."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Käyttö: %s [OPTIO]... TIEDOSTO..."
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Lado musiikki ja/tai tuota MIDI tiedostosta TIEDOSTO."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond tuottaa kaunista musiikkinotaatiota."
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr "Lisätietoja varten, katso %s"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Optiot:"
 
-#: main.cc:262
+#: main.cc:263
 #, c-format
 msgid "Report bugs via %s"
 msgstr "Raportoi virheet osoitteeseen %s"
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "odotettiin %d argumenttia chroot-vankilalle, löytyi: %u"
 
-#: main.cc:322
+#: main.cc:323
 #, c-format
 msgid "no such user: %s"
 msgstr "käyttäjää ei löydy: `%s'"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr "ei saatu käyttäjä-id:tä käyttäjänimestä: %s: %s"
 
-#: main.cc:339
+#: main.cc:340
 #, c-format
 msgid "no such group: %s"
 msgstr "ryhmää ei ole: %s"
 
-#: main.cc:341
+#: main.cc:342
 #, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "ei voitu saada ryhmä -id:tä ryhmänimestä: %s: %s"
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "chroot ei onnistunut: %s: %s"
 
-#: main.cc:356
+#: main.cc:357
 #, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "ei voitu korvata ryhmän id:tä : %d: %s"
 
-#: main.cc:362
+#: main.cc:363
 #, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "ei voitu vaihtaa käyttäjä-id:tä : %d: %s"
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "työhakemiston vaihto ei onnistunut: %s: %s"
 
 #: main.cc:415
@@ -1230,7 +1267,7 @@ msgstr "työhakemiston vaihto ei onnistunut: %s: %s"
 msgid "Evaluating %s"
 msgstr "Määritetään %s"
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr "napattiin poikkeus: %s"
@@ -1305,111 +1342,109 @@ msgstr "Mensural_ligature: (join_right == 0)"
 msgid "no such MIDI instrument: `%s'"
 msgstr "ei löytynyt MIDI-instrumenttia: `%s'"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "sekava äänenkorkeus"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr "kokeellinen: viritetään väliaisesti (%d senttiä) kanavaa."
 
 #: midi-stream.cc:28
 #, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "tiedostoa ei voitu avata kirjoitettavaksi: %s: `%s'"
 
 #: midi-stream.cc:44
 #, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "tiedostoon ei voitu kirjoittaa: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr "Lähetetään ei-tapahtuma kontekstille"
 
-#: music.cc:142
-#, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+#: music.cc:141
+#, fuzzy, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "oktaavitarkistus epäonnistui; oletettiin \"%s\", löydettiin: %s"
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "transponointi %s:N verran tekee muutokset suuremmaksi kuin kaksi"
 
-#: new-fingering-engraver.cc:95
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr "ei voitu lisätä tekstinpätkiä yksittäisiin nuotteihin"
 
-#: new-fingering-engraver.cc:238
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr "sormitukselle ei löytynyt paikkaa"
 
-#: new-fingering-engraver.cc:239
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr "sijoitetaan alle"
 
-#: note-collision.cc:438
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
 msgstr "liian monta törmäävää nuottisaraketta"
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr "ei voinut olla nuotinpäitä ja taukoja yhtäaikaa palkissa"
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "yhtäkään nuottipäistä `%s' tai `%s' ei löytynyt"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent ilman nuottikorkeutta"
 
 #: open-type-font.cc:33
 #, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "ei voitu varata %lu bittiä"
 
 #: open-type-font.cc:37
 #, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "ei voitu ladata fonttitaulukkoa: `%s'"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "tukematon fonttimuoto: %s"
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr "tuntematon virhe: %d lukee fonttitiedostoa: %s"
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
 msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr "FT_Get_Glyph_Name() palautti virheen: %u"
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
+#, fuzzy
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 "Ei voitu sovittaa ensimmäistä sivunkääntöä yhdelle sivulle. Harkitse "
 "ensimmäisen sivunumeron (first-page-number) asettamista parittomaksi."
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr "Lasketaan sivujen ja rivien katkaisuja (%d mahdollista sivunkatkaisua)..."
+msgstr ""
+"Lasketaan sivujen ja rivien katkaisuja (%d mahdollista sivunkatkaisua)..."
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr "Piirretään tahteja..."
 
-#: pango-font.cc:194
+#: pango-font.cc:181
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -1418,12 +1453,12 @@ msgstr ""
 "Ladokkeella ei ole nimea, mutta kirjasin tukee ladokkeen nimeämistä.\n"
 "Sivuutetaan ladoke U+%0X, tiedostossa %s"
 
-#: pango-font.cc:237
+#: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "ei PostScript fonttinimeä fontille `%s'"
 
-#: pango-font.cc:285
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr "FreeType muodolla ei ollut PostScript fonttinimeä"
 
@@ -1457,15 +1492,15 @@ msgstr "päättämätön prosenttitoisto"
 msgid "Track..."
 msgstr "Jälki..."
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr "MIDI kanava kietaistiin ympäri"
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr "kuvataan uudelleen modulo 16"
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "Tehdään MIDI-tuloste `%s'..."
@@ -1474,23 +1509,23 @@ msgstr "Tehdään MIDI-tuloste `%s'..."
 msgid "unterminated phrasing slur"
 msgstr "päättämätön fraaseerauskaari"
 
-#: piano-pedal-engraver.cc:283
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr "odotettiin 3 merkkijonoa pianopedaalille, löytyi: %ld"
 
-#: piano-pedal-engraver.cc:298 piano-pedal-engraver.cc:309
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "ei löydetty alkua pianopedaalille: `%s'"
 
-#: piano-pedal-engraver.cc:344
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "ei löydetty alkua pianopedaalimerkinnälle: `%s'"
 
-#: program-option.cc:199
+#: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
 msgstr "tuntematon sisäinen optio: %s"
@@ -1500,51 +1535,51 @@ msgstr "tuntematon sisäinen optio: %s"
 msgid "not a grob name, `%s'"
 msgstr "ei ole graafisen objektin (grob) nimi, `%s'"
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr "Oktaavitarkistus epäonnistui, saatiin: "
 
 #: relocate.cc:44
-#, c-format
-msgid "Setting %s to %s\n"
+#, fuzzy, c-format
+msgid "Setting %s to %s"
 msgstr "Asetetaan %s kohtaan %s\n"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, c-format
 msgid "no such file: %s for %s"
 msgstr "tiedostoa ei löydy: %s kohteelle %s"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr "hakemistoa ei löydy: %s kohteelle %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr "%s=%s (painota)\n"
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr "Paikantaminen: käännös-etuliite=%s, uusi etuliite=%s"
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr "Paikantaminen: framework_prefix=%s"
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr "Paikantaminen: absoluuttinen: argv0=%s"
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr "Paikantaminen: nykyisestä polusta: argv0=%s"
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -1553,63 +1588,63 @@ msgstr ""
 "Paikantaminen: polusta PATH=%s\n"
 "argv0=%s"
 
-#: relocate.cc:353
-#, c-format
-msgid "Relocation file %s\n"
+#: relocate.cc:354
+#, fuzzy, c-format
+msgid "Relocation file: %s"
 msgstr "Paikannustiedosto %s\n"
 
-#: relocate.cc:358
-#, c-format
-msgid "can't open file %s"
-msgstr "ei voitu avata tiedostoa %s"
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Tuntematon paikannuskomento %s"
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr "ei voida määrittää taukojen törmäystä: tauon suuntaa ei asetettu"
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "liian monta törmäävää taukoa"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr "taukoa `%s' ei löytynyt, "
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, c-format
 msgid "cannot find `%s'"
 msgstr "`%s' ei lyötynyt"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr "Fontteja ei oltu asennettu kunnolla."
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, c-format
 msgid "Search path `%s'"
 msgstr "Hakupolku `%s'"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "Keskeytetään"
+
+#: score.cc:225
 msgid "already have music in score"
 msgstr "viivastolla on jo musiikkia"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr "tämä on edellinen musiikki"
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr "virheitä löytyi, sivuutetaan musiikki-ilmaisu"
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+#, fuzzy
+msgid "do not know how to interpret articulation: "
 msgstr "ei tiedetä kuinka tulkita artikulaatio: "
 
 #: script-engraver.cc:103
@@ -1621,16 +1656,17 @@ msgstr "scheme koodaus: "
 msgid "No spring between column %d and next one"
 msgstr "Ei jousta sarakkeen %d ja sitä seuraavan välillä"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
-msgstr "Tuntematon kaari-tapahtuman suunta"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "päättämätön kaari"
 
-#: slur-engraver.cc:165
-msgid "can't end slur"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
 msgstr "ei löytynyt kaaren loppua"
 
 #: source-file.cc:74
@@ -1642,57 +1678,57 @@ msgstr "odotettiin %d merkkiä, saatiin %d"
 msgid "staff-span event has no direction"
 msgstr "viivastot ylittävällä tapahtumalla ei ole suuntaa"
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "tremolon kesto on liian pitkä"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "lisätään nuottipää sopimattomaan varteen (tyyppi = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr "ehkä syötteen täytyisi määrittää moniäänisiä ääniä"
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr "outo varren koko, koeta lyhyempiä palkkeja"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "lippua `%s' ei löydetty"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "lipun piirtoa `%s' ei löytynyt"
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Elementtien määrä: %d."
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr "Graafisien objektien (grob) määrä: %d "
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "ei löydetty alkua tekstileikkeelle"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "tekstileike löytyi jo"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "päättämätön tekstileike"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "yksinäinen sidos"
 
@@ -1701,14 +1737,14 @@ msgstr "yksinäinen sidos"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "löydettiin outo aikamerkintä: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "aikamerkintäsymbolia `%s' ei löytynyt; vaihdetaan numeroituun tyyliin"
@@ -1718,9 +1754,9 @@ msgstr "aikamerkintäsymbolia `%s' ei löytynyt; vaihdetaan numeroituun tyyliin"
 msgid "unknown translator: `%s'"
 msgstr "tuntematon tulkitsija: `%s'"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "ei löytynyt `%s'"
 
 #: translator.cc:332
@@ -1733,18 +1769,14 @@ msgstr "Kaksi samanaikaista %s-tapahtumaa, hylätään tämä"
 msgid "Previous %s event here"
 msgstr "Edellinen %s-tapahtuma täällä"
 
-#: trill-spanner-engraver.cc:67
-msgid "can't find start of trill spanner"
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
 msgstr "ei löydetty alkua trilliladokkeelle"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
 msgstr "trilliladoke löytyi jo"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr "tuntematon tuplettiväli-tapahtuman suunta"
-
 #: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
@@ -1757,7 +1789,8 @@ msgstr ""
 #: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr "Vaticana_ligature_engraver: asetetaan `spacing-increment = %f': ptr=%ul"
+msgstr ""
+"Vaticana_ligature_engraver: asetetaan `spacing-increment = %f': ptr=%ul"
 
 #: vaticana-ligature.cc:84
 msgid "flexa-height undefined; assuming 0"
@@ -1772,52 +1805,56 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Vaticana_ligature: nollayhdiste (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
-msgid "can't end volta spanner"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
 msgstr "ei löydetty loppua volta ladokkeelle"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "löytyi ja volta-ladoke, lopetetaan se ennenaikaisesti"
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
 msgstr "myös tekstileike päätettiin jo"
 
-#: parser.yy:703
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr "luovutetaan"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper ei voi olla käytössä \\score:ssa, käytä \\layout sen sijaan"
 
-#: parser.yy:727
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr "tarvitaan \\paper paperiryhmälle"
 
-#: parser.yy:1173
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr "Graafiseen objectiin täytyy olla kirjain tai numero"
 
-#: parser.yy:1476
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr "toisen argumentin on oltava äänenkorkeuslista"
 
-#: parser.yy:1503 parser.yy:1508 parser.yy:1973
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
 msgstr "täytyy olla Lyrics -moodissa lyriikkaa varten"
 
-#: parser.yy:1605
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr "oletetaan merkkijonon olevan skriptimäärittely"
 
-#: parser.yy:1760 parser.yy:1810
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "ei ole kesto: %d"
 
-#: parser.yy:1927
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
 msgstr "täytyy olla Note -moodissa nuotteja varten"
 
-#: parser.yy:1988
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
 msgstr "täytyy olla Chord -moodissa sointuja varten"
 
@@ -1884,151 +1921,160 @@ msgstr "tuntematon koodinvaihtomerkillinen merkkijono: `\\\\%s'"
 
 #: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Epäkelpo lilypond versio: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
 #: lexer.ll:881 lexer.ll:882
-msgid "Consider updating the input with the convert-ly script"
+#, fuzzy
+msgid "consider updating the input with the convert-ly script"
 msgstr "Harkitse syötteen päivittämistä convert-ly scriptillä"
 
-#: backend-library.scm:19 lily.scm:494 ps-to-png.scm:88
-#, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Kutsutaan `~a'..."
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "`~a' epäonnistui (~a)"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Muunnetaan kohteeksi `~a'..."
 
-#: backend-library.scm:110
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr "Muunnetaan kohteeksi `~a'..."
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Kirjoitetaan otsaketietue `~a' kohteeseen `~a'..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr "symbol ~S määriteltiin uudelleen"
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr "tapahtumaluokka ~A näkyy olevan käyttämätön"
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr "kääntäjä kuuntelee olematonta tapahtumaluokkaa ~A"
 
-#: define-markup-commands.scm:265
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr "systeemejä ei löytynyt \\score merkinnässä, onko siinä \\layout blokkia?"
+msgstr ""
+"systeemejä ei löytynyt \\score merkinnässä, onko siinä \\layout blokkia?"
 
-#: define-markup-commands.scm:1284
-#, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "ei ole sallittu keston merkkijono: ~a"
 
-#: define-music-types.scm:743
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr "odotettiin symboli: ~S"
 
-#: define-music-types.scm:746
-#, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "ei löytynyt musiikkiobjektia: ~S"
 
-#: define-music-types.scm:766
-#, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "tuntematon toistotyyppi `~S'"
 
-#: define-music-types.scm:767
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr "Katso tiedostosta music-types.scm tuetut toistotyypit"
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr "pari odotettiin dokumentissa ~s"
 
 #: document-backend.scm:135
-#, lisp-format
-msgid "can't find interface for property: ~S"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "ei löytynyt rajapintaa ominaisuudelle: ~S"
 
 #: document-backend.scm:145
-#, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "tuntematon ladoke-rajapinta: ~S"
 
 #: documentation-lib.scm:45
-#, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
 msgstr "Prosessoidaan ~S..."
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr "Kirjoitetaan ~S..."
 
 #: documentation-lib.scm:172
-#, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "ei löytynyt kuvausta ominaisuudelle ~S (~S)"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
 msgstr "Kirjoitetaan ~a..."
 
 #: framework-ps.scm:279
-#, lisp-format
-msgid "can't embed ~S=~S"
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr "ei voitu upottaa ~S=~S"
 
 #: framework-ps.scm:332
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr "Ei voitu poimia sopivaa tiedoa ~a:sta ~a:han"
 
 #: framework-ps.scm:349
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#, fuzzy, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr "ei tiedetä kuinka upottaa ~S=~S"
 
 #: framework-ps.scm:380
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "ei tiedetä kuinka sijoittaa fontti ~s ~s ~s"
 
-#: framework-ps.scm:731
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr "ei voida konvertoida <stdout> ~S:ksi"
 
-#: framework-ps.scm:750 framework-ps.scm:753
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr "ei voida generoida ~S käyttäen postscript päänä"
 
-#: framework-ps.scm:760
+#: framework-ps.scm:758
+#, fuzzy
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2042,57 +2088,57 @@ msgstr ""
 "tai poista lilypond-book -ominaiset asetukset syötteestä.\n"
 
 #: framework-tex.scm:360
-#, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "TeX -tiedostoniemessä ei saa olla välilyöntejä: `~a'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr "Virhe palkin laskennassa.  Odotettiin (~S,~S), löytyi ~S."
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Virhe palkin laskennassa.  Odotettiin ~S 0, löytyi ~S."
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
 msgstr "Lasketaan sivunvaihtoja..."
 
-#: lily-library.scm:526
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr "tuntematon yksikkö: ~S"
 
-#: lily-library.scm:559
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 "ei löytynyt \\version-määrittelyä, ole hyvä ja lisää~a yhteensopivuuden "
 "varalle"
 
-#: lily-library.scm:566
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr "vanhaa relative -yhteensopivuutta ei käytetty"
 
-#: lily.scm:142
-#, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "Ei löydetty ~A"
 
-#: lily.scm:207
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "väärä tyyppi argumentille ~a.  Odotettiin ~a, löytyi ~s"
 
-#: lily.scm:423 lily.scm:484
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr "epäonniset tiedostot: ~S"
 
-#: lily.scm:474
-#, lisp-format
+#: lily.scm:579
+#, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Ohjataan tulosteet paikkaan ~a..."
 
@@ -2100,48 +2146,50 @@ msgstr "Ohjataan tulosteet paikkaan ~a..."
 msgid "Music head function must return Music object"
 msgstr "Music-pääfunktion täytyy palauttaa Music-objekti"
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Tuntematon ominaisuustoiminta ~a"
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "Väärä argumenttin määrä.  Odotettiin: ~A, löytyi ~A: ~S"
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr "Väärä argumentti paikassa ~A.  Odotettiin: ~A, löytyi: ~S."
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
-msgstr "Enemmän vaihtoehtoja kuin kertauksia. Hylätään ylimääräiset vaihtoehdot"
+#: music-functions.scm:213
+#, fuzzy
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr ""
+"Enemmän vaihtoehtoja kuin kertauksia. Hylätään ylimääräiset vaihtoehdot"
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr "odotettiin 2 elementtiä sointutremololle, löytyi ~a"
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr "oletettiin musiikkia: ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr "Tahtiviivan tarkistus epäonnistui.  Odotettiin: ~a, löytyi: ~a"
 
-#: music-functions.scm:745
-#, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "ei löytynyt lainusmerkittyä musiikkai `~S'"
 
-#: music-functions.scm:953
-#, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "tuntematan kortusmerkkityyli: ~S"
 
@@ -2150,18 +2198,18 @@ msgid "utf-8-string encountered in PS backend"
 msgstr "utf8-merkkijono havaittu PS päässä"
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr "määrittämätön: ~S"
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr "decypher ei onnistunut Pango kuvauksessa: ~a"
 
 #: output-tex.scm:98
-#, lisp-format
-msgid "can't find ~a in ~a"
+#, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "ei löytynyt ~a paikassa ~a"
 
 #: paper.scm:69
@@ -2169,12 +2217,12 @@ msgid "Not in toplevel scope"
 msgstr "Ei huipputason piirissä"
 
 #: paper.scm:117
-#, lisp-format
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Tämä ei ole \\layout {} objekti, ~S"
 
 #: paper.scm:129
-#, lisp-format
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr "Tuntematon paperikoko: ~a"
 
@@ -2185,7 +2233,7 @@ msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Täytyy käyttää #(set-paper-size .. ) \\paper { ... } :n sisällä"
 
 #: parser-clef.scm:126
-#, lisp-format
+#, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "tuntematon avaimen tyyppi: `~a'"
 
@@ -2193,12 +2241,67 @@ msgstr "tuntematon avaimen tyyppi: `~a'"
 msgid "see scm/clef.scm for supported clefs"
 msgstr "katso tiedostosta scm/clef.scm tuetut avaimet"
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "~a komento lopetettiin tilassa: ~S"
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "ajaminen epäonnistui"
 
+#~ msgid "silly pitch"
+#~ msgstr "sekava äänenkorkeus"
+
+#~ msgid "show warranty"
+#~ msgstr "näytä takuusitoumus"
+
+#~ msgid ""
+#~ "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook "
+#~ "document.\n"
+#~ "\n"
+#~ "Example usage:\n"
+#~ "\n"
+#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+#~ " lilypond-book --process='lilypond -I include' BOOK\n"
+#~ msgstr ""
+#~ "Käsittele HTML, LaTeX, texinfo tai DocBook -documenttiin sisällytetyt "
+#~ "LilyPond palaset.\n"
+#~ "Käyttöesimerkkejä:\n"
+#~ "\n"
+#~ "   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+#~ "   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
+#~ "BOOK\n"
+#~ "   lilypond-book --process='lilypond -I include' BOOK\n"
+
+#~ msgid "loading default font"
+#~ msgstr "ladataan oletusfontti"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "ei löytynyt oletusfonttia: `%s'"
+
+#~ msgid "not setting creation callback: not a procedure"
+#~ msgstr "ei aseteta luonnin takaisinkutsua: ei ole proseduuri"
+
+#~ msgid "not setting modification callback: not a procedure"
+#~ msgstr "ei aseteta muutoksen takaisinkutsua: ei ole proseduuri"
+
+#~ msgid "crescendo too small"
+#~ msgstr "liian lyhyt crescendo"
+
+#~ msgid "print this help"
+#~ msgstr "näytä tämä opaste"
+
+#~ msgid "cannot open file %s"
+#~ msgstr "ei voitu avata tiedostoa %s"
+
+#~ msgid "Invalid direction of slur-event"
+#~ msgstr "Tuntematon kaari-tapahtuman suunta"
+
+#~ msgid "invalid direction of tuplet-span-event"
+#~ msgstr "tuntematon tuplettiväli-tapahtuman suunta"
+
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Epäkelpo lilypond versio: %s (%s, %s)"
index 19bffbe72c7eb68e54ac72e8ba1945534f4f6627..fd9eca07f7bc232b7fe5c0db5d01cb90bf84098e 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,15 +9,14 @@ msgid ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-20 23:29+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2006-10-22 11:13+0200\n"
 "Last-Translator: John Mandereau <john.mandereau@free.fr>\n"
 "Language-Team: Français <lilypond-user-fr@gnu.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);"
-"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);X-Generator: KBabel 1.11.4\n"
 
 #: convertrules.py:12
 #, python-format
@@ -78,39 +77,47 @@ msgid "Running %s..."
 msgstr "Exécution de %s..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
+#, fuzzy, python-format
+msgid "Usage: %s"
 msgstr "Utilisation : %s\n"
 
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Utilisation : %s [OPTIONS]... FICHIER..."
+
 #: abc2ly.py:1351
+#, fuzzy, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 "Ce programme convertit les fichiers musicaux ABC (voir\n"
 "http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) vers le format LilyPond."
 
-#: abc2ly.py:1354
-msgid "set output filename to FILE"
-msgstr "produire la sortie dans FICHIER"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
+msgstr "produire la sortie dans le FICHIER"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr "être strict sur la réussite"
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr "préserver la notion de lien de croches d'ABC"
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "Rapporter toute anomalie à %s"
+
 #: convert-ly.py:41
+#, fuzzy
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 "Mettre à jour le fichier source vers une version plus récente. Par défaut,\n"
 "de la version indiquée par la commande \\version vers la version courante\n"
@@ -121,123 +128,121 @@ msgstr ""
 "  convert-ly -e ancien.ly\\n\n"
 "  convert-ly --from=2.3.28 --to=2.5.21 toto.ly\n"
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Exemple"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "AVERTISSEMENT : %s"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr "ERREUR : %s"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Distribué selon les termes de la GNU General Public License."
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "Le logiciel est distribué SANS GARANTIE."
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr "VERSION"
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr "partir de la VERSION [par défaut : \\version trouvée dans le fichier]"
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr "éditer le fichier d'origine"
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr "ne pas ajouter la commande \\version si elle est absente"
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+#, fuzzy
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr "afficher les règles [par défaut : --from=0, --to=@TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr "convertir jusqu'à la VERSION [par défaut : @TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr "Conversion en cours : "
 
 #: convert-ly.py:166
-msgid "error while converting"
+#, fuzzy
+msgid "Error while converting"
 msgstr "erreur lors de la conversion"
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr "Abandon"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Traitement de « %s »... "
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "impossible d'ouvrir le fichier : « %s »"
 
-#: convert-ly.py:286
-#, python-format
-msgid "can't determine version for `%s'. Skipping"
+#: convert-ly.py:284
+#, fuzzy, python-format
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "impossible de déterminer la version pour « %s ». Au suivant"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Utilisation : %s [OPTIONS]... FICHIER..."
+
 #: etf2ly.py:1198
+#, fuzzy
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 "Enigma Transport Format est utilisé par Finale, de Coda Music Technology.\n"
 "Ce programme convertit partiellement un fichier ETF en un fichier LilyPond "
 "exploitable."
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "produire la sortie dans le FICHIER"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "FICHIER"
 
-#: etf2ly.py:1204 midi2ly.py:899
-msgid "show warranty"
-msgstr "afficher la notice de garantie"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
+msgstr "afficher les notices de garantie et de droit d'auteur"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook "
-"document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
-"Traite des extraits LilyPond dans un document hybride HTML, LaTeX, "
-"Texinfo ou DocBook.\n"
-"Exemples d'utilisation :\n"
-"\n"
-"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" LIVRE\n"
-"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" LIVRE\n"
-"   lilypond-book --process='lilypond -I include' LIVRE\n"
-"\n"
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Fin d'exécution (%d)..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s détenu par"
@@ -251,13 +256,20 @@ msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr "passer les extraits à travers le FILTRE [convert-ly -n -]"
 
 #: lilypond-book.py:135
-msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr "utiliser le format de sortie FORMAT (texi (par défaut), texi-html, latex, html, docbook)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr ""
+"utiliser le format de sortie FORMAT (texi (par défaut), texi-html, latex, "
+"html, docbook)"
 
 #: lilypond-book.py:138
 msgid "add DIR to include path"
 msgstr "ajouter le RÉPERTOIRE au chemin de recherche des inclusions"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "RÉPERTOIRE"
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr "produire la sortie dans le RÉPERTOIRE"
@@ -270,147 +282,149 @@ msgstr "COMMANDE"
 msgid "process ly_files using COMMAND FILE..."
 msgstr "traiter les fichiers_ly en utilisant COMMANDE FICHIER..."
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
+#, fuzzy
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 "extraire toutes les polices PostScript dans INPUT.psfonts\n"
 "pour LaTex. Ceci devra être accompagné de dvips -h INPUT.psfonts"
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "passer en mode verbeux"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "afficher les notices de garantie et de droit d'auteur"
-
-#: lilypond-book.py:778
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr "fichier non trouvé : %s"
 
-#: lilypond-book.py:1009
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "l'option ly-option est obsolète : %s=%s"
 
-#: lilypond-book.py:1012
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "traduction en mode de compatibilité : %s=%s"
 
-#: lilypond-book.py:1016
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "l'option ly-option est obsolète : %s"
 
-#: lilypond-book.py:1019
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "traduction en mode de compatibilité : %s"
 
-#: lilypond-book.py:1038
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "option ly inconnue et ignorée : %s"
 
-#: lilypond-book.py:1391
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr "Ouverture du filtre « %s »"
 
-#: lilypond-book.py:1408
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "« %s » a échoué (%d)"
 
-#: lilypond-book.py:1409
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "Le journal d'erreurs est comme suit :"
 
-#: lilypond-book.py:1479
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+#, fuzzy
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr "Impossible de trouver \\begin{document} dans le document LaTeX"
 
-#: lilypond-book.py:1589
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr "Écriture des extraits..."
 
-#: lilypond-book.py:1594
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "Traitement..."
 
-#: lilypond-book.py:1598
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr "Tous les extraits sont à jour..."
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1605
 #, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "impossible de déterminer le format pour : %s"
 
-#: lilypond-book.py:1619
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr "%s est à jour."
 
-#: lilypond-book.py:1625
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Écriture de « %s »..."
 
-#: lilypond-book.py:1680
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr "La sortie écraserait le fichier d'entrée ; utiliser --output."
 
-#: lilypond-book.py:1684
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr "Lecture de %s..."
 
-#: lilypond-book.py:1703
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr "Dissection en cours..."
 
-#: lilypond-book.py:1719
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr "Compilation de %s..."
 
-#: lilypond-book.py:1728
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr "Traitement d'inclusion : %s"
 
-#: lilypond-book.py:1742
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr "Suppression de « %s »"
 
-#: lilypond-book.py:1819
+#: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr "Écriture des polices dans %s..."
 
-#: lilypond-book.py:1834
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr "option --psfonts inutilisée"
 
-#: lilypond-book.py:1835
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr "le traitement avec dvips n'aura pas de polices"
 
-#: lilypond-book.py:1838
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr "utilisation de DVIPS :"
 
-#: midi2ly.py:106 lily-library.scm:557 lily-library.scm:565
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "AVERTISSEMENT : "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "ERREUR : "
 
@@ -423,8 +437,9 @@ msgstr "Fin d'exécution... "
 msgid "%s output to `%s'..."
 msgstr "%s reproduit dans « %s »..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
 msgstr "Convertir du format MIDI au format source LilyPond."
 
 #: midi2ly.py:875
@@ -468,34 +483,62 @@ msgid "treat every text as a lyric"
 msgstr "traiter chaque texte comme des paroles"
 
 #: midi2ly.py:905
-msgid "example"
+#, fuzzy
+msgid "Examples"
 msgstr "Exemple"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "aucun fichier spécifié en ligne de commande."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Ce programme est un logiciel libre. Il est couvert par la licence GNU "
+"General\n"
+"Public License, et vous êtes libre de le modifier et/ou d'en distribuer "
+"des \n"
+"copies sous certaines conditions. Appelez « %s --warranty » pour plus "
+"d'informations.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr "produire la sortie dans FICHIER"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "l'option « %s » requiert un argument"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "l'option « %s » ne reçoit pas d'argument"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "option non reconnue : « %s »"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "argument « %s » invalide pour l'option « %s »"
 
-#: warn.cc:68 grob.cc:556 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr "erreur de programmation : %s"
@@ -504,31 +547,31 @@ msgstr "erreur de programmation : %s"
 msgid "continuing, cross fingers"
 msgstr "poursuite ; croisons les doigts"
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 "la saisie d'une liste d'altérations accidentelles doit débuter \n"
 "par un nom de contexte : %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "altération accidentelle inconnue, donc ignorée : %s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 "paire ou nom de contexte attendu pour la règle d'altération accidentelle,\n"
 " %s trouvé"
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "altération accidentelle « %s » non trouvée"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
@@ -537,58 +580,51 @@ msgstr ""
 "N'utilisez les lignes inter-portées (cross-staff spanners) que dans une "
 "double portée (PianoStaff)."
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
-msgstr "tentative d'obtenir une traduction pour quelque chose qui n'est pas mon fils"
+#: align-interface.cc:329
+#, fuzzy
+msgid "tried to get a translation for something that is no child of mine"
+msgstr ""
+"tentative d'obtenir une traduction pour quelque chose qui n'est pas mon fils"
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "impossible de trouver la police : « %s »"
 
-#: all-font-metrics.cc:165
-msgid "loading default font"
-msgstr "chargement de la police par défaut"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "impossible de trouver la police par défaut : « %s »"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(chemin de recherche : « %s »)"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-msgid "giving up"
-msgstr "abandon"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr "l'argument de \\applycontext n'est pas une procédure"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "impossible de faire un changement, c'est déjà dans le traducteur : %s"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver : le groupe vertical a déjà un parent"
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr "y a-t-il deux Axis_group_engravers ?"
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr "retrait de ce groupe vertical"
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr "tentative de calculer une hauteur pure ailleurs qu'à un point d'arrêt"
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -602,19 +638,20 @@ msgstr "lien déjà présent"
 msgid "unterminated beam"
 msgstr "lien non terminé"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "la hampe doit avoir une structure Rhythmic"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "la hampe ne s'insère pas dans le lien"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "le lien a débuté ici"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
 msgstr "nulle part où positionner le lien"
 
@@ -622,25 +659,25 @@ msgstr "nulle part où positionner le lien"
 msgid "removing beam with no stems"
 msgstr "suppression du lien ayant moins de deux hampes"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 "pas de configuration initiale viable repérée : la pente du lien pourrait \n"
 "être mauvaise"
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Pas d'entrée d'espacement entre %s et « %s »"
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "impossible de changer « %s » en « %s »"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "impossible de repérer le contexte vers lequel commuter"
 
 #. We could change the current translator's id, but that would make
@@ -671,7 +708,7 @@ msgstr "accord de trémolo non terminé"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr "attendait 2 éléments pour l'accord de trémolo, %d trouvé(s)"
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "clé « %s » non trouvée"
@@ -688,30 +725,32 @@ msgstr "rejet d'un cluster vide"
 #: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr "Coherent_ligature_engraver : initialise `spacing-increment=0.01': ptr=%ul"
+msgstr ""
+"Coherent_ligature_engraver : initialise `spacing-increment=0.01': ptr=%ul"
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "couldn't find line breaking that satisfies constraints"
+#, fuzzy
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "impossible de trouver un saut de ligne qui satisfasse aux contraintes"
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr "le programme n'a pas de tel type : « %s »"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "nécessite des arguments symboliques pour \\override et \\revert"
 
 #: context.cc:151
 #, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "impossible de trouver ou créer un nouveau « %s »"
 
 #: context.cc:213
 #, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "impossible de trouver ou créer « %s » appelé « %s »"
 
 #: context.cc:276
@@ -721,7 +760,7 @@ msgstr "Événement CreateContext invalide : impossible de créer le contexte %s
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "impossible de trouver ou créer : « %s »"
 
 #: custos.cc:77
@@ -729,11 +768,11 @@ msgstr "impossible de trouver ou créer : « %s »"
 msgid "custos `%s' not found"
 msgstr "custode « %s » non trouvée"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr "La classe Event devrait être un symbole"
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, c-format
 msgid "Unknown event class %s"
 msgstr "Classe d'événement inconnue : « %s »"
@@ -744,7 +783,7 @@ msgid "dot `%s' not found"
 msgstr "point « %s » introuvable"
 
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "impossible de trouver le début du (de)crescendo"
 
 #: dynamic-engraver.cc:195
@@ -763,11 +802,7 @@ msgstr "le crescendo débute ici"
 msgid "unterminated (de)crescendo"
 msgstr "(de)crescendo non terminé"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr "ne peut paramétrer le callback de création : il n'est pas une procédure"
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "prolongation non terminée"
 
@@ -790,17 +825,17 @@ msgstr "échec d'ajout du répertoire de polices : « %s »"
 msgid "adding font directory: %s"
 msgstr "ajout d'un répertoire de polices : « %s »"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 "infini ou valeur non numérique rencontré lors de la conversion d'un nombre "
 "réel"
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr "initialisation à zéro"
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
 msgstr "glissando non terminé"
 
@@ -829,27 +864,24 @@ msgstr "\\%s implicite ajouté"
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "Impossible d'appliquer '\\~' à la première tête de ligature"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr "impossible d'appliquer '\\~' à des têtes ayant la même hauteur"
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr "Interface inconnue : « %s »"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
-msgstr "L'objet graphique (Grob) « %s » n'a pas d'interface pour la propriété « %s »"
-
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr "ne peut paramétrer le callback de modification : il n'est pas une procédure"
+msgstr ""
+"L'objet graphique (Grob) « %s » n'a pas d'interface pour la propriété « %s »"
 
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
@@ -857,19 +889,16 @@ msgstr ""
 "infini ou valeur non numérique rencontré lors de la conversion d'un nombre "
 "réel"
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "decrescendo trop court"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "crescendo trop court"
-
-#: horizontal-bracket-engraver.cc:57
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+#, fuzzy
+msgid "do not have that many brackets"
 msgstr "n'a pas autant de crochets"
 
-#: horizontal-bracket-engraver.cc:66
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr "événements de groupe de notes conflictuels"
 
@@ -885,17 +914,22 @@ msgstr "trait d'union sans suite ; escamoté"
 msgid "include files are not allowed in safe mode"
 msgstr "l'inclusion de fichiers n'est pas permise en mode sécurisé"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "impossible de trouver le fichier : « %s »"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(chemin de recherche : « %s »)"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "position inconnue"
 
 #: ligature-engraver.cc:93
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "impossible de trouver le début d'une ligature"
 
 #: ligature-engraver.cc:98
@@ -922,54 +956,54 @@ msgstr "le silence est ignoré : une ligature ne peut contenir de silence"
 msgid "ligature was started here"
 msgstr "la ligature a débuté ici"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(chemin de chargement : « %s »)"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Vérification de type de propriété pour « %s » (%s) non trouvée."
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr "s'agit-il d'une faute de frappe ?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr "affectation faite malgré tout"
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 "la vérification du type de « %s » a échoué ; \n"
 "   la valeur « %s » doit être du type « %s »"
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "le nom de l'identificateur est un mot clé : « %s »"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "erreur à la fin du fichier (EOF) : %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, c-format
 msgid "deprecated function called: %s"
 msgstr "appel à une fonction obsolète : %s"
 
-#: lily-parser-scheme.cc:89
-#, c-format
-msgid "Changing working directory to `%s'"
+#: lily-parser-scheme.cc:88
+#, fuzzy, c-format
+msgid "Changing working directory to: `%s'"
 msgstr "impossible de changer le répertoire de travail pour : %s"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "impossible de trouver le fichier d'initialisation : « %s »"
 
 #: lily-parser-scheme.cc:125
@@ -977,20 +1011,21 @@ msgstr "impossible de trouver le fichier d'initialisation : « %s »"
 msgid "Processing `%s'"
 msgstr "Traitement de « %s »"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Analyse syntaxique..."
 
-#: lily-parser.cc:126
-msgid "braces don't match"
+#: lily-parser.cc:127
+#, fuzzy
+msgid "braces do not match"
 msgstr "accolades non pairées"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr "impossible de repérer la voix Voice « %s »"
 
-#: main.cc:117
+#: main.cc:116
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -1005,7 +1040,7 @@ msgstr ""
 "copies sous certaines conditions. Appelez « %s --warranty » pour plus "
 "d'informations.\n"
 
-#: main.cc:123
+#: main.cc:122
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1031,110 +1066,106 @@ msgstr ""
 "la licence GNU General Public License pour plus de détails.\n"
 "\n"
 "    Vous devriez avoir reçu avec ce logiciel une copie de la\n"
-"licence GNU General Public License ; dans le cas contraire, écrivez "
-"à\n"
+"licence GNU General Public License ; dans le cas contraire, écrivez à\n"
 "la Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA "
 "02111-1307,\n"
 "USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr "BACK"
 
-#: main.cc:154
+#: main.cc:153
+#, fuzzy
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 "utiliser le support BACK (gnome, ps, eps,\n"
 "scm, svg, tex, texstr)\n"
 "par défaut : PS"
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+#, fuzzy
+msgid "SYM[=VAL]"
 msgstr "SYM=VAL"
 
-#: main.cc:157
+#: main.cc:156
+#, fuzzy
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 "définit une option en langage Scheme. Utilise #t si VAL n'est pas "
 "spécifiée.\n"
 "Tenter -dhelp pour obtenir de l'aide."
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr "évalue du code Scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr "FORMATs"
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "produire FORMAT,... Aussi comme options séparées :"
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr "générer le DVI (uniquement pour tex)"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr "redétermine le chemin d'exécution de LilyPond"
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr "générer le PDF (par défaut)"
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr "générer le PNG"
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr "générer le PostScript"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr "générer le TeX (uniquement pour tex)"
 
-#: main.cc:170
-msgid "print this help"
-msgstr "afficher cet aide-mémoire"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "CHAMP"
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
+#: main.cc:169
+#, fuzzy
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "écrire un champ d'en-tête dans le fichier BASENAME.CHAMP"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "RÉPERTOIRE"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "ajouter le RÉPERTOIRE au chemin de recherche"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "utiliser le FICHIER comme fichier d'initialisation"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr "UTILISATEUR,GROUPE,CAGE,RÉPERTOIRE"
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -1142,27 +1173,35 @@ msgstr ""
 "chroot dans CAGE, devenir UTILISATEUR:GROUPE\n"
 "et cd dans RÉPERTOIRE"
 
-#: main.cc:178
+#: main.cc:177
 msgid "do not generate printed output"
 msgstr "ne pas générer la sortie imprimée"
 
-#: main.cc:179
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "produire la sortie dans le FICHIER (adjonction automatique du suffixe)"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr "produire une image du premier système"
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr "redétermine le chemin d'exécution de LilyPond"
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+#, fuzzy
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr "rejette les opérations Scheme et PostScript non sûres"
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "affiche le numéro de version"
 
-#: main.cc:223
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1172,81 +1211,82 @@ msgstr ""
 "%s et autres."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Utilisation : %s [OPTIONS]... FICHIER..."
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Composer la musique et/ou produire du MIDI à partir du FICHIER"
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produit une jolie notation musicale."
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr "Pour plus d'information, voir %s"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Options :"
 
-#: main.cc:262
+#: main.cc:263
 #, c-format
 msgid "Report bugs via %s"
 msgstr "Rapporter toute anomalie à %s"
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "attendait %d arguments avec la cage, %u trouvés"
 
-#: main.cc:322
+#: main.cc:323
 #, c-format
 msgid "no such user: %s"
 msgstr "utilisateur inconnu : « %s »"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 "impossible de repérer l'id d'utilisateur à partir du nom d'utilisateur : %"
 "s : %s"
 
-#: main.cc:339
+#: main.cc:340
 #, c-format
 msgid "no such group: %s"
 msgstr "groupe inconnu : %s"
 
-#: main.cc:341
+#: main.cc:342
 #, c-format
-msgid "can't get group id from group name: %s: %s"
-msgstr "impossible de repérer l'id de groupe à partir du nom de groupe : %s : %s"
+msgid "cannot get group id from group name: %s: %s"
+msgstr ""
+"impossible de repérer l'id de groupe à partir du nom de groupe : %s : %s"
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "impossible de chrooter vers : %s : %s"
 
-#: main.cc:356
+#: main.cc:357
 #, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "impossible de changer l'id de groupe vers : %d : %s"
 
-#: main.cc:362
+#: main.cc:363
 #, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "impossible de changer l'id d'utilisateur vers : %d : %s"
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "impossible de changer le répertoire de travail vers : %s : %s"
 
 #: main.cc:415
@@ -1254,7 +1294,7 @@ msgstr "impossible de changer le répertoire de travail vers : %s : %s"
 msgid "Evaluating %s"
 msgstr "Èvaluation de %s"
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr "Exception capturée : %s"
@@ -1274,7 +1314,8 @@ msgstr "ligature ayant moins de 2 têtes -> escamotage"
 
 #: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr "impossible de déterminer la hauteur de la primitive de ligature -> escamotage"
+msgstr ""
+"impossible de déterminer la hauteur de la primitive de ligature -> escamotage"
 
 #: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
@@ -1329,125 +1370,123 @@ msgstr "Mensural_ligature : (join_right == 0)"
 msgid "no such MIDI instrument: `%s'"
 msgstr "instrument MIDI inconnu : « %s »"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "hauteur étrange"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr "expérimental : ajustement temporaire (de %d centièmes) du canal."
 
 #: midi-stream.cc:28
 #, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "impossible d'ouvrir le fichier en écriture : %s : %s"
 
 #: midi-stream.cc:44
 #, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "impossible d'écrire dans le fichier : « %s »"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr "Envoi d'un non-événement au contexte"
 
-#: music.cc:142
-#, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+#: music.cc:141
+#, fuzzy, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "la vérification d'octave a échoué ; attendait %s, a obtenu : %s"
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "La transposition de %s crée des altérations supérieures aux doubles"
 
-#: new-fingering-engraver.cc:95
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr "impossible d'ajouter du texte à des têtes de notes individuelles"
 
-#: new-fingering-engraver.cc:238
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr "aucun emplacement trouvé pour des doigtés"
 
-#: new-fingering-engraver.cc:239
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr "on les place en dessous"
 
-#: note-collision.cc:438
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
 msgstr "trop de notes se chevauchent. On les ignore."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr "impossible de superposer une note et un silence"
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "tête de note « %s » ou « %s » non trouvée"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr "NoteEvent sans hauteur"
 
 #: open-type-font.cc:33
 #, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "impossible d'allouer %lu octets"
 
 #: open-type-font.cc:37
 #, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "impossible de charger la table de police : %s"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "format de police non supporté : %s"
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr "erreur non répertoriée : %d à la lecture du fichier de police %s"
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
 msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr "FT_Get_Glyph_Name() a renvoyé l'erreur : %u"
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
+#, fuzzy
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 "impossible de cadrer la première tourne de page sur une seule page. "
 "Envisagez de définir un nombre pair pour first-page-number."
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr "Calcul des sauts de page et de ligne (%d sauts de pages possibles)..."
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr "Dessin des systèmes..."
 
-#: pango-font.cc:196
+#: pango-font.cc:181
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
 "Skipping glyph U+%0X, file %s"
 msgstr ""
-"Le glyphe n'a pas de nom, mais la fonte prend en charge le nommage de glyphes.\n"
+"Le glyphe n'a pas de nom, mais la fonte prend en charge le nommage de "
+"glyphes.\n"
 "Glyphe U+%0X ignoré dans le fichier %s"
 
-#: pango-font.cc:235
+#: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "aucun nom de police PostScript correspondant à « %s »"
 
-#: pango-font.cc:283
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr "Caractère FreeType sans nom de police PostScript"
 
@@ -1481,15 +1520,15 @@ msgstr "répétition en pourcent non terminée"
 msgid "Track..."
 msgstr "Piste..."
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr "Bouclage du canal MIDI"
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr "réaffectation modulo 16"
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "Sortie MIDI vers « %s »..."
@@ -1498,23 +1537,24 @@ msgstr "Sortie MIDI vers « %s »..."
 msgid "unterminated phrasing slur"
 msgstr "liaison de phrasé non terminée"
 
-#: piano-pedal-engraver.cc:283
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr "nécessite 3 cordes pour les pédales du piano, mais seulement %ld trouvées"
+msgstr ""
+"nécessite 3 cordes pour les pédales du piano, mais seulement %ld trouvées"
 
-#: piano-pedal-engraver.cc:298 piano-pedal-engraver.cc:309
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "impossible de repérer le début de la pédale de piano : « %s »"
 
-#: piano-pedal-engraver.cc:344
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "impossible de trouver le début du crochet de pédale de piano : « %s »"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
 msgstr "option interne inconnue : %s"
@@ -1524,51 +1564,51 @@ msgstr "option interne inconnue : %s"
 msgid "not a grob name, `%s'"
 msgstr "n'est pas un nom d'objet graphique (grob), « %s »"
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr "Échec de la vérification de l'octave, a obtenu : "
 
 #: relocate.cc:44
-#, c-format
-msgid "Setting %s to %s\n"
+#, fuzzy, c-format
+msgid "Setting %s to %s"
 msgstr "Affectation à %s de la valeur %s\n"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, c-format
 msgid "no such file: %s for %s"
 msgstr "fichier inexistant : %s pour %s"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr "répertoire inexistant : %s pour %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr "%s=%s (préfixage)\n"
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr "Réaffectation : prefixe de compilation=%s, nouveau préfixe=%s"
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr "Réaffectation : framework_prefix=%s"
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr "Réaffectation : est absolu : argv0=%s"
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr "Réaffectation : à partir du répertoire courant : argv0=%s"
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -1577,63 +1617,63 @@ msgstr ""
 "Réaffectation : à partir de PATH=%s\n"
 "argv0=%s"
 
-#: relocate.cc:353
-#, c-format
-msgid "Relocation file %s\n"
+#: relocate.cc:354
+#, fuzzy, c-format
+msgid "Relocation file: %s"
 msgstr "Fichier de relocation %s\n"
 
-#: relocate.cc:358
-#, c-format
-msgid "can't open file %s"
-msgstr "impossible d'ouvrir le fichier « %s »"
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Commande de relocation inconnue %s"
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr "collision de silences insoluble : direction du silence non fixée"
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "trop de silences en collision"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr "silence « %s » non repéré"
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, c-format
 msgid "cannot find `%s'"
 msgstr "impossible de trouver « %s »"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr "Les polices musicales n'ont pas été installées correctement."
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, c-format
 msgid "Search path `%s'"
 msgstr "Chemin de recherche : « %s »"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "Abandon"
+
+#: score.cc:225
 msgid "already have music in score"
 msgstr "il y a déjà de la musique dans la partition"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr "voici la musique précédente"
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr "erreur repérée dans l'expression musicale. Elle sera ignorée."
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+#, fuzzy
+msgid "do not know how to interpret articulation: "
 msgstr "ne sait comment interpréter l'articulation : "
 
 #: script-engraver.cc:103
@@ -1645,16 +1685,17 @@ msgstr "encodage Scheme : "
 msgid "No spring between column %d and next one"
 msgstr "Pas de tension entre la colonne %d et la suivante"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
-msgstr "Direction invalide de slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "liaison non terminée"
 
-#: slur-engraver.cc:165
-msgid "can't end slur"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
 msgstr "impossible de terminer la liaison"
 
 #: source-file.cc:74
@@ -1666,57 +1707,57 @@ msgstr "était censé lire %d caractères ; il y en a %d"
 msgid "staff-span event has no direction"
 msgstr "L'événement staff-span n'a pas de direction"
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "durée du trémolo trop longue"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "ajout d'une tête de note à une hampe incompatible (type = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr "la source devrait peut-être spécifier des voix polyphoniques"
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr "taille de hampe bizarre ; vérifier la présence de liens étroits"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "crochet `%s' non repéré"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "type de crochet `%s' non repéré"
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "%d éléments dénombrés."
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr "%d objets graphiques (grobs) dénombrés"
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "impossible de repérer le point de départ de l'extension de texte"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "a déjà une extension du texte"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "extension du texte non terminée"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "liaison de prolongation orpheline"
 
@@ -1725,14 +1766,14 @@ msgstr "liaison de prolongation orpheline"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "chiffrage de mesure étrange : %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1744,34 +1785,30 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr "traducteur inconnu : « %s »"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "impossible de trouver : « %s »"
 
-#: translator.cc:331
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr "Deux événements %s simultanés, rejet de celui-ci"
 
-#: translator.cc:332
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr "Événement %s précédent ici"
 
-#: trill-spanner-engraver.cc:67
-msgid "can't find start of trill spanner"
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
 msgstr "impossible de repérer le point de départ de l'extension de trille"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
 msgstr "a déjà une extension de trille"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr "direction invalide de tuplet-span-event"
-
-#: vaticana-ligature-engraver.cc:382
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
@@ -1780,7 +1817,7 @@ msgstr ""
 "préfixe(s) ignoré(s) « %s » pour cette tête de note selon les restrictions "
 "du style de ligature sélectionné"
 
-#: vaticana-ligature-engraver.cc:708
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Vaticana_ligature_engraver : fixé `spacing-increment = %f' : ptr=%ul"
@@ -1798,264 +1835,276 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Ligature vaticane : aucun joint (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
-msgid "can't end volta spanner"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
 msgstr "ne sait où terminer l'extension de reprise"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "a déjà une extension de reprise, fin prématurée de celle-ci"
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
 msgstr "a déjà une extension terminée"
 
-#: parser.yy:703 parser.yy:704
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr "abandon"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "dans la section \\score, utiliser \\layout au lieu de \\paper"
 
-#: parser.yy:727 parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr "\\paper est nécessaire pour définir les paramètres de la page"
 
-#: parser.yy:1173 parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr "Un nom de Grob devrait être alphanumérique"
 
-#: parser.yy:1476 parser.yy:1477
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr "le second argument doit être une liste de hauteurs"
 
-#: parser.yy:1503 parser.yy:1508 parser.yy:1973 parser.yy:1504 parser.yy:1509
-#: parser.yy:1974
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
 msgstr "doit être en mode Lyric pour des paroles"
 
-#: parser.yy:1605 parser.yy:1606
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr "chaîne attendue comme définition de script"
 
-#: parser.yy:1760 parser.yy:1810 parser.yy:1761 parser.yy:1811
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "n'est pas une durée : %d"
 
-#: parser.yy:1927 parser.yy:1928
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
 msgstr "doit être en mode Note pour des notes"
 
-#: parser.yy:1988 parser.yy:1989
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
 msgstr "doit être en mode Chord pour des accords"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr "parasitage par UTF-8 BOM"
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr "Escamotage d'UTF-8 BOM"
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "La source a été renommée en « %s »"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr "\\version doit être suivi d'une chaîne entre guillemets"
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr "\\sourcefilename doit être suivi d'une chaîne entre guillemets"
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr "\\sourcefilename doit être suivi d'une valeur entière"
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "Fin de fichier (EOF) au mileu d'un commentaire"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput n'est pas permis en dehors des fichiers d'initialisation"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "identificateur erroné ou non défini : « %s »"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr "absence de guillemet fermant"
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Accolade repérée à la fin d'une parole. Manquerait-il un espace ?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Accolade repérée à la fin d'un \"markup\". Manquerait-il un espace ?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "caractère invalide : « %c »"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "chaîne d'échappement inconnue : « \\%s »"
 
-#: lexer.ll:882
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Version de LilyPond incorrecte : %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+#, fuzzy
+msgid "consider updating the input with the convert-ly script"
 msgstr "Envisagez la mise à jour de la source à l'aide du script convert-ly"
 
-#: backend-library.scm:19 lily.scm:487 ps-to-png.scm:88
-#, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Invocation de « ~a »..."
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "« ~a » a mis (~a) en échec"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Conversion en « ~a »..."
 
-#: backend-library.scm:110
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr "Conversion en ~a..."
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Écriture du champ d'en-tête « ~a » dans « ~a »..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr "symbole ~S redéfini"
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr "la classe d'événement ~A semble être inutilisée"
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr "le traducteur écoute la classe d'événements inexistante ~A"
 
-#: define-markup-commands.scm:265
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr "pas de système trouvé dans le bloc \\score, contient-il un bloc \\layout ?"
+msgstr ""
+"pas de système trouvé dans le bloc \\score, contient-il un bloc \\layout ?"
 
-#: define-markup-commands.scm:1281
-#, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "chaîne de durée invalide : ~a"
 
-#: define-music-types.scm:743
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr "symbole attendu : ~S"
 
-#: define-music-types.scm:746
-#, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "impossible de trouver l'objet de type musique : ~S"
 
-#: define-music-types.scm:766
-#, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "type de répétition inconnu : « ~S »"
 
-#: define-music-types.scm:767
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr "Consulter music-types.scm pour les types de répétitions reconnus"
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr "le document ~s devrait contenir une paire"
 
 #: document-backend.scm:135
-#, lisp-format
-msgid "can't find interface for property: ~S"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "impossible de trouver l'interface pour la propriété ~S"
 
 #: document-backend.scm:145
-#, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "interface d'objet graphique (Grob) inconnue : ~S"
 
 #: documentation-lib.scm:45
-#, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
 msgstr "Traitement de ~S..."
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr "Écriture de ~S..."
 
 #: documentation-lib.scm:172
-#, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "impossible de trouver une description pour la propriété ~S (~S)"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
 msgstr "Écriture de ~a..."
 
 #: framework-ps.scm:279
-#, lisp-format
-msgid "can't embed ~S=~S"
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr "intégration impossible : ~S=~S"
 
 #: framework-ps.scm:332
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr "impossible d'extraire le fichier ~a à partir de ~a"
 
 #: framework-ps.scm:349
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#, fuzzy, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr "imposible de réaliser l'intégration ~S=~S"
 
 #: framework-ps.scm:380
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "impossible d'intégrer les polices ~s ~s ~s"
 
-#: framework-ps.scm:731
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr "impossible de convertir <stdout> en ~S"
 
-#: framework-ps.scm:750 framework-ps.scm:753
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr "impossible de générer ~S à l'aide du support postscript"
 
-#: framework-ps.scm:760
+#: framework-ps.scm:758
+#, fuzzy
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2070,57 +2119,57 @@ msgstr ""
 "ou supprimez du fichier source les paramètres spécifiques à lilypond-book.\n"
 
 #: framework-tex.scm:360
-#, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "un nom de fichier Tex ne peut contenir d'espace : « ~a »"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr "Erreur de définition du lien : attendait (~S,~S), ~S trouvé."
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Erreur de définition du lien : attendait ~S 0, repéré ~S."
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
 msgstr "Calcul des sauts de page..."
 
-#: lily-library.scm:526
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unité inconnue : « ~S »"
 
-#: lily-library.scm:559
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 "pas de déclaration \\version trouvée, ajoutez ~a pour une compatibilité "
 "future"
 
-#: lily-library.scm:566
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr "compatibilité avec l'ancien mode relatif non utilisée"
 
-#: lily.scm:137
-#, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "impossible de trouver ~A"
 
-#: lily.scm:202
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "type d'argument erroné pour ~a. Attendait ~a, a trouvé ~s"
 
-#: lily.scm:416 lily.scm:477
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr "erreur sur les fichiers : ~S"
 
-#: lily.scm:467
-#, lisp-format
+#: lily.scm:579
+#, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirection de la sortie vers ~a..."
 
@@ -2128,50 +2177,52 @@ msgstr "Redirection de la sortie vers ~a..."
 msgid "Music head function must return Music object"
 msgstr "Une fonction musicale primitive devrait renvoyer un objet Music"
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Opération de propriété invalide ~a"
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "Nombre d'arguments erroné. Attendu : ~A, trouvé ~A : ~S"
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr "Argument invalide à la position ~A. ~A attendu, ~S trouvé."
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
-msgstr "Plus d'alternatives que de répétitions. Ignore les alternatives en surnombre"
+#: music-functions.scm:213
+#, fuzzy
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr ""
+"Plus d'alternatives que de répétitions. Ignore les alternatives en surnombre"
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr "attendait 2 éléments pour l'accord de trémolo, ~a trouvé(s)"
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr "attendait une expression musicale : ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 "Échec du contrôle de barre de mesure. \n"
 "Aurait dû se trouver à ~a au lieu de ~a"
 
-#: music-functions.scm:745
-#, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "impossible de trouver la citation de musique « ~S »"
 
-#: music-functions.scm:953
-#, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "style d'altération inconnu : ~S"
 
@@ -2180,18 +2231,18 @@ msgid "utf-8-string encountered in PS backend"
 msgstr "le support PS a rencontré une chaîne utf8"
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr "~S indéfini"
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr "la description de Pango ne peut être déchiffrée : ~a"
 
 #: output-tex.scm:98
-#, lisp-format
-msgid "can't find ~a in ~a"
+#, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "impossible de trouver ~a dans ~a"
 
 #: paper.scm:69
@@ -2199,12 +2250,12 @@ msgid "Not in toplevel scope"
 msgstr "N'est pas au niveau de portée globale"
 
 #: paper.scm:117
-#, lisp-format
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "~S n'est pas un objet de \\layout {}"
 
 #: paper.scm:129
-#, lisp-format
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr "Taille de papier inconnue : ~a"
 
@@ -2215,7 +2266,7 @@ msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "#(set-paper-size ..) doit être dans la section \\paper { ... }"
 
 #: parser-clef.scm:126
-#, lisp-format
+#, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "type de clef inconnu : « ~a »"
 
@@ -2223,12 +2274,71 @@ msgstr "type de clef inconnu : « ~a »"
 msgid "see scm/clef.scm for supported clefs"
 msgstr "consultez scm/clef.scm pour les clefs reconnues"
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "~a terminé avec l'état : ~S"
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "erreur d'assertion"
 
+#~ msgid "silly pitch"
+#~ msgstr "hauteur étrange"
+
+#~ msgid "show warranty"
+#~ msgstr "afficher la notice de garantie"
+
+#~ msgid ""
+#~ "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook "
+#~ "document.\n"
+#~ "\n"
+#~ "Example usage:\n"
+#~ "\n"
+#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+#~ " lilypond-book --process='lilypond -I include' BOOK\n"
+#~ msgstr ""
+#~ "Traite des extraits LilyPond dans un document hybride HTML, LaTeX, "
+#~ "Texinfo ou DocBook.\n"
+#~ "Exemples d'utilisation :\n"
+#~ "\n"
+#~ "   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" LIVRE\n"
+#~ "   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
+#~ "LIVRE\n"
+#~ "   lilypond-book --process='lilypond -I include' LIVRE\n"
+#~ "\n"
+
+#~ msgid "loading default font"
+#~ msgstr "chargement de la police par défaut"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "impossible de trouver la police par défaut : « %s »"
+
+#~ msgid "not setting creation callback: not a procedure"
+#~ msgstr ""
+#~ "ne peut paramétrer le callback de création : il n'est pas une procédure"
+
+#~ msgid "not setting modification callback: not a procedure"
+#~ msgstr ""
+#~ "ne peut paramétrer le callback de modification : il n'est pas une "
+#~ "procédure"
+
+#~ msgid "crescendo too small"
+#~ msgstr "crescendo trop court"
+
+#~ msgid "print this help"
+#~ msgstr "afficher cet aide-mémoire"
+
+#~ msgid "cannot open file %s"
+#~ msgstr "impossible d'ouvrir le fichier « %s »"
+
+#~ msgid "Invalid direction of slur-event"
+#~ msgstr "Direction invalide de slur-event"
+
+#~ msgid "invalid direction of tuplet-span-event"
+#~ msgstr "direction invalide de tuplet-span-event"
+
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Version de LilyPond incorrecte : %s (%s, %s)"
index 0e707e8aee3fa4a6f7e92ab7bdfdfc5f09d07c3d..1d7ecfed34db066b9f6b3a89a205a2e4449e3b06 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Date: 1998-05-30 00:17:12+0200\n"
 "From:  <jantien@xs4all.nl>\n"
@@ -71,145 +71,154 @@ msgid "Running %s..."
 msgstr "Genero le voci..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "attenzione: "
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Uso: %s [OPZIONE]... [FILE]"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr ""
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+msgid "Report bugs via"
+msgstr ""
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
+msgstr ""
+
+#: convert-ly.py:43 lilypond-book.py:73
+msgid "Examples:"
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "attenzione: "
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "errore: "
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "Elaboro..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "non posso aprire il file: `%s'"
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "non trovo il file: `%s'"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Uso: %s [OPZIONE]... [FILE]"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr ""
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr ""
 
-#: etf2ly.py:1204 midi2ly.py:899
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
 #, fuzzy
-msgid "show warranty"
+msgid "show warranty and copyright"
 msgstr "  -w, --warranty         mostra la garanzia e il copyright\n"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, fuzzy, python-format
 msgid "Exiting (%d)..."
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s di"
@@ -223,7 +232,8 @@ msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr ""
 
 #: lilypond-book.py:135
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 
 #: lilypond-book.py:138
@@ -231,6 +241,10 @@ msgstr ""
 msgid "add DIR to include path"
 msgstr "  -I, --include=DIR      aggiunge DIR ai path di ricerca\n"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr ""
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr ""
@@ -243,149 +257,148 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr ""
 
-#: lilypond-book.py:168 main.cc:184
-#, fuzzy
-msgid "show warranty and copyright"
-msgstr "  -w, --warranty         mostra la garanzia e il copyright\n"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr ""
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr ""
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 #, fuzzy
 msgid "Writing snippets..."
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 #, fuzzy
 msgid "Processing..."
 msgstr "Elaboro..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "non trovo il file: `%s'"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, fuzzy, python-format
 msgid "Writing `%s'..."
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, fuzzy, python-format
 msgid "Reading %s..."
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 #, fuzzy
 msgid "Dissecting..."
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, fuzzy, python-format
 msgid "Compiling %s..."
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "Elaboro..."
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "Genero le voci..."
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "non trovo e non posso creare `%s'"
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "attenzione: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "errore: "
 
@@ -398,8 +411,9 @@ msgstr ""
 msgid "%s output to `%s'..."
 msgstr "L'output MIDI è inviato a %s..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, python-format
+msgid "Convert %s to LilyPond input."
 msgstr ""
 
 #: midi2ly.py:875
@@ -445,34 +459,55 @@ msgid "treat every text as a lyric"
 msgstr ""
 
 #: midi2ly.py:905
-msgid "example"
+msgid "Examples"
 msgstr ""
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr ""
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr ""
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "l'opzione `%s' richiede un argomento"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "opzione `%s' non accetta argomenti"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "opzione non riconosciuta: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "argomento `%s' non valido per l'opzione `%s'"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr ""
@@ -481,85 +516,75 @@ msgstr ""
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr ""
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr ""
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, fuzzy, c-format
-msgid "can't find font: `%s'"
-msgstr "non trovo il file: `%s'"
-
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
+msgid "cannot find font: `%s'"
 msgstr "non trovo il file: `%s'"
 
-#: all-font-metrics.cc:172
-#, fuzzy, c-format
-msgid "can't find default font: `%s'"
-msgstr "non trovo il file: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, fuzzy, c-format
-msgid "(search path: `%s')"
-msgstr "(Il path di caricamento è `%s'"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-msgid "giving up"
-msgstr ""
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "non posso cambiare `%s' in `%s'"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, fuzzy, c-format
 msgid "barcheck failed at: %s"
@@ -574,20 +599,21 @@ msgstr ""
 msgid "unterminated beam"
 msgstr "beam non terminato"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 #, fuzzy
 msgid "stem must have Rhythmic structure"
 msgstr "I gambi devono avere una struttura ritmica."
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "il gambo non rientra nel beam"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr ""
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
 msgstr ""
 
@@ -596,24 +622,24 @@ msgstr ""
 msgid "removing beam with no stems"
 msgstr "beam con meno di due gambi"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, fuzzy, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "traduttore sconosciuto `%s'"
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "non posso cambiare `%s' in `%s'"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "Non trovo il contesto dello Score"
 
 #. We could change the current translator's id, but that would make
@@ -645,7 +671,7 @@ msgstr "beam non terminato"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr ""
@@ -659,7 +685,7 @@ msgstr "tipo di chiave sconosciuto"
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
@@ -667,26 +693,26 @@ msgstr ""
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
 #, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "la soluzione non soddisfa i vincoli"
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr ""
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "non trovo e non posso creare `%s'"
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "non trovo e non posso creare '%s' chiamato '%s'"
 
 #: context.cc:276
@@ -696,7 +722,7 @@ msgstr ""
 
 #: context.cc:388
 #, fuzzy, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "non trovo e non posso creare `%s'"
 
 #: custos.cc:77
@@ -704,18 +730,23 @@ msgstr "non trovo e non posso creare `%s'"
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "tipo di chiave sconosciuto"
 
+#: dots.cc:38
+#, c-format
+msgid "dot `%s' not found"
+msgstr ""
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
 #, fuzzy
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "non trovo un (de)crescendo fino alla fine"
 
 #: dynamic-engraver.cc:195
@@ -738,11 +769,7 @@ msgstr "un cambio di tempo non 
 msgid "unterminated (de)crescendo"
 msgstr "crescendo non terminato"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "extender non terminato"
 
@@ -765,15 +792,15 @@ msgstr "non trovo e non posso creare `%s'"
 msgid "adding font directory: %s"
 msgstr "non trovo e non posso creare `%s'"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "slur non terminato"
@@ -806,46 +833,37 @@ msgstr ""
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "non trovo le estremità di %s"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "tipo di chiave sconosciuto"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr ""
 
-#: hairpin.cc:180
-#, fuzzy
-msgid "crescendo too small"
-msgstr "troppo piccolo"
-
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
 msgstr ""
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "richieste di timing in conflitto"
@@ -864,93 +882,98 @@ msgstr "beam non terminato"
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "non trovo il file: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, fuzzy, c-format
+msgid "(search path: `%s')"
+msgstr "(Il path di caricamento è `%s'"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "posizione sconosciuta"
 
-#: ligature-engraver.cc:95
+#: ligature-engraver.cc:93
 #, fuzzy
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "non trovo le estremità di %s"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr ""
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 #, fuzzy
 msgid "already have a ligature"
 msgstr "crescendo non terminato"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr ""
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 #, fuzzy
 msgid "unterminated ligature"
 msgstr "slur non terminato"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr ""
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 #, fuzzy
 msgid "ligature was started here"
 msgstr "un cambio di tempo non è ammesso in questo punto"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, fuzzy, c-format
 msgid "(load path: `%s')"
 msgstr "(Il path di caricamento è `%s'"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr ""
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr ""
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Il nome dell'identificatore è una parola chiave (`%s')"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "errore alla fine del file: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "non riesco a trovare il carattere `%s'"
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "non trovo e non posso creare `%s'"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "non trovo il file: `%s'"
 
 #: lily-parser-scheme.cc:125
@@ -958,21 +981,21 @@ msgstr "non trovo il file: `%s'"
 msgid "Processing `%s'"
 msgstr "Elaboro..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Analisi..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "le bretelle no si accoppiano"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "Non trovo il file `%s'"
 
-#: main.cc:117
+#: main.cc:116
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -981,7 +1004,7 @@ msgid ""
 "information.\n"
 msgstr ""
 
-#: main.cc:123
+#: main.cc:122
 #, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
@@ -993,7 +1016,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1014,131 +1037,130 @@ msgstr ""
 "Cambridge, MA 02136\n"
 "USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr ""
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 #, fuzzy
 msgid "generate DVI (tex backend only)"
 msgstr "vincoli degenerati"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 #, fuzzy
 msgid "generate PDF (default)"
 msgstr "vincoli degenerati"
 
-#: main.cc:167
+#: main.cc:165
 #, fuzzy
 msgid "generate PNG"
 msgstr "vincoli degenerati"
 
-#: main.cc:168
+#: main.cc:166
 #, fuzzy
 msgid "generate PostScript"
 msgstr "vincoli degenerati"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-msgid "print this help"
+#: main.cc:168
+msgid "show this help and exit"
 msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr ""
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
-msgstr ""
-
-#: main.cc:172
-msgid "DIR"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:172
+#: main.cc:171
 #, fuzzy
 msgid "add DIR to search path"
 msgstr "  -I, --include=DIR      aggiunge DIR ai path di ricerca\n"
 
-#: main.cc:173
+#: main.cc:172
 #, fuzzy
 msgid "use FILE as init file"
 msgstr "  -i, --init=NOMEFILE    usa NOMEFILE come file iniziale\n"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "vincoli degenerati"
 
-#: main.cc:179
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr ""
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr ""
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+msgid "show version number and exit"
 msgstr ""
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1146,79 +1168,79 @@ msgid ""
 msgstr "Copyright (c) %s di"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, fuzzy, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Uso: %s [OPZIONE]... [FILE]..."
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Stampa partitura oppure suona una song MIDI da FILE o <stdin>."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Opzioni: "
 
-#: main.cc:262
+#: main.cc:263
 #, c-format
 msgid "Report bugs via %s"
 msgstr ""
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "% strumento:"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "% strumento:"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "non posso cambiare `%s' in `%s'"
 
-#: main.cc:349
+#: main.cc:350
 #, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "non trovo e non posso creare `%s'"
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "non posso cambiare `%s' in `%s'"
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "non posso cambiare `%s' in `%s'"
 
-#: main.cc:368
+#: main.cc:369
 #, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "non trovo e non posso creare `%s'"
 
 #: main.cc:415
@@ -1226,7 +1248,7 @@ msgstr "non trovo e non posso creare `%s'"
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1240,37 +1262,37 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1278,7 +1300,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr ""
 
@@ -1295,116 +1317,119 @@ msgstr ""
 msgid "no such MIDI instrument: `%s'"
 msgstr "% strumento:"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "indicazione altezza priva di senso"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "non posso aprire il file: `%s'"
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "non posso aprire il file: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "la trasposizine di %s rende le alterazioni più che doppie"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "Troppe collisioni tra colonne di note. Le ignoro."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr ""
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "non posso maneggiare %s"
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "non trovo il file: `%s'"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 #, fuzzy
 msgid "Drawing systems..."
 msgstr "Genero le voci..."
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "non posso aprire il file: `%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1442,15 +1467,15 @@ msgstr "beam non terminato"
 msgid "Track..."
 msgstr "traccia "
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "L'output MIDI è inviato a %s..."
@@ -1460,23 +1485,23 @@ msgstr "L'output MIDI 
 msgid "unterminated phrasing slur"
 msgstr "slur non terminato"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, fuzzy, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "non risco a trovare una ruling note a %s"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "non risco a trovare una ruling note a %s"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "% strumento:"
@@ -1486,117 +1511,116 @@ msgstr "% strumento:"
 msgid "not a grob name, `%s'"
 msgstr ""
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "non trovo e non posso creare `%s'"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "% strumento:"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "% strumento:"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
-#, fuzzy, c-format
-msgid "Relocation file %s\n"
-msgstr "non posso aprire il file: `%s'"
-
-#: relocate.cc:358
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "can't open file %s"
+msgid "Relocation file: %s"
 msgstr "non posso aprire il file: `%s'"
 
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 #, fuzzy
 msgid "too many colliding rests"
 msgstr "Troppi crescendi"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "non trovo `%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr ""
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(Il path di caricamento è `%s'"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "ho bisogno di musica nello spartito"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 #, fuzzy
 msgid "errors found, ignoring music expression"
 msgstr "ho trovato un errore, /*non sto elaborando lo spartito*/"
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr ""
 
 #: script-engraver.cc:103
@@ -1609,17 +1633,18 @@ msgstr "Opzioni: "
 msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "slur non terminato"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "non posso maneggiare %s"
 
 #: source-file.cc:74
@@ -1631,61 +1656,61 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr ""
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "dimensione del gambo poco ortodossa; check for narrow beams"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr ""
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
-#: text-spanner-engraver.cc:60
+#: text-spanner-engraver.cc:61
 #, fuzzy
-msgid "can't find start of text spanner"
+msgid "cannot find start of text spanner"
 msgstr "non trovo le estremità di %s"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 #, fuzzy
 msgid "already have a text spanner"
 msgstr "crescendo non terminato"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 #, fuzzy
 msgid "unterminated text spanner"
 msgstr "extender non terminato"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr ""
 
@@ -1694,14 +1719,14 @@ msgstr ""
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1711,43 +1736,39 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr "traduttore sconosciuto `%s'"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, fuzzy, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "non trovo `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "non trovo le estremità di %s"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "crescendo non terminato"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1765,268 +1786,278 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "non trovo le estremità di %s"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr ""
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "crescendo non terminato"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr ""
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr ""
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "bisogna essere in Lyric mode per i testi"
 
-#: parser.yy:1612
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "non è una durata: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "bisogna essere in Note mode per le note"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "bisogna essere in Chord mode per gli accordi"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Genero le voci..."
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "ho trovato un EOF in un commento"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, fuzzy, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "indentificatore non definito: `%s'"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, fuzzy, c-format
 msgid "invalid character: `%c'"
 msgstr "carattere illegale: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "stringa di escape sconosciuta: `\\%s'"
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "versione di mudela errata: %s (%s, %s)"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+msgid "consider updating the input with the convert-ly script"
 msgstr ""
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, fuzzy, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Genero le voci..."
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr ""
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Genero le voci..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "Genero le voci..."
 
-#: backend-library.scm:156
-#, fuzzy, lisp-format
+#: backend-library.scm:145
+#, fuzzy, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "scrivo il file delle dipendenze: `%s'..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "non è una durata: %d"
 
-#: define-music-types.scm:734
-#, fuzzy, lisp-format
+#: define-music-types.scm:751
+#, fuzzy, scheme-format
 msgid "symbol expected: ~S"
 msgstr "aspettavo %s"
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "non trovo `%s'"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "tipo di chiave sconosciuto"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "non riesco a trovare il carattere `%s'"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "tipo di chiave sconosciuto"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "Elaboro..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "Genero le voci..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "non riesco a trovare il carattere `%s'"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "Genero le voci..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2035,56 +2066,56 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr ""
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "Calcolo delle posizioni della colonne..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "traduttore sconosciuto `%s'"
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "non trovo"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "L'output stampato è inviato a %s..."
 
@@ -2092,48 +2123,48 @@ msgstr "L'output stampato 
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, fuzzy, lisp-format
+#: music-functions.scm:538
+#, fuzzy, scheme-format
 msgid "music expected: ~S"
 msgstr "aspettavo %s"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "non trovo il file: `%s'"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "stringa di escape sconosciuta: `\\%s'"
 
@@ -2142,18 +2173,18 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "non trovo le estremità di %s"
 
 #: paper.scm:69
@@ -2161,24 +2192,24 @@ msgstr "non trovo le estremit
 msgid "Not in toplevel scope"
 msgstr "non c'è un traduttore di livello massimo"
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, fuzzy, lisp-format
+#: paper.scm:129
+#, fuzzy, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr "variabile paper sconosciuta: `%s'"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "tipo di chiave sconosciuto"
 
@@ -2186,27 +2217,55 @@ msgstr "tipo di chiave sconosciuto"
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr ""
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
 
+#~ msgid "silly pitch"
+#~ msgstr "indicazione altezza priva di senso"
+
 #, fuzzy
-#~ msgid "junking event: `%s'"
-#~ msgstr "Cosa? Non è una richiesta: `%s'"
+#~ msgid "show warranty"
+#~ msgstr "  -w, --warranty         mostra la garanzia e il copyright\n"
 
 #, fuzzy
-#~ msgid "can't find `%s' context"
-#~ msgstr "non trovo `%s'"
+#~ msgid "loading default font"
+#~ msgstr "non trovo il file: `%s'"
+
+#, fuzzy
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "non trovo il file: `%s'"
 
 #, fuzzy
-#~ msgid "can't find line breaking that satisfies constraints"
+#~ msgid "couldnnot find line breaking that satisfies constraints"
 #~ msgstr "la soluzione non soddisfa i vincoli"
 
+#, fuzzy
+#~ msgid "crescendo too small"
+#~ msgstr "troppo piccolo"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "non posso aprire il file: `%s'"
+
+#, fuzzy
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "versione di mudela errata: %s (%s, %s)"
+
+#, fuzzy
+#~ msgid "junking event: `%s'"
+#~ msgstr "Cosa? Non è una richiesta: `%s'"
+
+#, fuzzy
+#~ msgid "cannot find `%s' context"
+#~ msgstr "non trovo `%s'"
+
 #~ msgid "Creator: "
 #~ msgstr "Autore: "
 
@@ -2219,7 +2278,7 @@ msgstr ""
 #~ msgstr "Cosa? Non è una richiesta: `%s'"
 
 #, fuzzy
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "non riesco a trovare il carattere `%s'"
 
 #, fuzzy
@@ -2227,13 +2286,9 @@ msgstr ""
 #~ msgstr "extender non terminato"
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "Non trovo il contesto dello Score"
 
-#, fuzzy
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Uso: %s [OPZIONE]... [FILE]"
-
 #, fuzzy
 #~ msgid "Opening pipe `%s'"
 #~ msgstr "Genero le voci..."
@@ -2263,7 +2318,7 @@ msgstr ""
 #~ msgstr "Genero le voci..."
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "non posso aprire il file: `%s'"
 
 #, fuzzy
@@ -2283,7 +2338,7 @@ msgstr ""
 #~ msgstr "non trovo e non posso creare `%s'"
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "non so manipolare tasti vuoti"
 
 #, fuzzy
@@ -2327,7 +2382,7 @@ msgstr ""
 #~ msgstr "Errore non fatale: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "non trovo il file: `%s'"
 
 #, fuzzy
@@ -2367,11 +2422,11 @@ msgstr ""
 #~ msgstr "apice finale mancante"
 
 #, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
+#~ msgid "kpathsea cannot find %s file: `%s'"
 #~ msgstr "Non trovo il file `%s'"
 
 #, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
+#~ msgid "kpathsea cannot find file: `%s'"
 #~ msgstr "Non trovo il file `%s'"
 
 #, fuzzy
@@ -2435,7 +2490,7 @@ msgstr ""
 #~ msgstr "L'output MIDI è inviato a %s..."
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "non trovo il file: `%s'"
 
 #, fuzzy
@@ -2493,7 +2548,7 @@ msgstr ""
 #~ msgstr "della definizione musicale: %s"
 
 #, fuzzy
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "non trovo le estremità di %s"
 
 #, fuzzy
@@ -2505,7 +2560,7 @@ msgstr ""
 #~ msgstr "Spanner non legato `%s'"
 
 #, fuzzy
-#~ msgid "can't find start of slur"
+#~ msgid "cannot find start of slur"
 #~ msgstr "non trovo le estremità di %s"
 
 #, fuzzy
@@ -2542,7 +2597,7 @@ msgstr ""
 #~ msgid "Slur over rest?"
 #~ msgstr "Metto uno slur sulla pausa."
 
-#~ msgid "can't map file"
+#~ msgid "cannot map file"
 #~ msgstr "non posso mappare il documento"
 
 #, fuzzy
@@ -2604,7 +2659,7 @@ msgstr ""
 #~ msgstr "  -D, --debug            abilita l'output di debugging\n"
 
 #, fuzzy
-#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
+#~ msgid "do not output tuplets, double dots or rests, smallest is 32"
 #~ msgstr ""
 #~ "  -n, --no-silly         assume che non ci siano gruppetti o doppi punti, "
 #~ "la figura più piccola è 32\n"
@@ -2618,7 +2673,7 @@ msgstr ""
 #~ msgstr "indicazione durata priva di senso"
 
 #, fuzzy
-#~ msgid "don't timestamp the output"
+#~ msgid "do not timestamp the output"
 #~ msgstr ""
 #~ "  -T, --no-timestamps    non inserisce marcatori temporali nell'output\n"
 
@@ -2653,7 +2708,7 @@ msgstr ""
 #~ msgstr "Numero di tracce non valido"
 
 #, fuzzy
-#~ msgid "can't handle non-metrical time"
+#~ msgid "cannot handle non-metrical time"
 #~ msgstr "tempo non metrico"
 
 #~ msgid "invalid running status"
@@ -2691,7 +2746,7 @@ msgstr ""
 #~ msgstr "Eccezione di virgola mobile"
 
 #, fuzzy
-#~ msgid "can't set mem-checking!"
+#~ msgid "cannot set mem-checking!"
 #~ msgstr "non posso settare mem-checking"
 
 #, fuzzy
@@ -2730,7 +2785,7 @@ msgstr ""
 #~ msgid "Huh?  Not a Request: `%s'"
 #~ msgstr "Cosa? Non è una richiesta: `%s'"
 
-#~ msgid "can't find both ends of %s"
+#~ msgid "cannot find both ends of %s"
 #~ msgstr "non trovo le estremità di %s"
 
 #, fuzzy
@@ -2791,7 +2846,7 @@ msgstr ""
 #~ msgid "redeclaration of `\\%s'"
 #~ msgstr "doppia dichiarazione di `\\%s'"
 
-#~ msgid "Can't solve this casting problem exactly; revert to Word_wrap"
+#~ msgid "Cannot solve this casting problem exactly; revert to Word_wrap"
 #~ msgstr ""
 #~ "Non posso risolvere esattamente questo problema di conversione; ritorno "
 #~ "al Word_wrap"
@@ -2817,17 +2872,17 @@ msgstr ""
 #~ msgid "ugh, this measure is too long"
 #~ msgstr "ops, questa misura è troppo lunga"
 
-#~ msgid "I don't fit; put me on Montignac"
+#~ msgid "I do not fit; put me on Montignac"
 #~ msgstr "Non ci sto; mettimi su Montignac"
 
 #~ msgid "More than one music block"
 #~ msgstr "Più di un blocco di musica"
 
-#~ msgid "can't abbreviate"
+#~ msgid "cannot abbreviate"
 #~ msgstr "non posso abbreviare"
 
 #, fuzzy
-#~ msgid "can't abbreviate tuplet"
+#~ msgid "cannot abbreviate tuplet"
 #~ msgstr "non posso abbreviare"
 
 #~ msgid "Invalid midi format"
@@ -2837,7 +2892,7 @@ msgstr ""
 #~ msgstr "Interpreto...\n"
 
 #, fuzzy
-#~ msgid "don't timestamp the output "
+#~ msgid "do not timestamp the output "
 #~ msgstr ""
 #~ "  -T, --no-timestamps    non inserisce marcatori temporali nell'output\n"
 
@@ -2889,7 +2944,7 @@ msgstr ""
 #~ msgid "please fix me"
 #~ msgstr "correggimi, per favore"
 
-#~ msgid "stem at %s doesn't fit in beam"
+#~ msgid "stem at %s doesnnot fit in beam"
 #~ msgstr "il gambo a $s non rientra nel beam"
 
 #~ msgid "No stem direction set. Ignoring column in clash."
index 330dc6aef4c0f632940263d7e05a718cd6623fc8..7822ee346d426db60cf11963e52c85f84dc390aa 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 1.2.17\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: 2000-03-29 20:50+0900\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2006-12-23 16:15+0100\n"
 "Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
 "Language-Team: Japanese <ja@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -71,147 +71,155 @@ msgid "Running %s..."
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "·Ù¹ð: "
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [¥Õ¥¡¥¤¥ë]"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
 #, fuzzy
-msgid "set output filename to FILE"
+msgid "write output to FILE"
 msgstr "BASENAME[-x].³ÈÄ¥»Ò ¤Ø½ÐÎϤò½ñ¤­¹þ¤à"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "¥Ð¥°¥ì¥Ý¡¼¥È¤Ï %s ¤Ø."
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
+msgstr ""
+
+#: convert-ly.py:43 lilypond-book.py:73
+msgid "Examples:"
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "·Ù¹ð: "
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "¥¨¥é¡¼: "
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr "½ªÎ»¤·¤Þ¤¹"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "½èÍýÃæ..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, fuzzy, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [¥Õ¥¡¥¤¥ë]"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-#, fuzzy
-msgid "write output to FILE"
-msgstr "BASENAME[-x].³ÈÄ¥»Ò ¤Ø½ÐÎϤò½ñ¤­¹þ¤à"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "FILE"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "ÊݾڤÈÃøºî¸¢¤Ë¤Ä¤¤¤Æɽ¼¨¤¹¤ë"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:78
+msgid "BOOK"
+msgstr ""
+
+#: lilypond-book.py:87
 #, fuzzy, python-format
 msgid "Exiting (%d)..."
 msgstr "¹Ô ..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s by"
@@ -227,7 +235,8 @@ msgstr ""
 
 #: lilypond-book.py:135
 #, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr "½ÐÎÏ¥Õ¥©¡¼¥Þ¥Ã¥È EXT ¤ò»È¤¦"
 
 #: lilypond-book.py:138
@@ -235,6 +244,10 @@ msgstr "
 msgid "add DIR to include path"
 msgstr "DIR ¤ò¸¡º÷¥Ñ¥¹¤ËÄɲÃ"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "DIR"
+
 #: lilypond-book.py:143
 #, fuzzy
 msgid "write output to DIR"
@@ -248,149 +261,149 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 #, fuzzy
 msgid "be verbose"
 msgstr "¾ÜºÙ¤Ê¾ðÊó¤òɽ¼¨¤·¤Þ¤¹"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "ÊݾڤÈÃøºî¸¢¤Ë¤Ä¤¤¤Æɽ¼¨¤¹¤ë"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr ""
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr ""
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 #, fuzzy
 msgid "Writing snippets..."
 msgstr "¹Ô ..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 #, fuzzy
 msgid "Processing..."
 msgstr "½èÍýÃæ..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, fuzzy, python-format
 msgid "Writing `%s'..."
 msgstr "¹Ô ..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, fuzzy, python-format
 msgid "Reading %s..."
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 #, fuzzy
 msgid "Dissecting..."
 msgstr "¹Ô ..."
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, fuzzy, python-format
 msgid "Compiling %s..."
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "½èÍýÃæ..."
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "·Ù¹ð: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "¥¨¥é¡¼: "
 
@@ -404,8 +417,9 @@ msgstr "
 msgid "%s output to `%s'..."
 msgstr "%s ¤Ø¤Î MIDI ½ÐÎÏ"
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, python-format
+msgid "Convert %s to LilyPond input."
 msgstr ""
 
 #: midi2ly.py:875
@@ -451,34 +465,64 @@ msgid "treat every text as a lyric"
 msgstr ""
 
 #: midi2ly.py:905
-msgid "example"
+msgid "Examples"
 msgstr ""
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr ""
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"This is free software.  It is covered by the GNU General Public License,\n"
+"and you are welcome to change it and/or distribute copies of it under\n"
+"certain conditions.  Invoke as `%s --warranty' for more information.\n"
+"\n"
+"-- »²¹ÍÌõ\n"
+"¤³¤ì¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹¡£GNU °ìÈ̸øÍ­»ÈÍѵöÂú½ñ¤Ë´ð¤Å¤­¡¢Æ±°ì¾ò·ï¤Ç\n"
+"¤³¤ì¤ò²þÊѤ·¤¿¤ê¡¢Ê£À½¤òÇÛÉÛ¤·¤¿¤ê¤¹¤ë»ö¤Ï´¿·Þ¤µ¤ì¤Þ¤¹¡£\n"
+"`--warranty' ¥ª¥×¥·¥ç¥óÉÕ¤­¤Çµ¯Æ°¤¹¤ë¤È¡¢¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤¬ÆÀ¤é¤ì¤Þ¤¹¡£\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "BASENAME[-x].³ÈÄ¥»Ò ¤Ø½ÐÎϤò½ñ¤­¹þ¤à"
+
+#: getopt-long.cc:140
 #, fuzzy, c-format
 msgid "option `%s' requires an argument"
 msgstr "¥ª¥×¥·¥ç¥ó `%s' ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹"
 
-#: getopt-long.cc:145
+#: getopt-long.cc:144
 #, fuzzy, c-format
-msgid "option `%s' doesn't allow an argument"
+msgid "option `%s' does not allow an argument"
 msgstr "¥ª¥×¥·¥ç¥ó `%s' ¤Ï°ú¿ô¤òµö²Ä¤·¤Þ¤»¤ó"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "¥ª¥×¥·¥ç¥ó `%2$s' ¤ËÂФ¹¤ë̵¸ú¤Ê°ú¿ô `%1$s'"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, fuzzy, c-format
 msgid "programming error: %s"
 msgstr "¥×¥í¥°¥é¥à¾å¤Î¥¨¥é¡¼: "
@@ -487,86 +531,75 @@ msgstr "
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, fuzzy, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "¥·¥ã¡¼¥×¤¬Â¿¤¹¤®¤Þ¤¹ (%s)"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr ""
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, fuzzy, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤ò¥í¡¼¥É¤·¤Þ¤¹"
-
-#: all-font-metrics.cc:172
-#, fuzzy, c-format
-msgid "can't find default font: `%s'"
-msgstr "¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(¸¡º÷¥Ñ¥¹: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Äü¤á¤Þ¤·¤¿"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "`%s' ¤«¤é `%s' ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -582,22 +615,22 @@ msgstr "
 msgid "unterminated beam"
 msgstr "½ªÃ¼¤Î¤Ê¤¤¥Ï¥¤¥Õ¥ó"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 #, fuzzy
 msgid "stem must have Rhythmic structure"
 msgstr "ÉäÈø¤Ï¥ê¥º¥à¹½Â¤¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó"
 
-#: beam-engraver.cc:245
+#: beam-engraver.cc:246
 #, fuzzy
-msgid "stem doesn't fit in beam"
+msgid "stem does not fit in beam"
 msgstr "ÉäÈø¤¬³Ã¤ÎÃæ¤Ë¤ª¤µ¤Þ¤ê¤Þ¤»¤ó"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 #, fuzzy
 msgid "beam was started here"
 msgstr "³Ã¤Ï¤³¤³¤«¤é³«»Ï¤µ¤ì¤Þ¤·¤¿"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
 msgstr ""
 
@@ -606,24 +639,24 @@ msgstr ""
 msgid "removing beam with no stems"
 msgstr "³Ã¤¬Æó¤Ä̤Ëþ¤ÎÉäÈø¤È¤È¤â¤Ë»È¤ï¤ì¤Þ¤·¤¿"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, fuzzy, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Ƚ¤é¤Ê¤¤¥È¥é¥ó¥¹¥ì¡¼¥¿: `%s'"
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "`%s' ¤«¤é `%s' ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "`%s' ¥³¥ó¥Æ¥­¥¹¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #. We could change the current translator's id, but that would make
@@ -656,7 +689,7 @@ msgstr "
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr ""
@@ -670,7 +703,7 @@ msgstr "
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
@@ -678,26 +711,26 @@ msgstr ""
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
 #, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "¤½¤Î²ò·è¤ÏÀ©¸Â¤òËþ¤¿¤·¤Þ¤»¤ó"
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, fuzzy, c-format
 msgid "program has no such type: `%s'"
 msgstr "¥×¥í¥°¥é¥à¤Ë¤Ï¤½¤ÎÍͤʥ¿¥¤¥×¤¬¤¢¤ê¤Þ¤»¤ó"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "`%2$s' ¤Ë¸Æ¤Ð¤ì¤¿ `%1$s' ¤¬¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó"
 
 #: context.cc:276
@@ -707,7 +740,7 @@ msgstr ""
 
 #: context.cc:388
 #, fuzzy, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
 #: custos.cc:77
@@ -715,18 +748,23 @@ msgstr "
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "ÉÔÌÀ¤Ê²»Éôµ­¹æ(Clef)"
 
+#: dots.cc:38
+#, c-format
+msgid "dot `%s' not found"
+msgstr ""
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
 #, fuzzy
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #: dynamic-engraver.cc:195
@@ -749,11 +787,7 @@ msgstr "
 msgid "unterminated (de)crescendo"
 msgstr "½ªÎ»¤·¤Æ¤¤¤Ê¤¤¥¯¥ì¥Ã¥·¥§¥ó¥É"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "½ªÃ¼¤Î¤Ê¤¤¥¨¥¯¥¹¥Æ¥ó¥À"
 
@@ -776,15 +810,15 @@ msgstr "
 msgid "adding font directory: %s"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥¹¥é¡¼"
@@ -817,47 +851,38 @@ msgstr ""
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "ÉÔÌÀ¤Ê²»Éôµ­¹æ(Clef)"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr ""
 
-#: hairpin.cc:180
+#: horizontal-bracket-engraver.cc:59
 #, fuzzy
-msgid "crescendo too small"
-msgstr "¥¯¥ì¥Ã¥·¥§¥ó¥É"
-
-#: horizontal-bracket-engraver.cc:58
-#, fuzzy
-msgid "don't have that many brackets"
+msgid "do not have that many brackets"
 msgstr "¤½¤ó¤Ê¤ËÂô»³¤Î¥ª¥¯¥¿¡¼¥Ö (%s) ¤ò»È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "Çï»Ò¤ÎÍ׵᤬¶¥¹ç¤·¤Þ¤¹"
@@ -876,93 +901,98 @@ msgstr "
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, fuzzy, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(¸¡º÷¥Ñ¥¹: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "°ÌÃÖ¤¬È½¤ê¤Þ¤»¤ó"
 
-#: ligature-engraver.cc:95
+#: ligature-engraver.cc:93
 #, fuzzy
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr ""
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 #, fuzzy
 msgid "already have a ligature"
 msgstr "´û¤Ë³Ã¤¬¤¢¤ê¤Þ¤¹"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr ""
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 #, fuzzy
 msgid "unterminated ligature"
 msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥¹¥é¡¼"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr ""
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 #, fuzzy
 msgid "ligature was started here"
 msgstr "³Ã¤Ï¤³¤³¤«¤é³«»Ï¤µ¤ì¤Þ¤·¤¿"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(Æɹþ¥Ñ¥¹: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr ""
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr ""
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "¼±ÊÌ»Ò̾¤Ï¥­¡¼¥ï¡¼¥É¤Ç¤¹: `%s'"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "EOF ¤Î¤È¤³¤í¤Ç¥¨¥é¡¼: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "¸Æ¤Ó½Ð¤µ¤ì¤¿Ê¸»ú¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
 #: lily-parser-scheme.cc:125
@@ -970,21 +1000,21 @@ msgstr "
 msgid "Processing `%s'"
 msgstr "½èÍýÃæ..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "¹½Ê¸²òÀÏÃæ..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "¥Ö¥ì¡¼¥¹¤¬°ìÃפ·¤Þ¤»¤ó"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -1001,7 +1031,7 @@ msgstr ""
 "¤³¤ì¤ò²þÊѤ·¤¿¤ê¡¢Ê£À½¤òÇÛÉÛ¤·¤¿¤ê¤¹¤ë»ö¤Ï´¿·Þ¤µ¤ì¤Þ¤¹¡£\n"
 "`--warranty' ¥ª¥×¥·¥ç¥óÉÕ¤­¤Çµ¯Æ°¤¹¤ë¤È¡¢¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤¬ÆÀ¤é¤ì¤Þ¤¹¡£\n"
 
-#: main.cc:123
+#: main.cc:122
 #, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
@@ -1013,7 +1043,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1049,132 +1079,132 @@ msgstr ""
 "¤Ç¤¹(COPYING ¥Õ¥¡¥¤¥ë¤ò»²¾È)¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Free Software Foundation,\n"
 "Inc., 675 Mass Ave, Cambridge, MA 02139, USA ¤Ë¼ê»æ¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 #, fuzzy
 msgid "evaluate scheme code"
 msgstr "°ÂÁ´¥â¡¼¥É¤Ç¤Ï Scheme ¤Îɾ²Á¤ò¤Ç¤­¤Þ¤»¤ó"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 #, fuzzy
 msgid "generate DVI (tex backend only)"
 msgstr "À©¸Â¤ò´ËÏÂ"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 #, fuzzy
 msgid "generate PDF (default)"
 msgstr "À©¸Â¤ò´ËÏÂ"
 
-#: main.cc:167
+#: main.cc:165
 #, fuzzy
 msgid "generate PNG"
 msgstr "À©¸Â¤ò´ËÏÂ"
 
-#: main.cc:168
+#: main.cc:166
 #, fuzzy
 msgid "generate PostScript"
 msgstr "À©¸Â¤ò´ËÏÂ"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-msgid "print this help"
-msgstr "¤³¤Î¥Ø¥ë¥×"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
 msgid "FIELD"
 msgstr "FILE"
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:172
-msgid "DIR"
-msgstr "DIR"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "DIR ¤ò¸¡º÷¥Ñ¥¹¤ËÄɲÃ"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "FILE ¤ò½é´ü²½¥Õ¥¡¥¤¥ë¤È¤·¤Æ»ÈÍÑ"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "À©¸Â¤ò´ËÏÂ"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "BASENAME[-x].³ÈÄ¥»Ò ¤Ø½ÐÎϤò½ñ¤­¹þ¤à"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr ""
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨"
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1182,79 +1212,79 @@ msgid ""
 msgstr "Copyright (c) %s by"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, fuzzy, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [¥Õ¥¡¥¤¥ë]..."
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "¥Õ¥¡¥¤¥ë¤Î³Ú¶Ê¤òÁÈÈǤ·¤¿¤ê¡¢MIDI ±éÁÕ¤·¤¿¤ê¤¹¤ë."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "¥ª¥×¥·¥ç¥ó:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr "¥Ð¥°¥ì¥Ý¡¼¥È¤Ï %s ¤Ø."
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "¤½¤ÎÍͤʳڴï¤Ï¤¢¤ê¤Þ¤»¤ó: `%s'"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "¤½¤ÎÍͤʳڴï¤Ï¤¢¤ê¤Þ¤»¤ó: `%s'"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "`%s' ¤«¤é `%s' ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: main.cc:349
+#: main.cc:350
 #, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "`%s' ¤«¤é `%s' ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "`%s' ¤«¤é `%s' ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: main.cc:368
+#: main.cc:369
 #, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
 #: main.cc:415
@@ -1262,7 +1292,7 @@ msgstr "
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1276,37 +1306,37 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1314,7 +1344,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr ""
 
@@ -1331,116 +1361,119 @@ msgstr ""
 msgid "no such MIDI instrument: `%s'"
 msgstr "¤½¤ÎÍͤʳڴï¤Ï¤¢¤ê¤Þ¤»¤ó: `%s'"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "Çϼ¯¤²¤¿¥Ô¥Ã¥Á"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "%s ¤ÎÊÑÄ´¤Ë¤è¤Ã¤Æ¡¢Æó¤Ä¤òĶ¤¨¤ëÇÉÀ¸²»¤¬ºî¤é¤ì¤Þ¤·¤¿"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "Äà¤ê¹ç¤ï¤Ê¤¤²»É䤬¿¤¹¤®¤Þ¤¹¡£¤½¤ì¤é¤ò̵»ë¤·¤Þ¤¹¡£"
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr ""
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 #, fuzzy
 msgid "Drawing systems..."
 msgstr "²»À¼¤òºîÀ®Ãæ..."
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1478,15 +1511,15 @@ msgstr "
 msgid "Track..."
 msgstr "¥È¥é¥Ã¥¯ ..."
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "%s ¤Ø¤Î MIDI ½ÐÎÏ"
@@ -1496,23 +1529,23 @@ msgstr "%s 
 msgid "unterminated phrasing slur"
 msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥¹¥é¡¼"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, fuzzy, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "¸Æ¤Ó½Ð¤µ¤ì¤¿Ê¸»ú¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "¸Æ¤Ó½Ð¤µ¤ì¤¿Ê¸»ú¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "¤½¤ÎÍͤʳڴï¤Ï¤¢¤ê¤Þ¤»¤ó: `%s'"
@@ -1522,109 +1555,108 @@ msgstr "
 msgid "not a grob name, `%s'"
 msgstr ""
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "¤½¤ÎÍͤʳڴï¤Ï¤¢¤ê¤Þ¤»¤ó: `%s'"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "¤½¤ÎÍͤʳڴï¤Ï¤¢¤ê¤Þ¤»¤ó: `%s'"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
-#, fuzzy, c-format
-msgid "Relocation file %s\n"
-msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
-
-#: relocate.cc:358
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "can't open file %s"
+msgid "Relocation file: %s"
 msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "µÙÉä¤Î¾×Æͤ¬Â¿¤¹¤®¤Þ¤¹"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr ""
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(¸¡º÷¥Ñ¥¹: `%s')"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "½ªÎ»¤·¤Þ¤¹"
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "³ÚÉè¤Ë¤Ï³Ú¶Ê¤¬É¬ÍפǤ¹"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 #, fuzzy
 msgid "errors found, ignoring music expression"
 msgstr "¥¨¥é¡¼¤òȯ¸«/*, ³ÚÉè¤ò½èÍý¤·¤Þ¤»¤ó*/"
@@ -1632,7 +1664,7 @@ msgstr "
 #. FIXME:
 #: script-engraver.cc:102
 #, fuzzy
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "²»Àá `%s' ¤Î²ò¼áÊýË¡¤¬È½¤ê¤Þ¤»¤ó"
 
 #: script-engraver.cc:103
@@ -1645,17 +1677,18 @@ msgstr "
 msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥¹¥é¡¼"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
 #: source-file.cc:74
@@ -1667,61 +1700,61 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "Ì·½â¤·¤¿ÉäÈø¤ØÉäƬ¤òÄɲä·¤Þ¤¹ (¥¿¥¤¥× = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "ÊѤÊÉäÈø¤Î¥µ¥¤¥º -- ºÙ¤¤³Ã¤Î¥Á¥§¥Ã¥¯¤ò¤·¤Æ²¼¤µ¤¤"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr ""
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
-#: text-spanner-engraver.cc:60
+#: text-spanner-engraver.cc:61
 #, fuzzy
-msgid "can't find start of text spanner"
+msgid "cannot find start of text spanner"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 #, fuzzy
 msgid "already have a text spanner"
 msgstr "´û¤Ë³Ã¤¬¤¢¤ê¤Þ¤¹"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 #, fuzzy
 msgid "unterminated text spanner"
 msgstr "½ªÃ¼¤Î¤Ê¤¤¥¨¥¯¥¹¥Æ¥ó¥À"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "°ì¤Ä¤À¤±¤Î¥¿¥¤"
 
@@ -1730,14 +1763,14 @@ msgstr "
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1747,43 +1780,39 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr "Ƚ¤é¤Ê¤¤¥È¥é¥ó¥¹¥ì¡¼¥¿: `%s'"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, fuzzy, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "´û¤Ë³Ã¤¬¤¢¤ê¤Þ¤¹"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1801,269 +1830,280 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr ""
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "´û¤Ë³Ã¤¬¤¢¤ê¤Þ¤¹"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "Äü¤á¤Þ¤·¤¿"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr ""
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "²Î»ì¤Ï Lyric ¥â¡¼¥ÉÆâ¤Ë½ñ¤¤¤Æ¤¯¤À¤µ¤¤"
 
-#: parser.yy:1612
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "²»Ä¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "²»Éä¤Ï Note ¥â¡¼¥ÉÆâ¤Ë½ñ¤¤¤Æ¤¯¤À¤µ¤¤"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "¥³¡¼¥É¤Ï Chord ¥â¡¼¥ÉÆâ¤Ë½ñ¤¤¤Æ¤¯¤À¤µ¤¤"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "¥³¥á¥ó¥ÈÆâ¤Ë EOF ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
 
-#: lexer.ll:290
+#: lexer.ll:288
 #, fuzzy
 msgid "\\maininput not allowed outside init files"
 msgstr "½é´ü²½¥Õ¥¡¥¤¥ë¤Î³°¤Ç¤Ï \\maininput ¤òµ­½Ò¤Ç¤­¤Þ¤»¤ó"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, fuzzy, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "̤ÄêµÁ¤Î¼±ÊÌ»Ò: `%s'"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "̵¸ú¤Êʸ»ú: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "̤ÃΤΥ¨¥¹¥±¡¼¥×ʸ»úÎó: `\\%s'"
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "´Ö°ã¤Ã¤¿ mudela ¥Ð¡¼¥¸¥ç¥ó: %s (%s, %s)"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
+
+#: lexer.ll:881 lexer.ll:882
+msgid "consider updating the input with the convert-ly script"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
 msgstr ""
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, fuzzy, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr ""
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Converting to `~a'..."
 msgstr "¹Ô ..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "¹Ô ..."
 
-#: backend-library.scm:156
-#, fuzzy, lisp-format
+#: backend-library.scm:145
+#, fuzzy, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "°Í¸´Ø·¸¥Õ¥¡¥¤¥ë¤Î½ñ¤­¹þ¤ß: `%s'..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "²»Ä¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó: %d"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "`%s' ¥³¥ó¥Æ¥­¥¹¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "ÉÔÌÀ¤Ê²»Éôµ­¹æ(Clef)"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "ʸ»úÈֹ椬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %d"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "ÉÔÌÀ¤Ê²»Éôµ­¹æ(Clef)"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "½èÍýÃæ..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "¹Ô ..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "ʸ»úÈֹ椬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %d"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "¹Ô ..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "²»Àá `%s' ¤Î²ò¼áÊýË¡¤¬È½¤ê¤Þ¤»¤ó"
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2072,56 +2112,56 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "´û¤Ë´Þ¤ó¤Ç¤¤¤Þ¤¹: `%s'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "¥«¥é¥à°ÌÃÖ¤ò·×»»Ãæ..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "Ƚ¤é¤Ê¤¤¥È¥é¥ó¥¹¥ì¡¼¥¿: `%s'"
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "%s ¤Ø paper ½ÐÎÏ..."
 
@@ -2129,49 +2169,49 @@ msgstr "%s 
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
+#: music-functions.scm:213
 #, fuzzy
-msgid "More alternatives than repeats. Junking excess alternatives"
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr "·«¤êÊÖ¤·¤è¤ê¤âÁªÂò»è¤¬Â¿¤¤¡£Ä¶²áʬ¤ò¼Î¤Æ¤Þ¤¹¡£"
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, fuzzy, lisp-format
+#: music-functions.scm:538
+#, fuzzy, scheme-format
 msgid "music expected: ~S"
 msgstr "¶õÇò¤¬É¬ÍפǤ¹"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "̤ÃΤΥ¨¥¹¥±¡¼¥×ʸ»úÎó: `\\%s'"
 
@@ -2180,18 +2220,18 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #: paper.scm:69
@@ -2199,24 +2239,24 @@ msgstr "
 msgid "Not in toplevel scope"
 msgstr "ºÇ¾å°Ì¤Î¥È¥é¥ó¥¹¥ì¡¼¥¿¤¬¤¢¤ê¤Þ¤»¤ó"
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, fuzzy, lisp-format
+#: paper.scm:129
+#, fuzzy, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr "paper ÊÑ¿ô¤ÎÃͤ¬È½¤ê¤Þ¤»¤ó: `%s'"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "ÉÔÌÀ¤Ê²»Éôµ­¹æ(Clef)"
 
@@ -2224,15 +2264,50 @@ msgstr "
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr ""
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "ÊݾڤÈÃøºî¸¢¤Ë¤Ä¤¤¤Æɽ¼¨¤¹¤ë"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤ò¥í¡¼¥É¤·¤Þ¤¹"
+
+#, fuzzy
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
+
+#, fuzzy
+#~ msgid "couldnnot find line breaking that satisfies constraints"
+#~ msgstr "¤½¤Î²ò·è¤ÏÀ©¸Â¤òËþ¤¿¤·¤Þ¤»¤ó"
+
+#, fuzzy
+#~ msgid "crescendo too small"
+#~ msgstr "¥¯¥ì¥Ã¥·¥§¥ó¥É"
+
+#~ msgid "print this help"
+#~ msgstr "¤³¤Î¥Ø¥ë¥×"
+
+#~ msgid "silly pitch"
+#~ msgstr "Çϼ¯¤²¤¿¥Ô¥Ã¥Á"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
+
+#, fuzzy
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "´Ö°ã¤Ã¤¿ mudela ¥Ð¡¼¥¸¥ç¥ó: %s (%s, %s)"
+
 #, fuzzy
 #~ msgid "no one to print a tremolos"
 #~ msgstr "È¿Éüµ­¹æ¤òɽ¼¨¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó"
@@ -2245,13 +2320,9 @@ msgstr ""
 #~ msgstr "È¿Éüµ­¹æ¤òɽ¼¨¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó"
 
 #, fuzzy
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "`%s' ¥³¥ó¥Æ¥­¥¹¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#, fuzzy
-#~ msgid "can't find line breaking that satisfies constraints"
-#~ msgstr "¤½¤Î²ò·è¤ÏÀ©¸Â¤òËþ¤¿¤·¤Þ¤»¤ó"
-
 #, fuzzy
 #~ msgid "no one to print a percent"
 #~ msgstr "È¿Éüµ­¹æ¤òɽ¼¨¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó"
@@ -2276,7 +2347,7 @@ msgstr ""
 #~ msgstr "%s: TFM ¥Õ¥¡¥¤¥ë¤Ï %u ¸Ä¤Î¥Ñ¥é¥á¥¿¤¬¤¢¤ê¤Þ¤¹¤¬¡¢%u °Ê¾å¤Ï°·¤¨¤Þ¤»¤ó"
 
 #, fuzzy
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "ascii Ê¸»ú¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%d'"
 
 #~ msgid "no one to print a tuplet start bracket"
@@ -2291,13 +2362,9 @@ msgstr ""
 #~ msgstr "·«¤êÊÖ¤·¤è¤ê¤âÁªÂò»è¤¬Â¿¤¤¡£Ä¶²áʬ¤ò¼Î¤Æ¤Þ¤¹¡£"
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "`%s' ¥³¥ó¥Æ¥­¥¹¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#, fuzzy
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... [¥Õ¥¡¥¤¥ë]"
-
 #, fuzzy
 #~ msgid "Opening pipe `%s'"
 #~ msgstr "Í×µá¤ò¼Î¤Æ¤Þ¤¹: `%s'"
@@ -2331,7 +2398,7 @@ msgstr ""
 #~ msgstr "¹Ô ..."
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: `%s'"
 
 #, fuzzy
@@ -2355,7 +2422,7 @@ msgstr ""
 #~ msgstr "¸«¤Ä¤«¤é¤Ê¤¤¤«ºî¤ì¤Þ¤»¤ó: `%s'"
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "¶õ¤Î¥­¡¼¤Î°·¤¤Êý¤¬È½¤ê¤Þ¤»¤ó"
 
 #, fuzzy
@@ -2403,7 +2470,7 @@ msgstr ""
 #~ msgstr "³¹Ô²Äǽ¤Ê¥¨¥é¡¼: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
 #, fuzzy
@@ -2435,7 +2502,7 @@ msgstr ""
 #~ msgid "Programming error: "
 #~ msgstr "¥×¥í¥°¥é¥à¾å¤Î¥¨¥é¡¼: "
 
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "¥È¥é¥ó¥¹¥ì¡¼¥¿¤òÀÚ¤êÂؤ¨¤é¤ì¤Þ¤»¤ó¡£´û¤Ë¤½¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
 
 #, fuzzy
@@ -2462,11 +2529,11 @@ msgstr ""
 #~ msgstr "FIXME: ¥­¡¼Êѹ¹¤Î¥Þ¡¼¥¸"
 
 #, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
+#~ msgid "kpathsea cannot find %s file: `%s'"
 #~ msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
 #, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
+#~ msgid "kpathsea cannot find file: `%s'"
 #~ msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
 #, fuzzy
@@ -2493,10 +2560,6 @@ msgstr ""
 #~ msgid "kpathsea can not find TFM file: `%s'"
 #~ msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
-#, fuzzy
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "¥È¥é¥ó¥¹¥ì¡¼¥¿¤òÀÚ¤êÂؤ¨¤é¤ì¤Þ¤»¤ó¡£´û¤Ë¤½¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
-
 #, fuzzy
 #~ msgid "Converting to `~a.ps'..."
 #~ msgstr "¹Ô ..."
@@ -2537,7 +2600,7 @@ msgstr ""
 #~ msgstr "%s ¤Ø¤Î MIDI ½ÐÎÏ"
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: `%s'"
 
 #, fuzzy
@@ -2624,7 +2687,7 @@ msgstr ""
 #~ msgstr "²»³ÚŪÄêµÁ¤è¤ê: %s"
 
 #, fuzzy
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "ËöÈø¤Ø¤Î(¥Ç)¥¯¥ì¥Ã¥·¥§¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #, fuzzy
@@ -2679,11 +2742,11 @@ msgstr ""
 #~ msgid "Slur over rest?"
 #~ msgstr "¥¹¥é¡¼¤¬µÙÉä¤ò¤Þ¤¿¤¤¤Ç¤¤¤ë?"
 
-#~ msgid "Can't specify direction for this request"
+#~ msgid "Cannot specify direction for this request"
 #~ msgstr "¤³¤ÎÍ×µá¤ËÂФ¹¤ëÊý¸þ¤ò»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
 
 #, fuzzy
-#~ msgid "can't map file"
+#~ msgid "cannot map file"
 #~ msgstr "¥Õ¥¡¥¤¥ë¤ò¥Þ¥Ã¥×¤Ç¤­¤Þ¤»¤ó"
 
 #~ msgid "This binary was compiled with the following options:"
@@ -2755,7 +2818,7 @@ msgstr ""
 #~ msgstr "¥Ç¥Ð¥Ã¥°½ÐÎϤòÍ­¸ú"
 
 #, fuzzy
-#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
+#~ msgid "do not output tuplets, double dots or rests, smallest is 32"
 #~ msgstr "ÉäÅÀ¤äÊ£ÉäÅÀ¤ò¤Ê¤¯¤¹¤è¤¦»î¤ß¤Þ¤¹¡¢ºÇ¾®¤Ï 32"
 
 #~ msgid "set FILE as default output"
@@ -2767,7 +2830,7 @@ msgstr ""
 #~ msgid "set smallest duration"
 #~ msgstr "²»Ä¹¤òºÇ¾®¤ËÀßÄꤷ¤Þ¤¹"
 
-#~ msgid "don't timestamp the output"
+#~ msgid "do not timestamp the output"
 #~ msgstr "½ÐÎϤ˥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¤Ä¤±¤Ê¤¤"
 
 #~ msgid "assume no double dotted notes"
@@ -2796,7 +2859,7 @@ msgstr ""
 #~ msgstr "̵¸ú¤Ê¥È¥é¥Ã¥¯¿ô"
 
 #, fuzzy
-#~ msgid "can't handle non-metrical time"
+#~ msgid "cannot handle non-metrical time"
 #~ msgstr "±¤Î§¤Ë¤Ê¤é¤Ê¤¤Çï»Ò¤Ï°·¤¨¤Þ¤»¤ó"
 
 #~ msgid "Junking note-end event: channel = %d, pitch = %d"
@@ -2841,7 +2904,7 @@ msgstr ""
 #~ msgstr "ÉâÆ°¾®¿ôÅÀÎã³°"
 
 #, fuzzy
-#~ msgid "can't set mem-checking!"
+#~ msgid "cannot set mem-checking!"
 #~ msgstr "¥á¥â¥ê¥Á¥§¥Ã¥¯¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
 
 #, fuzzy
@@ -2903,7 +2966,7 @@ msgstr ""
 #~ msgstr "¾®À᤬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£È¿Éü¤ò̵»ë¤·¤Þ¤¹¡£"
 
 #, fuzzy
-#~ msgid "can't find both ends of %s"
+#~ msgid "cannot find both ends of %s"
 #~ msgstr "%s ¤Îξü¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
 #~ msgid "slur"
@@ -2964,7 +3027,7 @@ msgstr ""
 #~ msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
 #~ msgstr "Ineq_constrained_qp::solve (): À©¸Â¤ò %f ¤Ç²ò½ü"
 
-#~ msgid "Didn't converge!"
+#~ msgid "Didnnot converge!"
 #~ msgstr "¼ý«¤·¤Þ¤»¤ó¤Ç¤·¤¿!"
 
 #~ msgid "too much degeneracy"
@@ -2997,7 +3060,7 @@ msgstr ""
 #~ msgid "improbable offset for object type: `%s'"
 #~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È·¿¤Ë¤È¤Ã¤Æ¤¢¤ê¤½¤¦¤Ë¤Ê¤¤¥ª¥Õ¥»¥Ã¥È: `%s'"
 
-#~ msgid "Can't solve this casting problem exactly; reverting to Word_wrap"
+#~ msgid "Cannot solve this casting problem exactly; reverting to Word_wrap"
 #~ msgstr "Àµ³Î¤Ë¥­¥ã¥¹¥È¤ò²ò·è¤Ç¤­¤Þ¤»¤ó -- Word_wrap ¤ËÉüµ¢¤·¤Þ¤¹"
 
 #~ msgid "%s elements"
@@ -3048,7 +3111,7 @@ msgstr ""
 #~ msgid "Generating stupido solution"
 #~ msgstr "Çϼ¯¤²¤¿²ò·è¤òÀ¸À®Ãæ"
 
-#~ msgid "I don't fit; put me on Montignac"
+#~ msgid "I do not fit; put me on Montignac"
 #~ msgstr "¾å¼ê¤¯¤Ï¤Þ¤ê¤Þ¤»¤ó -- Montignac ¤Î¤È¤³¤í¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤"
 
 #~ msgid "More than one music block"
@@ -3057,10 +3120,10 @@ msgstr ""
 #~ msgid "Need even number of args for shape array"
 #~ msgstr "shape ÇÛÎó¤Ø¤Î°ú¿ô¤Ï¶ö¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
 
-#~ msgid "Can't abbreviate"
+#~ msgid "Cannot abbreviate"
 #~ msgstr "¾Êά¤Ç¤­¤Þ¤»¤ó"
 
-#~ msgid "Can't abbreviate tuplet"
+#~ msgid "Cannot abbreviate tuplet"
 #~ msgstr "¥¿¥×¥ì¥Ã¥È¤ò¾Êά¤Ç¤­¤Þ¤»¤ó"
 
 #~ msgid "assume no tuplets"
index cd4383b741b6c5328f29ceaccb65c6c4f3f5638d..8caa983b729bfb5b5b25bcfc52643b1940b41840 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-20 23:29+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+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"
@@ -74,144 +74,152 @@ msgstr ""
 
 #: lilylib.py:203
 #, python-format
-msgid "Usage: %s\n"
+msgid "Usage: %s"
+msgstr ""
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, python-format
+msgid "%s [OPTION]... FILE"
 msgstr ""
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr ""
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+msgid "Report bugs via"
+msgstr ""
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+msgid "Examples:"
+msgstr ""
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr ""
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr ""
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, python-format
 msgid "Processing `%s'... "
 msgstr ""
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr ""
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
+msgstr ""
+
+#: etf2ly.py:1196
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
 msgstr ""
 
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
-msgstr ""
-
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr ""
 
-#: etf2ly.py:1204 midi2ly.py:899
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr ""
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook "
-"document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr ""
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr ""
@@ -233,6 +241,10 @@ msgstr ""
 msgid "add DIR to include path"
 msgstr ""
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr ""
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr ""
@@ -245,145 +257,145 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
-msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
-msgid "be verbose"
+#: lilypond-book.py:157
+msgid ""
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
+msgid "be verbose"
 msgstr ""
 
-#: lilypond-book.py:778
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr ""
 
-#: lilypond-book.py:1009
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:1012
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:1016
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:1019
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:1038
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1391
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr ""
 
-#: lilypond-book.py:1408
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: lilypond-book.py:1409
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr ""
 
-#: lilypond-book.py:1479
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1589
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:1594
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr ""
 
-#: lilypond-book.py:1598
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1605
 #, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr ""
 
-#: lilypond-book.py:1619
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:1625
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr ""
 
-#: lilypond-book.py:1680
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:1684
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr ""
 
-#: lilypond-book.py:1703
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:1719
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr ""
 
-#: lilypond-book.py:1728
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr ""
 
-#: lilypond-book.py:1742
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr ""
 
-#: lilypond-book.py:1819
+#: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr ""
 
-#: lilypond-book.py:1834
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1835
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1838
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:557 lily-library.scm:565
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr ""
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr ""
 
@@ -396,8 +408,9 @@ msgstr ""
 msgid "%s output to `%s'..."
 msgstr ""
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, python-format
+msgid "Convert %s to LilyPond input."
 msgstr ""
 
 #: midi2ly.py:875
@@ -441,34 +454,55 @@ msgid "treat every text as a lyric"
 msgstr ""
 
 #: midi2ly.py:905
-msgid "example"
+msgid "Examples"
 msgstr ""
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr ""
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr ""
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr ""
 
-#: getopt-long.cc:145
+#: getopt-long.cc:144
 #, c-format
-msgid "option `%s' doesn't allow an argument"
+msgid "option `%s' does not allow an argument"
 msgstr ""
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr ""
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr ""
 
-#: warn.cc:68 grob.cc:556 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr ""
@@ -477,84 +511,75 @@ msgstr ""
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr ""
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr ""
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
-msgstr ""
-
-#: all-font-metrics.cc:164
-#, c-format
-msgid "can't find font: `%s'"
-msgstr ""
-
-#: all-font-metrics.cc:165
-msgid "loading default font"
-msgstr ""
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
+#: all-font-metrics.cc:173
 #, c-format
-msgid "(search path: `%s')"
-msgstr ""
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-msgid "giving up"
+msgid "cannot find font: `%s'"
 msgstr ""
 
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr ""
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -568,19 +593,19 @@ msgstr ""
 msgid "unterminated beam"
 msgstr ""
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr ""
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+msgid "stem does not fit in beam"
 msgstr ""
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr ""
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
 msgstr ""
 
@@ -588,23 +613,23 @@ msgstr ""
 msgid "removing beam with no stems"
 msgstr ""
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr ""
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr ""
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr ""
 
 #. We could change the current translator's id, but that would make
@@ -635,7 +660,7 @@ msgstr ""
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr ""
@@ -656,26 +681,26 @@ msgstr ""
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr ""
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr ""
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr ""
 
 #: context.cc:213
 #, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr ""
 
 #: context.cc:276
@@ -685,7 +710,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr ""
 
 #: custos.cc:77
@@ -693,11 +718,11 @@ msgstr ""
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, c-format
 msgid "Unknown event class %s"
 msgstr ""
@@ -708,7 +733,7 @@ msgid "dot `%s' not found"
 msgstr ""
 
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr ""
 
 #: dynamic-engraver.cc:195
@@ -727,11 +752,7 @@ msgstr ""
 msgid "unterminated (de)crescendo"
 msgstr ""
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr ""
 
@@ -754,15 +775,15 @@ msgstr ""
 msgid "adding font directory: %s"
 msgstr ""
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
 msgstr ""
 
@@ -791,45 +812,37 @@ msgstr ""
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr ""
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr ""
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr ""
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr ""
-
-#: horizontal-bracket-engraver.cc:57
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
 msgstr ""
 
-#: horizontal-bracket-engraver.cc:66
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr ""
 
@@ -845,9 +858,14 @@ msgstr ""
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
+msgstr ""
+
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
 msgstr ""
 
 #: input.cc:112 source-file.cc:168 source-file.cc:183
@@ -855,7 +873,7 @@ msgid "position unknown"
 msgstr ""
 
 #: ligature-engraver.cc:93
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr ""
 
 #: ligature-engraver.cc:98
@@ -882,52 +900,52 @@ msgstr ""
 msgid "ligature was started here"
 msgstr ""
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr ""
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr ""
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr ""
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr ""
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr ""
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, c-format
 msgid "deprecated function called: %s"
 msgstr ""
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr ""
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr ""
 
 #: lily-parser-scheme.cc:125
@@ -935,20 +953,20 @@ msgstr ""
 msgid "Processing `%s'"
 msgstr ""
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr ""
 
-#: lily-parser.cc:126
-msgid "braces don't match"
+#: lily-parser.cc:127
+msgid "braces do not match"
 msgstr ""
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr ""
 
-#: main.cc:117
+#: main.cc:116
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -957,7 +975,7 @@ msgid ""
 "information.\n"
 msgstr ""
 
-#: main.cc:123
+#: main.cc:122
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -974,124 +992,123 @@ msgid ""
 "Boston, MA 02111-1307, USA.\n"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr ""
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr ""
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr ""
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr ""
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr ""
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-msgid "print this help"
+#: main.cc:168
+msgid "show this help and exit"
 msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr ""
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
-msgstr ""
-
-#: main.cc:172
-msgid "DIR"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr ""
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 msgid "do not generate printed output"
 msgstr ""
 
-#: main.cc:179
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr ""
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr ""
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+msgid "show version number and exit"
 msgstr ""
 
-#: main.cc:223
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1099,79 +1116,79 @@ msgid ""
 msgstr ""
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr ""
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr ""
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr ""
 
-#: main.cc:262
+#: main.cc:263
 #, c-format
 msgid "Report bugs via %s"
 msgstr ""
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, c-format
 msgid "no such user: %s"
 msgstr ""
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, c-format
 msgid "no such group: %s"
 msgstr ""
 
-#: main.cc:341
+#: main.cc:342
 #, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr ""
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr ""
 
-#: main.cc:356
+#: main.cc:357
 #, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr ""
 
-#: main.cc:362
+#: main.cc:363
 #, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr ""
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr ""
 
 #: main.cc:415
@@ -1179,7 +1196,7 @@ msgstr ""
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1248,121 +1265,117 @@ msgstr ""
 msgid "no such MIDI instrument: `%s'"
 msgstr ""
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr ""
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr ""
 
 #: midi-stream.cc:44
 #, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr ""
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr ""
 
-#: new-fingering-engraver.cc:95
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:238
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:239
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:438
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
 msgstr ""
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr ""
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr ""
 
 #: open-type-font.cc:37
 #, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr ""
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
 msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr ""
 
-#: pango-font.cc:196
+#: pango-font.cc:181
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
 "Skipping glyph U+%0X, file %s"
 msgstr ""
 
-#: pango-font.cc:235
+#: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr ""
 
-#: pango-font.cc:283
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1396,15 +1409,15 @@ msgstr ""
 msgid "Track..."
 msgstr ""
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr ""
@@ -1413,23 +1426,23 @@ msgstr ""
 msgid "unterminated phrasing slur"
 msgstr ""
 
-#: piano-pedal-engraver.cc:283
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:298 piano-pedal-engraver.cc:309
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr ""
 
-#: piano-pedal-engraver.cc:344
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr ""
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
 msgstr ""
@@ -1439,114 +1452,113 @@ msgstr ""
 msgid "not a grob name, `%s'"
 msgstr ""
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr ""
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, c-format
 msgid "no such file: %s for %s"
 msgstr ""
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr ""
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
+#: relocate.cc:354
 #, c-format
-msgid "Relocation file %s\n"
+msgid "Relocation file: %s"
 msgstr ""
 
-#: relocate.cc:358
-#, c-format
-msgid "can't open file %s"
-msgstr ""
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr ""
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, c-format
 msgid "cannot find `%s'"
 msgstr ""
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr ""
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, c-format
 msgid "Search path `%s'"
 msgstr ""
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 msgid "already have music in score"
 msgstr ""
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr ""
 
 #: script-engraver.cc:103
@@ -1558,16 +1570,17 @@ msgstr ""
 msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr ""
 
-#: slur-engraver.cc:165
-msgid "can't end slur"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
 msgstr ""
 
 #: source-file.cc:74
@@ -1579,57 +1592,57 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr ""
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr ""
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr ""
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr ""
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr ""
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr ""
 
@@ -1638,14 +1651,14 @@ msgstr ""
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1655,41 +1668,37 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr ""
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr ""
 
-#: translator.cc:331
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:332
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
-msgid "can't find start of trill spanner"
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
 msgstr ""
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
 msgstr ""
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:382
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:708
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1707,264 +1716,273 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
-msgid "can't end volta spanner"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
 msgstr ""
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr ""
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
 msgstr ""
 
-#: parser.yy:703 parser.yy:704
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr ""
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:727 parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1173 parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1476 parser.yy:1477
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr ""
 
-#: parser.yy:1503 parser.yy:1508 parser.yy:1973 parser.yy:1504 parser.yy:1509
-#: parser.yy:1974
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:1605 parser.yy:1606
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1760 parser.yy:1810 parser.yy:1761 parser.yy:1811
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr ""
 
-#: parser.yy:1927 parser.yy:1928
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:1988 parser.yy:1989
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr ""
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr ""
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr ""
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr ""
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:882
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+msgid "consider updating the input with the convert-ly script"
 msgstr ""
 
-#: backend-library.scm:19 lily.scm:487 ps-to-png.scm:88
-#, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr ""
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr ""
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr ""
 
-#: backend-library.scm:110
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr ""
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:265
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1281
-#, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr ""
 
-#: define-music-types.scm:743
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:746
-#, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
 msgstr ""
 
-#: define-music-types.scm:766
-#, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr ""
 
-#: define-music-types.scm:767
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, lisp-format
-msgid "can't find interface for property: ~S"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr ""
 
 #: document-backend.scm:145
-#, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr ""
 
 #: documentation-lib.scm:45
-#, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
 msgstr ""
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr ""
 
 #: documentation-lib.scm:172
-#, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr ""
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
 msgstr ""
 
 #: framework-ps.scm:279
-#, lisp-format
-msgid "can't embed ~S=~S"
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
 #: framework-ps.scm:332
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
 #: framework-ps.scm:349
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
 #: framework-ps.scm:380
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:731
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:750 framework-ps.scm:753
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:760
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -1973,55 +1991,55 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr ""
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
 msgstr ""
 
-#: lily-library.scm:526
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:559
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:566
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:137
-#, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, scheme-format
+msgid "cannot find: ~A"
 msgstr ""
 
-#: lily.scm:202
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:416 lily.scm:477
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:467
-#, lisp-format
+#: lily.scm:579
+#, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr ""
 
@@ -2029,48 +2047,48 @@ msgstr ""
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: music-functions.scm:953
-#, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
@@ -2079,18 +2097,18 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, lisp-format
-msgid "can't find ~a in ~a"
+#, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr ""
 
 #: paper.scm:69
@@ -2098,12 +2116,12 @@ msgid "Not in toplevel scope"
 msgstr ""
 
 #: paper.scm:117
-#, lisp-format
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
 #: paper.scm:129
-#, lisp-format
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
@@ -2114,7 +2132,7 @@ msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, lisp-format
+#, scheme-format
 msgid "unknown clef type `~a'"
 msgstr ""
 
@@ -2122,11 +2140,12 @@ msgstr ""
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr ""
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
index aeb66b0ea7f80fbf5cfff591ee51cc94cc442053..018819a13587eb92cb215331b875dce17543030a 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,18 +1,18 @@
 # nl.po -- GNU LilyPond's dutch language file
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Jan Nieuwenhuizen <janneke@gnu.org>, Han-Wen Nienhuys <hanwen@cs.uu.nl>.
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Jan Nieuwenhuizen <janneke@gnu.org>, Han-Wen Nienhuys <hanwen@cs.uu.nl>.
 # Jan Nieuwenhuizen <janneke@gnu.org>, 1998.
 # Han-Wen Nienhuys <hanwen@cs.uu.nl>, 1998.
 #
-# Don't change the format of the first three lines,
-# the TP robot wants them like this (I hope).
-# Of course, Han-Wen <hanwen@cs.uu.nl> also was FIRST AUTHOR.
+# Donnot change the format of the first three lines,
+# the TP robot needs them to be like this.
+# Of course, Han-Wen <hanwen@xs4all.nl> also is FIRST AUTHOR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.5.22\n"
+"Project-Id-Version: lilypond 2.11.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: 2005-04-25 21:59+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2006-12-24 10:45+0100\n"
 "Last-Translator: Jan Nieuwenhuizen <janneke@gnu.org>\n"
 "Language-Team: Dutch <vertaling@nl.linux.org>\n"
 "MIME-Version: 1.0\n"
@@ -27,7 +27,7 @@ msgstr ""
 #: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s"
-msgstr "niet slim genoeg om %s te converteren"
+msgstr "Niet slim genoeg om %s te converteren"
 
 #: convertrules.py:13
 msgid "Please refer to the manual for details, and update manually."
@@ -82,155 +82,164 @@ msgstr "Draaien van %s..."
 
 #: lilylib.py:203
 #, python-format
-msgid "Usage: %s\n"
-msgstr ""
+msgid "Usage: %s"
+msgstr "Gebruik: %s"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "%s [OPTIE]... BESTAND"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
+"abc2ly converteert ABC muziekbestanden (zie\n"
+"%s) naar LilyPond invoer."
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "schrijf uitvoer naar BESTAND"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
-msgstr ""
+msgstr "wees strict over succes"
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
+msgstr "behoud ABC's notie van waardestrepen"
+
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+msgid "Report bugs via"
 msgstr ""
+"Meld fouten in het programma via %;\n"
+"meld onjuistheden in de vertaling aan <janneke@gnu.org> of <hanwen@xs4all."
+"nl>."
 
 #: convert-ly.py:41
-#, fuzzy
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
-"Actualiseer LilyPond invoer naar nieuwer versie.  Standaard, gaande van\n"
-"versie uit de \\versie uitdrukking, naar de huidige LilyPond versie."
+"Actualiseer LilyPond invoer naar nieuwere versie.  Standaard, actualiseer\n"
+"vanaf versie uit de \\versie uitdrukking, naar de huidige LilyPond versie."
+
+#: convert-ly.py:43 lilypond-book.py:73
+msgid "Examples:"
+msgstr "Voorbeelden:"
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "waarschuwing: %s"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr "fout: %s"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Verspreid onder de voorwaarden van de GNU General Public License."
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "Er is GEEN GARANTIE."
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
-msgstr ""
+msgstr "VERSIE"
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
-msgstr ""
+msgstr "begin bij VERSIE [standaard: \\version gevonden in bestand]"
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
-msgstr ""
+msgstr "bewerk bestand ter plekke"
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
-msgstr ""
+msgstr "voeg geen \\version commando toe als het niet aanwezig is"
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr ""
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+msgstr "toon regels [standaard: --from=0, --to=@TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr ""
+msgstr "converteer naar VERSIE [standaard: @TOPLEVEL_VERSION@]"
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr "toepassen van conversie: "
 
 #: convert-ly.py:166
-#, fuzzy
-msgid "error while converting"
+msgid "Error while converting"
 msgstr "%s: fout tijdens converteren"
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr "Afbreken"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr "Stop na de laatste succesvolle regel"
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Verwerken van `%s'..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "kan bestand niet openen: `%s'"
 
-#: convert-ly.py:286
-#, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
-msgstr "%s: kan versie niet bepalen voor %s"
+#: convert-ly.py:284
+#, python-format
+msgid "cannot determine version for `%s'.  Skipping"
+msgstr "kan versie niet bepalen voor `%s'.  Overslaan"
+
+#: etf2ly.py:1196
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "%s [OPTIE]... ETF-BESTAND"
 
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
+"Enigma Transport Format is een format dat wordt gebruikt door Coda\n"
+"Music Technology's Finale produkt.  Dit programma converteert een\n"
+"subset van ETF naar een gebruiksklaar lilypondbestand."
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "schrijf uitvoer naar BESTAND"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "BESTAND"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "toon garantie en auteursrechten"
 
-#: lilypond-book.py:70
-#, fuzzy
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
-"Verwerk LilyPond snippers in hybride HTML, LaTeX of texinfo document.\n"
-"Gebruiksvoorbeeld:\n"
-"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOEK\n"
-"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOEK\n"
-"   lilypond-book --process='lilypond -I invoeging' BOEK\n"
+"Verwerk LilyPond snippers in hybride HTML, LaTeX, texinfo of DocBook "
+"dokument."
+
+#: lilypond-book.py:78
+msgid "BOOK"
+msgstr "BOEK"
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Afsluiten (%d)..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s"
@@ -244,16 +253,20 @@ msgid "pipe snippets through FILTER [convert-ly -n -]"
 msgstr "pijp snippers door FILTER [convert-ly -n -]"
 
 #: lilypond-book.py:135
-#, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
-"gebruik uitvoerformaat FMT (texi [standaard],\n"
-"\t\t texi-html, latex, html)"
+"gebruik uitvoerformat FORMAT (texi [standaard], texi-html, latex, html, "
+"docbook)"
 
 #: lilypond-book.py:138
 msgid "add DIR to include path"
 msgstr "voeg MAP toe aan zoekpad"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "MAP"
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr "schrijf uitvoer naar MAP"
@@ -266,149 +279,147 @@ msgstr "OPDRACHT"
 msgid "process ly_files using COMMAND FILE..."
 msgstr "verwerk ly_bestanden met OPDRACHT BESTAND..."
 
-#: lilypond-book.py:159
-#, fuzzy
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr "Maak PDF bestanden voor gebruik met PDFTeX"
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
-"extract alle PostScript fonts naar BESTAND voor LaTeX\n"
-"\t moet dit gebruiken met dvips -h FILE"
+"extraheer alle PostScript fonts naar BESTAND voor LaTeX\n"
+"dit dient gebruikt te worden met dvips -h BESTAND"
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "wees breedsprakig"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "toon garantie en auteursrechten"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr "bestand niet gevonden: %s"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "verouderde ly-optie gebruikt: %s=%s"
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "compatibiliteitsmodus vertaling: %s=%s"
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "verouderde ly-optie gebruikt: %s"
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "compatibiliteitsmodus vertaling: %s"
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "negeren van onbekende ly optie: %s"
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr "Open filter `%s'"
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "`%s' gefaald (%d)"
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "De foutlog is als volgend:"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
-msgstr ""
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr "kan \\begin{document} niet vinden in LaTeX dokument"
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr "Schrijven van snippers..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "Verwerken..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr "Alle snippers zijn actueel..."
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "kan formaat niet bepalen voor: %s"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr "%s is actueel."
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Schrijven van `%s'..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr "Uitvoer zou invoerbestand overschrijven; gebruik --output."
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr "Lezen %s..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr "Ontleden..."
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr "Samenstellen %s..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr "Verwerken van invoegsel: %s"
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr "Verwijderen van `%s'"
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr "Schrijven van fonts naar %s"
 
-#: lilypond-book.py:1758
-#, fuzzy
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
-msgstr "optie --psfonts=BESTAND niet gebruikt"
+msgstr "optie --psfonts niet gebruikt"
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr "verwerking met dvips zal geen fonts hebben"
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr "DVIPS gebruik:"
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "waarschuwing: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "fout: "
 
@@ -421,9 +432,10 @@ msgstr "Be
 msgid "%s output to `%s'..."
 msgstr "%s uitvoer naar `%s'..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
-msgstr "Converteer MIDI naar LilyPond broncode."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "Converteer %s naar LilyPond invoer."
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -466,35 +478,59 @@ msgid "treat every text as a lyric"
 msgstr "behandel elke tekst als liedtekts"
 
 #: midi2ly.py:905
-#, fuzzy
-msgid "example"
+msgid "Examples"
 msgstr "Voorbeelden"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "geen bestanden gespecificeerd op de commandoregel."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr "musicxml2ly BESTAND.xml"
+
+#: musicxml2ly.py:476
+#, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Dit is vrije programmatuur.  Het valt onder de GNU Algemene Openbare\n"
+"Licentie (General Public Licence), en u wordt uitgenodigd het te\n"
+"veranderen en/of te verspreiden onder bepaalde voorwaarden.  Roep aan\n"
+"als `%s --warranty' voor meer informatie."
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr "Gebruik lxml.etree; gebruikt minder geheugen en processortijd."
+
+#: musicxml2ly.py:503
+msgid "set output filename to FILE"
+msgstr "zet uitvoerbestandnaam op BESTAND"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "optie `%s' vereist een argument"
 
-#: getopt-long.cc:145
+#: getopt-long.cc:144
 #, c-format
-msgid "option `%s' doesn't allow an argument"
+msgid "option `%s' does not allow an argument"
 msgstr "optie `%s' staat geen argument toe"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "onbekende optie: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "onjuist argument: `%s' voor optie `%s'"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr "programmeerfout: %s"
@@ -503,83 +539,79 @@ msgstr "programmeerfout: %s"
 msgid "continuing, cross fingers"
 msgstr "ga verder; duim maar"
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "voorteken zetlijst moet beginnen met context-naam: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "negeren van onbekend voorteken: %s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
-msgstr ""
+msgstr "paar of context-naam verwacht voor toevallig teken regel, gevonden: %s"
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "voorteken `%s' niet gevonden"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
+"vertikale uitlijning aangeroepen voor regelbreuk\n"
+"Gebruik alleen spanners over notenbalken heen met PianoStaff"
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
+"probeerde een verplaatsing te verkrijgen voor iets wat geen kind van mij is"
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "kan font niet vinden: `%s'"
 
-#: all-font-metrics.cc:165
-msgid "loading default font"
-msgstr "laden van standaardfont"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "kan standaardfont niet vinden: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(zoekpad: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-msgid "giving up"
-msgstr "geef op"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr "\\applycontext argument is geen procedure"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
-msgid "can't change, already in translator: %s"
-msgstr "kan niet wisselen, al in translator: %s"
+msgid "cannot change, already in translator: %s"
+msgstr "kan niet wisselen, al in vertaler: %s"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: verticale groep heeft al een ouder"
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr "zijn er twee Axis_group_engravers?"
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr "verwijder deze verticale groep"
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
+msgstr "probeerde pure-hoogte te berekenen op een niet-breekpunt"
+
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
+"een buiten-notenbalk object moet een richting hebben, gebruik "
+"standaardwaarde omhoog"
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr "buiten-notenbalk object %s heeft lege afmetingen"
 
 #: bar-check-iterator.cc:73
 #, c-format
@@ -594,47 +626,45 @@ msgstr "heb al een waardestreep"
 msgid "unterminated beam"
 msgstr "onbeëindigde waardestreep"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "stok moet Ritmische structuur hebben"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+msgid "stem does not fit in beam"
 msgstr "stok past niet in waardestreep"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "waardestreep werd hier gestart"
 
-#: beam-quanting.cc:306
-#, fuzzy
+#: beam-quanting.cc:307
 msgid "no feasible beam position"
-msgstr "geen werkbare regelafbreuk gevonden"
+msgstr "geen werkbare waardestreeppositie gevonden"
 
 #: beam.cc:144
-#, fuzzy
 msgid "removing beam with no stems"
-msgstr "verwijderen van waardestreep met minder dan twee stokken"
+msgstr "verwijderen van waardestreep zonder stokken"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 "geen werkbare initiële configuratie gevonden: kan wellicht geen goede "
 "waardestreephelling kunnen vinden"
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Geen spatiëringswaarde van %s naar`%s'"
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "kan `%s' niet in `%s' veranderen"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "kan `%s' niet wisselen in `%s'"
 
 #. We could change the current translator's id, but that would make
@@ -654,7 +684,7 @@ msgstr "geen van deze in mijn gezin"
 
 #: chord-tremolo-engraver.cc:88
 msgid "No tremolo to end"
-msgstr ""
+msgstr "Geen tremolo om te beëindigen"
 
 #: chord-tremolo-engraver.cc:110
 msgid "unterminated chord tremolo"
@@ -665,7 +695,7 @@ msgstr "onbe
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden"
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "sleutel `%s' niet gevonden"
@@ -679,44 +709,43 @@ msgstr "onbekende klusterstijl `%s'"
 msgid "junking empty cluster"
 msgstr "verschroot lege cluster"
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Coherent_ligature_engraver: zet `spacing-increment=0.01': ptr=%ul"
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-#, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "kan geen regelbreuk vinden die aan voorwaarden voldoet"
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr "programma heeft geen dergelijk type: `%s'"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "heb symbool-argumenten nodig voor \\override en \\revert"
 
 #: context.cc:151
 #, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "kan niet vinden of nieuw maken `%s'"
 
 #: context.cc:213
 #, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "kan niet vinden of maken `%s' genaamd `%s'"
 
 #: context.cc:276
 #, c-format
 msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
+msgstr "Ongeldig CreateContext gebeurtenis: Kan %s context niet maken"
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "kan niet vinden of scheppen: `%s'"
 
 #: custos.cc:77
@@ -724,17 +753,22 @@ msgstr "kan niet vinden of scheppen: `%s'"
 msgid "custos `%s' not found"
 msgstr "custode `%s' niet gevonden"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
-msgstr ""
+msgstr "Gebeurtenis klasse zou hoort een symbool te zijn"
 
-#: dispatcher.cc:79
-#, fuzzy, c-format
+#: dispatcher.cc:78
+#, c-format
 msgid "Unknown event class %s"
-msgstr "onbekende interface `%s'"
+msgstr "Onbekende gebeurtenis klasse `%s'"
+
+#: dots.cc:38
+#, c-format
+msgid "dot `%s' not found"
+msgstr "punt `%s' niet gevonden"
 
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "kan start van (de)crescendo niet vinden"
 
 #: dynamic-engraver.cc:195
@@ -753,11 +787,7 @@ msgstr "cresc is hier gestart"
 msgid "unterminated (de)crescendo"
 msgstr "onbeëindigd (de)crescendo"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "onbeëindigde extender"
 
@@ -768,27 +798,27 @@ msgstr "Initialiseren van FontConfig..."
 #: font-config.cc:44
 #, c-format
 msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
+msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..."
 
 #: font-config.cc:55
-#, fuzzy, c-format
+#, c-format
 msgid "failed adding font directory: %s"
-msgstr "toevoegen van font map: %s"
+msgstr "toevoegen van font map gefaald: %s"
 
 #: font-config.cc:57
 #, c-format
 msgid "adding font directory: %s"
 msgstr "toevoegen van font map: %s"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr "oneindig of NaN tegengekomen tijdens converteren van Reëel getal"
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr "zet op nul"
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
 msgstr "onbeëindigde glissando"
 
@@ -817,49 +847,37 @@ msgstr "impliciede \\%s toegevoeg"
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
-#, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
-msgstr "Kan `\\~' niet op eerste noot van ligatuur toepassen; negeer `\\~'"
+msgid "cannot apply `\\~' on first head of ligature"
+msgstr "Kan `\\~' niet op eerste noot van ligatuur toepassen"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-#, fuzzy
-msgid "can't apply `\\~' on heads with identical pitch"
-msgstr ""
-"Kan `\\~' niet toepassen op noten met identieke toonhoogte; negeer `\\~'"
+msgid "cannot apply `\\~' on heads with identical pitch"
+msgstr "kan `\\~' niet toepassen op noten met identieke toonhoogte"
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr "onbekende interface `%s'"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr "Grob `%s' heeft geen interface voor eigenschap `%s'"
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
-#, fuzzy
 msgid "Infinity or NaN encountered"
-msgstr "oneindig of NaN tegengekomen tijdens converteren van Reëel getal"
+msgstr "Oneindig of NaN tegengekomen"
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "decrescendo te klein"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "crescendo te klein"
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
+msgstr "zoveel haken heb ik niet"
 
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
-msgstr "heb niet zoveel haken"
-
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr "Tegenstrijdige nootgroeperingsgebeurtenissen"
 
@@ -875,89 +893,94 @@ msgstr "verwijderen van onafgesloten streepje"
 msgid "include files are not allowed in safe mode"
 msgstr "invoegbestanden zijn niet toegestaan in veilige modus"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "kan bestand niet vinden: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(zoekpad: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "positie onbekend"
 
-#: ligature-engraver.cc:95
-msgid "can't find start of ligature"
+#: ligature-engraver.cc:93
+msgid "cannot find start of ligature"
 msgstr "kan begin van ligatuur niet vinden"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "geen rechterkant"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 msgid "already have a ligature"
 msgstr "heb al een ligatuur"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "geen linkerkant"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
 msgstr "onbeëindigde ligatuur"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "negeer rust: ligatuur mag geen rust bevatten"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
 msgstr "ligatuur werd hier gestart"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(zoekpad: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "kan geen type-controle vinden voor property `%s' (%s)"
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr "misschien een typefout?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr "voer toewijzing toch door"
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "type contole gefaald voor `%s'; waarde `%s' moet type hebben: `%s'"
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "identifier naam is een sleutelwoord: `%s'"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "fout bij EOF: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, c-format
 msgid "deprecated function called: %s"
 msgstr "verouderde functie aangeroepen: %s"
 
-#: lily-parser-scheme.cc:89
-#, fuzzy, c-format
-msgid "Changing working directory to `%s'"
-msgstr "kan werkmap niet veranderen in: %s: %s"
+#: lily-parser-scheme.cc:88
+#, c-format
+msgid "Changing working directory to: `%s'"
+msgstr "Veranderen van werkmap naar: `%s'"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "kan init bestand niet vinden: `%s'"
 
 #: lily-parser-scheme.cc:125
@@ -965,20 +988,20 @@ msgstr "kan init bestand niet vinden: `%s'"
 msgid "Processing `%s'"
 msgstr "Verwerken van `%s'"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Ontleden..."
 
-#: lily-parser.cc:126
-msgid "braces don't match"
+#: lily-parser.cc:127
+msgid "braces do not match"
 msgstr "haakjes paren niet"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr "kan Voice niet vinden: `%s'"
 
-#: main.cc:117
+#: main.cc:116
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -991,7 +1014,7 @@ msgstr ""
 "veranderen en/of te verspreiden onder bepaalde voorwaarden.  Roep aan\n"
 "als `%s --warranty' voor meer informatie.\n"
 
-#: main.cc:123
+#: main.cc:122
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1002,7 +1025,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1020,133 +1043,142 @@ msgstr ""
 "    Als het goed is, heeft u bij dit programma een exemplaar (zie het\n"
 "bestand COPYING) ontvangen van de GNU Algemene Openbare Licentie;\n"
 "zoniet, schrijf dan naar de Free Software Foundation, Inc.,\n"
-"675 Mass Ave, Cambridge, MA 02139, USA.\n"
+"59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
-msgstr "BACK"
+msgstr "ACHTER"
 
-#: main.cc:154
-#, fuzzy
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
-"gebruik backend BACK (gnome, ps [default],\n"
-"                                       scm, svg, tex, texstr)"
+"gebruik achterkant ACHTER (eps, gnome,\n"
+"ps [standaard], scm, svg, tex, texstr)"
 
-#: main.cc:156
-msgid "SYM=VAL"
-msgstr ""
+#: main.cc:155
+msgid "SYM[=VAL]"
+msgstr "SYM[=WAARDE]"
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
+"Zet Scheme programma optie SYM to WAARDE\n"
+"(standaard: #t)\n"
+"Gebruik -dhelp voor hulp."
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
-msgstr ""
+msgstr "evalueer scheme code"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr "FORMAATen"
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "dump FORMAAT,...  Ook als separate opties:"
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr "genereer DVI (alleen tex backend)"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr "genereer PDF (standaard)"
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr "genereer PNG"
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr "genereer PostScipt"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr "genereer TeX (alleen tex backend)"
 
-#: main.cc:170
-msgid "print this help"
-msgstr "toon deze hulp"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr "toon deze hulp en sluit af"
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "VELD"
 
-#: main.cc:171
-#, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
-msgstr "schrijf kop veld naar BASISNAAM.VELD"
-
-#: main.cc:172
-msgid "DIR"
-msgstr "MAP"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
+msgstr ""
+"schrijf kopveld VELD naar bestand\n"
+"genaamd BASISNAAM.VELD"
 
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "voeg DIR toe aan zoekpad"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "gebruik BESTAND als initialisatiebestand"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr "GEBR,GROEP,GEVANG,DIR"
 
-#: main.cc:175
-#, fuzzy
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 "chroot naar GEVANG, word GEBR:GROEP\n"
-"                                       en cd naar DIR"
+"en cd naar MAP"
 
-#: main.cc:178
+#: main.cc:177
 msgid "do not generate printed output"
 msgstr "genereer geen afdrukuitvoer"
 
-#: main.cc:179
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
-msgstr "schrijf uitvoer naar BESTAND (extensie wordt toegevoegd)"
+msgstr ""
+"schrijf uitvoer naar BESTAND\n"
+"(extensie wordt toegevoegd)"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
-msgstr "maak een voorvertoning van het eerste systeem"
+msgstr ""
+"maak een voorvertoning van het eerste\n"
+"systeem"
+
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+"verhuis aan de hand van de map van het\n"
+"lilypond programma"
 
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
+"sta geen onveilige Scheme of PostScript\n"
+"operaties toe"
 
-#: main.cc:182
-msgid "print version number"
-msgstr "druk versienummer af"
+#: main.cc:183
+msgid "show version number and exit"
+msgstr "toon versienummer en sluit af"
 
-#: main.cc:223
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1156,92 +1188,92 @@ msgstr ""
 "%s  en anderen."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Gebruik: %s [OPTIE]... BESTAND..."
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Zet muziek en of produceer MIDI van BESTAND."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produceert prachtige muzieknotatie."
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr "Voor meer informatie, zie %s"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Opties:"
 
-#: main.cc:262
-#, fuzzy, c-format
+#: main.cc:263
+#, c-format
 msgid "Report bugs via %s"
 msgstr ""
 "Meld fouten in het programma aan %s;\n"
 "meld onjuistheden in de vertaling aan <janneke@gnu.org> of <hanwen@cs.uu.nl>."
 
-#: main.cc:308
-#, fuzzy, c-format
+#: main.cc:309
+#, c-format
 msgid "expected %d arguments with jail, found: %u"
-msgstr "verwacht %d argumenten voor gevang, %d gevonden"
+msgstr "verwachtte %d argumenten voor gevang, gevonden: %d"
 
-#: main.cc:322
+#: main.cc:323
 #, c-format
 msgid "no such user: %s"
 msgstr "onbekende gebruiker: %s"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr "kan gebruikers id niet krijgen van gebruikersnaam: %s: %s"
 
-#: main.cc:339
+#: main.cc:340
 #, c-format
 msgid "no such group: %s"
 msgstr "onbekende groep: %s"
 
-#: main.cc:341
+#: main.cc:342
 #, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "kan groep id niet krijgen van groepnaam: %s: %s"
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "kan niet chrooten naar: %s: %s"
 
-#: main.cc:356
+#: main.cc:357
 #, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "kan groep id niet veranderen in: %d: %s"
 
-#: main.cc:362
+#: main.cc:363
 #, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "kan kan gebruiker id niet veranderen in: %d: %s"
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "kan werkmap niet veranderen in: %s: %s"
 
 #: main.cc:415
 #, c-format
 msgid "Evaluating %s"
-msgstr ""
+msgstr "Evalueren van %s"
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
-msgstr ""
+msgstr "exceptie gevangen: %s"
 
 #. FIXME: constant error message.
 #: mark-engraver.cc:154
@@ -1252,45 +1284,51 @@ msgstr "rehearsalMark moet een natuurlijk getal zijn"
 msgid "mark label must be a markup object"
 msgstr "mark etiket moet een markup zijn"
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "ligatuur met minder dan 2 bolletjes -> overslaan"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "kan toonhoogte van primitieve ligatuur niet bepalen -> overslaan"
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr "enkelnootse ligatuur - overslaan"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr "prieminterval binnen ligatuur -> overslaan"
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "mensural ligature: lengte geen van Mx, L, S -> overslaan"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
+msgstr "semibrevis moet worden gevolgd door een andere -> overslaan"
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
+"semibrevi kunnen alleen aan het begin van een ligatuur voorkomen,\n"
+"en het mogen er uitsluitend een of twee zijn"
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
 "the penultimate note must be another one,\n"
 "or the ligatura must be LB or SSB"
 msgstr ""
+"ongeldig ligatuur einde:\n"
+"als de laatste noot een dalende brevis is,\n"
+"moet de penultimate note een andere zijn,\n"
+"of de ligatuur moet LB of SSB zijn"
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr "onverwachte zaakdoorval"
 
@@ -1305,116 +1343,123 @@ msgstr "Mensural_ligature: (join_right) == 0)"
 #: midi-item.cc:152
 #, c-format
 msgid "no such MIDI instrument: `%s'"
-msgstr "geen dergelijk MIDI instrument: `%s'"
-
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "rare toonhoogte"
+msgstr "onbekend MIDI instrument: `%s'"
 
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr "experimenteel: tijdelijke fijnafstemming (%d centen) van kanaal."
 
 #: midi-stream.cc:28
 #, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "kan bestand niet openen om te schrijven: %s: %s"
 
 #: midi-stream.cc:44
 #, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "kon niet naar bestand schrijven: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
-msgstr ""
+msgstr "Zenden van niet-gebeurtenis naar context"
 
-#: music.cc:142
-#, fuzzy, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
-msgstr "oktaafcontrole gefaald; verwachtte %s, vond: %s"
+#: music.cc:141
+#, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
+msgstr "oktaafcontrole gefaald; verwachtte \"%s\", vond: \"%s\""
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "transponering met %s maakt voorteken groter dan dubbel"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr "can tektscripts niet toevoegen aan individuele notenbolletjes"
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr "geen plaatsing gevonden voor vingers"
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr "plaats onder"
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
 msgstr "negeren van te veel botsende nootkolommen."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr "kan notenbolletjes en rusten niet samen op een stok zetten"
 
-#: note-head.cc:69
-#, fuzzy, c-format
+#: note-head.cc:63
+#, c-format
 msgid "none of note heads `%s' or `%s' found"
-msgstr "nootbolletje `%s' niet gevonden"
+msgstr "geen van notenbolletjes `%s' of `%s' gevonden"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
-msgstr ""
+msgstr "NootGebeurtenis zonder toonhoogte"
 
 #: open-type-font.cc:33
-#, fuzzy, c-format
-msgid "can't allocate %lu bytes"
-msgstr "kan geen %d bytes alloceren"
+#, c-format
+msgid "cannot allocate %lu bytes"
+msgstr "kan geen %lu bytes alloceren"
 
 #: open-type-font.cc:37
 #, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "kan fonttabel niet laden: %s"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "niet-ondersteund font formaat: %s"
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr "onbekende fout: %d tijdens lezen van fontbestand: %s"
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
-msgstr ""
+msgid "FT_Get_Glyph_Name() returned error: %u"
+msgstr "FT_Get_Glyph_Name() gaf fout: %u"
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
+"kan de eerste paginaomslag niet op eerste pagina gepast krijgen.  Overweeg\n"
+"first-page-number op een even getal te zetten."
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
+msgstr "Berekenen van pagina en regelbreuken (%d mogelijke pagina breuken)..."
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
+msgstr "Tekenen van systemen..."
+
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
 msgstr ""
+"Vorm heeft geen naam, terwijl het font vormnamen ondersteunt<\n"
+"Overslaan van vorm U+%0X, bestand %s"
 
-#: pango-font.cc:215
+#: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "geen PostScript fontnaam voor font: `%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr "FreeType gezicht heeft geen PostScript fontnaam"
 
@@ -1448,15 +1493,15 @@ msgstr "onbe
 msgid "Track..."
 msgstr "Spoor... "
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
-msgstr ""
+msgstr "MIDI kanaal is klokje rond"
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
-msgstr ""
+msgstr "herafbeelden modulo 16"
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI uitvoer naar %s..."
@@ -1465,23 +1510,23 @@ msgstr "MIDI uitvoer naar %s..."
 msgid "unterminated phrasing slur"
 msgstr "onbeëindigde fraseringsboog"
 
-#: piano-pedal-engraver.cc:304
-#, fuzzy, c-format
+#: piano-pedal-engraver.cc:286
+#, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr "verwacht 3 strings voor pianopedalen, %d gevonden"
+msgstr "verwacht 3 teksten voor pianopedalen, gevonden: %ld"
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "kan start van piano pedaal niet vinden: `%s'"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "kan start van piano pedaal haak niet vinden: `%s'"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
 msgstr "onbekende interne optie: %s"
@@ -1491,114 +1536,115 @@ msgstr "onbekende interne optie: %s"
 msgid "not a grob name, `%s'"
 msgstr "geen grobnaam, `%s'"
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr "Oktaafcontorle gefaald, heb:"
 
 #: relocate.cc:44
-#, fuzzy, c-format
-msgid "Setting %s to %s\n"
-msgstr "Schrijven van fonts naar %s"
+#, c-format
+msgid "Setting %s to %s"
+msgstr "Zetten van %s op %s"
 
-#: relocate.cc:58
-#, fuzzy, c-format
+#: relocate.cc:59
+#, c-format
 msgid "no such file: %s for %s"
-msgstr "onbekend symbool: %s: %s"
+msgstr "onbekend bestand: %s voor %s"
 
-#: relocate.cc:68 relocate.cc:86
-#, fuzzy, c-format
+#: relocate.cc:69 relocate.cc:87
+#, c-format
 msgid "no such directory: %s for %s"
-msgstr "onbekend symbool: %s: %s"
+msgstr "onbekende map: %s voor %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
-msgstr ""
+msgstr "%s=%s (voorvoegen)\n"
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
-msgstr ""
+msgstr "Verhuizing: samenstel voorvoegel=%s, nieuw voorvoegsel=%s"
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
-msgstr ""
+msgstr "Verhuizing: draadwerk_voorvoegel=%s"
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
+msgstr "Verhuizing: is absoluut: argv0=%s"
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
-msgstr ""
+msgstr "Verhuizing: van cwd: argv0=%s"
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
+"Verhuizing: van PATH=%s\n"
+"argv0=%s"
 
-#: relocate.cc:353
-#, fuzzy, c-format
-msgid "Relocation file %s\n"
-msgstr "kan bestand niet openen: `%s'"
-
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "kan bestand niet openen: `%s'"
+#: relocate.cc:354
+#, c-format
+msgid "Relocation file: %s"
+msgstr "Verhuisbestand: %s"
 
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
-msgstr ""
+msgstr "Onbekend verhuizingscommando %s"
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
-msgstr ""
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
+msgstr "kan rust bosting niet oplossen: richting van de rust is niet gezet"
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "te veel botsende rusten"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr "rust `%s' niet gevonden"
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, c-format
 msgid "cannot find `%s'"
 msgstr "kan niet vinden `%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr "Muziekfont is niet correect geïnstalleerd."
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, c-format
 msgid "Search path `%s'"
 msgstr "Zoekpad: `%s'"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "Afbreken"
+
+#: score.cc:225
 msgid "already have music in score"
 msgstr "heb al muziek nodig in score"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr "dit is de vorige muziek"
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr "fouten gevonden, negeer muziekexpressie"
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "weet niet hoe articulatie te vertolken: "
 
 #: script-engraver.cc:103
@@ -1610,16 +1656,17 @@ msgstr "scheme codering: "
 msgid "No spring between column %d and next one"
 msgstr "Geen veer tussen kolom %d en de volgende"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
-msgstr ""
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
+msgstr "richting van %s ongeldig: %d"
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "onbeëindigde bindingsboog"
 
-#: slur-engraver.cc:165
-msgid "can't end slur"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
 msgstr "kan legatoboog niet beëindigen"
 
 #: source-file.cc:74
@@ -1629,59 +1676,59 @@ msgstr "verwacht %d karakters te lezen, kreeg %d"
 
 #: staff-symbol-engraver.cc:62
 msgid "staff-span event has no direction"
-msgstr ""
+msgstr "notenbalk-span gebeurtenis heeft geen richting"
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "tremololengte is te lang"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "voeg nootbolletje toe aan onverenigbare stok (type = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr "misschien moet invoer polyfonische stemmen specificeren"
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr "vreemde stoklengte; controleer op krappe waardestrepen"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "vlag `%s' niet gevonden"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "vlag streep `%s' niet gevonden"
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Aantal elementen: %d."
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr "Aantal grobs %d"
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "kan start van tekst spanner niet vinden"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "heb al een tekst spanner"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "onbeëindigde tekst spanner"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "eenzame overbinding"
 
@@ -1690,14 +1737,14 @@ msgstr "eenzame overbinding"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "vreemde maatsoort gevonden: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "maatsoortsymbool `%s' niet gevonden; val terug op numerieke stijl"
@@ -1707,34 +1754,30 @@ msgstr "maatsoortsymbool `%s' niet gevonden; val terug op numerieke stijl"
 msgid "unknown translator: `%s'"
 msgstr "onbekende translator: `%s'"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "kan niet vinden: `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
-msgstr ""
+msgstr "Twee gelijktijdige %s gebeurtenissen, verschroot deze"
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
-msgstr ""
+msgstr "Vorige %s gebeurtinis hier"
 
-#: trill-spanner-engraver.cc:67
-msgid "can't find start of trill spanner"
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
 msgstr "kan start van triller spanner niet vinden"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
 msgstr "heb al een tekst spanner"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
@@ -1744,7 +1787,7 @@ msgstr ""
 "de\n"
 "geselecteerde ligatuurstijl"
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1752,7 +1795,7 @@ msgstr ""
 
 #: vaticana-ligature.cc:84
 msgid "flexa-height undefined; assuming 0"
-msgstr ""
+msgstr "flexa-hoogte ongedefiniëerd; uitgaan van 0"
 
 #: vaticana-ligature.cc:89
 msgid "ascending vaticana style flexa"
@@ -1763,420 +1806,437 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Vaticana_ligature: nulsamenvoeging (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
-msgid "can't end volta spanner"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
 msgstr "kan volta spanner niet beëindigen"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "heb al een volta spanner, beëindig die voortijdig"
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
 msgstr "heb ook al een beëidingde spanner"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr "geef op"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper kan niet worden gebruikt in \\score, gebruik \\layout"
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr "heb \\paper nodig voor paper blok"
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
-msgstr ""
+msgstr "Grob naam zou alfanumeriek moeten zijn"
 
-#: parser.yy:1481
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr "tweede argument moet een toonhoogtelijst zijn"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
 msgstr "moet in Lyric modus zijn voor liedteksten"
 
-#: parser.yy:1612
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr "verwacht string voor script definitie"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "geen duur: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
 msgstr "moet in Note modus zijn voor noten"
 
-#: parser.yy:2004
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
 msgstr "moet in Chord modus zijn voor accoorden"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
-msgstr ""
+msgstr "losse UTF-8 BOM tegengekomen"
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
-msgstr ""
+msgstr "Overslaan van UTF-8 BOM"
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Hernoem invoer naar: `%s'"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr "tekst tussen aanhalingstekens verwacht na \\version"
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr "tekst tussen aanhalingstekens verwacht na \\sourcefilename"
 
-#: lexer.ll:262
-#, fuzzy
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
-msgstr "tekst tussen aanhalingstekens verwacht na \\sourcefilename"
+msgstr "geheel getal verwacht na \\sourcefileline"
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "EOF gevonden in een kommentaar"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput niet toegestaan buiten init bestanden"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "verkeerde of ongedefiniëerde identifier: `%s'"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr "aanhalingstekens sluite mist"
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Accolade gevonden aan het eind van liedtektst.  Een spatie vergeten?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Accolade gevonden aan het eind van een opmaak.  Een spatie vergeten?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "ongeldig teken: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "onbekende ontsnapte string: `\\%s'"
 
-#: lexer.ll:882
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Verkeerde lilypond versie: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr "bestand te oud: %s (oudste ondersteund: %s)"
+
+#: lexer.ll:881 lexer.ll:882
+msgid "consider updating the input with the convert-ly script"
+msgstr "overweeg het actualiseren van de invoer met het convert-ly script"
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
-msgstr "Overweeg het actualiseren van de invoer met het convert-ly script"
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr "programma te oud: %s (bestand vereist: %s)"
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, lisp-format
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Inroepen van `~a'..."
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "`~a' gefaald (~a)"
 
 # lisp-format
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Converteren naar `~a'..."
 
 # lisp-format
-#: backend-library.scm:110
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr "Converteren naar ~a..."
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Schrijven van header veld `~a' naar `~a'..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
-msgstr ""
+msgstr "symbool ~S hergedefiniëerd"
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
-msgstr ""
+msgstr "gebeurtenisklasse ~A schijnt ongebruikt te zijn"
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
-msgstr ""
+msgstr "vertaler luistert naar nietbestaande gebeurtenisklasse ~A"
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "geen systemen gevonden in \\score markup, heeft het een \\layout blok?"
 
-#: define-markup-commands.scm:1249
-#, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "geen geldige duurtekst: ~a"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
-msgstr ""
+msgstr "symbool verwacht: ~S"
 
-#: define-music-types.scm:737
-#, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "kan muziekobject niet vinden: ~S"
 
-#: define-music-types.scm:757
-#, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
-msgstr "onbekend type herhaling `~S'"
+msgstr "onbekend herhaaltype `~S'"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
-msgstr ""
+msgstr "Zie music-types.scm voor ondersteunde herhalingen"
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
-msgstr ""
+msgstr "paar verwacht in doc ~s"
 
 #: document-backend.scm:135
-#, lisp-format
-msgid "can't find interface for property: ~S"
-msgstr "kan interface voor property niet vinden: ~S"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
+msgstr "kan grob bediening voor eigenschap niet vinden: ~S"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
-msgstr "onbekende interface: ~S"
+msgstr "onbekende Grob bediening: ~S"
 
 #: documentation-lib.scm:45
-#, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
 msgstr "Verwerken van ~S..."
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr "Schrijven van ~S..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
-msgstr "kan geen beschrijving vinden voor property ~S"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
+msgstr "kan beschrijving voor eigenschap niet vinden ~S (~S)"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
 msgstr "Schrijven van ~a..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
-msgstr ""
-
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
-msgstr ""
-
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
-msgstr "weet niet hoe articulatie te vertolken: "
-
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
-msgstr "kan <stdout> niet converteren naar ~S"
-
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
-msgstr "kan ~S niet genereren, gebruikmakend van het postscript backend"
-
-#: framework-ps.scm:639
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
+msgstr "kan niet inbedden ~S=~S"
+
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
+msgstr "kan bestand dat past op ~a niet uit ~a extraheren"
+
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr "weet niet hoe ~S=~S in te bedden"
+
+#: framework-ps.scm:380
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
+msgstr "weet niet hoe font in te bedden: ~s ~s ~s"
+
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
+msgstr "kan <stduit> niet converteren naar ~S"
+
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
+msgstr "kan ~S niet genereren, gebruikmakend van de postscript achterkant"
+
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
 "\n"
 "or remove the lilypond-book specific settings from the input.\n"
 msgstr ""
+"\n"
+"De PostScript achterkant ondersteund het 'klassieke'\n"
+"draadwerk niet.  Gebruik de EPS achterkant,<\n"
+"\n"
+"  lilypond -b eps <bestand>\n"
+"\n"
+"of verwijder de lilypond-book specfieke instellingen uit de invoer.\n"
 
 #: framework-tex.scm:360
-#, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "TeX bestandsnaam mag geen spaties bevatten: `~a'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
+msgstr "Fout in waardestreep kwantisering.  Verwacht (~S,~S) gevonden ~S."
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
+msgstr "Fout in waardestreep kwantisering.  Verwacht ~S 0, gevonden ~S."
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
 msgstr "Berekenen van pagina-afbreuken..."
 
-#: lily-library.scm:510
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr "onbekende eenheid: ~S"
 
-#: lily-library.scm:543
-#, fuzzy, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
-"geen \\version uitdrukking gevonden,  voeg~atoe voor toekomstige "
+"geen \\version uitdrukking gevonden, voeg~atoe voor toekomstige "
 "compatibiliteit"
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr "oude relative compatibiliteit niet gebruikt"
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
-msgstr "kan niet vinden: `%s'"
+#: lily.scm:144
+#, scheme-format
+msgid "cannot find: ~A"
+msgstr "kan niet vinden: ~A"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "verkeert type voor argument ~a.  Verwacht ~a, gevonden ~s"
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr "gefaalde bestanden: ~S"
 
 # lisp-format
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, scheme-format
 msgid "Redirecting output to ~a..."
-msgstr "Converteren naar ~a..."
+msgstr "Omleiden van uitvoer naar ~a..."
 
 #: ly-syntax-constructors.scm:40
 msgid "Music head function must return Music object"
-msgstr ""
+msgstr "Muziek hoofd functie moet Muziek object teruggeven"
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
-msgstr ""
+msgstr "Ongeldige eigenschap operatie ~a"
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr "verkeerd aantal argumenten ~a.  Verwacht ~A, gevonden ~A: ~S"
+msgstr "verkeerd aantal argumenten.  Verwacht: ~A, gevonden ~A: ~S"
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr ""
+msgstr "Ongeldig argument in positie ~A.  Verwach: ~A, gevonden: ~S."
 
-#: music-functions.scm:210
-#, fuzzy
-msgid "More alternatives than repeats. Junking excess alternatives"
-msgstr "meer alternatieven dan herhalingen"
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr ""
+"Meer alternatieven dan herhalingen.  Verschroten van overtollige "
+"alternatieven"
 
-#: music-functions.scm:229
-#, fuzzy, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden"
+msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden"
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
-msgstr ""
+msgstr "muziek verwacht: ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
-msgstr ""
+msgstr "Maat controle gefaald.  Verwacht bij ~a te zijn, maar ben bij ~a"
 
-#: music-functions.scm:745
-#, lisp-format
-msgid "can't find quoted music `~S'"
-msgstr "kan aangehaalde muziek niet vinden `~S'"
+#: music-functions.scm:748
+#, scheme-format
+msgid "cannot find quoted music: `~S'"
+msgstr "kan aangehaalde muziek niet vinden: `~S'"
 
-#: music-functions.scm:953
-#, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
-msgstr "onbekende voortekenstijl: ~S"
+msgstr "onbekende toevallig teken stijl: ~S"
 
 #: output-ps.scm:315
 msgid "utf-8-string encountered in PS backend"
-msgstr ""
+msgstr "utf-8-string tegengekomen in in PS achtereinde"
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
-msgstr ""
+msgstr "ongedefiniëerd: ~S"
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
-msgstr ""
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
+msgstr "kan Pango fontbeschrijving niet ontcijferen: ~a"
 
 #: output-tex.scm:98
-#, lisp-format
-msgid "can't find ~a in ~a"
+#, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "kan ~a niet vinden in ~a"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr "Niet in topniveau scope"
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
-msgstr ""
+msgstr "Dit is geen \\layout {} object, ~S"
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
-msgstr ""
+msgstr "Onbekende papiergrootte: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Moet #(set-paper-size .. ) gebruiken in \\paper { ... }"
 
 #: parser-clef.scm:126
-#, lisp-format
+#, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "onbekend sleuteltype `~a'"
 
@@ -2184,326 +2244,12 @@ msgstr "onbekend sleuteltype `~a'"
 msgid "see scm/clef.scm for supported clefs"
 msgstr "zie scm/clef.scm voor ondersteunde sleutels"
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
-msgstr "%s eindigde met status: %d"
+msgstr "%a sloot af met status: ~S"
 
 #: to-xml.scm:190
-msgid "assertion failed"
-msgstr ""
-
-#~ msgid "no one to print a tremolos"
-#~ msgstr "niemand om tremolos af te drukken"
-
-#~ msgid "gotcha: ptr=%ul"
-#~ msgstr "hebbes: ptr=%ul"
-
-#~ msgid "distance undefined, assuming 0.1"
-#~ msgstr "afstand ongedefinieerd, gebruik 0.1"
-
-#~ msgid "distance=%f"
-#~ msgstr "afstand=%f"
-
-#~ msgid "junking event: `%s'"
-#~ msgstr "verschroot gebeurtenis: `%s'"
-
-#~ msgid "no one to print a repeat brace"
-#~ msgstr "niemand om een herhalings haak af te drukken"
-
-#~ msgid "can't find `%s' context"
-#~ msgstr "kan `%s' context niet vinden"
-
-#~ msgid "Optimal demerits: %f"
-#~ msgstr "Optimale foutscore: %f"
-
-#~ msgid "no feasible line breaking found"
-#~ msgstr "geen werkbare regelafbreuk gevonden"
-
-#~ msgid "can't find line breaking that satisfies constraints"
-#~ msgstr "kan geen regelbreuk vinden die aan voorwaarden voldoet"
-
-#~ msgid "music for the martians."
-#~ msgstr "muziek voor de marsmannetjes."
-
-#~ msgid "no one to print a percent"
-#~ msgstr "niemand om een procent herhaling af te drukken"
-
-#~ msgid "Creator: "
-#~ msgstr "Schepper: "
-
-#~ msgid "at "
-#~ msgstr "dd "
-
-#~ msgid "in quotation: junking event %s"
-#~ msgstr "in aanhaling: verschroten van gebeurtenis %s"
-
-#~ msgid "Global shortest duration is %s"
-#~ msgstr "Globaal kortste lengte is %s"
-
-#~ msgid "TFM header of `%s' has only %u word (s)"
-#~ msgstr "TFM kop van `%s' heeft slechts %u woord(en)"
-
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
-#~ msgstr ""
-#~ "%s: TFM bestand heeft %u parameters, wat meer is dan de %u die ik aan kan"
-
-#~ msgid "can't find ascii character: %d"
-#~ msgstr "kan ascii teken niet vinden: %d"
-
-#~ msgid "no one to print a tuplet start bracket"
-#~ msgstr "niemand om een x-ool start haak af te drukken"
-
-#~ msgid "unterminated trill spanner"
-#~ msgstr "onbeëindigde trill spanner"
-
-#~ msgid "identifier should have alphabetic characters only"
-#~ msgstr "identifier zou uitsluitend alfabetische tekens moeten hebben"
-
-#~ msgid "can't find signature for music function"
-#~ msgstr "kan signatuur van muziekfunctie niet vinden"
-
-#~ msgid "lilylib module"
-#~ msgstr "lilylib module"
-
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Gebruik: %s [OPTIE]... BESTAND"
-
-#~ msgid "Binary %s has version %s, looking for version %s"
-#~ msgstr "Binair programma %s heeft versie %s, zocht naar versie %s"
-
-#~ msgid "Opening pipe `%s'"
-#~ msgstr "Openen van pijp `%s'..."
-
-#~ msgid "`%s' failed (%s)"
-#~ msgstr "`%s' gefaald (%s)"
-
-#~ msgid "(ignored)"
-#~ msgstr "(genegeerd)"
-
-#~ msgid "Cleaning %s..."
-#~ msgstr "Schoonmaken van %s..."
-
-#~ msgid "Usage: %s [OPTION]... [FILE]..."
-#~ msgstr "Gebruik: %s [OPTIE]... [BESTAND]..."
-
-#~ msgid ""
-#~ "  -e, --edit             edit in place\n"
-#~ "  -f, --from=VERSION     start from VERSION [default: \\version found in "
-#~ "file]\n"
-#~ "  -h, --help             print this help\n"
-#~ "  -n, --no-version       do not add \\version command if missing\n"
-#~ "  -s, --show-rules       print rules [default: --from=0, --"
-#~ "to=@TOPLEVEL_VERSION@]\n"
-#~ "  -t, --to=VERSION       convert to VERSION [default: "
-#~ "@TOPLEVEL_VERSION@]\n"
-#~ "  -v, --version          print program version"
-#~ msgstr ""
-#~ "  -e, --edit             verander ter plekke\n"
-#~ "  -f, --from=VERSIE      begin bij VERSIE [standaard: \\version uit "
-#~ "bestand]\n"
-#~ "  -h, --help             toon deze hulp\n"
-#~ "  -n, --no-version       voeg geen \\version uitdrukking toe als die "
-#~ "ontbreekt\n"
-#~ "  -s, --show-rules       toon regels [standaard: --from=0, --"
-#~ "to=@TOPLEVEL_VERSION@]\n"
-#~ "  -t, --to=VERSION       converteer naar VERSIE [standaard: "
-#~ "@TOPLEVEL_VERSION@]\n"
-#~ "  -v, --version          toon programmaversie"
-
-#~ msgid "%s: skipping: `%s'"
-#~ msgstr "%s: overslaan: `%s'"
-
-#~ msgid "FMT"
-#~ msgstr "FMT"
-
-#~ msgid "print version information"
-#~ msgstr "toon versieinformatie"
-
-#~ msgid "getopt says: `%s'"
-#~ msgstr "getopt zegt: `%s'"
-
-#~ msgid "Not in FILE:LINE:COL format: "
-#~ msgstr "Niet in BESTAND:REGEL:KOLOM formaat: "
-
-#~ msgid "Command failed: `%s' (status %d)"
-#~ msgstr "Opdracht gefaald: `%s' (status %d)"
-
-#~ msgid "command exited with value %d"
-#~ msgstr "opdracht eindigde met waarde %d"
-
-#~ msgid "Example:"
-#~ msgstr "Voorbeeld:"
-
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "Converteer mup naar LilyPond broncode."
-
-#~ msgid "debug"
-#~ msgstr "debug"
-
-#~ msgid "define macro NAME [optional expansion EXP]"
-#~ msgstr "definieer macro NAAM [optionele expansie EXP]"
-
-#~ msgid "only pre-process"
-#~ msgstr "alleen pre-processen"
-
-#~ msgid "no such context: %s"
-#~ msgstr "geen context als: `%s'"
-
-#~ msgid "Processing `%s'..."
-#~ msgstr "Verwerken van `%s'..."
-
-#~ msgid "Convert PostScript to PNG image."
-#~ msgstr "Converteer PostScript naar PNG plaatje."
-
-#~ msgid "PAPER"
-#~ msgstr "PAPIER"
-
-#~ msgid "use papersize PAPER"
-#~ msgstr "gebruike papiermaat PAPIER"
-
-#~ msgid "RES"
-#~ msgstr "RES"
-
-#~ msgid "set the resolution of the preview to RES"
-#~ msgstr "zet de resolutie voor het testbeeld op RES"
-
-#~ msgid "Wrote `%s'"
-#~ msgstr "Geschreven `%s'..."
-
-#~ msgid "can't dlopen: %s: %s"
-#~ msgstr "kan bestand niet openen: `%s'"
-
-#~ msgid "install package: %s or %s"
-#~ msgstr "installeer pakket: %s of %s"
-
-#~ msgid "error opening kpathsea library"
-#~ msgstr "fout bij openen van kpathsea bibliotheek"
-
-#~ msgid "aborting"
-#~ msgstr "afbreken"
-
-#~ msgid "parsing AFM file: `%s'"
-#~ msgstr "bij ontleden AFM-bestand: `%s'"
-
-#~ msgid "checksum mismatch for font file: `%s'"
-#~ msgstr "checksum fout voor fontbestand: `%s'"
-
-#~ msgid "does not match: `%s'"
-#~ msgstr "komt niet overeen met: `%s'"
-
-#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ "Herbouw alle .afm bestanden en verwijder alle .pk en .tfm bestanden."
-
-#~ msgid "Rerun with -V to show font paths."
-#~ msgstr "Draai opnieuw met -V voor het tonen van fontpaden."
-
-#~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr ""
-#~ "Een script ter verwijdering van fontbestanden is meegeleverd bij de bron-"
-#~ "code:"
-
-#~ msgid "beam has less than two visible stems"
-#~ msgstr "waardestreep heeft minder dan twee zichtbare stokken"
-
-#~ msgid "initializing FontConfig"
-#~ msgstr "initialiseren van FontConfig"
-
-#~ msgid "adding lilypond directory: %s"
-#~ msgstr "toevoegen van lilypond map: %s"
-
-#~ msgid ""
-#~ "set scheme option, for help use\n"
-#~ "                                       -e '(ly:option-usage)'"
-#~ msgstr ""
-#~ "zet scheme optie, voor help doe\n"
-#~ "                                       -e '(ly:option-usage)'"
-
-#~ msgid "run in safe mode"
-#~ msgstr "draai in veilige modus"
-
-#~ msgid "can't handle a percent repeat of length: %s"
-#~ msgstr "kan procent herhaling van deze lengte niet afhandelen"
-
-#~ msgid "rest direction not set.  Cannot resolve collision."
-#~ msgstr "rustrichting niet gezet.  Kan botsing niet voorkomen."
-
-#~ msgid "lilypond -e EXPR means:"
-#~ msgstr "lilypond -e EXPR betekent:"
-
-#~ msgid "  Evalute the Scheme EXPR before parsing any .ly files."
-#~ msgstr "  Evalueer de Scheme EXPR alvorens enig .ly bestand te ontleden."
-
-#~ msgid ""
-#~ "  Multiple -e options may be given, they will be evaluated sequentially."
-#~ msgstr ""
-#~ "  Verscheidene -e opties mogen worden gegeven, deze zullen sequentieel "
-#~ "worden geëvalueerd."
-
-#~ msgid ""
-#~ "  The function ly:set-option allows for access to some internal variables."
-#~ msgstr ""
-#~ "  De functie ly:set-option verschaft toegang tot bepaalde interne "
-#~ "variabelen."
-
-#~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
-#~ msgstr "Gebruik: lilypond -e \"(ly:set-option SYMBOOL WAARDE)\""
-
-#~ msgid "Use help as SYMBOL to get online help."
-#~ msgstr "Gebruik help als symbool voor online hulp."
-
-#~ msgid "Separation_item:  I've been drinking too much"
-#~ msgstr "Separation_item:  Ik heb te veel gedronken"
-
-#~ msgid "removing tuplet bracket across linebreak"
-#~ msgstr "verwijderen van tuplet haak over regelbreuk"
-
-#~ msgid "tag must be symbol or list of symbols"
-#~ msgstr "tag moet symbool of lijst van symbolen zijn"
-
-#~ msgid "need integer number arg"
-#~ msgstr "heb integer getal arg nogig"
-
-#~ msgid "suspect duration in beam: %s"
-#~ msgstr "verdachte duur in waardestreep: %s"
-
-#~ msgid "syntax error: cannot back up"
-#~ msgstr "syntaxis fout, kan niet terugtrekken "
-
-#~ msgid "Reading a token: "
-#~ msgstr "Lezen van een token: "
-
-#~ msgid "syntax error, unexpected %s"
-#~ msgstr "syntaxis fout, onverwachte %s"
-
-#~ msgid "syntax error, unexpected %s, expecting %s"
-#~ msgstr "syntaxis fout, onverwachte %s, verwacht %s"
-
-#~ msgid "syntax error, unexpected %s, expecting %s or %s"
-#~ msgstr "syntaxis fout, onverwachte %s, verwacht %s of %s"
-
-#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-#~ msgstr "syntaxis fout, onverwachte %s, verwacht %s of %s of %s"
-
-#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
-#~ msgstr "syntaxis fout, onverwachte %s, verwacht %s of %s of %s of %s"
-
-#~ msgid "syntax error; also memory exhausted"
-#~ msgstr "syntaxis fout: virtual geheugen ook uitgeput"
-
-#~ msgid "syntax error"
-#~ msgstr "syntaxis fout"
-
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
-#~ msgstr "kan CFF/PFA/PFB font niet vinden: ~S=~S"
-
-#~ msgid "unknown bar glyph: `~S'"
-#~ msgstr "onbekend type maatstreep: `~S'"
-
-#~ msgid "Extracting fonts to %s..."
-#~ msgstr "Schrijven van fonts naar %s..."
-
-#~ msgid "Writing %s..."
-#~ msgstr "Schrijven van `%s'..."
+#, scheme-format
+msgid "assertion failed: ~S"
+msgstr "assertie gefaald: ~S"
index 4553ff75efc3dda2a1a2d3d295f3d2615edb8192..cf49539a671a7f2b1a3bff109f7168848a545f80 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2006-12-23 16:16+0100\n"
 "Last-Translator: August S.Sigov <august@infran.ru>\n"
 "Language-Team: Russian <ru@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -72,147 +72,155 @@ msgid "Running %s..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "ÐÒÅÄÕÐÒÅÖÄÁÀ: "
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
 #, fuzzy
-msgid "set output filename to FILE"
+msgid "write output to FILE"
 msgstr "ÚÁÐÉÓÙ×ÁÔØ ×Ù×ÏÄ × ïóîï÷á[-x].ÒÁÓÛÉÒÅÎÉÅ"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "óÏÏÂÝÁÊÔÅ Ï ÏÛÉÂËÁÈ ÐÏ %s."
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
+msgstr ""
+
+#: convert-ly.py:43 lilypond-book.py:73
+msgid "Examples:"
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "ÐÒÅÄÕÐÒÅÖÄÁÀ: "
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "ÏÛÉÂËÁ: "
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr "óÏ×ÅÒÛÁÀ ÈÁÒÁËÉÒÉ"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "ïÂÒÁÂÁÔÙ×ÁÀ..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ: `%s'"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-#, fuzzy
-msgid "write output to FILE"
-msgstr "ÚÁÐÉÓÙ×ÁÔØ ×Ù×ÏÄ × ïóîï÷á[-x].ÒÁÓÛÉÒÅÎÉÅ"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "æáêì"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "ÐÏËÁÚÁÔØ ÇÁÒÁÎÔÉÀ É copyright"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, fuzzy, python-format
 msgid "Exiting (%d)..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "÷ÓÅ ÐÒÁ×Á ÚÁÝÉÝÅÎÙ (c) %s by"
@@ -228,7 +236,8 @@ msgstr ""
 
 #: lilypond-book.py:135
 #, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ×ÙÈÏÄÎÏÊ ÆÏÒÍÁÔ òáóû"
 
 #: lilypond-book.py:138
@@ -236,6 +245,10 @@ msgstr "
 msgid "add DIR to include path"
 msgstr "ÄÏÂÁ×ÉÔØ ëáô Ë ÐÕÔÉ ÐÏÉÓËÁ"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "ëáô"
+
 #: lilypond-book.py:143
 #, fuzzy
 msgid "write output to DIR"
@@ -249,149 +262,149 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 #, fuzzy
 msgid "be verbose"
 msgstr "ÂÙÔØ ÂÏÌÔÌÉ×ÙÍ"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "ÐÏËÁÚÁÔØ ÇÁÒÁÎÔÉÀ É copyright"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr ""
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr ""
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 #, fuzzy
 msgid "Writing snippets..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 #, fuzzy
 msgid "Processing..."
 msgstr "ïÂÒÁÂÁÔÙ×ÁÀ..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ: `%s'"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, fuzzy, python-format
 msgid "Writing `%s'..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, fuzzy, python-format
 msgid "Reading %s..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 #, fuzzy
 msgid "Dissecting..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, fuzzy, python-format
 msgid "Compiling %s..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "ïÂÒÁÂÁÔÙ×ÁÀ..."
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "ÐÒÅÄÕÐÒÅÖÄÁÀ: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "ÏÛÉÂËÁ: "
 
@@ -404,8 +417,9 @@ msgstr ""
 msgid "%s output to `%s'..."
 msgstr "×Ù×ÏÄ MIDI × %s..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, python-format
+msgid "Convert %s to LilyPond input."
 msgstr ""
 
 #: midi2ly.py:875
@@ -449,34 +463,60 @@ msgid "treat every text as a lyric"
 msgstr ""
 
 #: midi2ly.py:905
-msgid "example"
+msgid "Examples"
 msgstr ""
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr ""
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"üÔÏ Ó×ÏÂÏÄÎÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ. ïÎÏ ÏÈÒÁÎÑÅÔÓÑ ïÂÝÅÊ ïÔËÒÙÔÏÊ\n"
+"ìÉÃÅÎÚÉÅÊ GNU, É ÷Ù ÍÏÖÅÔÅ ÉÚÍÅÎÑÔØ ÅÇÏ É/ÉÌÉ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÅÇÏ ËÏÐÉÉ\n"
+"ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÎÅËÏÔÏÒÙÈ ÕÓÌÏ×ÉÊ. ÷ÙÚÙ×ÁÊÔÅ ËÁË `%s --warranty' ÄÌÑ\n"
+"ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "ÚÁÐÉÓÙ×ÁÔØ ×Ù×ÏÄ × ïóîï÷á[-x].ÒÁÓÛÉÒÅÎÉÅ"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "ÏÐÃÉÑ `%s' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "ÏÐÃÉÑ `%s' ÎÅ ÄÏÐÕÓËÁÅÔ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÁÒÇÕÍÅÎÔÁ"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÐÃÉÑ: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' ÄÌÑ ÏÐÃÉÉ `%s'"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, fuzzy, c-format
 msgid "programming error: %s"
 msgstr "ÏÛÉÂËÁ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ: "
@@ -485,86 +525,75 @@ msgstr "
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr ""
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr ""
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ: `%s'"
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "úÁÇÒÕÖÁÀ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(ÐÕÔØ ÐÏÉÓËÁ: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "óÄÁÀÓØ"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "ÎÅ ÍÏÇÕ ÓÍÅÎÉÔØ `%s' ÎÁ `%s'"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -578,19 +607,20 @@ msgstr "
 msgid "unterminated beam"
 msgstr "ÎÅÚÁËÏÎÞÅÎÎÁÑ ÇÒÕÐÐÉÒÏ×ËÁ ÛÔÉÌÅÊ"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "ÛÔÉÌØ ÄÏÌÖÅΠÉÍÅÔØ ÒÉÔÍÏ×ÕÀ ÓÔÒÕËÔÕÒÕ"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "ÛÔÉÌØ ÎÅ ×ÌÅÚÁÅÔ × ÇÒÕÐÐÉÒÏ×ËÕ"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "ÇÒÕÐÐÉÒÏ×ËÁ ÎÁÞÉÎÁÌÁÓØ ÚÄÅÓØ"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "îÅ ÎÁÊÄÅÎÏ ÕÄÏ×ÌÅÔ×ÏÒÉÔÅÌØÎÏÇÏ ÒÁÚÒÙ×Á ÓÔÒÏËÉ"
@@ -600,24 +630,24 @@ msgstr "
 msgid "removing beam with no stems"
 msgstr "ÇÒÕÐÐÉÒÏ×ËÁ ÍÅÎÅÅ Ä×ÕÈ ÛÔÉÌÅÊ"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, fuzzy, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÐÅÒÅÍÅÎÎÁÑ ÂÕÍÁÇÉ: `%s'"
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÓÍÅÎÉÔØ `%s' ÎÁ `%s'"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÎÔÅËÓÔ `%s'"
 
 #. We could change the current translator's id, but that would make
@@ -648,7 +678,7 @@ msgstr "
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr ""
@@ -662,33 +692,33 @@ msgstr "
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr ""
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr ""
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ ÐÏÄ ÎÁÚ×ÁÎÉÅÍ: `%s'"
 
 #: context.cc:276
@@ -698,7 +728,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
 #: custos.cc:77
@@ -706,17 +736,22 @@ msgstr "
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉРËÌÀÞÁ"
 
+#: dots.cc:38
+#, c-format
+msgid "dot `%s' not found"
+msgstr ""
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÎÁÞÁÌÏ (ÄÅ)ËÒÅÝÅÎÄÏ"
 
 #: dynamic-engraver.cc:195
@@ -736,11 +771,7 @@ msgstr "
 msgid "unterminated (de)crescendo"
 msgstr "ÎÅÚÁËÏÎÞÅÎÎÏÅ (ÄÅ)ËÒÅÝÅÎÄÏ"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÙÊ ÒÁÓÛÉÒÉÔÅÌØ"
 
@@ -763,15 +794,15 @@ msgstr "
 msgid "adding font directory: %s"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÌÉÇÁ"
@@ -804,47 +835,38 @@ msgstr ""
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉРËÌÀÞÁ"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr ""
 
-#: hairpin.cc:180
-#, fuzzy
-msgid "crescendo too small"
-msgstr "ËÒÅÝÅÎÄÏ"
-
-#: horizontal-bracket-engraver.cc:58
+#: horizontal-bracket-engraver.cc:59
 #, fuzzy
-msgid "don't have that many brackets"
+msgid "do not have that many brackets"
 msgstr "îÅÔ ÔÁËÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏËÔÁ× (%s)"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr ""
 
@@ -862,93 +884,98 @@ msgstr "
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(ÐÕÔØ ÐÏÉÓËÁ: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "ÐÏÌÏÖÅÎÉÅ ÎÅÉÚ×ÅÓÔÎÏ"
 
-#: ligature-engraver.cc:95
+#: ligature-engraver.cc:93
 #, fuzzy
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr ""
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 #, fuzzy
 msgid "already have a ligature"
 msgstr "ÕÖÅ ÉÍÅÅÍ ÇÒÕÐÐÕ ÛÔÉÌÅÊ"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr ""
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 #, fuzzy
 msgid "unterminated ligature"
 msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÌÉÇÁ"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr ""
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 #, fuzzy
 msgid "ligature was started here"
 msgstr "ÇÒÕÐÐÉÒÏ×ËÁ ÎÁÞÉÎÁÌÁÓØ ÚÄÅÓØ"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(ÐÕÔØ ÚÁÇÒÕÚËÉ: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr ""
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr ""
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "éÍÑ ËÏÍÁÎÄÙ Ñ×ÌÑÅÔÓÑ ËÌÀÞÅ×ÙÍ ÓÌÏ×ÏÍ: `%s'"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "ÏÛÍÂËÁ × ËÏÎÃÅ ÆÁÊÌÁ: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, c-format
 msgid "deprecated function called: %s"
 msgstr ""
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
 #: lily-parser-scheme.cc:125
@@ -956,21 +983,21 @@ msgstr "
 msgid "Processing `%s'"
 msgstr "ïÂÒÁÂÁÔÙ×ÁÀ..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "òÁÚÂÉÒÁÀ..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "æÉÇÕÒÎÙÅ ÓËÏÂËÉ ÎÅ ÓÏ×ÐÁÄÁÀÔ"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -983,7 +1010,7 @@ msgstr ""
 "ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÎÅËÏÔÏÒÙÈ ÕÓÌÏ×ÉÊ. ÷ÙÚÙ×ÁÊÔÅ ËÁË `%s --warranty' ÄÌÑ\n"
 "ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
 
-#: main.cc:123
+#: main.cc:122
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -994,134 +1021,134 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 #, fuzzy
 msgid "evaluate scheme code"
 msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÑÔØ ËÏÄ ÓÈÅÍÙ × ÂÅÚÏÐÁÓÎÏÍ ÒÅÖÉÍÅ"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr ""
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr ""
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr ""
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr ""
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-msgid "print this help"
-msgstr "ÜÔÁ ÓÐÒÁ×ËÁ"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
 msgid "FIELD"
 msgstr "æáêì"
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:172
-msgid "DIR"
-msgstr "ëáô"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "ÄÏÂÁ×ÉÔØ ëáô Ë ÐÕÔÉ ÐÏÉÓËÁ"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ æáêì ËÁË ÆÁÊÌ ÉÎÉÃÉÁÌÉÚÁÃÉÉ"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "ÎÅ ÏÔÍÅÞÁÔØ ÄÁÔÕ É ×ÒÅÍÑ ×Ù×ÏÄÁ"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "ÚÁÐÉÓÙ×ÁÔØ ×Ù×ÏÄ × ïóîï÷á[-x].ÒÁÓÛÉÒÅÎÉÅ"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr ""
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "×Ù×ÏÄÉÔØ ÎÏÍÅÒ ×ÅÒÓÉÉ"
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1129,79 +1156,79 @@ msgid ""
 msgstr "÷ÓÅ ÐÒÁ×Á ÚÁÝÉÝÅÎÙ (c) %s by"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, fuzzy, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]..."
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "îÁÂÉÒÁÔØ ÍÕÚÙËÕ É/ÉÌÉ ÐÒÏÉÇÒÙ×ÁÔØ MIDI ÉÚ æáêìÁ."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "ïÐÃÉÉ:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr "óÏÏÂÝÁÊÔÅ Ï ÏÛÉÂËÁÈ ÐÏ %s."
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "ÎÅ ÍÏÇÕ ÓÍÅÎÉÔØ `%s' ÎÁ `%s'"
 
-#: main.cc:349
+#: main.cc:350
 #, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "ÎÅ ÍÏÇÕ ÓÍÅÎÉÔØ `%s' ÎÁ `%s'"
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "ÎÅ ÍÏÇÕ ÓÍÅÎÉÔØ `%s' ÎÁ `%s'"
 
-#: main.cc:368
+#: main.cc:369
 #, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
 #: main.cc:415
@@ -1209,7 +1236,7 @@ msgstr "
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1223,37 +1250,37 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1261,7 +1288,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr ""
 
@@ -1278,116 +1305,119 @@ msgstr ""
 msgid "no such MIDI instrument: `%s'"
 msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "ÇÌÕÐÙÊ ÔÏÎ"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr ""
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÅÒÅÓÅËÁÀÝÉÈÓÑ ÓÔÏÌÂÃÏ× ÎÏÔ. éÇÎÏÒÉÒÕÀ."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr ""
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ: `%s'"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 #, fuzzy
 msgid "Drawing systems..."
 msgstr "óÏÚÄÁÀ ÇÏÌÏÓÁ..."
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1425,15 +1455,15 @@ msgstr "
 msgid "Track..."
 msgstr "äÏÒÏÖËÁ ..."
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "×Ù×ÏÄ MIDI × %s..."
@@ -1443,23 +1473,23 @@ msgstr "
 msgid "unterminated phrasing slur"
 msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÌÉÇÁ"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, fuzzy, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
@@ -1469,116 +1499,115 @@ msgstr "
 msgid "not a grob name, `%s'"
 msgstr ""
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "ÎÅÔ ÔÁËÏÇÏ ÉÎÓÔÒÕÍÅÎÔÁ: `%s'"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "Relocation file %s\n"
+msgid "Relocation file: %s"
 msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÎÁÌÅÚÁÀÝÉÈ ÐÁÕÚ"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ: `%s'"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr ""
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(ÐÕÔØ ÐÏÉÓËÁ: `%s')"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "óÏ×ÅÒÛÁÀ ÈÁÒÁËÉÒÉ"
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "ÕÖÅ ÉÍÅÅÍ ÇÒÕÐÐÕ ÛÔÉÌÅÊ"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 #, fuzzy
 msgid "errors found, ignoring music expression"
 msgstr "îÁÊÄÅÎÙ ÏÛÉÂËÉ/*, ÎÅ ÏÂÒÁÂÁÔÙ×ÁÀ ÎÏÔÙ*/"
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr ""
 
 #: script-engraver.cc:103
@@ -1591,17 +1620,18 @@ msgstr "
 msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÌÉÇÁ"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
 #: source-file.cc:74
@@ -1613,60 +1643,60 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "äÏÂÁ×ÌÑÀ ÎÏÔÕ Ë ÎÅÓÏ×ÍÅÓÔÉÍÏÍÕ ÛÔÉÌÀ (ÔÉР= %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr ""
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
-#: text-spanner-engraver.cc:60
+#: text-spanner-engraver.cc:61
 #, fuzzy
-msgid "can't find start of text spanner"
+msgid "cannot find start of text spanner"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 #, fuzzy
 msgid "already have a text spanner"
 msgstr "ÕÖÅ ÉÍÅÅÍ ÇÒÕÐÐÕ ÛÔÉÌÅÊ"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 #, fuzzy
 msgid "unterminated text spanner"
 msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÙÊ ÒÁÓÛÉÒÉÔÅÌØ"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr ""
 
@@ -1675,14 +1705,14 @@ msgstr ""
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1692,43 +1722,39 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr ""
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ: `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "ÕÖÅ ÉÍÅÅÍ ÇÒÕÐÐÕ ÛÔÉÌÅÊ"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -1746,269 +1772,280 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr ""
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "ÕÖÅ ÉÍÅÅÍ ÇÒÕÐÐÕ ÛÔÉÌÅÊ"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "óÄÁÀÓØ"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 #, fuzzy
 msgid "second argument must be pitch list"
 msgstr "÷ÔÏÒÏÊ ÁÒÇÕÍÅÎÔ ÄÏÌÖÅΠÂÙÔØ ÓÉÍ×ÏÌÏÍ"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "äÏÌÖÅΠÂÙÔØ × ìÉÒÉÞÅÓËÏÍ ÒÅÖÉÍÅ ÄÌÑ ÌÉÒÉËÉ"
 
-#: parser.yy:1612
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "ÎÅ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "äÏÌÖÅΠÂÙÔØ × îÏÔÎÏÍ ÒÅÖÉÍÅ ÄÌÑ ÎÏÔ"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "äÏÌÖÅΠÂÙÔØ × áËËÏÒÄÎÏÍ ÒÅÖÉÍÅ ÄÌÑ ÁËËÏÒÄÏ×"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "ëÏÎÅàÆÁÊÌÁ ×ÎÕÔÒÉ ËÏÍÍÅÎÔÁÒÉÑ"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, fuzzy, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÍÅÔËÁ/ËÏÍÁÎÄÁ: `%s'"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "ÎÅ×ÅÒÎÙÊ ÓÉÍ×ÏÌ: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ escape-ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ: `\\%s'"
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "ÎÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ mudela: %s (%s, %s)"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
+
+#: lexer.ll:881 lexer.ll:882
+msgid "consider updating the input with the convert-ly script"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
 msgstr ""
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, fuzzy, scheme-format
 msgid "Invoking `~a'..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr ""
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Converting to `~a'..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: backend-library.scm:156
-#, fuzzy, lisp-format
+#: backend-library.scm:145
+#, fuzzy, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "úÁÐÉÓÙ×ÁÀ ÆÁÊÌ ÚÁ×ÉÓÉÍÏÓÔÅÊ: `%s'..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "ÎÅ ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ: %d"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÎÔÅËÓÔ `%s'"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉРËÌÀÞÁ"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ Ó ÎÏÍÅÒÏÍ: %d"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉРËÌÀÞÁ"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "ïÂÒÁÂÁÔÙ×ÁÀ..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ Ó ÎÏÍÅÒÏÍ: %d"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2017,56 +2054,56 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "õÖÅ ÓÏÄÅÒÖÉÔ: `%s'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "÷ÙÞÉÓÌÑÀ ÐÏÚÉÃÉÉ ÓÔÏÌÂÃÏ×"
 
-#: lily-library.scm:510
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ: `%s'"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "\"ÂÕÍÁÖÎÙÊ\" ×Ù×ÏÄ × %s..."
 
@@ -2074,48 +2111,48 @@ msgstr "\"
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, fuzzy, lisp-format
+#: music-functions.scm:538
+#, fuzzy, scheme-format
 msgid "music expected: ~S"
 msgstr "× ÔÏ ×ÒÅÍÑ ËÁË ÏÖÉÄÁÌÏÓØ"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ: `%s'"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ escape-ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ: `\\%s'"
 
@@ -2124,42 +2161,42 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, fuzzy, lisp-format
+#: paper.scm:129
+#, fuzzy, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÐÅÒÅÍÅÎÎÁÑ ÂÕÍÁÇÉ: `%s'"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉРËÌÀÞÁ"
 
@@ -2167,15 +2204,45 @@ msgstr "
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, lisp-format
+#: ps-to-png.scm:88
+#, scheme-format
 msgid "~a exited with status: ~S"
 msgstr ""
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "ÐÏËÁÚÁÔØ ÇÁÒÁÎÔÉÀ É copyright"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "úÁÇÒÕÖÁÀ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ ÐÏ ÕÍÏÌÞÁÎÉÀ: `%s'"
+
+#, fuzzy
+#~ msgid "crescendo too small"
+#~ msgstr "ËÒÅÝÅÎÄÏ"
+
+#~ msgid "print this help"
+#~ msgstr "ÜÔÁ ÓÐÒÁ×ËÁ"
+
+#~ msgid "silly pitch"
+#~ msgstr "ÇÌÕÐÙÊ ÔÏÎ"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
+
+#, fuzzy
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "ÎÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ mudela: %s (%s, %s)"
+
 #, fuzzy
 #~ msgid "no one to print a tremolos"
 #~ msgstr "ÎÅËÏÍÕ ÒÉÓÏ×ÁÔØ ÓËÏÂÕ ÐÏ×ÔÏÒÁ"
@@ -2187,7 +2254,7 @@ msgstr ""
 #~ msgid "no one to print a repeat brace"
 #~ msgstr "ÎÅËÏÍÕ ÒÉÓÏ×ÁÔØ ÓËÏÂÕ ÐÏ×ÔÏÒÁ"
 
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÎÔÅËÓÔ `%s'"
 
 #, fuzzy
@@ -2210,7 +2277,7 @@ msgstr ""
 #~ msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÚÁÐÒÏÓ: `%s'"
 
 #, fuzzy
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÓÉÍ×ÏÌ ASCII: `%d'"
 
 #, fuzzy
@@ -2218,13 +2285,9 @@ msgstr ""
 #~ msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÙÊ ÒÁÓÛÉÒÉÔÅÌØ"
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÎÔÅËÓÔ `%s'"
 
-#, fuzzy
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ïðãéñ]... [æáêì]"
-
 #, fuzzy
 #~ msgid "Opening pipe `%s'"
 #~ msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
@@ -2258,7 +2321,7 @@ msgstr ""
 #~ msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: `%s'"
 
 #, fuzzy
@@ -2282,7 +2345,7 @@ msgstr ""
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÉÌÉ ÓÏÚÄÁÔØ: `%s'"
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "îÅ ÚÎÁÀ, ÞÔÏ ÄÅÌÁÔØ Ó ÐÕÓÔÙÍÉ ËÌÀÞÁÍÉ"
 
 #, fuzzy
@@ -2330,7 +2393,7 @@ msgstr ""
 #~ msgstr "ÎÅ ÓÍÅÒÔÅÌØÎÁÑ ÏÛÉÂËÁ: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ: `%s'"
 
 #, fuzzy
@@ -2366,7 +2429,7 @@ msgstr ""
 #~ msgid "Programming error: "
 #~ msgstr "ÏÛÉÂËÁ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ: "
 
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "îÅ ÍÏÇÕ ÐÅÒÅËÌÀÞÉÔØ ÐÅÒÅ×ÏÄÞÉËÏ×, Ñ ÕÖÅ ÔÁÍ"
 
 #, fuzzy
@@ -2389,11 +2452,11 @@ msgstr ""
 #~ msgstr "éóðòá÷øíåîñ: ÓÌÉÑÎÉÅ ÓÍÅÎÙ ËÌÀÞÁ"
 
 #, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
+#~ msgid "kpathsea cannot find %s file: `%s'"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
 #, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
+#~ msgid "kpathsea cannot find file: `%s'"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
 #, fuzzy
@@ -2412,10 +2475,6 @@ msgstr ""
 #~ msgid "kpathsea can not find TFM file: `%s'"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
-#, fuzzy
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "îÅ ÍÏÇÕ ÐÅÒÅËÌÀÞÉÔØ ÐÅÒÅ×ÏÄÞÉËÏ×, Ñ ÕÖÅ ÔÁÍ"
-
 #, fuzzy
 #~ msgid "Converting to `~a.ps'..."
 #~ msgstr "÷ÙÂÒÁÓÙ×ÁÀ ÍÕÚÙËÕ: `%s'"
@@ -2448,7 +2507,7 @@ msgstr ""
 #~ msgstr "×Ù×ÏÄ MIDI × %s..."
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: `%s'"
 
 #, fuzzy
@@ -2529,7 +2588,7 @@ msgstr ""
 #~ msgstr "ÉÚ ÍÕÚÙËÁÌØÎÏÊ ÎÏÔÁÃÉÉ %s"
 
 #, fuzzy
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "ÞÔÏ-ÔÏ ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÇÒÕÐÐÉÒÏ×ËÉ ÛÔÉÌÅÊ"
 
 #, fuzzy
@@ -2571,10 +2630,10 @@ msgstr ""
 #~ msgid "Slur over rest?"
 #~ msgstr "ìÉÇÁ ÎÁÄ ÐÁÕÚÏÊ?"
 
-#~ msgid "Can't specify direction for this request"
+#~ msgid "Cannot specify direction for this request"
 #~ msgstr "îÅ ÍÏÇÕ ÕËÁÚÁÔØ ÎÁÐÒÁ×ÌÅÎÉÅ ÄÌÑ ÜÔÏÇÏ ÚÁÐÒÏÓÁ"
 
-#~ msgid "can't map file"
+#~ msgid "cannot map file"
 #~ msgstr "ÎÅ ÍÏÇÕ ÏÔÏÂÒÁÚÉÔØ ÆÁÊÌ × ÐÁÍÑÔØ"
 
 #~ msgid "This binary was compiled with the following options:"
@@ -2619,14 +2678,14 @@ msgstr ""
 #~ msgid "set FILE as default output"
 #~ msgstr "ÕÓÔÁÎÏ×ÉÔØ æáêì ÄÌÑ ×Ù×ÏÄÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
 
-#~ msgid "don't output tuplets"
+#~ msgid "do not output tuplets"
 #~ msgstr "ÎÅ ×Ù×ÏÄÉÔØ ÓËÏÂÙ ÔÒÉÏÌÅÊ"
 
 #~ msgid "be quiet"
 #~ msgstr "ÂÙÔØ ÍÏÌÞÁÌÉ×ÙÍ"
 
 #, fuzzy
-#~ msgid "don't output rests or skips"
+#~ msgid "do not output rests or skips"
 #~ msgstr "ÎÅ ×Ù×ÏÄÉÔØ ÓËÏÂÙ ÔÒÉÏÌÅÊ"
 
 #~ msgid "set smallest duration"
@@ -2697,7 +2756,7 @@ msgstr ""
 #~ msgid "floating point exception"
 #~ msgstr "ÉÓËÌÀÞÅÎÉÅ ÁÒÉÆÍÅÔÉËÉ Ó ÐÌÁ×ÁÀÝÅÊ ÚÁÐÑÔÏÊ"
 
-#~ msgid "can't set mem-checking!"
+#~ msgid "cannot set mem-checking!"
 #~ msgstr "ÎÅ ÍÏÇÕ ×ËÌÀÞÉÔØ ÐÒÏ×ÅÒËÕ ÐÁÍÑÔÉ"
 
 #, fuzzy
@@ -2745,7 +2804,7 @@ msgstr ""
 #~ msgid "Huh?  Not a Request: `%s'"
 #~ msgstr "á? îå úÁÐÒÏÓ: `%s'"
 
-#~ msgid "can't find both ends of %s"
+#~ msgid "cannot find both ends of %s"
 #~ msgstr "ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÏÂÁ ËÏÎÃÁ Õ %s"
 
 #~ msgid "slur"
@@ -2766,7 +2825,7 @@ msgstr ""
 #~ msgid "score does not have any columns"
 #~ msgstr "ÆÒÁÇÍÅÎÔ ÎÅ ÓÏÄÅÒÖÉÔ ÓÔÏÌÂÃÏ×"
 
-#~ msgid "can't find start of chord tremolo"
+#~ msgid "cannot find start of chord tremolo"
 #~ msgstr "ÎÅ ÎÁÊÄÕ ÎÁÞÁÌÏ ÔÒÅÍÏÌÏ ÁËËÏÒÄÁ"
 
 #~ msgid "already have a chord tremolo"
@@ -2778,5 +2837,5 @@ msgstr ""
 #~ msgid "More than one music block"
 #~ msgstr "âÏÌÅÅ ÏÄÎÏÇÏ ÍÕÚÙËÁÌØÎÏÇÏ ÂÌÏËÁ"
 
-#~ msgid "can't put stem tremolo on tuplet"
+#~ msgid "cannot put stem tremolo on tuplet"
 #~ msgstr "ÎÅ ÍÏÇÕ ÐÏÍÅÓÔÉÔØ ÛÔÉÌÅ×ÏÅ ÔÒÅÍÏÌÏ ÎÁ ÇÒÕÐÐÉÒÏ×ËÕ"
index 2fef2c24dcd410463afb4a6f8c0b3059a691923c..90cd321693e5231fdad31c7ce336f5cd6f0d5f74 100644 (file)
--- a/po/rw.po
+++ b/po/rw.po
@@ -16,7 +16,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.2.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
 "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
 "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
@@ -81,152 +81,162 @@ msgid "Running %s..."
 msgstr ""
 
 #: lilylib.py:203
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "Iburira"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
 #, python-format
-msgid "Usage: %s\n"
+msgid "%s [OPTION]... FILE"
 msgstr ""
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
 #, fuzzy
-msgid "set output filename to FILE"
+msgid "write output to FILE"
 msgstr "Kwandika Ibisohoka Kuri"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "Kuri"
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Urugero:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "Iburira"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "Ikosa"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 #, fuzzy
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Bya i"
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 #, fuzzy
 msgid "It comes with NO WARRANTY."
 msgstr "Na:"
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
 # svtools/source\dialogs\prnsetup.src:STR_SVT_PRNDLG_PROCESSING.text
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "Inonosora"
 
 # sfx2/source\appl\app.src:STR_ERR_NOFILE.text
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, fuzzy, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "Ntibishoboka gufungura idosiye$."
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "Imiterere kugirango"
 
+#: etf2ly.py:1196
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr ""
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-#, fuzzy
-msgid "write output to FILE"
-msgstr "Kwandika Ibisohoka Kuri"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "IDOSIYE"
 
-#: etf2ly.py:1204 midi2ly.py:899
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
 #, fuzzy
-msgid "show warranty"
+msgid "show warranty and copyright"
 msgstr "Garagaza Na Uburenganzira bw'umuhimbyi"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 #, fuzzy
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
-msgstr "0."
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "in Cyangwa Inyandiko"
+
+#: lilypond-book.py:78
+msgid "BOOK"
+msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr ""
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, fuzzy, python-format
 msgid "Copyright (c) %s by"
 msgstr "C ku"
@@ -243,7 +253,8 @@ msgstr "Gihinguranya GUHINDURA N"
 
 #: lilypond-book.py:135
 #, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr "Gukoresha Ibisohoka Imiterere Mburabuzi HTML HTML"
 
 #: lilypond-book.py:138
@@ -251,6 +262,10 @@ msgstr "Gukoresha Ibisohoka Imiterere Mburabuzi HTML HTML"
 msgid "add DIR to include path"
 msgstr "Kongeramo Kuri Gushyiramo Inzira"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr ""
+
 #: lilypond-book.py:143
 #, fuzzy
 msgid "write output to DIR"
@@ -267,151 +282,150 @@ msgstr "Icyo wifuza"
 msgid "process ly_files using COMMAND FILE..."
 msgstr "ikoresha"
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr ""
 
-#: lilypond-book.py:168 main.cc:184
-#, fuzzy
-msgid "show warranty and copyright"
-msgstr "Garagaza Na Uburenganzira bw'umuhimbyi"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, fuzzy, python-format
 msgid "file not found: %s"
 msgstr "Dosiye ntibonetse"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, fuzzy, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "Bitemewe. Ihitamo"
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, fuzzy, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "Bihuye neza Ubwoko Umwandiko wahinduwe ururimi"
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, fuzzy, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "Bitemewe. Ihitamo"
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, fuzzy, python-format
 msgid "compatibility mode translation: %s"
 msgstr "Bihuye neza Ubwoko Umwandiko wahinduwe ururimi"
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, fuzzy, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "Kitazwi Ihitamo"
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "Muyunguruzi..."
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, fuzzy, python-format
 msgid "`%s' failed (%d)"
 msgstr "`%s'Byanze"
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 #, fuzzy
 msgid "The error log is as follows:"
 msgstr "Ikosa LOG ni Nka"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "Inonosora..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 #, fuzzy
 msgid "All snippets are up to date..."
 msgstr "Hejuru Kuri Itariki"
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "Imiterere kugirango"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, fuzzy, python-format
 msgid "%s is up to date."
 msgstr "Hejuru Kuri Itariki"
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr ""
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 #, fuzzy
 msgid "Output would overwrite input file; use --output."
 msgstr "Guhindura Iyinjiza IDOSIYE Gukoresha Ibisohoka"
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr ""
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr ""
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "Gushyiramo"
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr ""
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "Inonosora..."
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 #, fuzzy
 msgid "warning: "
 msgstr "Iburira!"
 
 # starmath/source\smres.src:RID_ERR_IDENT.text
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 #, fuzzy
 msgid "error: "
 msgstr "IKOSA"
@@ -425,9 +439,9 @@ msgstr ""
 msgid "%s output to `%s'..."
 msgstr "%sIbisohoka Kuri"
 
-#: midi2ly.py:871
-#, fuzzy
-msgid "Convert MIDI to LilyPond source."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
 msgstr "Kuri Inkomoko"
 
 #: midi2ly.py:875
@@ -479,35 +493,59 @@ msgstr "buri Umwandiko Nka a"
 
 #: midi2ly.py:905
 #, fuzzy
-msgid "example"
+msgid "Examples"
 msgstr "Urugero:"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 #, fuzzy
 msgid "no files specified on command line."
 msgstr "Oya Idosiye ku Komandi: Umurongo"
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Porogaramu ni Kigenga ni ku i Na Urakaza neza Kuri Guhindura>> Na Cyangwa "
+"Gukwirakwiza Amakopi Bya Nka kugirango"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "Kwandika Ibisohoka Kuri"
+
+#: getopt-long.cc:140
 #, fuzzy, c-format
 msgid "option `%s' requires an argument"
 msgstr "Ihitamo"
 
-#: getopt-long.cc:145
+#: getopt-long.cc:144
 #, fuzzy, c-format
-msgid "option `%s' doesn't allow an argument"
+msgid "option `%s' does not allow an argument"
 msgstr "Ihitamo Kwemerera"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, fuzzy, c-format
 msgid "unrecognized option: `%s'"
 msgstr "Ihitamo"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, fuzzy, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "Sibyo Kuri Ihitamo"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, fuzzy, c-format
 msgid "programming error: %s"
 msgstr "Ikosa"
@@ -516,87 +554,76 @@ msgstr "Ikosa"
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, fuzzy, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "Urutonde Na: Imvugiro Izina:"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, fuzzy, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "Kitazwi"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, fuzzy, c-format
 msgid "accidental `%s' not found"
 msgstr "OYA Byabonetse"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, fuzzy, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "Gushaka Intego- nyuguti"
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "Mburabuzi Intego- nyuguti"
-
-#: all-font-metrics.cc:172
-#, fuzzy, c-format
-msgid "can't find default font: `%s'"
-msgstr "Gushaka Mburabuzi Intego- nyuguti"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, fuzzy, c-format
-msgid "(search path: `%s')"
-msgstr "(Gushaka Inzira"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Hejuru"
-
 #: apply-context-iterator.cc:31
 #, fuzzy
 msgid "\\applycontext argument is not a procedure"
 msgstr "\\aUmumaro"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "Guhindura>> Kuri"
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, fuzzy, c-format
 msgid "barcheck failed at: %s"
@@ -611,21 +638,21 @@ msgstr "a"
 msgid "unterminated beam"
 msgstr ""
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 #, fuzzy
 msgid "stem must have Rhythmic structure"
 msgstr "Imiterere"
 
-#: beam-engraver.cc:245
+#: beam-engraver.cc:246
 #, fuzzy
-msgid "stem doesn't fit in beam"
+msgid "stem does not fit in beam"
 msgstr "in"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr ""
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "Umurongo Byabonetse"
@@ -635,25 +662,25 @@ msgstr "Umurongo Byabonetse"
 msgid "removing beam with no stems"
 msgstr "Na: Birutwa"
 
-#: beam.cc:995
+#: beam.cc:1007
 #, fuzzy
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr "Oya Iboneza Byabonetse Gicurasi OYA Gushaka IMANURA"
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, fuzzy, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Isigamwanya Icyinjijwe Bivuye Kuri"
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "Guhindura>> Kuri"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "Gushaka Imvugiro"
 
 #. We could change the current translator's id, but that would make
@@ -686,7 +713,7 @@ msgstr ""
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, fuzzy, c-format
 msgid "clef `%s' not found"
 msgstr "OYA Byabonetse"
@@ -700,33 +727,33 @@ msgstr "Kitazwi IMISUSIRE"
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, fuzzy, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr "Igenamiterere Isigamwanya Iyongeragaciro 0"
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr ""
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, fuzzy, c-format
 msgid "program has no such type: `%s'"
 msgstr "Oya Ubwoko"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "Gushaka Cyangwa Kurema"
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "Gushaka Cyangwa Kurema"
 
 #: context.cc:276
@@ -736,7 +763,7 @@ msgstr ""
 
 #: context.cc:388
 #, fuzzy, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "Gushaka Cyangwa Kurema"
 
 #: custos.cc:77
@@ -744,18 +771,23 @@ msgstr "Gushaka Cyangwa Kurema"
 msgid "custos `%s' not found"
 msgstr "OYA Byabonetse"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "Kitazwi IMISUSIRE"
 
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "OYA Byabonetse"
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
 #, fuzzy
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "Gushaka Gutangira Bya"
 
 #: dynamic-engraver.cc:195
@@ -776,11 +808,7 @@ msgstr ""
 msgid "unterminated (de)crescendo"
 msgstr ""
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr ""
 
@@ -803,15 +831,15 @@ msgstr "Dosiye ntibonetse"
 msgid "adding font directory: %s"
 msgstr ""
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "Umwandiko"
@@ -843,48 +871,39 @@ msgstr "S Kyongewe"
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "Gushaka Gutangira Bya"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "Kitazwi IMISUSIRE"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 #, fuzzy
 msgid "decrescendo too small"
 msgstr "Gitoya"
 
-#: hairpin.cc:180
-#, fuzzy
-msgid "crescendo too small"
-msgstr "Gitoya"
-
-#: horizontal-bracket-engraver.cc:58
+#: horizontal-bracket-engraver.cc:59
 #, fuzzy
-msgid "don't have that many brackets"
+msgid "do not have that many brackets"
 msgstr "Udusodeko"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "Impugukirwa Itsinda Ibyabaye"
@@ -902,97 +921,102 @@ msgstr ""
 msgid "include files are not allowed in safe mode"
 msgstr "Gushyiramo Idosiye OYA"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, fuzzy, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "Gushaka IDOSIYE"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, fuzzy, c-format
+msgid "(search path: `%s')"
+msgstr "(Gushaka Inzira"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 #, fuzzy
 msgid "position unknown"
 msgstr "Ibirindiro Kitazwi"
 
-#: ligature-engraver.cc:95
+#: ligature-engraver.cc:93
 #, fuzzy
-msgid "can't find start of ligature"
+msgid "cannot find start of ligature"
 msgstr "Gushaka Gutangira Bya"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 #, fuzzy
 msgid "no right bound"
 msgstr "Oya Iburyo:"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 #, fuzzy
 msgid "already have a ligature"
 msgstr "a"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 #, fuzzy
 msgid "no left bound"
 msgstr "Oya Ibumoso:"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
 msgstr ""
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 #, fuzzy
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "Gicurasi OYA"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
 msgstr ""
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, fuzzy, c-format
 msgid "(load path: `%s')"
 msgstr "(Ibirimo Inzira"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, fuzzy, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Gushaka indangakintu Ubwoko Kugenzura... kugirango"
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 #, fuzzy
 msgid "perhaps a typing error?"
 msgstr "a Kwandika: Ikosa"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 #, fuzzy
 msgid "doing assignment anyway"
 msgstr "Igenera"
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, fuzzy, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "Kugenzura... kugirango Byanze Agaciro Bya Ubwoko"
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Izina: ni a Ijambo- banze"
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, fuzzy, c-format
 msgid "error at EOF: %s"
 msgstr "Ikosa ku"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "Bitemewe. Ihitamo"
 
-#: lily-parser-scheme.cc:89
-#, c-format
-msgid "Changing working directory to `%s'"
-msgstr ""
+#: lily-parser-scheme.cc:88
+#, fuzzy, c-format
+msgid "Changing working directory to: `%s'"
+msgstr "Dosiye ntibonetse"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "Gushaka IDOSIYE"
 
 # svtools/source\dialogs\prnsetup.src:STR_SVT_PRNDLG_PROCESSING.text
@@ -1001,21 +1025,21 @@ msgstr "Gushaka IDOSIYE"
 msgid "Processing `%s'"
 msgstr "Inonosora"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr ""
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "BIHUYE"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "Gushaka"
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -1026,7 +1050,7 @@ msgstr ""
 "Porogaramu ni Kigenga ni ku i Na Urakaza neza Kuri Guhindura>> Na Cyangwa "
 "Gukwirakwiza Amakopi Bya Nka kugirango"
 
-#: main.cc:123
+#: main.cc:122
 #, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
@@ -1038,7 +1062,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1047,137 +1071,135 @@ msgstr ""
 "ATARIIGIHARWE i Cyangwa A i kugirango Birenzeho Birambuye BYAKIRIWE a "
 "Gukoporora Kuri i IDOSIYE Bya Na: iyi Porogaramu NIBA OYA Kwandika"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr ""
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr ""
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 #, fuzzy
 msgid "generate PDF (default)"
 msgstr "Ibisohoka"
 
-#: main.cc:167
+#: main.cc:165
 #, fuzzy
 msgid "generate PNG"
 msgstr "Ipaji Ishusho"
 
-#: main.cc:168
+#: main.cc:166
 #, fuzzy
 msgid "generate PostScript"
 msgstr "Ibisohoka"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-#, fuzzy
-msgid "print this help"
-msgstr "Gucapa iyi Ifashayobora"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
 # wizards/source\formwizard\dbwizres.src:RID_DB_REPORT_WIZARD_START_+_71.text
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
 msgid "FIELD"
 msgstr "Umwanya"
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "Kwandika Umutwempangano Umwanya Kuri"
 
-#: main.cc:172
-msgid "DIR"
-msgstr ""
-
-#: main.cc:172
+#: main.cc:171
 #, fuzzy
 msgid "add DIR to search path"
 msgstr "Kongeramo Kuri Gushaka Inzira"
 
-#: main.cc:173
+#: main.cc:172
 #, fuzzy
 msgid "use FILE as init file"
 msgstr "Gukoresha Nka IDOSIYE"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "OYA Ibisohoka"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "Kwandika Ibisohoka Kuri"
 
-#: main.cc:180
+#: main.cc:179
 #, fuzzy
 msgid "generate a preview of the first system"
 msgstr "Ubwoko a() y'Ishusho Bya i Itangira Sisitemu"
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
+#: main.cc:183
 #, fuzzy
-msgid "print version number"
+msgid "show version number and exit"
 msgstr "Gucapa Verisiyo Umubare"
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1185,79 +1207,79 @@ msgid ""
 msgstr "C Na Ibindi"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr ""
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Na Cyangwa Bivuye"
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, fuzzy, c-format
 msgid "For more information, see %s"
 msgstr "Birenzeho Ibisobanuro"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Amahitamo:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr "Kuri"
 
-#: main.cc:308
+#: main.cc:309
 #, fuzzy, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "3. Ikurikiranyanyuguti kugirango"
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "Oya Igenamiterere"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "Oya Imvugiro"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "Guhindura>> Kuri"
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr ""
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "Guhindura>> Kuri"
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "Guhindura>> Kuri"
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr ""
 
 #: main.cc:415
@@ -1265,7 +1287,7 @@ msgstr ""
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1279,42 +1301,42 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 #, fuzzy
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "Na: Birutwa 2. Gusimbuka:%s"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 #, fuzzy
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "OYA Bya Gusimbuka:%s"
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 #, fuzzy
 msgid "single note ligature - skipping"
 msgstr "Intera muri Gusimbuka:%s"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 #, fuzzy
 msgid "prime interval within ligature -> skipping"
 msgstr "Intera muri Gusimbuka:%s"
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 #, fuzzy
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "Igihe- ngombwa Ntacyo Bya Gusimbuka:%s"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1322,7 +1344,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 #, fuzzy
 msgid "unexpected case fall-through"
 msgstr "Gihinguranya"
@@ -1342,11 +1364,7 @@ msgstr "0"
 msgid "no such MIDI instrument: `%s'"
 msgstr "Oya"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr ""
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, fuzzy, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr "Bya a"
@@ -1354,105 +1372,112 @@ msgstr "Bya a"
 # sfx2/source\appl\app.src:STR_ERR_NOFILE.text
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "Ntibishoboka gufungura idosiye$."
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "OYA Kwandika IDOSIYE"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, fuzzy, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "Kugenzura... Byanze Ikitezwe: Byabonetse"
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "ku Kinini"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "Kwirengagiza"
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, fuzzy, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "Impugukirwa OYA Byabonetse"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 # sfx2/source\appl\app.src:STR_ERR_NOFILE.text
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "Ntibishoboka gufungura idosiye$."
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "Gushaka Intego- nyuguti"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr ""
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "OYA a IDOSIYE"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1490,15 +1515,15 @@ msgstr "Ku ijana Gusubiramo"
 msgid "Track..."
 msgstr ""
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, fuzzy, c-format
 msgid "MIDI output to `%s'..."
 msgstr "Ibisohoka Kuri"
@@ -1507,23 +1532,23 @@ msgstr "Ibisohoka Kuri"
 msgid "unterminated phrasing slur"
 msgstr ""
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, fuzzy, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr "3. Ikurikiranyanyuguti kugirango"
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, fuzzy, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "Gushaka Gutangira Bya"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "Gushaka Gutangira Bya"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "By'imbere Ihitamo"
@@ -1533,52 +1558,52 @@ msgstr "By'imbere Ihitamo"
 msgid "not a grob name, `%s'"
 msgstr "a Izina:"
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 #, fuzzy
 msgid "Failed octave check, got: "
 msgstr "Kugenzura..."
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "Inonosora..."
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "Oya Imvugiro"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "Oya Imvugiro"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -1586,67 +1611,65 @@ msgid ""
 msgstr ""
 
 # sfx2/source\appl\app.src:STR_ERR_NOFILE.text
-#: relocate.cc:353
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "Relocation file %s\n"
+msgid "Relocation file: %s"
 msgstr "Ntibishoboka gufungura idosiye$."
 
-# sfx2/source\appl\app.src:STR_ERR_NOFILE.text
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "Ntibishoboka gufungura idosiye$."
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr ""
 
-#: rest.cc:143
+#: rest.cc:144
 #, fuzzy, c-format
 msgid "rest `%s' not found"
 msgstr "OYA Byabonetse"
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "Gushaka"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 #, fuzzy
 msgid "Music font has not been installed properly."
 msgstr "OYA"
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(Gushaka Inzira"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "in a"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
 #: script-engraver.cc:102
 #, fuzzy
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "Kuri"
 
 #: script-engraver.cc:103
@@ -1659,17 +1682,18 @@ msgstr "Imisobekere:"
 msgid "No spring between column %d and next one"
 msgstr "Rasoro hagati Inkingi Na Komeza>>"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr ""
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "Gushaka"
 
 #: source-file.cc:74
@@ -1681,62 +1705,62 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 #, fuzzy
 msgid "tremolo duration is too long"
 msgstr "Igihe- ngombwa ni"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "Impugukirwa Kuri Ubwoko"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "Ingano Kugenzura... kugirango"
 
-#: stem.cc:627
+#: stem.cc:641
 #, fuzzy, c-format
 msgid "flag `%s' not found"
 msgstr "Ibendera OYA Byabonetse"
 
-#: stem.cc:638
+#: stem.cc:652
 #, fuzzy, c-format
 msgid "flag stroke `%s' not found"
 msgstr "Ibendera Akarongo OYA Byabonetse"
 
-#: system.cc:178
+#: system.cc:180
 #, fuzzy, c-format
 msgid "Element count %d."
 msgstr "IBARA"
 
-#: system.cc:270
+#: system.cc:276
 #, fuzzy, c-format
 msgid "Grob count %d"
 msgstr "IBARA"
 
-#: text-spanner-engraver.cc:60
+#: text-spanner-engraver.cc:61
 #, fuzzy
-msgid "can't find start of text spanner"
+msgid "cannot find start of text spanner"
 msgstr "Gushaka Gutangira Bya Umwandiko"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 #, fuzzy
 msgid "already have a text spanner"
 msgstr "a Umwandiko"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 #, fuzzy
 msgid "unterminated text spanner"
 msgstr "Umwandiko"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr ""
 
@@ -1745,14 +1769,14 @@ msgstr ""
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, fuzzy, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "Igihe Isinya"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, fuzzy, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "Igihe Isinya IKIMENYETSO OYA Byabonetse Kuri Iriho Imibare IMISUSIRE"
@@ -1762,43 +1786,39 @@ msgstr "Igihe Isinya IKIMENYETSO OYA Byabonetse Kuri Iriho Imibare IMISUSIRE"
 msgid "unknown translator: `%s'"
 msgstr "Kitazwi Umusemuzi"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, fuzzy, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "Gushaka"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "Gushaka Gutangira Bya Umwandiko"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "a Umwandiko"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, fuzzy, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr "Imbanziriza Bya iyi Kuri Amabwiriza Bya i Byahiswemo IMISUSIRE"
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, fuzzy, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Igenamiterere Isigamwanya Iyongeragaciro"
@@ -1818,276 +1838,287 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Zeru 0"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "Gushaka Gutangira Bya Umwandiko"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 #, fuzzy
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "a"
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "a Umwandiko"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "Hejuru"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 #, fuzzy
 msgid "second argument must be pitch list"
 msgstr "Urutonde"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "Kuri in Ubwoko kugirango"
 
-#: parser.yy:1612
+#: parser.yy:1604
 #, fuzzy
 msgid "expecting string as script definition"
 msgstr "Ikurikiranyanyuguti Nka IYANDIKA Insobanuro"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, fuzzy, c-format
 msgid "not a duration: %d"
 msgstr "OYA a Igihe- ngombwa"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "Kuri in Ubwoko kugirango Ibisobanuro"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "Kuri in Ubwoko kugirango"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Iyinjiza Kuri"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 #, fuzzy
 msgid "EOF found inside a comment"
 msgstr "Byabonetse Mo Imbere a Icyo wongeraho"
 
-#: lexer.ll:290
+#: lexer.ll:288
 #, fuzzy
 msgid "\\maininput not allowed outside init files"
 msgstr "\\mOYA Hanze Idosiye"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, fuzzy, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "Cyangwa kidasobanuye Ikiranga"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 #, fuzzy
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Byabonetse ku Impera Bya a Umwanya"
 
-#: lexer.ll:561
+#: lexer.ll:559
 #, fuzzy
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Byabonetse ku Impera Bya a Umwanya"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, fuzzy, c-format
 msgid "invalid character: `%c'"
 msgstr "Sibyo Inyuguti"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, fuzzy, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "Kitazwi Ikurikiranyanyuguti"
 
-#: lexer.ll:882
-#, fuzzy, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Verisiyo"
+#: lexer.ll:880 lexer.ll:881
+#, c-format
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
+#: lexer.ll:881 lexer.ll:882
 #, fuzzy
-msgid "Consider updating the input with the convert-ly script"
+msgid "consider updating the input with the convert-ly script"
 msgstr "Ivugurura i Iyinjiza Na: i GUHINDURA IYANDIKA"
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr ""
 
 #: backend-library.scm:24
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "`%s'Byanze"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr ""
 
-#: backend-library.scm:110
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr ""
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "OYA a Igihe- ngombwa"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "Gushaka"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "Kitazwi IMISUSIRE"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "Gushaka Mburabuzi Intego- nyuguti"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "By'imbere Ihitamo"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "Inonosora..."
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr ""
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "Gushaka Mburabuzi Intego- nyuguti"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "Inonosora..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
-msgstr ""
+#: framework-ps.scm:349
+#, fuzzy, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr "Kuri"
 
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Kuri"
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2096,56 +2127,56 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "Izina ry'idosiye: OYA Imyanya"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "Umurongo Amataruka"
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "Kitazwi Umusemuzi"
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "Gushaka"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Ibisohoka Kuri"
 
@@ -2153,48 +2184,48 @@ msgstr "Ibisohoka Kuri"
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "Gushaka"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "Kitazwi"
 
@@ -2203,42 +2234,42 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "Gushaka Gutangira Bya"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "Kitazwi IMISUSIRE"
 
@@ -2246,16 +2277,64 @@ msgstr "Kitazwi IMISUSIRE"
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, fuzzy, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "Komandi: Na: Agaciro"
 
 #: to-xml.scm:190
-#, fuzzy
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "Byanze"
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "Garagaza Na Uburenganzira bw'umuhimbyi"
+
+#, fuzzy
+#~ msgid ""
+#~ "Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
+#~ "\n"
+#~ "Example usage:\n"
+#~ "\n"
+#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+#~ " lilypond-book --process='lilypond -I include' BOOK\n"
+#~ msgstr "0."
+
+#, fuzzy
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "Kuri Inkomoko"
+
+#, fuzzy
+#~ msgid "example"
+#~ msgstr "Urugero:"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "Mburabuzi Intego- nyuguti"
+
+#, fuzzy
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "Gushaka Mburabuzi Intego- nyuguti"
+
+#, fuzzy
+#~ msgid "crescendo too small"
+#~ msgstr "Gitoya"
+
+#, fuzzy
+#~ msgid "print this help"
+#~ msgstr "Gucapa iyi Ifashayobora"
+
+# sfx2/source\appl\app.src:STR_ERR_NOFILE.text
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "Ntibishoboka gufungura idosiye$."
+
+#, fuzzy
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Verisiyo"
+
 #, fuzzy
 #~ msgid "no one to print a tremolos"
 #~ msgstr "Oya Kuri Gucapa a"
@@ -2274,7 +2353,7 @@ msgstr "Byanze"
 #~ msgstr "Oya Kuri Gucapa a Gusubiramo"
 
 #, fuzzy
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "Gushaka Imvugiro"
 
 #, fuzzy
@@ -2312,7 +2391,7 @@ msgstr "Byanze"
 #~ msgstr "%s:IDOSIYE Ibigenga ni Birenzeho i"
 
 #, fuzzy
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "Gushaka ASCII Inyuguti"
 
 #, fuzzy
@@ -2328,7 +2407,7 @@ msgstr "Byanze"
 #~ msgstr "Inyuguti"
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "Gushaka Imvugiro"
 
 #, fuzzy
@@ -2359,14 +2438,6 @@ msgstr "Byanze"
 #~ msgid "command exited with value %d"
 #~ msgstr "Komandi: Na: Agaciro"
 
-#, fuzzy
-#~ msgid "Example:"
-#~ msgstr "Urugero:"
-
-#, fuzzy
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "Kuri Inkomoko"
-
 # Debug menu items
 #, fuzzy
 #~ msgid "debug"
@@ -2395,7 +2466,7 @@ msgstr "Byanze"
 
 # sfx2/source\appl\app.src:STR_ERR_NOFILE.text
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "Ntibishoboka gufungura idosiye$."
 
 #, fuzzy
@@ -2437,7 +2508,7 @@ msgstr "Byanze"
 #~ msgstr "Gukoresha in Ubwoko"
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "Kuri a Ku ijana Gusubiramo Bya iyi Uburebure"
 
 #, fuzzy
@@ -2515,7 +2586,7 @@ msgstr "Byanze"
 #~ msgstr "Ikosa"
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "Gushaka Intego- nyuguti"
 
 #, fuzzy
@@ -2555,7 +2626,7 @@ msgstr "Byanze"
 #~ msgstr "Ikosa"
 
 #, fuzzy
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "Hindura"
 
 #, fuzzy
@@ -2618,7 +2689,7 @@ msgstr "Byanze"
 #~ msgstr "Gumana: Byose Ibisohoka Ibisohoka Kuri bushyinguro"
 
 #, fuzzy
-#~ msgid "don't run LilyPond"
+#~ msgid "do not run LilyPond"
 #~ msgstr "Gukoresha"
 
 #, fuzzy
@@ -2705,13 +2776,9 @@ msgstr "Byanze"
 #~ msgstr "%sIbisohoka Kuri"
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "Gushaka IDOSIYE"
 
-#, fuzzy
-#~ msgid "Process LilyPond snippets in hybrid HTML, LaTeX or texinfo document"
-#~ msgstr "in Cyangwa Inyandiko"
-
 #, fuzzy
 #~ msgid "DIM"
 #~ msgstr "Byijimye"
@@ -2750,11 +2817,11 @@ msgstr "Byanze"
 #~ msgstr "Mbere"
 
 #, fuzzy
-#~ msgid "don't run lilypond"
+#~ msgid "do not run lilypond"
 #~ msgstr "Gukoresha"
 
 #, fuzzy
-#~ msgid "don't generate pictures"
+#~ msgid "do not generate pictures"
 #~ msgstr "Amashusho"
 
 #, fuzzy
@@ -2820,7 +2887,7 @@ msgstr "Byanze"
 #~ msgstr "urupapuro Ibisohoka Kuri"
 
 #, fuzzy
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "Gushaka Gutangira Bya"
 
 #, fuzzy
index 7a7100036aa21e1deac9cf9f401d9283f27f0e50..95774a1e74b838191e959200c33096584f49c682 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 1.7.26\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
-"PO-Revision-Date: 2003-08-23 13:30+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
+"PO-Revision-Date: 2006-12-23 16:16+0100\n"
 "Last-Translator: Martin Norbäck <d95mback@dtek.chalmers.se>\n"
 "Language-Team: Swedish <sv@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -71,146 +71,159 @@ msgid "Running %s..."
 msgstr "Kör %s..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "varning: %s\n"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Användning: %s [FLAGGA]... FIL"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "skriv utdata till FIL"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr ""
+"Rapportera programfel till %s\n"
+"Rapportera fel i översättningen till <sv@li.org>"
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Exempel:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, fuzzy, c-format, python-format
 msgid "warning: %s"
 msgstr "varning: %s\n"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, fuzzy, c-format, python-format
 msgid "error: %s"
 msgstr "fel: %s\n"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Distribueras under GNU General Public License."
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "INGEN GARANTI ges för programmet."
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "Behandlar \"%s\"..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "kan inte öppna fil: \"%s\""
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "kan inte hitta standardtypsnitt: \"%s\""
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Användning: %s [FLAGGA]... FIL"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "skriv utdata till FIL"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "FIL"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "visa garanti och copyright"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
+#, fuzzy
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+"Bearbeta LilyPond-stycken i ett hybriddokument i html, LaTex eller texinfo"
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Avslutar (%d)... "
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright © %s av"
@@ -226,7 +239,8 @@ msgstr ""
 
 #: lilypond-book.py:135
 #, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr "använd utdataformat FMT (texi [standard], texi-html, latex, html)"
 
 #: lilypond-book.py:138
@@ -234,6 +248,10 @@ msgstr "anv
 msgid "add DIR to include path"
 msgstr "lägg till KATALOG till sökvägen"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "KATALOG"
+
 #: lilypond-book.py:143
 #, fuzzy
 msgid "write output to DIR"
@@ -247,151 +265,151 @@ msgstr ""
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "var utförlig"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "visa garanti och copyright"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, fuzzy, python-format
 msgid "file not found: %s"
 msgstr "klav \"%s\" hittades inte"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, fuzzy, python-format
 msgid "Opening filter `%s'"
 msgstr "Öppnar rör \"%s\"..."
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "\"%s\" misslyckades (%d)"
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "Felloggen är följande:"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 #, fuzzy
 msgid "Writing snippets..."
 msgstr "Skriver \"%s\"..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 #, fuzzy
 msgid "Processing..."
 msgstr "Behandlar..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 #, fuzzy
 msgid "All snippets are up to date..."
 msgstr "lugn, %s är senaste versionen"
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "kan inte hitta standardtypsnitt: \"%s\""
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, fuzzy, python-format
 msgid "%s is up to date."
 msgstr "lugn, %s är senaste versionen"
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Skriver \"%s\"..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
 # här är det fråga om rensning av en temporärkatalog
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, fuzzy, python-format
 msgid "Reading %s..."
 msgstr "Rensar %s..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 #, fuzzy
 msgid "Dissecting..."
 msgstr "Listar \"%s\"..."
 
 # här är det fråga om rensning av en temporärkatalog
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, fuzzy, python-format
 msgid "Compiling %s..."
 msgstr "Rensar %s..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, fuzzy, python-format
 msgid "Processing include: %s"
 msgstr "Behandlar \"%s\"..."
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "Startar \"%s\""
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "kan inte skapa katalog: \"%s\""
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "varning: "
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "fel: "
 
@@ -406,10 +424,10 @@ msgstr "Avslutar... "
 msgid "%s output to `%s'..."
 msgstr "%s skrivet till \"%s\"..."
 
-#: midi2ly.py:871
-#, fuzzy
-msgid "Convert MIDI to LilyPond source."
-msgstr "Konvertera MIDI till LilyPond"
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "Konvertera mup till LilyPond"
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -453,34 +471,59 @@ msgstr "tolka all text som lyrik"
 
 #: midi2ly.py:905
 #, fuzzy
-msgid "example"
+msgid "Examples"
 msgstr "Exempel:"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "inga filer angivna på kommandoraden."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Det här är fri programvara. Den täcks av \"GNU General Public License\",\n"
+"och du får ändra och/eller distribuera kopior av den under vissa\n"
+"villkor. Kör \"%s --warranty\" för mer information.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "skriv utdata till FIL"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "flaggan \"%s\" kräver ett argument"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "flaggan \"%s\" tillåter inget argument"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "okänd flagga: \"%s\""
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "ogiltigt argument \"%s\" till flaggan \"%s\""
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, fuzzy, c-format
 msgid "programming error: %s"
 msgstr "programmeringsfel: "
@@ -489,86 +532,75 @@ msgstr "programmeringsfel: "
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, fuzzy, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "Lista av höjningar/säkningar måste börja med context-name: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr ""
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "höjning/säkning \"%s\" hittades inte"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "kan inte hitta typsnitt: \"%s\""
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "Läser in standardtypsnitt"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "kan inte hitta standardtypsnitt: \"%s\""
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(sökväg: \"%s\")"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Ger upp"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "kan inte ändra \"%s\" till \"%s\""
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -582,19 +614,20 @@ msgstr "har redan en balk"
 msgid "unterminated beam"
 msgstr "oavslutad balk"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "skaft måste ha en rytmisk struktur"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "skaftet passar inte i balken"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "balken startade här"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "Ingen lämplig radbrytning hittades"
@@ -604,24 +637,24 @@ msgstr "Ingen l
 msgid "removing beam with no stems"
 msgstr "balk har mindre än två synliga skaft"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "Ingen avståndsdata från %s till \"%s\""
 
 #: change-iterator.cc:23
 #, fuzzy, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "kan inte ändra \"%s\" till \"%s\""
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "kan inte hitta omgivningen \"%s\""
 
 #. We could change the current translator's id, but that would make
@@ -653,7 +686,7 @@ msgstr "icke avslutat ackordtremolo"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "klav \"%s\" hittades inte"
@@ -667,7 +700,7 @@ msgstr "ok
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, fuzzy, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
@@ -676,26 +709,26 @@ msgstr ""
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
 #, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "kunde inte hitta något typsnitt som uppfyller "
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, fuzzy, c-format
 msgid "program has no such type: `%s'"
 msgstr "Programmet har ingen sådan typ"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "kan inte hitta eller skapa: \"%s\""
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "kan inte hitta eller skapa \"%s\" kallad \"%s\""
 
 #: context.cc:276
@@ -705,7 +738,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "kan inte hitta eller skapa: \"%s\""
 
 #: custos.cc:77
@@ -713,17 +746,22 @@ msgstr "kan inte hitta eller skapa: \"%s\""
 msgid "custos `%s' not found"
 msgstr "custos \"%s\" hittades inte"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "okänd klusterstil: \"%s\""
 
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "paus \"%s\" hittades inte, "
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "kan inte hitta start på crescendo/diminuendo"
 
 #: dynamic-engraver.cc:195
@@ -743,11 +781,7 @@ msgstr "Cresc startade h
 msgid "unterminated (de)crescendo"
 msgstr "oavslutat crescendo/diminuendo"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "oavslutad utökare"
 
@@ -770,15 +804,15 @@ msgstr "kan inte skapa katalog: \"%s\""
 msgid "adding font directory: %s"
 msgstr "kan inte skapa katalog: \"%s\""
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "Oavslutat glissando."
@@ -811,46 +845,38 @@ msgstr "implicit \\%s tillagt"
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "kan inte hitta start på ligatur"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, fuzzy, c-format
 msgid "Unknown interface `%s'"
 msgstr "okänd klusterstil: \"%s\""
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "diminuendo för litet"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "crescendo för litet"
-
-#: horizontal-bracket-engraver.cc:58
+#: horizontal-bracket-engraver.cc:59
 #, fuzzy
-msgid "don't have that many brackets"
+msgid "do not have that many brackets"
 msgstr "Har inte så många klamrar"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "Motsägande notgrupphändelser."
@@ -869,93 +895,98 @@ msgstr "oavslutat bindestreck"
 msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "kan inte hitta fil: \"%s\""
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(sökväg: \"%s\")"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "okänd position"
 
-#: ligature-engraver.cc:95
-msgid "can't find start of ligature"
+#: ligature-engraver.cc:93
+msgid "cannot find start of ligature"
 msgstr "kan inte hitta start på ligatur"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "ingen högergräns"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 msgid "already have a ligature"
 msgstr "har redan en ligatur"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "ingen vänstergräns"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
 msgstr "oavslutad ligatur"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 #, fuzzy
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "ligatur får inte innehålla paus; ignorerar paus"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
 msgstr "ligaturen startade här"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(inläsningssökväg: \"%s\""
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, fuzzy, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "Kan inte hitta egenskapstypkontroll för \"%s\" (%s)"
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 #, fuzzy
 msgid "perhaps a typing error?"
 msgstr "Kanske har du gjort ett skrivfel?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 #, fuzzy
 msgid "doing assignment anyway"
 msgstr "Gör tilldelningen ändå."
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, fuzzy, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 "Typkontroll för \"%s\" misslyckades. Värde \"%s\" måste ha typen \"%s\""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Identifierarnamn är ett nyckelord: \"%s\""
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "fel vid filslut: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "kan inte hitta tecken som heter: \"%s\""
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "kan inte skapa katalog: \"%s\""
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, fuzzy, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "kan inte hitta fil: \"%s\""
 
 #: lily-parser-scheme.cc:125
@@ -963,21 +994,21 @@ msgstr "kan inte hitta fil: \"%s\""
 msgid "Processing `%s'"
 msgstr "Behandlar \"%s\"..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Tolkar..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "Krullparenteser matchar inte"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, fuzzy, c-format
 msgid "cannot find Voice `%s'"
 msgstr "kan inte hitta fil: \"%s\""
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -989,7 +1020,7 @@ msgstr ""
 "och du får ändra och/eller distribuera kopior av den under vissa\n"
 "villkor. Kör \"%s --warranty\" för mer information.\n"
 
-#: main.cc:123
+#: main.cc:122
 #, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
@@ -1001,7 +1032,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1019,136 +1050,134 @@ msgstr ""
 "detta program. Om inte, skriv till Free Software Foundation, Inc.,\n"
 "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
+#: main.cc:155
 #, fuzzy
-msgid "SYM=VAL"
+msgid "SYM[=VAL]"
 msgstr "NYCKEL=VÄRDE"
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "UTTR"
 
-#: main.cc:160
+#: main.cc:159
 #, fuzzy
 msgid "evaluate scheme code"
 msgstr "Kan inte evaluera Scheme i säkert läge"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 #, fuzzy
 msgid "generate DVI (tex backend only)"
 msgstr "skapa PDF-utdata"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 #, fuzzy
 msgid "generate PDF (default)"
 msgstr "skapa PDF-utdata"
 
-#: main.cc:167
+#: main.cc:165
 #, fuzzy
 msgid "generate PNG"
 msgstr "skapa PS.GZ"
 
-#: main.cc:168
+#: main.cc:166
 #, fuzzy
 msgid "generate PostScript"
 msgstr "skapa PostScript-utdata"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-# förklaring av flaggan -h
-#: main.cc:170
-#, fuzzy
-msgid "print this help"
-msgstr "denna hjälp"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "FÄLT"
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "skriv rubrikfält till BASNAMN.FÄLT"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "KATALOG"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "lägg till KATALOG till sökvägen"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "använd FIL som init-fil"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "skapa PostScript-utdata"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "skriv utdata till FIL"
 
-#: main.cc:180
+#: main.cc:179
 #, fuzzy
 msgid "generate a preview of the first system"
 msgstr "skapa en bild av det första systemet"
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "visa versionsnummer"
 
-#: main.cc:223
+#: main.cc:224
 #, fuzzy, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1156,81 +1185,81 @@ msgid ""
 msgstr "Copyright © %s av"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Användning: %s [FLAGGA]... FIL..."
 
-#: main.cc:252
+#: main.cc:253
 #, fuzzy, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Typsätt musik och/eller spela MIDI från FIL"
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr ""
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr ""
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Flaggor:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr ""
 "Rapportera programfel till %s\n"
 "Rapportera fel i översättningen till <sv@li.org>"
 
-#: main.cc:308
+#: main.cc:309
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr ""
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "inställningen finns inte: \"%s\""
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "omgivning finns inte: %s"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "kan inte ändra \"%s\" till \"%s\""
 
-#: main.cc:349
+#: main.cc:350
 #, fuzzy, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr "kan inte skapa katalog: \"%s\""
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "kan inte ändra \"%s\" till \"%s\""
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "kan inte ändra \"%s\" till \"%s\""
 
-#: main.cc:368
+#: main.cc:369
 #, fuzzy, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "kan inte skapa katalog: \"%s\""
 
 #: main.cc:415
@@ -1238,7 +1267,7 @@ msgstr "kan inte skapa katalog: \"%s\""
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1252,40 +1281,40 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "ligature med mindre än 2 huvuden -> skippar"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 #, fuzzy
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "kan inte bestämma tonhöjd för ligaturprimitiv -> skippar"
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 #, fuzzy
 msgid "single note ligature - skipping"
 msgstr "primintervall inom ligatur -> skippar"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr "primintervall inom ligatur -> skippar"
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 #, fuzzy
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "mensural ligature: längd ingen av L, B, S -> skippar"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1293,7 +1322,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr "föll igenom case oväntat"
 
@@ -1312,116 +1341,119 @@ msgstr "Mensural_ligature: (join_left == 0)"
 msgid "no such MIDI instrument: `%s'"
 msgstr "instrumentet finns inte: \"%s\""
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "tokig ton"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "kan inte öppna fil: \"%s\""
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "kan inte öppna fil: \"%s\""
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "Transponering med %s gör ändring större än två"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "För många krockande notkolumner. Ignorerar dem."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, fuzzy, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "nothuvud \"%s\" ej funnet"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "kan inte öppna fil: \"%s\""
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "kan inte hitta typsnitt: \"%s\""
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 #, fuzzy
 msgid "Drawing systems..."
 msgstr "Skapar stämmor..."
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "inte en PostScript-fil: \"%s\""
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1457,15 +1489,15 @@ msgstr "oavslutad procentrepris"
 msgid "Track..."
 msgstr "Spår... "
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI-utdata till \"%s\"..."
@@ -1474,23 +1506,23 @@ msgstr "MIDI-utdata till \"%s\"..."
 msgid "unterminated phrasing slur"
 msgstr "oavslutad fraseringsbåge"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "kan inte hitta start på pianopedal: \"%s\""
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, fuzzy, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "kan inte hitta start på pianopedal: \"%s\""
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "Okänd internt alternativ!"
@@ -1500,110 +1532,109 @@ msgstr "Ok
 msgid "not a grob name, `%s'"
 msgstr "Inte ett grob-namn, \"%s\"."
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "kan inte skapa katalog: \"%s\""
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "omgivning finns inte: %s"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "omgivning finns inte: %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
-#, fuzzy, c-format
-msgid "Relocation file %s\n"
-msgstr "kan inte öppna fil: \"%s\""
-
-#: relocate.cc:358
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "can't open file %s"
+msgid "Relocation file: %s"
 msgstr "kan inte öppna fil: \"%s\""
 
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "för många krockande pauser"
 
-#: rest.cc:143
+#: rest.cc:144
 #, fuzzy, c-format
 msgid "rest `%s' not found"
 msgstr "paus \"%s\" hittades inte, "
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "kan inte hitta \"%s\""
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 #, fuzzy
 msgid "Music font has not been installed properly."
 msgstr "Typsnitten är inte korrekt installerade. Avbryter"
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(sökväg: \"%s\")"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "Behöver musik i partitur"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 #, fuzzy
 msgid "errors found, ignoring music expression"
 msgstr "Fel funna/*, behandlar inte partitur*/"
@@ -1611,7 +1642,7 @@ msgstr "Fel funna/*, behandlar inte partitur*/"
 #. FIXME:
 #: script-engraver.cc:102
 #, fuzzy
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "Kan inte tolka artikulering \"%s\""
 
 #: script-engraver.cc:103
@@ -1624,17 +1655,18 @@ msgstr "Scheme-alternativ:"
 msgid "No spring between column %d and next one"
 msgstr "Ingen fjäder mellan kolumn %d och nästa"
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "oavslutad båge"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "kan inte hitta start på båge"
 
 #: source-file.cc:74
@@ -1646,58 +1678,58 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "tremololängd är för lång"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "Lägger till nothuvud till inkompatibel båge (typ = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "Konstig skaftstorlek; kolla efter smala balkar"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "flaggan \"%s\" hittades ej"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "flaggstrecket \"%s\" hittades inte"
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Elementantal %d."
 
-#: system.cc:270
+#: system.cc:276
 #, fuzzy, c-format
 msgid "Grob count %d"
 msgstr "Elementantal %d "
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "kan inte hitta start på textbryggare"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "har redan en textbryggare"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "oavslutad textbryggare"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "ensam båge"
 
@@ -1706,14 +1738,14 @@ msgstr "ensam b
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, fuzzy, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "Hittade underlig tidssignatur %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "tidssignatursymbol \"%s\" hittades inte: återgår till numrerad stil"
@@ -1723,43 +1755,39 @@ msgstr "tidssignatursymbol \"%s\" hittades inte: 
 msgid "unknown translator: `%s'"
 msgstr "okänd översättare: \"%s\""
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "kan inte hitta: \"%s\""
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "kan inte hitta start på textbryggare"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "har redan en textbryggare"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, fuzzy, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Vaticana_ligature_engraver: sätter `spacing-increment = %f': ptr=%ul"
@@ -1779,273 +1807,285 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Vaticana_ligature: (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "kan inte hitta start på textbryggare"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 #, fuzzy
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "Har redan en reprisbryggare. Stoppar den tidigare."
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "har redan en textbryggare"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "Ger upp"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 #, fuzzy
 msgid "second argument must be pitch list"
 msgstr "Andra argumentet måste vara en symbol"
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "Måste vara i textläge (Lyric mode) för sångtext"
 
-#: parser.yy:1612
+#: parser.yy:1604
 #, fuzzy
 msgid "expecting string as script definition"
 msgstr "Väntade sträng som skriptdefinition"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "inte en längd: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "Måste vara i notläge (Note mode) för noter"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "Måste vara i ackordläge (Chord mode) för ackord"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Öppnar rör \"%s\"..."
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "filslut hittat inuti en kommentar"
 
-#: lexer.ll:290
+#: lexer.ll:288
 #, fuzzy
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput förbjudet utanför init-filer"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "felaktig eller odefinierad identifierare: \"%s\""
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Krullparentes funnen i slutet på sångtext. Glömde du ett mellanslag?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 #, fuzzy
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Krullparentes funnen i slutet på sångtext. Glömde du ett mellanslag?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "ogiltigt tecken: \"%c\""
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "okänd \"escaped\" sträng: \"\\%s\""
 
-#: lexer.ll:882
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Felaktig lilypond-version: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+#, fuzzy
+msgid "consider updating the input with the convert-ly script"
 msgstr "Fundera på att uppdatera indata med skriptet \"convert-ly\""
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, fuzzy, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, fuzzy, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Startar \"%s\""
 
 #: backend-library.scm:24
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "\"%s\" misslyckades (%d)"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Skriver \"%s\"..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "Skriver \"%s\"..."
 
-#: backend-library.scm:156
-#, fuzzy, lisp-format
+#: backend-library.scm:145
+#, fuzzy, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "skriver rubrikfält \"%s\" till \"%s\"..."
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "inte en längd: %d"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "kan inte hitta omgivningen \"%s\""
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "okänd klusterstil: \"%s\""
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "kan inte hitta teckennummer: %d"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "okänd klusterstil: \"%s\""
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "Behandlar..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "Skriver \"%s\"..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "kan inte hitta teckennummer: %d"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "Skriver \"%s\"..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Kan inte tolka artikulering \"%s\""
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2054,57 +2094,57 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "filnamnet får inte innehålla mellanslag: \"%s\""
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "Beräknar radbrytningar..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "okänd översättare: \"%s\""
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "kan inte hitta: \"%s\""
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
 # här är det fråga om skrivning till en fil
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "beroenden skrivna till \"%s\"..."
 
@@ -2112,49 +2152,49 @@ msgstr "beroenden skrivna till \"%s\"..."
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
+#: music-functions.scm:213
 #, fuzzy
-msgid "More alternatives than repeats. Junking excess alternatives"
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr "Fler alternativ än repriser. Slänger överblivna alternativ."
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, fuzzy, lisp-format
+#: music-functions.scm:538
+#, fuzzy, scheme-format
 msgid "music expected: ~S"
 msgstr "väntade tomrum"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "kan inte hitta typsnitt: \"%s\""
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "okänd typsättning av höjning/sänkning: %s. Ignorered"
 
@@ -2163,42 +2203,42 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "kan inte hitta start på balk"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "okänd klusterstil: \"%s\""
 
@@ -2206,16 +2246,53 @@ msgstr "ok
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, fuzzy, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "kommandot avslutade med värde %d"
 
 #: to-xml.scm:190
-#, fuzzy
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "LaTeX misslyckades."
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "visa garanti och copyright"
+
+#, fuzzy
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "Konvertera MIDI till LilyPond"
+
+#, fuzzy
+#~ msgid "example"
+#~ msgstr "Exempel:"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "Läser in standardtypsnitt"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "kan inte hitta standardtypsnitt: \"%s\""
+
+#~ msgid "crescendo too small"
+#~ msgstr "crescendo för litet"
+
+# förklaring av flaggan -h
+#, fuzzy
+#~ msgid "print this help"
+#~ msgstr "denna hjälp"
+
+#~ msgid "silly pitch"
+#~ msgstr "tokig ton"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "kan inte öppna fil: \"%s\""
+
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Felaktig lilypond-version: %s (%s, %s)"
+
 #~ msgid "no one to print a tremolos"
 #~ msgstr "det finns ingen som kan skriva tremolon"
 
@@ -2238,7 +2315,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "no one to print a repeat brace"
 #~ msgstr "det finns ingen som kan skriva ett repristecken"
 
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "kan inte hitta omgivningen \"%s\""
 
 #~ msgid "Optimal demerits: %f"
@@ -2276,7 +2353,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr ""
 #~ "%s: TFM-fil har %u parametrar, vilket är mer än de %u jag kan hantera"
 
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "kan inte hitta ASCII-tecken: %d"
 
 #~ msgid "no one to print a tuplet start bracket"
@@ -2295,16 +2372,12 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "Fler alternativ än repriser. Slänger överblivna alternativ."
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "kan inte hitta omgivningen \"%s\""
 
 #~ msgid "lilylib module"
 #~ msgstr "lilylib-modul"
 
-#, fuzzy
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Användning: %s [FLAGGA]... FIL"
-
 #~ msgid "Opening pipe `%s'"
 #~ msgstr "Öppnar rör \"%s\"..."
 
@@ -2339,13 +2412,6 @@ msgstr "LaTeX misslyckades."
 #~ msgid "command exited with value %d"
 #~ msgstr "kommandot avslutade med värde %d"
 
-#~ msgid "Example:"
-#~ msgstr "Exempel:"
-
-#, fuzzy
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "Konvertera mup till LilyPond"
-
 #~ msgid "debug"
 #~ msgstr "felsökningsutdata"
 
@@ -2372,7 +2438,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "Skriver \"%s\"..."
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "kan inte öppna fil: \"%s\""
 
 #, fuzzy
@@ -2409,7 +2475,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "kan inte skapa katalog: \"%s\""
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "Vet inte hur en procentrepris av denna längd ska hanteras."
 
 #~ msgid "lilypond -e EXPR means:"
@@ -2479,7 +2545,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "icke-fatalt fel: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "kan inte hitta typsnitt: \"%s\""
 
 #, fuzzy
@@ -2522,7 +2588,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "Programming error: "
 #~ msgstr "programmeringsfel: "
 
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "Kan inte byta översättare, jag är redan där"
 
 #, fuzzy
@@ -2539,7 +2605,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "Huh?  Got %d, expected %d characters"
 #~ msgstr "Öh? Fick %d, väntade %d tecken"
 
-#~ msgid "Don't you want polyphonic voices instead?"
+#~ msgid "Donnot you want polyphonic voices instead?"
 #~ msgstr "Vill du ha polyfoniska stämmor istället?"
 
 #~ msgid "No volta spanner to end"
@@ -2558,11 +2624,11 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "FIXA: tonartsbytessammanslagning"
 
 #, fuzzy
-#~ msgid "kpathsea can't find %s file: `%s'"
+#~ msgid "kpathsea cannot find %s file: `%s'"
 #~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
 
 #, fuzzy
-#~ msgid "kpathsea can't find file: `%s'"
+#~ msgid "kpathsea cannot find file: `%s'"
 #~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
 
 #, fuzzy
@@ -2578,7 +2644,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "skapa PNG-sidbilder"
 
 #, fuzzy
-#~ msgid "don't generate full pages"
+#~ msgid "do not generate full pages"
 #~ msgstr "skapa inte bilder"
 
 #, fuzzy
@@ -2601,10 +2667,6 @@ msgstr "LaTeX misslyckades."
 #~ msgid "kpathsea can not find TFM file: `%s'"
 #~ msgstr "Kpathsea kan inte hitta TFML-fil \"%s\""
 
-#, fuzzy
-#~ msgid "Cannot switch translators, I'm there already"
-#~ msgstr "Kan inte byta översättare, jag är redan där"
-
 #, fuzzy
 #~ msgid "Converting to `~a.ps'..."
 #~ msgstr "Skriver \"%s\"..."
@@ -2626,7 +2688,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "keep all output, output to directory %s.dir"
 #~ msgstr "behåll all utdata, utdata till katalogen %s.dir"
 
-#~ msgid "don't run LilyPond"
+#~ msgid "do not run LilyPond"
 #~ msgstr "kör inte LilyPond"
 
 #~ msgid "produce MIDI output only"
@@ -2699,16 +2761,12 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "%s skrivet till \"%s\"..."
 
 #, fuzzy
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "kan inte hitta fil: \"%s\""
 
 #~ msgid " 1998--2005"
 #~ msgstr " 1998-2003"
 
-#~ msgid "Process LilyPond snippets in hybrid html, LaTeX or texinfo document"
-#~ msgstr ""
-#~ "Bearbeta LilyPond-stycken i ett hybriddokument i html, LaTex eller texinfo"
-
 #~ msgid "DIM"
 #~ msgstr "DIM"
 
@@ -2744,7 +2802,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "prepend PREF before each -M dependency"
 #~ msgstr "lägg till PREF före varje beroende angett med -M"
 
-#~ msgid "don't run lilypond"
+#~ msgid "do not run lilypond"
 #~ msgstr "kör inte lilypond"
 
 #~ msgid "strip all lilypond blocks from output"
@@ -2898,7 +2956,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "from musical definition: %s"
 #~ msgstr "från musikdefinition: %s"
 
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr "kan inte hitta start på fraseringsbåge"
 
 #~ msgid "unterminated pedal bracket"
@@ -2999,7 +3057,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "EOF i en sträng"
 
 # det handlar om mmap här
-#~ msgid "can't map file"
+#~ msgid "cannot map file"
 #~ msgstr "kan inte göra \"mmap\" på filen"
 
 #~ msgid "<stdin>"
@@ -3074,7 +3132,7 @@ msgstr "LaTeX misslyckades."
 #~ msgstr "Textbryggare för liten"
 
 #~ msgid ""
-#~ "Can't find property type-check for `%s'.  Perhaps you made a typing "
+#~ "Cannot find property type-check for `%s'.  Perhaps you made a typing "
 #~ "error? Doing assignment anyway."
 #~ msgstr ""
 #~ "Kan inte hitta egenskapstypkontroll för \"%s\". Kanske har du gjort ett "
@@ -3086,7 +3144,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "Expecting %d arguments"
 #~ msgstr "Väntade %d argument"
 
-#~ msgid "Can't specify direction for this request"
+#~ msgid "Cannot specify direction for this request"
 #~ msgstr "Kan inte ange riktning för denna förfrågan"
 
 #~ msgid "Oldest supported input version: %s"
@@ -3136,7 +3194,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "enable debugging output"
 #~ msgstr "slå på felsökningsutdata"
 
-#~ msgid "don't output tuplets, double dots or rests, smallest is 32"
+#~ msgid "do not output tuplets, double dots or rests, smallest is 32"
 #~ msgstr "mata inte ut tupler, dubbelpunkteringar eller pauser, minsta är 32"
 
 #~ msgid "set FILE as default output"
@@ -3145,13 +3203,13 @@ msgstr "LaTeX misslyckades."
 #~ msgid "be quiet"
 #~ msgstr "var tyst"
 
-#~ msgid "don't output rests or skips"
+#~ msgid "do not output rests or skips"
 #~ msgstr "mata inte ut pauser eller hopp"
 
 #~ msgid "set smallest duration"
 #~ msgstr "ställ in minsta längd"
 
-#~ msgid "don't timestamp the output"
+#~ msgid "do not timestamp the output"
 #~ msgstr "tidsstämpla inte utdata"
 
 #~ msgid "assume no double dotted notes"
@@ -3193,7 +3251,7 @@ msgstr "LaTeX misslyckades."
 #~ msgid "invalid number of tracks"
 #~ msgstr "ogiltigt antal spår"
 
-#~ msgid "can't handle non-metrical time"
+#~ msgid "cannot handle non-metrical time"
 #~ msgstr "kan inte hantera icke-metrisk tid"
 
 #~ msgid "Junking note-end event: channel = %d, pitch = %d"
index a6321e44288bc0c3137e955357cbebed5535961a..127059a46807a6eef80bd35960b9bf2ba073727c 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.3.21\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2005-03-14 04:59+0200\n"
 "Last-Translator: Olcay Yıldırım <olcayyildirim2003@yahoo.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -73,155 +73,162 @@ msgid "Running %s..."
 msgstr "%s çalıştırılıyor..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "uyarı: %s"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "Kullanım: %s (SEÇENEKLER)... DOSYA"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "çıktıyı DOSYAya yaz"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr ""
+"Yazılım hatalarını %s adresine,\n"
+"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin."
+
 #: convert-ly.py:41
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "Örnek:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "uyarı: %s"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr "hata: %s"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "GNU Genel Kamu Lisansı şartları uyarınca dağıtılır."
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "HİÇBİR GARANTİ  ile gelmez."
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr ""
 
 #: convert-ly.py:166
-msgid "error while converting"
+msgid "Error while converting"
 msgstr ""
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
 msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, fuzzy, python-format
 msgid "Processing `%s'... "
 msgstr "`%s' işleniyor..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "dosya açılamıyor: `%s'"
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "%s için biçem saptanamıyor"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "Kullanım: %s (SEÇENEKLER)... DOSYA"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "çıktıyı DOSYAya yaz"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "DOSYA"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "garantiyi ve telif hakkını göster"
 
-#: lilypond-book.py:70
+#  # FIXME
+#  # do -P or -p by default?
+#  #help_summary = _ ("Run LilyPond using LaTeX for titling")
+#: lilypond-book.py:71
 #, fuzzy
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
-"LilyPond'un küçük  parçalarını karma HTML, LaTeX ya da texinfo belgelerinde\n"
-"çalıştırır. \n"
-" Örnek kullanım:\n"
-"\n"
-"    lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" KİTAP\n"
-"    lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\"KİTAP\n"
-"    lilypond-book --process='lilypond -I include' KİTAP\n"
-"\n"
+"LilyPond'un küçük parçalarını karma HTML, LaTeX ya da texinfo belgesinde işle"
 
-#: lilypond-book.py:86
+#: lilypond-book.py:78
+msgid "BOOK"
+msgstr ""
+
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Mevcut (%d)..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Telif hakkı (c) %s tarafından"
@@ -236,13 +243,18 @@ msgstr "küçük parçaları [convert-ly -n -] SÜZGEÇi aracılığıyla borula
 
 #: lilypond-book.py:135
 #, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr "EXT (texi [öntanımlı], texi-html, latex, html) çıktı biçemini kullan"
 
 #: lilypond-book.py:138
 msgid "add DIR to include path"
 msgstr "içerim yollarına DIR'ı (DİZİN) ekle"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "DIR (DİZİN)"
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr "çıktıyı DIR'a (DİZİN) yaz"
@@ -255,145 +267,145 @@ msgstr "KOMUT"
 msgid "process ly_files using COMMAND FILE..."
 msgstr "KOMUT DOSYASInı kullanarak ly_files'ı işle..."
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "daha fazla bilgi ver"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "garantiyi ve telif hakkını göster"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr "dosya bulunamadı: %s"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, fuzzy, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "artık kullanılmayan ly-seçeneği kullanıldı: %s"
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, fuzzy, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr "uyumluluk kipi çevirisi: %s"
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "artık kullanılmayan ly-seçeneği kullanıldı: %s"
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr "uyumluluk kipi çevirisi: %s"
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "bilinmeyen ly seçeneği yok sayılıyor: %s"
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr "`%s' süzgeci açılıyor"
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "`%s' başarısız (%d)"
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "Hata günlüğü aşağıdaki gibidir:"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr "Küçük parçalar yazılıyor..."
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "İşleniyor..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr "Bütün küçük parçalar güncellenmiştir..."
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, fuzzy, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "%s için biçem saptanamıyor"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, fuzzy, python-format
 msgid "%s is up to date."
 msgstr "Bütün küçük parçalar güncellenmiştir..."
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "`%s' yazılıyor..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr "Çıktı girdi dosyasının üzerine yazılacak; --output'u kullan."
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr "%s okunuyor..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr "Açımlanıyor..."
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr "%s derleniyor..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr "İçerim işleniyor: %s"
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, fuzzy, python-format
 msgid "Removing `%s'"
 msgstr "`%s' çağrılıyor"
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, fuzzy, python-format
 msgid "Writing fonts to %s..."
 msgstr "`%s' yazılıyor..."
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr ""
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "uyarı:"
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "hata: "
 
@@ -406,12 +418,10 @@ msgstr "Mevcut ..."
 msgid "%s output to `%s'..."
 msgstr "`%s' çıktısı`%s'ye..."
 
-#  temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
-#  original_dir = os.getcwd ()
-#  keep_temp_dir_p = 0
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
-msgstr "MIDI'yi LilyPond kaynağına dönüştür."
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "mup'ı Lilypond kaynağına dönüştür."
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -456,34 +466,60 @@ msgstr "her metne şarkı sözü muamelesi yap"
 
 #: midi2ly.py:905
 #, fuzzy
-msgid "example"
+msgid "Examples"
 msgstr "Örnek:"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "komut satırında hiçbir dosya belirtilmedi."
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, fuzzy, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+"Bu program serbest yazılımdır. GNU Genel Kamu Lisansı tarafından\n"
+"korunmakta olan bu yazılımı belli şartlar altında değiştirebilir\n"
+"ve/veya kopyalarını dağıtabilirsiniz.  Daha fazla\n"
+"bilgi için 'lilypond --warranty' komutunu çalıştırın.\n"
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "çıktıyı DOSYAya yaz"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "`%s' seçeneği bir argüman gerektirir"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "`%s' seçeneği argüman kabul etmez"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "tanınmayan seçenek: `%s'"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "`%s' seçeneğine `%s' geçersiz argümanı"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr "programlama hatası: %s"
@@ -493,86 +529,75 @@ msgstr "programlama hatası: %s"
 msgid "continuing, cross fingers"
 msgstr "Devam ediliyor; parmaklar çaprazlanıyor"
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, fuzzy, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "Rastlantı dizme listesi context-name (bağlam adı) ile başlamalıdır: %s"
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "bilinmeyen rastlantı yok sayılıyor: %s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "rastlantısal `%s' bulunamadı"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "yazı tipi bulunamıyor: `%s'"
 
-#: all-font-metrics.cc:165
-#, fuzzy
-msgid "loading default font"
-msgstr "Öntanımlı yazı tipi yükleniyor "
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(arama yolu: `%s')"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-#, fuzzy
-msgid "giving up"
-msgstr "Vazgeçiliyor"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr "\\applycontext (uygulamabağlamı) argümanı bir işlev değil"
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, fuzzy, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr "`%s' `%s'ye dönüştürülemiyor "
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -586,19 +611,20 @@ msgstr "zaten bir ışın var"
 msgid "unterminated beam"
 msgstr "sonlandırılmamış ışın"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr "gövdenin Rhythmic yapısı olmalı"
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+#, fuzzy
+msgid "stem does not fit in beam"
 msgstr "gövde ışınla uyumlu değil"
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr "ışın burada başlatıldı"
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "Hiçbir uygulanabilir satır bölünmesi bulunamadı"
@@ -608,26 +634,26 @@ msgstr "Hiçbir uygulanabilir satır bölünmesi bulunamadı"
 msgid "removing beam with no stems"
 msgstr "ikiden az gövdesi olan ışın kaldırılıyor"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 "hiçbir geçerli başlangıç yapılandırması bulunamadı: uygun ışın eğimi "
 "bulunamayabilir"
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr "%s'den `%sy'e kadar hiçbir boşluk girişi yok"
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "`%s' `%s'ye dönüştürülemiyor "
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
 #, fuzzy
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr "`%s'nin bağlamı bulunamıyor"
 
 #. We could change the current translator's id, but that would make
@@ -659,7 +685,7 @@ msgstr "sonlandırılmamış akort tremolosu"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr ""
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "`%s' anahtarı bulunamadı"
@@ -673,7 +699,7 @@ msgstr "bilinmeyen küme tarzı `%s'"
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, fuzzy, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
@@ -682,26 +708,26 @@ msgstr ""
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr ""
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, fuzzy, c-format
 msgid "program has no such type: `%s'"
 msgstr "Programın böyle bir türü yok: `%s'"
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, fuzzy, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr "`%2$s' adlı`%1$s' bulunamıyor ya da oluşturulamıyor"
 
 #: context.cc:213
 #, fuzzy, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr "`%2$s' adlı`%1$s' bulunamıyor ya da oluşturulamıyor"
 
 #: context.cc:276
@@ -711,7 +737,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr "bulunamıyor ya da oluşturulamıyor: `%s'"
 
 #: custos.cc:77
@@ -719,17 +745,22 @@ msgstr "bulunamıyor ya da oluşturulamıyor: `%s'"
 msgid "custos `%s' not found"
 msgstr "`%s'nin custosu bulunamadı"
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, fuzzy, c-format
 msgid "Unknown event class %s"
 msgstr "Bilinmeyen arabirim `%s'"
 
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "`%s' durağı bulunamadı"
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "(de)kreşendonun başlangıcı bulunamıyor"
 
 #: dynamic-engraver.cc:195
@@ -749,11 +780,7 @@ msgstr "Cresc buradan başlatıldı"
 msgid "unterminated (de)crescendo"
 msgstr "sonlandırılmamış (de)kreşendo"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr "sonlandırılmamış genişletici"
 
@@ -776,15 +803,15 @@ msgstr "dosya bulunamadı: %s"
 msgid "adding font directory: %s"
 msgstr ""
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 #, fuzzy
 msgid "unterminated glissando"
 msgstr "Sonlandırılmamaış glissando."
@@ -816,46 +843,38 @@ msgstr "örtük \\%s eklendi"
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "bağın başlangıcı bulunamıyor"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr "Bilinmeyen arabirim `%s'"
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "dekreşendo çok küçük"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "kreşendo çok küçük"
-
-#: horizontal-bracket-engraver.cc:58
+#: horizontal-bracket-engraver.cc:59
 #, fuzzy
-msgid "don't have that many brackets"
+msgid "do not have that many brackets"
 msgstr "O kadar çok köşeli ayraç yok"
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 #, fuzzy
 msgid "conflicting note group events"
 msgstr "Uyuşmayan nota grubu olayları."
@@ -872,93 +891,98 @@ msgstr "sonlandırılmamış kısa çizgi; kaldırılıyor"
 msgid "include files are not allowed in safe mode"
 msgstr "güvenli kipte dosyaların içerilmesine izin verilmiyor"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "dosya bulunamıyor: `%s'"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(arama yolu: `%s')"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "konum bilinmiyor"
 
-#: ligature-engraver.cc:95
-msgid "can't find start of ligature"
+#: ligature-engraver.cc:93
+msgid "cannot find start of ligature"
 msgstr "bağın başlangıcı bulunamıyor"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "hiçbir doğru bağ yok"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 msgid "already have a ligature"
 msgstr "zaten bir bağ var"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "arta kalan bağ yok"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
 msgstr "sonlandırılmamış bağ"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "gerisini yok sayıyor: bağ gerisini içermeyebilir"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
 msgstr "bağ buradan başlatıldı"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(yolu yükle: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, fuzzy, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr "`%s' (%s) için nitelik tür-denetimi bulunamıyor."
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 #, fuzzy
 msgid "perhaps a typing error?"
 msgstr "Galiba bir daktilo hatası yaptınız?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 #, fuzzy
 msgid "doing assignment anyway"
 msgstr "Görev yine de yapılıyor."
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, fuzzy, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 "`%s'  için yapılan tür denetimi başarısız oldu; `%s'nin değeri `%s' türünden "
 "olmalı"
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, fuzzy, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "Tanıtıcı adı bir anahtar kelime: `%s' "
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "EOF'ta hata: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, fuzzy, c-format
 msgid "deprecated function called: %s"
 msgstr "artık kullanılmayan ly-seçeneği kullanıldı: %s"
 
-#: lily-parser-scheme.cc:89
-#, c-format
-msgid "Changing working directory to `%s'"
-msgstr ""
+#: lily-parser-scheme.cc:88
+#, fuzzy, c-format
+msgid "Changing working directory to: `%s'"
+msgstr "dosya bulunamadı: %s"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr "init dosyası bulunamıyor: `%s'"
 
 #: lily-parser-scheme.cc:125
@@ -966,21 +990,21 @@ msgstr "init dosyası bulunamıyor: `%s'"
 msgid "Processing `%s'"
 msgstr "`%s' işleniyor..."
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "Ayrıştırılıyor..."
 
-#: lily-parser.cc:126
+#: lily-parser.cc:127
 #, fuzzy
-msgid "braces don't match"
+msgid "braces do not match"
 msgstr "Ayraçlar eşleşmiyor"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr "`%s' Sesi bulunamıyor"
 
-#: main.cc:117
+#: main.cc:116
 #, fuzzy, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -993,7 +1017,8 @@ msgstr ""
 "ve/veya kopyalarını dağıtabilirsiniz.  Daha fazla\n"
 "bilgi için 'lilypond --warranty' komutunu çalıştırın.\n"
 
-#: main.cc:123
+#: main.cc:122
+#, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1004,7 +1029,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -1024,130 +1049,130 @@ msgstr ""
 "Free Software Foundation, Inc., 59 Temple Place - 330Suite \n"
 "Boston, MA 02111 - 1307 , USA adresine yazın. \n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr ""
 
-#: main.cc:154
+#: main.cc:153
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 
-#: main.cc:156
+#: main.cc:155
 #, fuzzy
-msgid "SYM=VAL"
+msgid "SYM[=VAL]"
 msgstr "KEY=VAL"
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "EXPR"
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr ""
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr ""
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr ""
 
-#: main.cc:164
+#: main.cc:163
 #, fuzzy
 msgid "generate DVI (tex backend only)"
 msgstr "PDF üretir (öntanımlı)"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr "PDF üretir (öntanımlı)"
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr "PNG üretir"
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr "PostScript üretir"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr ""
 
-#: main.cc:170
-msgid "print this help"
-msgstr "bu yardımı yazdır"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "ALAN"
 
-#: main.cc:171
+#: main.cc:169
 #, fuzzy
-msgid "dump a header field to file BASENAME.FIELD"
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr "başlık alanını TEMELAD.ALANa yaz"
 
-#: main.cc:172
-msgid "DIR"
-msgstr "DIR (DİZİN)"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "arama yoluna DİZİN'i ekle"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr "DOSYAyı init dosyası olarak kullanır"
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 #, fuzzy
 msgid "do not generate printed output"
 msgstr "PostScript çıktısı üretme"
 
-#: main.cc:179
+#: main.cc:178
 #, fuzzy
 msgid "write output to FILE (suffix will be added)"
 msgstr "çıktıyı DOSYAya yaz"
 
-#: main.cc:180
+#: main.cc:179
 #, fuzzy
 msgid "generate a preview of the first system"
 msgstr "ilk sistemin bir resmini yap"
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "sürüm numarasını yazdır"
 
-#: main.cc:223
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1158,81 +1183,81 @@ msgstr ""
 
 #  No version number or newline here.  It confuses help2man.
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, fuzzy, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Kullanım: %s [SEÇENEKLER]... DOSYA..."
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Müziği diz ve/ya da DOSYAdan MIDIyi üret."
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond güzel müzik notasyonları üretir."
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr "Daha fazla bilgi için, %s'e bakın"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "Seçenekler:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr ""
 "Yazılım hatalarını %s adresine,\n"
 "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin."
 
-#: main.cc:308
+#: main.cc:309
 #, fuzzy, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "Piano pedalları için 3 dizgeye ihtiyaç duyar. Hiç pedal yapılmadı."
 
-#: main.cc:322
+#: main.cc:323
 #, fuzzy, c-format
 msgid "no such user: %s"
 msgstr "böyle bir ayar yok: `%s'"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr ""
 
-#: main.cc:339
+#: main.cc:340
 #, fuzzy, c-format
 msgid "no such group: %s"
 msgstr "böyle bir bağlam yok: %s"
 
-#: main.cc:341
+#: main.cc:342
 #, fuzzy, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "`%s' `%s'ye dönüştürülemiyor "
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr ""
 
-#: main.cc:356
+#: main.cc:357
 #, fuzzy, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "`%s' `%s'ye dönüştürülemiyor "
 
-#: main.cc:362
+#: main.cc:363
 #, fuzzy, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "`%s' `%s'ye dönüştürülemiyor "
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr ""
 
 #: main.cc:415
@@ -1240,7 +1265,7 @@ msgstr ""
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1254,40 +1279,40 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "2 taneden az kafalı bağ -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 #, fuzzy
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr "ilkel bağın perdesi saptanamıyor -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 #, fuzzy
 msgid "single note ligature - skipping"
 msgstr "bağ içinde ana duruş -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr "bağ içinde ana duruş -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 #, fuzzy
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "mensural bağ: süre L, B, S' den hiçbiri değil -> atlanıyor"
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1295,7 +1320,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr "beklenmedik durum başarısızlığı"
 
@@ -1314,116 +1339,119 @@ msgstr "Mensural_bağ: [katılma_sol == 0]"
 msgid "no such MIDI instrument: `%s'"
 msgstr "böyle bir MIDI aracı yok: `%s'"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr "saçma perde"
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, fuzzy, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr "Deneysel: geçici olarak bir kanala ince akort yapılıyor (%d cents)."
 
 #: midi-stream.cc:28
 #, fuzzy, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "dosya açılamıyor: `%s'"
 
 #: midi-stream.cc:44
 #, fuzzy, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "dosya yazılamıyor. `%s'"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, fuzzy, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "oktav denetimi başarısız; beklenen %s, elde edilen: %s"
 
-#: music.cc:208
+#: music.cc:207
 #, fuzzy, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr "%s ile transpozisyon ikiden büyük değişikliğe yol açar"
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 #, fuzzy
 msgid "ignoring too many clashing note columns"
 msgstr "Çatışan notasütunları çok fazla. Yok sayılıyor."
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, fuzzy, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "'%s'nin nota kafası bulunamadı"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "dosya açılamıyor: `%s'"
 
 #: open-type-font.cc:37
 #, fuzzy, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "yazı tipi bulunamıyor: `%s'"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr ""
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
+#: open-type-font.cc:173 open-type-font.cc:297
 #, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr ""
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr ""
 
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
 #  no ps header?
-#: pango-font.cc:215
+#: pango-font.cc:224
 #, fuzzy, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "bir PostScript dosyası değil: `%s'"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1458,15 +1486,15 @@ msgstr "sonlandırılmamaış yüzde tekrarı"
 msgid "Track..."
 msgstr "İz... "
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "MIDI çıktısı `%s'ye..."
@@ -1475,23 +1503,23 @@ msgstr "MIDI çıktısı `%s'ye..."
 msgid "unterminated phrasing slur"
 msgstr "sonlandırılmamış, melodiyi ayrıştırarak çalan ses kaydırma imi"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, fuzzy, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr "Piano pedalları için 3 dizgeye ihtiyaç duyar. Hiç pedal yapılmadı."
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "piano pedalının başlangıcı bulunamıyor: `%s'"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "piyano pedalı köşeli ayracının başlangıcı bulunamıyor: '%s'"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, fuzzy, c-format
 msgid "no such internal option: %s"
 msgstr "Bilinmeyen iç seçenek: %s"
@@ -1501,117 +1529,116 @@ msgstr "Bilinmeyen iç seçenek: %s"
 msgid "not a grob name, `%s'"
 msgstr "Bir grob adı değil, '%s'."
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr "Oktav denetimi başarısız, alındı: "
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "`%s' yazılıyor..."
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "böyle bir bağlam yok: %s"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "böyle bir bağlam yok: %s"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "Relocation file %s\n"
+msgid "Relocation file: %s"
 msgstr "dosya açılamıyor: `%s'"
 
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "dosya açılamıyor: `%s'"
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr "çatışan duraklar çok fazla"
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr "`%s' durağı bulunamadı"
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, fuzzy, c-format
 msgid "cannot find `%s'"
 msgstr "`%s' bulunamıyor"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 #, fuzzy
 msgid "Music font has not been installed properly."
 msgstr "Müzik yazıtipi uygun biçimde yüklenmedi.  Durduruluyor"
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, fuzzy, c-format
 msgid "Search path `%s'"
 msgstr "(arama yolu: `%s')"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr ""
+
+#: score.cc:225
 #, fuzzy
 msgid "already have music in score"
 msgstr "Notada zaten müzik var"
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
 #: script-engraver.cc:102
 #, fuzzy
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
 
 #: script-engraver.cc:103
@@ -1624,17 +1651,18 @@ msgstr "Program kodlaması: "
 msgid "No spring between column %d and next one"
 msgstr "%d sütunu ve sonraki sütun arasında kaynak yok."
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "sonlandırılmamış ses kaydırma imi"
 
-#: slur-engraver.cc:165
+#: slur-engraver.cc:166
 #, fuzzy
-msgid "can't end slur"
+msgid "cannot end slur"
 msgstr "bulunamıyor: `%s'"
 
 #: source-file.cc:74
@@ -1646,58 +1674,58 @@ msgstr ""
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr "tremolo süresi fazla uzun"
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, fuzzy, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "uyuşmayan [tür= %d] köküne nota kafası ekleniyor"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 #, fuzzy
 msgid "weird stem size, check for narrow beams"
 msgstr "Garip kök boyutu; dar ışınları denetler"
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr "`%s' bayrağı bulunamadı"
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "'%s'nin bayrak vuruşu bulunamadı "
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr "Öğe sayısı %d."
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr "Grob sayısı %d"
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr "metin anahtarının başlangıcı bulunamıyor"
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr "zaten bir metin anahtarı var"
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr "sonlandırılmamış metin anahtarı"
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "yalnız bağ"
 
@@ -1708,7 +1736,7 @@ msgstr "yalnız bağ"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, fuzzy, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "garip zaman imzası bulundu %d/%d."
@@ -1717,7 +1745,7 @@ msgstr "garip zaman imzası bulundu %d/%d."
 #  (Here really with a warning!)
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -1728,36 +1756,32 @@ msgstr ""
 msgid "unknown translator: `%s'"
 msgstr "bilinmeyen çevirmen: `%s'"
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "bulunamıyor: `%s'"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
+#: trill-spanner-engraver.cc:68
 #, fuzzy
-msgid "can't find start of trill spanner"
+msgid "cannot find start of trill spanner"
 msgstr "metin anahtarının başlangıcı bulunamıyor"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 #, fuzzy
 msgid "already have a trill spanner"
 msgstr "zaten bir metin anahtarı var"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
@@ -1766,7 +1790,7 @@ msgstr ""
 "seçilen bağ biçiminin kısıtlamalarına göre bu kafanın [es] '%s' öneki yok "
 "sayıldı"
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, fuzzy, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Vaticana_bağ_nakkaş: ayar boşlukbırakma-artırma = %f': ptr=%ul"
@@ -1784,271 +1808,283 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr "Vaticana_bağ: sıfır bağlantı [delta_perde == 0]"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
+#: volta-engraver.cc:144
 #, fuzzy
-msgid "can't end volta spanner"
+msgid "cannot end volta spanner"
 msgstr "metin anahtarının başlangıcı bulunamıyor"
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 #, fuzzy
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr "Zaten bir volta anahtarı var. Vakitsiz durduruluyor."
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 #, fuzzy
 msgid "also already have an ended spanner"
 msgstr "zaten bir metin anahtarı var"
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+#, fuzzy
+msgid "giving up"
+msgstr "Vazgeçiliyor"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 #, fuzzy
 msgid "second argument must be pitch list"
 msgstr "İkinci argüman perde listesi olmalı."
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 #, fuzzy
 msgid "have to be in Lyric mode for lyrics"
 msgstr "Güfteler için Lyric kipinde olunmalı"
 
-#: parser.yy:1612
+#: parser.yy:1604
 #, fuzzy
 msgid "expecting string as script definition"
 msgstr "Betik tanımı olarak dizge bekleniyor"
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "bir süre değil: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 #, fuzzy
 msgid "have to be in Note mode for notes"
 msgstr "Notalar için Nota kipinde olmalıdır"
 
-#: parser.yy:2004
+#: parser.yy:1987
 #, fuzzy
 msgid "have to be in Chord mode for chords"
 msgstr "Akortlar için Akort kipinde olmalıdır"
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, fuzzy, c-format
 msgid "Renaming input to: `%s'"
 msgstr "`%s' veri yolu açılıyor"
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:262
+#: lexer.ll:260
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "EOF bir açıklamanın içinde bulundu"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr "\\anagirdi init dosyları dışında kabul edilmez"
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "yanlış ya da tanımlanmamış tanıtıcı: `%s' "
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Şarkı sözü sonunda ayraç bulundu. Bir boşluk mu unuttunuz?"
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Biçimlemenin sonunda ayraç bulundu. Bir boşluk bırakmayı mı unuttunuz?"
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "geçersiz karakter: `%c'"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "bilinmeyen kaçmış dizge: '\\%s'"
 
-#: lexer.ll:882
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "Hatalı lilypond sürümü: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+#, fuzzy
+msgid "consider updating the input with the convert-ly script"
 msgstr "Girdiyi convert-ly betiği ile güncellemeyi dikkate alınız"
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr "`~a' çağrılıyor..."
 
 #: backend-library.scm:24
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "`%s' başarısız (%d)"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr "`~a'ya değiştiriliyor..."
 
-#: backend-library.scm:110
-#, fuzzy, lisp-format
+#: backend-library.scm:108
+#, fuzzy, scheme-format
 msgid "Converting to ~a..."
 msgstr "`~a'ya değiştiriliyor..."
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, fuzzy, lisp-format
+#: define-markup-commands.scm:1297
+#, fuzzy, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "bir süre değil: %d"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, fuzzy, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, fuzzy, scheme-format
+msgid "cannot find music object: ~S"
 msgstr "Müzik bulunamıyor"
 
-#: define-music-types.scm:757
-#, fuzzy, lisp-format
+#: define-music-types.scm:774
+#, fuzzy, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "bilinmeyen küme tarzı `%s'"
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, fuzzy, lisp-format
-msgid "can't find interface for property: ~S"
+#, fuzzy, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
 
 #: document-backend.scm:145
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "Bilinmeyen arabirim `%s'"
 
 #: documentation-lib.scm:45
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Processing ~S..."
 msgstr "İşleniyor..."
 
 #: documentation-lib.scm:150
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "Writing ~S..."
 msgstr "`%s' yazılıyor..."
 
 #: documentation-lib.scm:172
-#, fuzzy, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, fuzzy, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, fuzzy, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, fuzzy, scheme-format
 msgid "Writing ~a..."
 msgstr "`%s' yazılıyor..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
-msgstr ""
+#: framework-ps.scm:349
+#, fuzzy, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
 
-#: framework-ps.scm:379
-#, fuzzy, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, fuzzy, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr "Sesletimin nasıl yorumlanacağı bilinmiyor: "
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr ""
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr ""
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -2057,56 +2093,56 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "dosyaadı boşluk içermemeli: `%s'"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 #, fuzzy
 msgid "Calculating page breaks..."
 msgstr "Satır bölünmeleri sayılıyor..."
 
-#: lily-library.scm:510
-#, fuzzy, lisp-format
+#: lily-library.scm:593
+#, fuzzy, scheme-format
 msgid "unknown unit: ~S"
 msgstr "bilinmeyen çevirmen: `%s'"
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "bulunamıyor: `%s'"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "bağımlılıklar `%s'ye çıktılanıyor..."
 
@@ -2114,49 +2150,49 @@ msgstr "bağımlılıklar `%s'ye çıktılanıyor..."
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr ""
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr ""
 
-#: music-functions.scm:210
+#: music-functions.scm:213
 #, fuzzy
-msgid "More alternatives than repeats. Junking excess alternatives"
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr "Tekrarlardan çok seçenek. Kullanılmayan fazla seşenekler. "
 
-#: music-functions.scm:229
-#, lisp-format
+#: music-functions.scm:232
+#, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr ""
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, fuzzy, lisp-format
-msgid "can't find quoted music `~S'"
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
 msgstr "Müzik bulunamıyor"
 
-#: music-functions.scm:953
-#, fuzzy, lisp-format
+#: music-functions.scm:942
+#, fuzzy, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "bilinmeyen rastlantı yok sayılıyor: %s"
 
@@ -2165,44 +2201,44 @@ msgid "utf-8-string encountered in PS backend"
 msgstr ""
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr ""
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #  How to shut up this warning, when Voice_devnull_engraver has
 #  eaten start event?
 #: output-tex.scm:98
-#, fuzzy, lisp-format
-msgid "can't find ~a in ~a"
+#, fuzzy, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr "ses kaydırma iminin başlangıcı bulunamıyor"
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
 #: parser-clef.scm:126
-#, fuzzy, lisp-format
+#, fuzzy, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "bilinmeyen küme tarzı `%s'"
 
@@ -2210,16 +2246,74 @@ msgstr "bilinmeyen küme tarzı `%s'"
 msgid "see scm/clef.scm for supported clefs"
 msgstr ""
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, fuzzy, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "komut %d değeriyle sonlandı"
 
 #: to-xml.scm:190
-#, fuzzy
-msgid "assertion failed"
+#, fuzzy, scheme-format
+msgid "assertion failed: ~S"
 msgstr "LaTeX başarısız oldu."
 
+#~ msgid "silly pitch"
+#~ msgstr "saçma perde"
+
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "garantiyi ve telif hakkını göster"
+
+#, fuzzy
+#~ msgid ""
+#~ "Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
+#~ "\n"
+#~ "Example usage:\n"
+#~ "\n"
+#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+#~ " lilypond-book --process='lilypond -I include' BOOK\n"
+#~ msgstr ""
+#~ "LilyPond'un küçük  parçalarını karma HTML, LaTeX ya da texinfo "
+#~ "belgelerinde\n"
+#~ "çalıştırır. \n"
+#~ " Örnek kullanım:\n"
+#~ "\n"
+#~ "    lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" KİTAP\n"
+#~ "    lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -"
+#~ "\"KİTAP\n"
+#~ "    lilypond-book --process='lilypond -I include' KİTAP\n"
+#~ "\n"
+
+#  temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+#  original_dir = os.getcwd ()
+#  keep_temp_dir_p = 0
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "MIDI'yi LilyPond kaynağına dönüştür."
+
+#, fuzzy
+#~ msgid "example"
+#~ msgstr "Örnek:"
+
+#, fuzzy
+#~ msgid "loading default font"
+#~ msgstr "Öntanımlı yazı tipi yükleniyor "
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "öntanımlı yazı tipi bulunamıyor: `%s'"
+
+#~ msgid "crescendo too small"
+#~ msgstr "kreşendo çok küçük"
+
+#~ msgid "print this help"
+#~ msgstr "bu yardımı yazdır"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "dosya açılamıyor: `%s'"
+
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "Hatalı lilypond sürümü: %s (%s, %s)"
+
 #~ msgid "no one to print a tremolos"
 #~ msgstr "bir tremolo yazdıracak kimse yok"
 
@@ -2236,7 +2330,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "no one to print a repeat brace"
 #~ msgstr "bir tekrar ayracını yazdıracak kimse yok"
 
-#~ msgid "can't find `%s' context"
+#~ msgid "cannot find `%s' context"
 #~ msgstr "`%s'nin bağlamı bulunamıyor"
 
 #~ msgid "Optimal demerits: %f"
@@ -2277,7 +2371,7 @@ msgstr "LaTeX başarısız oldu."
 #~ "%s: TFM dosyası %u değiştirgeye sahip ve bu başa çıkabileceğim %u'dan "
 #~ "fazla."
 
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "ascii karakteri bulunamıyor: %d"
 
 #~ msgid "no one to print a tuplet start bracket"
@@ -2296,15 +2390,12 @@ msgstr "LaTeX başarısız oldu."
 #~ msgstr "Tekrarlardan çok seçenek. Kullanılmayan fazla seşenekler. "
 
 #, fuzzy
-#~ msgid "can't find signature for music function"
+#~ msgid "cannot find signature for music function"
 #~ msgstr "`%s'nin bağlamı bulunamıyor"
 
 #~ msgid "lilylib module"
 #~ msgstr "lilylib birimi"
 
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "Kullanım: %s (SEÇENEKLER)... DOSYA"
-
 #~ msgid "Binary %s has version %s, looking for version %s"
 #~ msgstr " %s ikilisi,  %s sürümünde, %s sürümü aranıyor"
 
@@ -2342,12 +2433,6 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "command exited with value %d"
 #~ msgstr "komut %d değeriyle sonlandı"
 
-#~ msgid "Example:"
-#~ msgstr "Örnek:"
-
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "mup'ı Lilypond kaynağına dönüştür."
-
 #~ msgid "debug"
 #~ msgstr "hata ayıklama"
 
@@ -2376,7 +2461,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgstr "`%s' yazıldı"
 
 #, fuzzy
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "dosya açılamıyor: `%s'"
 
 #, fuzzy
@@ -2413,7 +2498,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgstr "emniyetli kipte çalıştır"
 
 #, fuzzy
-#~ msgid "can't handle a percent repeat of length: %s"
+#~ msgid "cannot handle a percent repeat of length: %s"
 #~ msgstr "Bu uzunluktaki bir yüzde tekrarıyla nasıl baş edeceğini bilmiyor."
 
 #~ msgid "rest direction not set.  Cannot resolve collision."
@@ -2442,7 +2527,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
 #~ msgstr "Kullanım: lilypond-bin -e \"(ly:set-option SEMBOL DEĞER)\""
 
-#  this shouldn't happen, but let's continue anyway.
+#  this shouldnnot happen, but let's continue anyway.
 #~ msgid "Separation_item:  I've been drinking too much"
 #~ msgstr "Ayırma_öğe: Çok fazla içmişim"
 
@@ -2494,7 +2579,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgstr "hiçbir onulmaz hata yok: "
 
 #, fuzzy
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "yazı tipi bulunamıyor: `%s'"
 
 #, fuzzy
@@ -2528,7 +2613,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "Programming error: "
 #~ msgstr "programlama hatası: %s"
 
-#~ msgid "Can't switch translators, I'm there already"
+#~ msgid "Cannot switch translators, I'm there already"
 #~ msgstr "Çevirmenler değiştirilemiyor, zaten oradayım"
 
 #~ msgid "Accidental rule must be pair or context-name; Found %s"
@@ -2549,7 +2634,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "Huh?  Got %d, expected %d characters"
 #~ msgstr "Ha? %2$d karakter beklenirken, %1$d alındı"
 
-#~ msgid "Don't you want polyphonic voices instead?"
+#~ msgid "Donnot you want polyphonic voices instead?"
 #~ msgstr "Bunun yerine polifonik sesler istemez misiniz?"
 
 #~ msgid "No volta spanner to end"
@@ -2588,7 +2673,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "keep all output, output to directory %s.dir"
 #~ msgstr "bütün çıktıyı sakla, çıktıyı %s dizinine yönlendir"
 
-#~ msgid "don't run LilyPond"
+#~ msgid "do not run LilyPond"
 #~ msgstr "LilyPond'u çalıştırma"
 
 #~ msgid "produce MIDI output only"
@@ -2666,7 +2751,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "%s output to %s..."
 #~ msgstr "%s çıktısı %s'ye..."
 
-#~ msgid "can't find file: `%s.%s'"
+#~ msgid "cannot find file: `%s.%s'"
 #~ msgstr "dosya bulunamıyor: `%s.%s'"
 
 #~ msgid "NaN"
@@ -2736,14 +2821,6 @@ msgstr "LaTeX başarısız oldu."
 #~ "LaTeX'in çalıştırılması başarısız. İzlemek için\n"
 #~ "--verbose seçeneği ile yeniden çalıştırın."
 
-#  # FIXME
-#  # do -P or -p by default?
-#  #help_summary = _ ("Run LilyPond using LaTeX for titling")
-#~ msgid "Process LilyPond snippets in hybrid HTML, LaTeX or texinfo document"
-#~ msgstr ""
-#~ "LilyPond'un küçük parçalarını karma HTML, LaTeX ya da texinfo belgesinde "
-#~ "işle"
-
 #~ msgid "DIM"
 #~ msgstr "DIM"
 
@@ -2784,10 +2861,10 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "prepend PREF before each -M dependency"
 #~ msgstr "her bir -M bağımlılığının başına PREF ekle"
 
-#~ msgid "don't run lilypond"
+#~ msgid "do not run lilypond"
 #~ msgstr "lilypond'u çalıştırma"
 
-#~ msgid "don't generate pictures"
+#~ msgid "do not generate pictures"
 #~ msgstr "resim üretme"
 
 #~ msgid "strip all lilypond blocks from output"
@@ -2815,7 +2892,7 @@ msgstr "LaTeX başarısız oldu."
 #~ msgid "prepend DIR to dependencies"
 #~ msgstr "bağımlılıkların başına DİZİN ekle"
 
-#~ msgid "can't find start of phrasing slur"
+#~ msgid "cannot find start of phrasing slur"
 #~ msgstr ""
 #~ "melodiyi ayrıştırarak çalan ses kaydırma iminin başlangıcı bulunamıyor"
 
index 83d25f2b7d104223eb2a48743500668049efecd2..b1138edd0bdbb55033400853f43a0793a52d0978 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.6.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-08 16:22+0200\n"
+"POT-Creation-Date: 2006-12-24 10:40+0100\n"
 "PO-Revision-Date: 2005-06-29 05:00+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -71,150 +71,159 @@ msgid "Running %s..."
 msgstr "正在執行 %s..."
 
 #: lilylib.py:203
-#, python-format
-msgid "Usage: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Usage: %s"
+msgstr "警告: %s"
+
+#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
+#, fuzzy, python-format
+msgid "%s [OPTION]... FILE"
+msgstr "用法: %s [選項]... 檔案"
 
 #: abc2ly.py:1351
+#, python-format
 msgid ""
-"This program converts ABC music files (see\n"
-"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input."
 msgstr ""
 
-#: abc2ly.py:1354
-#, fuzzy
-msgid "set output filename to FILE"
+#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+msgid "write output to FILE"
 msgstr "將輸出資料寫入 <檔案>"
 
-#: abc2ly.py:1356
+#: abc2ly.py:1357
 msgid "be strict about succes"
 msgstr ""
 
-#: abc2ly.py:1358
+#: abc2ly.py:1359
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
+#: midi2ly.py:911 musicxml2ly.py:505
+#, fuzzy
+msgid "Report bugs via"
+msgstr "請向 %s 匯報錯誤。"
+
 #: convert-ly.py:41
 #, fuzzy
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version.\n"
-"\n"
-"Examples:\n"
-"\n"
-"  convert-ly -e old.ly\n"
-"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 "更新 LilyPond 輸入檔的版本。在預設模式中,它會讀取原來檔案中的 \\version\n"
 "指令來決定其版本,並將之更新至最新的版本。"
 
-#: convert-ly.py:57 lilypond-book.py:97 warn.cc:48 input.cc:90
+#: convert-ly.py:43 lilypond-book.py:73
+#, fuzzy
+msgid "Examples:"
+msgstr "例子:"
+
+#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "警告: %s"
 
-#: convert-ly.py:60 lilypond-book.py:100 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
 #, c-format, python-format
 msgid "error: %s"
 msgstr "錯誤: %s"
 
-#: convert-ly.py:76 etf2ly.py:1190 lilypond-book.py:120 midi2ly.py:98
+#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "根據 GNU 公共授權條款發佈。"
 
-#: convert-ly.py:77 etf2ly.py:1191 lilypond-book.py:121 midi2ly.py:99
+#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
 msgid "It comes with NO WARRANTY."
 msgstr "本程式沒有任何使用保證。"
 
-#: convert-ly.py:88 convert-ly.py:108
+#: convert-ly.py:86 convert-ly.py:106
 msgid "VERSION"
 msgstr ""
 
-#: convert-ly.py:90
+#: convert-ly.py:88
 msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#: convert-ly.py:93
+#: convert-ly.py:91
 msgid "edit in place"
 msgstr ""
 
-#: convert-ly.py:96
+#: convert-ly.py:94
 msgid "do not add \\version command if missing"
 msgstr ""
 
-#: convert-ly.py:102
-msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+#: convert-ly.py:100
+msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:107
+#: convert-ly.py:105
 msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
 msgstr ""
 
-#: convert-ly.py:154
+#: convert-ly.py:153
 msgid "Applying conversion: "
 msgstr "進行轉換:"
 
 #: convert-ly.py:166
 #, fuzzy
-msgid "error while converting"
+msgid "Error while converting"
 msgstr "%s: 轉換時發生錯誤"
 
-#: convert-ly.py:168 score-engraver.cc:74
-msgid "Aborting"
-msgstr "終止"
+#: convert-ly.py:168
+msgid "Stopping at last succesful rule"
+msgstr ""
 
-#: convert-ly.py:192
+#: convert-ly.py:190
 #, python-format
 msgid "Processing `%s'... "
 msgstr "正在處理 ‘%s’..."
 
-#: convert-ly.py:279 source-file.cc:54
+#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
 #, c-format, python-format
-msgid "can't open file: `%s'"
+msgid "cannot open file: `%s'"
 msgstr "無法開啟檔案: ‘%s’"
 
-#: convert-ly.py:286
+#: convert-ly.py:284
 #, fuzzy, python-format
-msgid "can't determine version for `%s'. Skipping"
+msgid "cannot determine version for `%s'.  Skipping"
 msgstr "%s: 無法決定 ‘%s’ 的版本"
 
+#: etf2ly.py:1196
+#, fuzzy, python-format
+msgid "%s [OPTION]... ETF-FILE"
+msgstr "用法: %s [選項]... 檔案"
+
 #: etf2ly.py:1198
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. This program will convert a subset of ETF to a\n"
-"ready-to-use lilypond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file."
 msgstr ""
 
-#: etf2ly.py:1201 midi2ly.py:885
-msgid "write output to FILE"
-msgstr "將輸出資料寫入 <檔案>"
-
-#: etf2ly.py:1202 midi2ly.py:886 main.cc:173 main.cc:179
+#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
 msgid "FILE"
 msgstr "檔案"
 
-#: etf2ly.py:1204 midi2ly.py:899
-#, fuzzy
-msgid "show warranty"
+#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+msgid "show warranty and copyright"
 msgstr "顯示保證條款及版權資訊"
 
-#: lilypond-book.py:70
+#: lilypond-book.py:71
 msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
-"\n"
-"Example usage:\n"
-"\n"
-" lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-" lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
-" lilypond-book --process='lilypond -I include' BOOK\n"
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr ""
+
+#: lilypond-book.py:78
+msgid "BOOK"
 msgstr ""
 
-#: lilypond-book.py:86
+#: lilypond-book.py:87
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "正在結束 (%d)..."
 
-#: lilypond-book.py:118
+#: lilypond-book.py:119
 #, fuzzy, python-format
 msgid "Copyright (c) %s by"
 msgstr "版權所有 (c) %s"
@@ -229,7 +238,8 @@ msgstr ""
 
 #: lilypond-book.py:135
 #, fuzzy
-msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 "使用指定輸出 <格式> (texi [預設值]、texi-html、\n"
 "latex 或 html)"
@@ -238,6 +248,10 @@ msgstr ""
 msgid "add DIR to include path"
 msgstr "將 <目錄> 加入搜尋目錄中"
 
+#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+msgid "DIR"
+msgstr "目錄"
+
 #: lilypond-book.py:143
 msgid "write output to DIR"
 msgstr "將輸出結果寫入至 <目錄> 中"
@@ -250,145 +264,145 @@ msgstr "指令"
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:159
+#: lilypond-book.py:154
+msgid "Create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:157
 msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with "
-"dvips -h INPUT.psfonts"
+"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
+"must use this with dvips -h INPUT.psfonts"
 msgstr ""
 
-#: lilypond-book.py:162 midi2ly.py:896 main.cc:183
+#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
 msgid "be verbose"
 msgstr "顯示詳細訊息"
 
-#: lilypond-book.py:168 main.cc:184
-msgid "show warranty and copyright"
-msgstr "顯示保證條款及版權資訊"
-
-#: lilypond-book.py:721
+#: lilypond-book.py:773
 #, python-format
 msgid "file not found: %s"
 msgstr "找不到檔案: %s"
 
-#: lilypond-book.py:952
+#: lilypond-book.py:1004
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr "使用了過時的 ly-option: %s=%s"
 
-#: lilypond-book.py:955
+#: lilypond-book.py:1007
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: lilypond-book.py:959
+#: lilypond-book.py:1011
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr "使用了過時的 ly-option: %s"
 
-#: lilypond-book.py:962
+#: lilypond-book.py:1014
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: lilypond-book.py:981
+#: lilypond-book.py:1033
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr "不理會不明的 ly 選項:%s"
 
-#: lilypond-book.py:1318
+#: lilypond-book.py:1388
 #, python-format
 msgid "Opening filter `%s'"
 msgstr ""
 
-#: lilypond-book.py:1335
+#: lilypond-book.py:1405
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "‘%s’ 發生錯誤 (%d)"
 
-#: lilypond-book.py:1336
+#: lilypond-book.py:1406
 msgid "The error log is as follows:"
 msgstr "以下是錯誤紀錄的內容:"
 
-#: lilypond-book.py:1405
-msgid "Can't find \\begin{document} in LaTeX document"
+#: lilypond-book.py:1476
+msgid "cannot find \\begin{document} in LaTeX document"
 msgstr ""
 
-#: lilypond-book.py:1513
+#: lilypond-book.py:1586
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:1518
+#: lilypond-book.py:1591
 msgid "Processing..."
 msgstr "處理中..."
 
-#: lilypond-book.py:1522
+#: lilypond-book.py:1595
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:1532
+#: lilypond-book.py:1605
 #, python-format
-msgid "can't determine format for: %s"
+msgid "cannot determine format for: %s"
 msgstr "無法決定 %s 的格式"
 
-#: lilypond-book.py:1543
+#: lilypond-book.py:1616
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:1549
+#: lilypond-book.py:1622
 #, python-format
 msgid "Writing `%s'..."
 msgstr "正在寫入 ‘%s’..."
 
-#: lilypond-book.py:1604
+#: lilypond-book.py:1677
 msgid "Output would overwrite input file; use --output."
 msgstr "這樣輸出檔會覆寫輸入檔;請使用 --output 選項。"
 
-#: lilypond-book.py:1608
+#: lilypond-book.py:1681
 #, python-format
 msgid "Reading %s..."
 msgstr "正在讀取 %s..."
 
-#: lilypond-book.py:1627
+#: lilypond-book.py:1700
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:1643
+#: lilypond-book.py:1716
 #, python-format
 msgid "Compiling %s..."
 msgstr "正在編譯 %s ..."
 
-#: lilypond-book.py:1652
+#: lilypond-book.py:1725
 #, python-format
 msgid "Processing include: %s"
 msgstr ""
 
-#: lilypond-book.py:1666
+#: lilypond-book.py:1739
 #, python-format
 msgid "Removing `%s'"
 msgstr "正在移除 ‘%s’"
 
-#: lilypond-book.py:1743
+#: lilypond-book.py:1815
 #, python-format
 msgid "Writing fonts to %s..."
 msgstr "正在將字型寫入 %s..."
 
-#: lilypond-book.py:1758
+#: lilypond-book.py:1830
 msgid "option --psfonts not used"
 msgstr ""
 
-#: lilypond-book.py:1759
+#: lilypond-book.py:1831
 msgid "processing with dvips will have no fonts"
 msgstr ""
 
-#: lilypond-book.py:1762
+#: lilypond-book.py:1834
 msgid "DVIPS usage:"
 msgstr "DVIPS 用法:"
 
-#: midi2ly.py:106 lily-library.scm:541 lily-library.scm:549
+#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
 msgid "warning: "
 msgstr "警告:"
 
-#: midi2ly.py:109 midi2ly.py:925
+#: midi2ly.py:109 midi2ly.py:924
 msgid "error: "
 msgstr "錯誤:"
 
@@ -401,9 +415,10 @@ msgstr "結束 ... "
 msgid "%s output to `%s'..."
 msgstr "%s 輸出至 ‘%s’..."
 
-#: midi2ly.py:871
-msgid "Convert MIDI to LilyPond source."
-msgstr "將 MIDI 轉換為 LilyPond 來源檔。"
+#: midi2ly.py:871 musicxml2ly.py:485
+#, fuzzy, python-format
+msgid "Convert %s to LilyPond input."
+msgstr "將 mup 格式轉換至 LilyPond 格式。"
 
 #: midi2ly.py:875
 msgid "print absolute pitches"
@@ -447,34 +462,56 @@ msgstr "將所有文字當作歌詞處理"
 
 #: midi2ly.py:905
 #, fuzzy
-msgid "example"
-msgstr "例子"
+msgid "Examples"
+msgstr "例子:"
 
-#: midi2ly.py:926
+#: midi2ly.py:925
 msgid "no files specified on command line."
 msgstr "指令參數中未指定任何檔案。"
 
-#: getopt-long.cc:141
+#: musicxml2ly.py:473
+msgid "musicxml2ly FILE.xml"
+msgstr ""
+
+#: musicxml2ly.py:476
+#, python-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information."
+msgstr ""
+
+#: musicxml2ly.py:495
+msgid "Use lxml.etree; uses less memory and cpu time."
+msgstr ""
+
+#: musicxml2ly.py:503
+#, fuzzy
+msgid "set output filename to FILE"
+msgstr "將輸出資料寫入 <檔案>"
+
+#: getopt-long.cc:140
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "選項 ‘%s’ 需要參數"
 
-#: getopt-long.cc:145
-#, c-format
-msgid "option `%s' doesn't allow an argument"
+#: getopt-long.cc:144
+#, fuzzy, c-format
+msgid "option `%s' does not allow an argument"
 msgstr "選項 ‘%s’ 不可配合參數使用"
 
-#: getopt-long.cc:149
+#: getopt-long.cc:148
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "無法識別的選項: ‘%s’"
 
-#: getopt-long.cc:155
+#: getopt-long.cc:154
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "選項 ‘%s’ 的參數 ‘%s’ 無效"
 
-#: warn.cc:68 grob.cc:552 input.cc:82
+#: warn.cc:68 grob.cc:559 input.cc:82
 #, c-format
 msgid "programming error: %s"
 msgstr "程式錯誤:%s"
@@ -483,84 +520,75 @@ msgstr "程式錯誤:%s"
 msgid "continuing, cross fingers"
 msgstr ""
 
-#: accidental-engraver.cc:238
+#: accidental-engraver.cc:240
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: accidental-engraver.cc:266
+#: accidental-engraver.cc:268
 #, c-format
 msgid "ignoring unknown accidental: %s"
 msgstr "忽略不明的升降符號:%s"
 
-#: accidental-engraver.cc:282
+#: accidental-engraver.cc:284
 #, c-format
 msgid "pair or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: accidental.cc:243 key-signature-interface.cc:124
+#: accidental.cc:243 key-signature-interface.cc:133
 #, c-format
 msgid "accidental `%s' not found"
 msgstr "找不到升降符號 ‘%s’"
 
-#: align-interface.cc:164
+#: align-interface.cc:222
 msgid ""
 "vertical alignment called before line-breaking.\n"
 "Only do cross-staff spanners with PianoStaff."
 msgstr ""
 
-#: align-interface.cc:314
-msgid "tried to get a translation for something that isn't my child"
+#: align-interface.cc:329
+msgid "tried to get a translation for something that is no child of mine"
 msgstr ""
 
-#: all-font-metrics.cc:164
+#: all-font-metrics.cc:173
 #, c-format
-msgid "can't find font: `%s'"
+msgid "cannot find font: `%s'"
 msgstr "找不到字型:‘%s’"
 
-#: all-font-metrics.cc:165
-msgid "loading default font"
-msgstr "正在載入預設字型"
-
-#: all-font-metrics.cc:172
-#, c-format
-msgid "can't find default font: `%s'"
-msgstr "找不到預設字型:‘%s’"
-
-#: all-font-metrics.cc:173 includable-lexer.cc:62 lily-parser-scheme.cc:108
-#, c-format
-msgid "(search path: `%s')"
-msgstr "(搜尋路徑:‘%s’)"
-
-#: all-font-metrics.cc:174 volta-engraver.cc:158
-msgid "giving up"
-msgstr "放棄"
-
 #: apply-context-iterator.cc:31
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
-#: auto-change-iterator.cc:62 change-iterator.cc:61
+#: auto-change-iterator.cc:63 change-iterator.cc:61
 #, c-format
-msgid "can't change, already in translator: %s"
+msgid "cannot change, already in translator: %s"
 msgstr ""
 
-#: axis-group-engraver.cc:82
+#: axis-group-engraver.cc:78
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:83
+#: axis-group-engraver.cc:79
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:84
+#: axis-group-engraver.cc:80
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:94
+#: axis-group-interface.cc:96
 msgid "tried to calculate pure-height at a non-breakpoint"
 msgstr ""
 
+#: axis-group-interface.cc:370
+msgid "an outside-staff object should have a direction, defaulting to up"
+msgstr ""
+
+#: axis-group-interface.cc:383
+#, c-format
+msgid "outside-staff object %s has an empty extent"
+msgstr ""
+
 #: bar-check-iterator.cc:73
 #, c-format
 msgid "barcheck failed at: %s"
@@ -574,19 +602,19 @@ msgstr "已經有了連桁 (beam)"
 msgid "unterminated beam"
 msgstr "連桁沒有終點"
 
-#: beam-engraver.cc:237 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
 msgid "stem must have Rhythmic structure"
 msgstr ""
 
-#: beam-engraver.cc:245
-msgid "stem doesn't fit in beam"
+#: beam-engraver.cc:246
+msgid "stem does not fit in beam"
 msgstr ""
 
-#: beam-engraver.cc:246
+#: beam-engraver.cc:247
 msgid "beam was started here"
 msgstr ""
 
-#: beam-quanting.cc:306
+#: beam-quanting.cc:307
 #, fuzzy
 msgid "no feasible beam position"
 msgstr "無法找出適當斷行位置"
@@ -596,23 +624,23 @@ msgstr "無法找出適當斷行位置"
 msgid "removing beam with no stems"
 msgstr "移除少於兩條符桿的連桁"
 
-#: beam.cc:995
+#: beam.cc:1007
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#: break-align-interface.cc:208
+#: break-alignment-interface.cc:208
 #, c-format
 msgid "No spacing entry from %s to `%s'"
 msgstr ""
 
 #: change-iterator.cc:23
 #, c-format
-msgid "can't change `%s' to `%s'"
+msgid "cannot change `%s' to `%s'"
 msgstr "無法將 ‘%s’ 更改為 ‘%s’"
 
 #. FIXME: constant error message.
 #: change-iterator.cc:82
-msgid "can't find context to switch to"
+msgid "cannot find context to switch to"
 msgstr ""
 
 #. We could change the current translator's id, but that would make
@@ -643,7 +671,7 @@ msgstr "顫音和弦沒有終結"
 msgid "expect 2 elements for chord tremolo, found %d"
 msgstr "顫音和弦需要 2 個元素,但實際上找到 %d 個"
 
-#: clef.cc:55
+#: clef.cc:54
 #, c-format
 msgid "clef `%s' not found"
 msgstr "找不到譜號 ‘%s’"
@@ -657,34 +685,33 @@ msgstr ""
 msgid "junking empty cluster"
 msgstr ""
 
-#: coherent-ligature-engraver.cc:106
+#: coherent-ligature-engraver.cc:100
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
 
 #. if we get to here, just put everything on one line
 #: constrained-breaking.cc:176 constrained-breaking.cc:193
-#, fuzzy
-msgid "couldn't find line breaking that satisfies constraints"
+msgid "cannot find line breaking that satisfies constraints"
 msgstr "找不到符合指定條件的斷行位置"
 
-#: context-def.cc:128
+#: context-def.cc:130
 #, c-format
 msgid "program has no such type: `%s'"
 msgstr ""
 
-#: context-property.cc:77
+#: context-property.cc:76
 msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
 #: context.cc:151
 #, c-format
-msgid "can't find or create new `%s'"
+msgid "cannot find or create new `%s'"
 msgstr ""
 
 #: context.cc:213
 #, c-format
-msgid "can't find or create `%s' called `%s'"
+msgid "cannot find or create `%s' called `%s'"
 msgstr ""
 
 #: context.cc:276
@@ -694,7 +721,7 @@ msgstr ""
 
 #: context.cc:388
 #, c-format
-msgid "can't find or create: `%s'"
+msgid "cannot find or create: `%s'"
 msgstr ""
 
 #: custos.cc:77
@@ -702,17 +729,22 @@ msgstr ""
 msgid "custos `%s' not found"
 msgstr ""
 
-#: dispatcher.cc:72
+#: dispatcher.cc:71
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:79
+#: dispatcher.cc:78
 #, c-format
 msgid "Unknown event class %s"
 msgstr ""
 
+#: dots.cc:38
+#, fuzzy, c-format
+msgid "dot `%s' not found"
+msgstr "找不到休止符 ‘%s’"
+
 #: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
-msgid "can't find start of (de)crescendo"
+msgid "cannot find start of (de)crescendo"
 msgstr "漸強/漸弱符號沒有起點"
 
 #: dynamic-engraver.cc:195
@@ -731,11 +763,7 @@ msgstr "漸強符號在這裡開始"
 msgid "unterminated (de)crescendo"
 msgstr "漸強/漸弱符號沒有終點"
 
-#: engraver.cc:102
-msgid "not setting creation callback: not a procedure"
-msgstr ""
-
-#: extender-engraver.cc:130 extender-engraver.cc:139
+#: extender-engraver.cc:131 extender-engraver.cc:140
 msgid "unterminated extender"
 msgstr ""
 
@@ -758,15 +786,15 @@ msgstr "加入字型目錄:%s"
 msgid "adding font directory: %s"
 msgstr "加入字型目錄:%s"
 
-#: general-scheme.cc:161
+#: general-scheme.cc:160
 msgid "infinity or NaN encountered while converting Real number"
 msgstr ""
 
-#: general-scheme.cc:162
+#: general-scheme.cc:161
 msgid "setting to zero"
 msgstr ""
 
-#: glissando-engraver.cc:91
+#: glissando-engraver.cc:92
 msgid "unterminated glissando"
 msgstr "滑奏沒有終結"
 
@@ -796,45 +824,37 @@ msgstr ""
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:212
 #, fuzzy
-msgid "can't apply `\\~' on first head of ligature"
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr "找不到樂句線的起點"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:224
-msgid "can't apply `\\~' on heads with identical pitch"
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: grob-interface.cc:48
+#: grob-interface.cc:57
 #, c-format
 msgid "Unknown interface `%s'"
 msgstr ""
 
-#: grob-interface.cc:59
+#: grob-interface.cc:68
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: grob-property.cc:36
-msgid "not setting modification callback: not a procedure"
-msgstr ""
-
 #: grob.cc:253
 msgid "Infinity or NaN encountered"
 msgstr ""
 
-#: hairpin.cc:179
+#: hairpin.cc:183
 msgid "decrescendo too small"
 msgstr "漸弱符號太小"
 
-#: hairpin.cc:180
-msgid "crescendo too small"
-msgstr "漸強符號太小"
-
-#: horizontal-bracket-engraver.cc:58
-msgid "don't have that many brackets"
+#: horizontal-bracket-engraver.cc:59
+msgid "do not have that many brackets"
 msgstr ""
 
-#: horizontal-bracket-engraver.cc:67
+#: horizontal-bracket-engraver.cc:68
 msgid "conflicting note group events"
 msgstr ""
 
@@ -850,89 +870,94 @@ msgstr ""
 msgid "include files are not allowed in safe mode"
 msgstr "安全模式中不允許再包含另一個檔案的內容"
 
-#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:115
+#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
 #, c-format
-msgid "can't find file: `%s'"
+msgid "cannot find file: `%s'"
 msgstr "找不到檔案: ‘%s’"
 
+#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(搜尋路徑:‘%s’)"
+
 #: input.cc:112 source-file.cc:168 source-file.cc:183
 msgid "position unknown"
 msgstr "位置不明"
 
-#: ligature-engraver.cc:95
-msgid "can't find start of ligature"
+#: ligature-engraver.cc:93
+msgid "cannot find start of ligature"
 msgstr "找不到樂句線的起點"
 
-#: ligature-engraver.cc:100
+#: ligature-engraver.cc:98
 msgid "no right bound"
 msgstr "沒有右邊邊界"
 
-#: ligature-engraver.cc:122
+#: ligature-engraver.cc:120
 msgid "already have a ligature"
 msgstr "已經有樂句線"
 
-#: ligature-engraver.cc:131
+#: ligature-engraver.cc:129
 msgid "no left bound"
 msgstr "沒有左邊邊界"
 
-#: ligature-engraver.cc:175
+#: ligature-engraver.cc:173
 msgid "unterminated ligature"
 msgstr "樂句線沒有終點"
 
-#: ligature-engraver.cc:204
+#: ligature-engraver.cc:202
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "忽略休止符;樂句中不可含有休止符"
 
-#: ligature-engraver.cc:205
+#: ligature-engraver.cc:203
 msgid "ligature was started here"
 msgstr "樂句在這裡開始"
 
-#: lily-guile.cc:98
+#: lily-guile.cc:92
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(載入路徑:‘%s’)"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:518
 #, c-format
-msgid "can't find property type-check for `%s' (%s)."
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: lily-guile.cc:442
+#: lily-guile.cc:521
 msgid "perhaps a typing error?"
 msgstr "是否打錯字?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:527
 msgid "doing assignment anyway"
 msgstr ""
 
-#: lily-guile.cc:460
+#: lily-guile.cc:539
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: lily-lexer.cc:222
+#: lily-lexer.cc:254
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr ""
 
-#: lily-lexer.cc:237
+#: lily-lexer.cc:269
 #, c-format
 msgid "error at EOF: %s"
 msgstr "檔案結束的位置發生錯誤: %s"
 
-#: lily-parser-scheme.cc:30
+#: lily-parser-scheme.cc:29
 #, c-format
 msgid "deprecated function called: %s"
 msgstr "調用已過時的函式: %s"
 
-#: lily-parser-scheme.cc:89
+#: lily-parser-scheme.cc:88
 #, fuzzy, c-format
-msgid "Changing working directory to `%s'"
+msgid "Changing working directory to: `%s'"
 msgstr "無法將工作目錄切換至: %s: %s"
 
-#: lily-parser-scheme.cc:107
+#: lily-parser-scheme.cc:106
 #, c-format
-msgid "can't find init file: `%s'"
+msgid "cannot find init file: `%s'"
 msgstr ""
 
 #: lily-parser-scheme.cc:125
@@ -940,20 +965,21 @@ msgstr ""
 msgid "Processing `%s'"
 msgstr "正在處理 ‘%s’"
 
-#: lily-parser.cc:97
+#: lily-parser.cc:99
 msgid "Parsing..."
 msgstr "分析中..."
 
-#: lily-parser.cc:126
-msgid "braces don't match"
-msgstr ""
+#: lily-parser.cc:127
+#, fuzzy
+msgid "braces do not match"
+msgstr "不符合: ‘%s’"
 
-#: lyric-combine-music-iterator.cc:286
+#: lyric-combine-music-iterator.cc:291
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr ""
 
-#: main.cc:117
+#: main.cc:116
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -962,7 +988,8 @@ msgid ""
 "information.\n"
 msgstr ""
 
-#: main.cc:123
+#: main.cc:122
+#, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -973,7 +1000,7 @@ msgid ""
 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 "General Public License for more details.\n"
 "\n"
-"    You should have received a copy (refer to the file COPYING) of the\n"
+"    You should have received a copy of the\n"
 "GNU General Public License along with this program; if not, write to\n"
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
@@ -987,127 +1014,127 @@ msgstr ""
 "您應已收到附隨於本程式的 GNU 通用公共授權的副本;如無,請寫信至自由\n"
 "軟體基金會:59 Temple Place – Suite 330, Boston, Ma 02111-1307, USA\n"
 
-#: main.cc:154
+#: main.cc:153
 msgid "BACK"
 msgstr "背景模組"
 
-#: main.cc:154
+#: main.cc:153
 #, fuzzy
 msgid ""
-"use backend BACK (gnome, ps,eps,\n"
-"scm, svg, tex, texstr)\n"
-"default: PS"
+"use backend BACK (eps, gnome, ps [default],\n"
+"scm, svg, tex, texstr)"
 msgstr ""
 "使用指定的背景模組 (gnome, ps [預設],\n"
 "                                       scm, svg, tex, texstr)"
 
-#: main.cc:156
-msgid "SYM=VAL"
+#: main.cc:155
+msgid "SYM[=VAL]"
 msgstr ""
 
-#: main.cc:157
+#: main.cc:156
 msgid ""
-"set a Scheme program option. Uses #t if VAL is not specified\n"
-"Try -dhelp for help."
+"set Scheme option SYM to VAL (default: #t)\n"
+"Use -dhelp for help."
 msgstr ""
 
-#: main.cc:160
+#: main.cc:159
 msgid "EXPR"
 msgstr "表示式"
 
-#: main.cc:160
+#: main.cc:159
 msgid "evaluate scheme code"
 msgstr ""
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:163
+#: main.cc:162
 msgid "FORMATs"
 msgstr "格式"
 
-#: main.cc:163
+#: main.cc:162
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "輸出為指定 <格式>。也可以使用下列選項:"
 
-#: main.cc:164
+#: main.cc:163
 msgid "generate DVI (tex backend only)"
 msgstr "產生 DVI (只適用於 tex 背景模組)"
 
-#: main.cc:165
-msgid "relocate using directory of lilypond program"
-msgstr ""
-
-#: main.cc:166
+#: main.cc:164
 msgid "generate PDF (default)"
 msgstr "產生 PDF (預設)"
 
-#: main.cc:167
+#: main.cc:165
 msgid "generate PNG"
 msgstr "產生 PNG"
 
-#: main.cc:168
+#: main.cc:166
 msgid "generate PostScript"
 msgstr "產生 PostScript"
 
-#: main.cc:169
+#: main.cc:167
 msgid "generate TeX (tex backend only)"
 msgstr "產生 TeX (只適用於 tex 背景模組)"
 
-#: main.cc:170
-msgid "print this help"
-msgstr "印出這段說明訊息"
+#: main.cc:168
+msgid "show this help and exit"
+msgstr ""
 
-#: main.cc:171
+#: main.cc:169
 msgid "FIELD"
 msgstr "欄位"
 
-#: main.cc:171
-msgid "dump a header field to file BASENAME.FIELD"
+#: main.cc:169
+msgid ""
+"dump header field FIELD to file\n"
+"named BASENAME.FIELD"
 msgstr ""
 
-#: main.cc:172
-msgid "DIR"
-msgstr "目錄"
-
-#: main.cc:172
+#: main.cc:171
 msgid "add DIR to search path"
 msgstr "將 <目錄> 加入搜尋目錄中"
 
-#: main.cc:173
+#: main.cc:172
 msgid "use FILE as init file"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid "USER,GROUP,JAIL,DIR"
 msgstr ""
 
-#: main.cc:175
+#: main.cc:174
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
 
-#: main.cc:178
+#: main.cc:177
 msgid "do not generate printed output"
 msgstr ""
 
-#: main.cc:179
+#: main.cc:178
 msgid "write output to FILE (suffix will be added)"
 msgstr "將輸出內容寫入 <檔案> (會自動加上延伸檔名)"
 
-#: main.cc:180
+#: main.cc:179
 msgid "generate a preview of the first system"
 msgstr ""
 
+#: main.cc:180
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
 #: main.cc:181
-msgid "disallow unsafe Scheme and PostScript operations"
+msgid ""
+"disallow unsafe Scheme and PostScript\n"
+"operations"
 msgstr ""
 
-#: main.cc:182
-msgid "print version number"
+#: main.cc:183
+#, fuzzy
+msgid "show version number and exit"
 msgstr "顯示版本"
 
-#: main.cc:223
+#: main.cc:224
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -1117,79 +1144,79 @@ msgstr ""
 "%s  等等。"
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:250
+#: main.cc:251
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "用法: %s [選項]... 檔案..."
 
-#: main.cc:252
+#: main.cc:253
 #, c-format
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "排列樂譜,並且/或者由檔案產生 MIDI。"
 
-#: main.cc:254
+#: main.cc:255
 #, c-format
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond 是用來排列樂譜的軟體。"
 
-#: main.cc:256
+#: main.cc:257
 #, c-format
 msgid "For more information, see %s"
 msgstr "如果想獲取更多資訊,請瀏覽 %s"
 
-#: main.cc:258
+#: main.cc:259
 #, c-format
 msgid "Options:"
 msgstr "選項:"
 
-#: main.cc:262
+#: main.cc:263
 #, fuzzy, c-format
 msgid "Report bugs via %s"
 msgstr "請向 %s 匯報錯誤。"
 
-#: main.cc:308
+#: main.cc:309
 #, fuzzy, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "鋼琴踏板記號後要跟隨 3 個字串,但只找到 %d 個"
 
-#: main.cc:322
+#: main.cc:323
 #, c-format
 msgid "no such user: %s"
 msgstr "%s 用戶不存在"
 
-#: main.cc:324
+#: main.cc:325
 #, c-format
-msgid "can't get user id from user name: %s: %s"
+msgid "cannot get user id from user name: %s: %s"
 msgstr "無法從用戶名稱獲得 UID: %s: %s"
 
-#: main.cc:339
+#: main.cc:340
 #, c-format
 msgid "no such group: %s"
 msgstr "%s 群組不存在"
 
-#: main.cc:341
+#: main.cc:342
 #, c-format
-msgid "can't get group id from group name: %s: %s"
+msgid "cannot get group id from group name: %s: %s"
 msgstr "無法從群組名稱獲得 GID: %s: %s"
 
-#: main.cc:349
+#: main.cc:350
 #, c-format
-msgid "can't chroot to: %s: %s"
+msgid "cannot chroot to: %s: %s"
 msgstr ""
 
-#: main.cc:356
+#: main.cc:357
 #, c-format
-msgid "can't change group id to: %d: %s"
+msgid "cannot change group id to: %d: %s"
 msgstr "無法將 GID 更改為 %d: %s"
 
-#: main.cc:362
+#: main.cc:363
 #, c-format
-msgid "can't change user id to: %d: %s"
+msgid "cannot change user id to: %d: %s"
 msgstr "無法將 UID 更改為 %d: %s"
 
-#: main.cc:368
+#: main.cc:369
 #, c-format
-msgid "can't change working directory to: %s: %s"
+msgid "cannot change working directory to: %s: %s"
 msgstr "無法將工作目錄切換至: %s: %s"
 
 #: main.cc:415
@@ -1197,7 +1224,7 @@ msgstr "無法將工作目錄切換至: %s: %s"
 msgid "Evaluating %s"
 msgstr ""
 
-#: main.cc:638
+#: main.cc:645
 #, c-format
 msgid "exception caught: %s"
 msgstr ""
@@ -1211,37 +1238,37 @@ msgstr "rehearsalMark 必須是整數"
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:88
+#: mensural-ligature-engraver.cc:85
 msgid "ligature with less than 2 heads -> skipping"
 msgstr "圓滑線包含的音符符頭少於 2 個,因此忽略之"
 
-#: mensural-ligature-engraver.cc:115
+#: mensural-ligature-engraver.cc:112
 msgid "cannot determine pitch of ligature primitive -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:129
+#: mensural-ligature-engraver.cc:126
 msgid "single note ligature - skipping"
 msgstr "忽略單音符的圓滑線"
 
-#: mensural-ligature-engraver.cc:141
+#: mensural-ligature-engraver.cc:138
 msgid "prime interval within ligature -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:153
+#: mensural-ligature-engraver.cc:150
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:201
+#: mensural-ligature-engraver.cc:198
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:212
+#: mensural-ligature-engraver.cc:209
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:239
+#: mensural-ligature-engraver.cc:236
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -1249,7 +1276,7 @@ msgid ""
 "or the ligatura must be LB or SSB"
 msgstr ""
 
-#: mensural-ligature-engraver.cc:359
+#: mensural-ligature-engraver.cc:356
 msgid "unexpected case fall-through"
 msgstr ""
 
@@ -1266,114 +1293,117 @@ msgstr "Mensural_ligature: (join_right == 0)"
 msgid "no such MIDI instrument: `%s'"
 msgstr "MIDI 樂器不存在: ‘%s’"
 
-#: midi-item.cc:273
-msgid "silly pitch"
-msgstr ""
-
-#: midi-item.cc:289
+#: midi-item.cc:285
 #, c-format
 msgid "experimental: temporarily fine tuning (of %d cents) a channel."
 msgstr ""
 
 #: midi-stream.cc:28
 #, c-format
-msgid "can't open for write: %s: %s"
+msgid "cannot open for write: %s: %s"
 msgstr "無法開啟檔案來寫入內容: %s: %s"
 
 #: midi-stream.cc:44
 #, c-format
-msgid "can't write to file: `%s'"
+msgid "cannot write to file: `%s'"
 msgstr "無法寫入檔案: ‘%s’"
 
-#: music-iterator.cc:172
+#: music-iterator.cc:171
 msgid "Sending non-event to context"
 msgstr ""
 
-#: music.cc:142
+#: music.cc:141
 #, c-format
-msgid "octave check failed; expected \"%s\", found: %s"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: music.cc:208
+#: music.cc:207
 #, c-format
 msgid "transposition by %s makes alteration larger than double"
 msgstr ""
 
-#: new-fingering-engraver.cc:87
-msgid "can't add text scripts to individual note heads"
+#: new-fingering-engraver.cc:96
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: new-fingering-engraver.cc:246
+#: new-fingering-engraver.cc:239
 msgid "no placement found for fingerings"
 msgstr ""
 
-#: new-fingering-engraver.cc:247
+#: new-fingering-engraver.cc:240
 msgid "placing below"
 msgstr ""
 
-#: note-collision.cc:415
+#: note-collision.cc:457
 msgid "ignoring too many clashing note columns"
 msgstr ""
 
-#: note-column.cc:123
-msgid "can't have note heads and rests together on a stem"
+#: note-column.cc:124
+msgid "cannot have note heads and rests together on a stem"
 msgstr "一條符桿上不可以同時有符頭和休止符"
 
-#: note-head.cc:69
+#: note-head.cc:63
 #, fuzzy, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "找不到符頭 ‘%s’"
 
-#: note-heads-engraver.cc:63
+#: note-heads-engraver.cc:61
 msgid "NoteEvent without pitch"
 msgstr ""
 
 #: open-type-font.cc:33
 #, fuzzy, c-format
-msgid "can't allocate %lu bytes"
+msgid "cannot allocate %lu bytes"
 msgstr "無法分配 %d 位元組"
 
 #: open-type-font.cc:37
 #, c-format
-msgid "can't load font table: %s"
+msgid "cannot load font table: %s"
 msgstr "無法載入字型表: %s"
 
-#: open-type-font.cc:96
+#: open-type-font.cc:98
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "不支援字型格式: %s"
 
-#: open-type-font.cc:98
+#: open-type-font.cc:100
 #, c-format
 msgid "unknown error: %d reading font file: %s"
 msgstr ""
 
-#: open-type-font.cc:171 open-type-font.cc:295
-#, c-format
-msgid "FT_Get_Glyph_Name() returned error: %d"
+#: open-type-font.cc:173 open-type-font.cc:297
+#, fuzzy, c-format
+msgid "FT_Get_Glyph_Name() returned error: %u"
 msgstr "FT_Get_Glyph_Name() 回傳錯誤代碼: %d"
 
-#: page-turn-page-breaking.cc:227
+#: page-turn-page-breaking.cc:205
 msgid ""
-"couldn't fit the first page turn onto a single page. Consider setting first-"
+"cannot fit the first page turn onto a single page.  Consider setting first-"
 "page-number to an even number."
 msgstr ""
 
-#: page-turn-page-breaking.cc:240
+#: page-turn-page-breaking.cc:218
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:258 paper-score.cc:154
+#: page-turn-page-breaking.cc:236 paper-score.cc:154
 msgid "Drawing systems..."
 msgstr ""
 
-#: pango-font.cc:215
+#: pango-font.cc:181
+#, c-format
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
+msgstr ""
+
+#: pango-font.cc:224
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "字型 ‘%s’ 沒有 PostScript 字型名稱"
 
-#: pango-font.cc:263
+#: pango-font.cc:272
 msgid "FreeType face has no PostScript font name"
 msgstr ""
 
@@ -1407,15 +1437,15 @@ msgstr ""
 msgid "Track..."
 msgstr ""
 
-#: performance.cc:66
+#: performance.cc:74
 msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: performance.cc:67
+#: performance.cc:75
 msgid "remapping modulo 16"
 msgstr ""
 
-#: performance.cc:95
+#: performance.cc:103
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "將 MIDI 輸出至 ‘%s’..."
@@ -1424,23 +1454,23 @@ msgstr "將 MIDI 輸出至 ‘%s’..."
 msgid "unterminated phrasing slur"
 msgstr "樂句線沒有終點"
 
-#: piano-pedal-engraver.cc:304
+#: piano-pedal-engraver.cc:286
 #, fuzzy, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr "鋼琴踏板記號後要跟隨 3 個字串,但只找到 %d 個"
 
-#: piano-pedal-engraver.cc:319 piano-pedal-engraver.cc:330
+#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
 #: piano-pedal-performer.cc:93
 #, c-format
-msgid "can't find start of piano pedal: `%s'"
+msgid "cannot find start of piano pedal: `%s'"
 msgstr "找不到鋼琴踏板記號的開始位置: ‘%s’"
 
-#: piano-pedal-engraver.cc:377
+#: piano-pedal-engraver.cc:347
 #, c-format
-msgid "can't find start of piano pedal bracket: `%s'"
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "找不到鋼琴踏板記號的開始位置: ‘%s’"
 
-#: program-option.cc:195
+#: program-option.cc:205
 #, c-format
 msgid "no such internal option: %s"
 msgstr ""
@@ -1450,114 +1480,113 @@ msgstr ""
 msgid "not a grob name, `%s'"
 msgstr ""
 
-#: relative-octave-check.cc:39
+#: relative-octave-check.cc:38
 msgid "Failed octave check, got: "
 msgstr ""
 
 #: relocate.cc:44
 #, fuzzy, c-format
-msgid "Setting %s to %s\n"
+msgid "Setting %s to %s"
 msgstr "正在將字型寫入 %s"
 
-#: relocate.cc:58
+#: relocate.cc:59
 #, fuzzy, c-format
 msgid "no such file: %s for %s"
 msgstr "%s 用戶不存在"
 
-#: relocate.cc:68 relocate.cc:86
+#: relocate.cc:69 relocate.cc:87
 #, fuzzy, c-format
 msgid "no such directory: %s for %s"
 msgstr "%s 用戶不存在"
 
-#: relocate.cc:78
+#: relocate.cc:79
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#: relocate.cc:98
+#: relocate.cc:99
 #, c-format
 msgid "Relocation: compile prefix=%s, new prefix=%s"
 msgstr ""
 
-#: relocate.cc:128
+#: relocate.cc:129
 #, c-format
 msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: relocate.cc:168
+#: relocate.cc:169
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
 msgstr ""
 
-#: relocate.cc:175
+#: relocate.cc:176
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
 msgstr ""
 
-#: relocate.cc:184
+#: relocate.cc:185
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
 
-#: relocate.cc:353
+#: relocate.cc:354
 #, fuzzy, c-format
-msgid "Relocation file %s\n"
+msgid "Relocation file: %s"
 msgstr "無法開啟檔案: ‘%s’"
 
-#: relocate.cc:358
-#, fuzzy, c-format
-msgid "can't open file %s"
-msgstr "無法開啟檔案: ‘%s’"
-
-#: relocate.cc:388
+#: relocate.cc:390
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr ""
 
-#: rest-collision.cc:150
-msgid "can't resolve rest collision: rest direction not set"
+#: rest-collision.cc:151
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:164 rest-collision.cc:209
+#: rest-collision.cc:165 rest-collision.cc:210
 msgid "too many colliding rests"
 msgstr ""
 
-#: rest.cc:143
+#: rest.cc:144
 #, c-format
 msgid "rest `%s' not found"
 msgstr "找不到休止符 ‘%s’"
 
-#: score-engraver.cc:68
+#: score-engraver.cc:67
 #, c-format
 msgid "cannot find `%s'"
 msgstr "找不到 ‘%s’"
 
-#: score-engraver.cc:70
+#: score-engraver.cc:69
 msgid "Music font has not been installed properly."
 msgstr "樂譜字型沒有正確地安裝。"
 
-#: score-engraver.cc:72
+#: score-engraver.cc:71
 #, c-format
 msgid "Search path `%s'"
 msgstr "搜尋路徑 ‘%s’"
 
-#: score.cc:222
+#: score-engraver.cc:73
+msgid "Aborting"
+msgstr "終止"
+
+#: score.cc:225
 msgid "already have music in score"
 msgstr ""
 
-#: score.cc:223
+#: score.cc:226
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:228
+#: score.cc:231
 msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
 #: script-engraver.cc:102
-msgid "don't know how to interpret articulation: "
+msgid "do not know how to interpret articulation: "
 msgstr ""
 
 #: script-engraver.cc:103
@@ -1569,16 +1598,17 @@ msgstr ""
 msgid "No spring between column %d and next one"
 msgstr ""
 
-#: slur-engraver.cc:83
-msgid "Invalid direction of slur-event"
+#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#, c-format
+msgid "direction of %s invalid: %d"
 msgstr ""
 
-#: slur-engraver.cc:156
+#: slur-engraver.cc:157
 msgid "unterminated slur"
 msgstr "圓滑線沒有終點"
 
-#: slur-engraver.cc:165
-msgid "can't end slur"
+#: slur-engraver.cc:166
+msgid "cannot end slur"
 msgstr "無法結束圓滑線"
 
 #: source-file.cc:74
@@ -1590,57 +1620,57 @@ msgstr "本來應該讀入 %d 個字元,但實際上是 %d 個"
 msgid "staff-span event has no direction"
 msgstr ""
 
-#: stem-engraver.cc:95
+#: stem-engraver.cc:92
 msgid "tremolo duration is too long"
 msgstr ""
 
 #. FIXME:
-#: stem-engraver.cc:132
+#: stem-engraver.cc:129
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
 msgstr "將符頭加入不兼容的符桿 (type = %d)"
 
-#: stem-engraver.cc:134
+#: stem-engraver.cc:131
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#: stem.cc:104
+#: stem.cc:105
 msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#: stem.cc:627
+#: stem.cc:641
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:638
+#: stem.cc:652
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: system.cc:178
+#: system.cc:180
 #, c-format
 msgid "Element count %d."
 msgstr ""
 
-#: system.cc:270
+#: system.cc:276
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
-#: text-spanner-engraver.cc:60
-msgid "can't find start of text spanner"
+#: text-spanner-engraver.cc:61
+msgid "cannot find start of text spanner"
 msgstr ""
 
-#: text-spanner-engraver.cc:72
+#: text-spanner-engraver.cc:73
 msgid "already have a text spanner"
 msgstr ""
 
-#: text-spanner-engraver.cc:132
+#: text-spanner-engraver.cc:133
 msgid "unterminated text spanner"
 msgstr ""
 
-#: tie-engraver.cc:257
+#: tie-engraver.cc:264
 msgid "lonely tie"
 msgstr "單邊連結線"
 
@@ -1649,14 +1679,14 @@ msgstr "單邊連結線"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:63
+#: time-signature-engraver.cc:64
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "出現不正常的拍號: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:82
+#: time-signature.cc:83
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr "找不到拍號 ‘%s’,還原為數字形式"
@@ -1666,41 +1696,37 @@ msgstr "找不到拍號 ‘%s’,還原為數字形式"
 msgid "unknown translator: `%s'"
 msgstr ""
 
-#: translator-group.cc:152
+#: translator-group.cc:151
 #, c-format
-msgid "can't find: `%s'"
+msgid "cannot find: `%s'"
 msgstr "找不到: ‘%s’"
 
-#: translator.cc:310
+#: translator.cc:332
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: translator.cc:311
+#: translator.cc:333
 #, c-format
 msgid "Previous %s event here"
 msgstr ""
 
-#: trill-spanner-engraver.cc:67
-msgid "can't find start of trill spanner"
+#: trill-spanner-engraver.cc:68
+msgid "cannot find start of trill spanner"
 msgstr "找不到震音的起點"
 
-#: trill-spanner-engraver.cc:79
+#: trill-spanner-engraver.cc:80
 msgid "already have a trill spanner"
 msgstr "震音已經有起點"
 
-#: tuplet-engraver.cc:72
-msgid "invalid direction of tuplet-span-event"
-msgstr ""
-
-#: vaticana-ligature-engraver.cc:364
+#: vaticana-ligature-engraver.cc:388
 #, c-format
 msgid ""
 "ignored prefix (es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:601
+#: vaticana-ligature-engraver.cc:714
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr "Vaticana_ligature_engraver: 設定 `spacing-increment = %f': ptr =%ul"
@@ -1718,264 +1744,275 @@ msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
 msgstr ""
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:143
-msgid "can't end volta spanner"
+#: volta-engraver.cc:144
+msgid "cannot end volta spanner"
 msgstr ""
 
-#: volta-engraver.cc:153
+#: volta-engraver.cc:154
 msgid "already have a volta spanner, ending that one prematurely"
 msgstr ""
 
-#: volta-engraver.cc:157
+#: volta-engraver.cc:158
 msgid "also already have an ended spanner"
 msgstr ""
 
-#: parser.yy:704
+#: volta-engraver.cc:159
+msgid "giving up"
+msgstr "放棄"
+
+#: parser.yy:702
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper 不可以在 \\score 中使用,請改用 \\layout"
 
-#: parser.yy:728
+#: parser.yy:726
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1174
+#: parser.yy:1172
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1481
+#: parser.yy:1475
 msgid "second argument must be pitch list"
 msgstr ""
 
-#: parser.yy:1508 parser.yy:1513 parser.yy:1988
+#: parser.yy:1502 parser.yy:1507 parser.yy:1972
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:1612
+#: parser.yy:1604
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1770 parser.yy:1820
+#: parser.yy:1759 parser.yy:1809
 #, c-format
 msgid "not a duration: %d"
 msgstr "不是音符長度: %d"
 
-#: parser.yy:1940
+#: parser.yy:1926
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:2004
+#: parser.yy:1987
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: lexer.ll:177
+#: lexer.ll:176
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:181
+#: lexer.ll:180
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:236
+#: lexer.ll:235
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr ""
 
-#: lexer.ll:254
+#: lexer.ll:252
 msgid "quoted string expected after \\version"
 msgstr "\\version 後應該是加上引號的字串"
 
-#: lexer.ll:258
+#: lexer.ll:256
 msgid "quoted string expected after \\sourcefilename"
 msgstr "\\sourcefilename 後應該是加上引號的字串"
 
-#: lexer.ll:262
+#: lexer.ll:260
 #, fuzzy
 msgid "integer expected after \\sourcefileline"
 msgstr "\\sourcefilename 後應該是加上引號的字串"
 
-#: lexer.ll:275
+#: lexer.ll:273
 msgid "EOF found inside a comment"
 msgstr "檔案突然在註釋內結束"
 
-#: lexer.ll:290
+#: lexer.ll:288
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:314
+#: lexer.ll:312
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "錯誤或仍未定義的識別字: ‘%s’"
 
 #. backup rule
-#: lexer.ll:323
+#: lexer.ll:321
 msgid "end quote missing"
 msgstr "缺少了右引號"
 
-#: lexer.ll:468
+#: lexer.ll:466
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:561
+#: lexer.ll:559
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:661
+#: lexer.ll:659
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "字元無效: ‘%c’"
 
-#: lexer.ll:776
+#: lexer.ll:774 lexer.ll:775
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:882
+#: lexer.ll:880 lexer.ll:881
 #, c-format
-msgid "Incorrect lilypond version: %s (%s, %s)"
-msgstr "lilypond 版本不正確: %s (%s, %s)"
+msgid "file too old: %s (oldest supported: %s)"
+msgstr ""
 
-#: lexer.ll:883
-msgid "Consider updating the input with the convert-ly script"
+#: lexer.ll:881 lexer.ll:882
+#, fuzzy
+msgid "consider updating the input with the convert-ly script"
 msgstr "請考慮使用 convert-ly 命令稿來轉換輸入的內容"
 
-#: backend-library.scm:19 lily.scm:479 ps-to-png.scm:88
-#, lisp-format
+#: lexer.ll:887 lexer.ll:888
+#, c-format
+msgid "program too old: %s (file requires: %s)"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#, scheme-format
 msgid "Invoking `~a'..."
 msgstr ""
 
 #: backend-library.scm:24
-#, lisp-format
+#, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "‘~a’ 發生錯誤 (~a)"
 
 #: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
-#, lisp-format
+#, scheme-format
 msgid "Converting to `~a'..."
 msgstr "轉換為 ‘~a’..."
 
-#: backend-library.scm:110
-#, lisp-format
+#: backend-library.scm:108
+#, scheme-format
 msgid "Converting to ~a..."
 msgstr "轉換為 ~a..."
 
-#: backend-library.scm:156
-#, lisp-format
+#: backend-library.scm:145
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
 #: define-context-properties.scm:20 define-grob-properties.scm:10
 #: define-music-properties.scm:10
-#, lisp-format
+#, scheme-format
 msgid "symbol ~S redefined"
 msgstr "符號 ~S 被重複定義"
 
-#: define-event-classes.scm:116
-#, lisp-format
+#: define-event-classes.scm:119
+#, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:122
-#, lisp-format
+#: define-event-classes.scm:125
+#, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
 
-#: define-markup-commands.scm:256
+#: define-markup-commands.scm:255
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:1249
-#, lisp-format
+#: define-markup-commands.scm:1297
+#, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "音符長度無效: ~a"
 
-#: define-music-types.scm:734
-#, lisp-format
+#: define-music-types.scm:751
+#, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:737
-#, lisp-format
-msgid "can't find music object: ~S"
+#: define-music-types.scm:754
+#, scheme-format
+msgid "cannot find music object: ~S"
 msgstr ""
 
-#: define-music-types.scm:757
-#, lisp-format
+#: define-music-types.scm:774
+#, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr ""
 
-#: define-music-types.scm:758
+#: define-music-types.scm:775
 msgid "See music-types.scm for supported repeats"
 msgstr ""
 
 #: document-backend.scm:91
-#, lisp-format
+#, scheme-format
 msgid "pair expected in doc ~s"
 msgstr ""
 
 #: document-backend.scm:135
-#, lisp-format
-msgid "can't find interface for property: ~S"
+#, scheme-format
+msgid "cannot find interface for property: ~S"
 msgstr ""
 
 #: document-backend.scm:145
-#, lisp-format
+#, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr ""
 
 #: documentation-lib.scm:45
-#, lisp-format
+#, scheme-format
 msgid "Processing ~S..."
 msgstr "正在處理 ~S..."
 
 #: documentation-lib.scm:150
-#, lisp-format
+#, scheme-format
 msgid "Writing ~S..."
 msgstr "正在寫入 ~S..."
 
 #: documentation-lib.scm:172
-#, lisp-format
-msgid "can't find description for property ~S (~S)"
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr ""
 
-#: framework-eps.scm:77 framework-eps.scm:78
-#, lisp-format
+#: framework-eps.scm:91 framework-eps.scm:92
+#, scheme-format
 msgid "Writing ~a..."
 msgstr "正在寫入 ~a..."
 
-#: framework-ps.scm:278
-#, lisp-format
-msgid "can't embed ~S=~S"
+#: framework-ps.scm:279
+#, scheme-format
+msgid "cannot embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:331
-#, lisp-format
-msgid "can't extract file matching ~a from ~a"
+#: framework-ps.scm:332
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
 msgstr ""
 
-#: framework-ps.scm:348
-#, lisp-format
-msgid "don't know how to embed ~S=~S"
+#: framework-ps.scm:349
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
 msgstr ""
 
-#: framework-ps.scm:379
-#, lisp-format
-msgid "don't know how to embed font ~s ~s ~s"
+#: framework-ps.scm:380
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:610
-#, lisp-format
-msgid "can't convert <stdout> to ~S"
+#: framework-ps.scm:729
+#, scheme-format
+msgid "cannot convert <stdout> to ~S"
 msgstr "無法將 <標準輸出> 轉換為 ~S"
 
-#: framework-ps.scm:629 framework-ps.scm:632
-#, lisp-format
-msgid "can't generate ~S using the postscript back-end"
+#: framework-ps.scm:748 framework-ps.scm:751
+#, scheme-format
+msgid "cannot generate ~S using the postscript back-end"
 msgstr "無法使用 postscript 背景模組來產生 ~S"
 
-#: framework-ps.scm:639
+#: framework-ps.scm:758
 msgid ""
-"nThe PostScript backend does not support the 'classic'\n"
+"\n"
+"The PostScript backend does not support the 'classic'\n"
 "framework. Use the EPS backend instead,\n"
 "\n"
 "  lilypond -b eps <file>\n"
@@ -1984,55 +2021,55 @@ msgid ""
 msgstr ""
 
 #: framework-tex.scm:360
-#, lisp-format
+#, scheme-format
 msgid "TeX file name must not contain whitespace: `~a'"
 msgstr "TeX 檔案名稱不可以有空格: ‘~a’"
 
 #: layout-beam.scm:29
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
 #: layout-beam.scm:46
-#, lisp-format
+#, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: layout-page-layout.scm:353
+#: layout-page-layout.scm:357
 msgid "Calculating page breaks..."
 msgstr "正在計算頁面分割位置..."
 
-#: lily-library.scm:510
-#, lisp-format
+#: lily-library.scm:593
+#, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:543
-#, lisp-format
+#: lily-library.scm:626
+#, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:550
+#: lily-library.scm:633
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: lily.scm:131
-#, fuzzy, lisp-format
-msgid "Can't find ~A"
+#: lily.scm:144
+#, fuzzy, scheme-format
+msgid "cannot find: ~A"
 msgstr "找不到: ‘%s’"
 
-#: lily.scm:196
-#, lisp-format
+#: lily.scm:209
+#, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "參數 ~a 類型不正確。應該是 ~a,但實際是 ~s。"
 
-#: lily.scm:409 lily.scm:469
-#, lisp-format
+#: lily.scm:525 lily.scm:589
+#, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:459
-#, fuzzy, lisp-format
+#: lily.scm:579
+#, fuzzy, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "轉換為 ~a..."
 
@@ -2040,48 +2077,48 @@ msgstr "轉換為 ~a..."
 msgid "Music head function must return Music object"
 msgstr ""
 
-#: ly-syntax-constructors.scm:132
-#, lisp-format
+#: ly-syntax-constructors.scm:136
+#, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
 
-#: markup.scm:88
-#, lisp-format
+#: markup.scm:123
+#, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "參數數目不正確。應該是 ~A,但實際是 ~A: ~S。"
 
-#: markup.scm:94
-#, lisp-format
+#: markup.scm:129
+#, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr "位置 ~A 出現無效的參數。應該是 ~A,但實際是 ~S。"
 
-#: music-functions.scm:210
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: music-functions.scm:213
+msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:229
-#, fuzzy, lisp-format
+#: music-functions.scm:232
+#, fuzzy, scheme-format
 msgid "expecting 2 elements for chord tremolo, found ~a"
 msgstr "顫音和弦需要 2 個元素,但實際上找到 %d 個"
 
-#: music-functions.scm:535
-#, lisp-format
+#: music-functions.scm:538
+#, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:586
-#, lisp-format
+#: music-functions.scm:589
+#, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:745
-#, lisp-format
-msgid "can't find quoted music `~S'"
-msgstr ""
+#: music-functions.scm:748
+#, fuzzy, scheme-format
+msgid "cannot find quoted music: `~S'"
+msgstr "找不到字型:‘%s’"
 
-#: music-functions.scm:953
-#, lisp-format
+#: music-functions.scm:942
+#, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
@@ -2091,42 +2128,42 @@ msgid "utf-8-string encountered in PS backend"
 msgstr "PS 背景模組遇到 UTF-8 字串"
 
 #: output-svg.scm:42
-#, lisp-format
+#, scheme-format
 msgid "undefined: ~S"
 msgstr "未定義: ~S"
 
 #: output-svg.scm:132
-#, lisp-format
-msgid "can't decypher Pango description: ~a"
+#, scheme-format
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
 #: output-tex.scm:98
-#, lisp-format
-msgid "can't find ~a in ~a"
+#, scheme-format
+msgid "cannot find ~a in ~a"
 msgstr ""
 
 #: paper.scm:69
 msgid "Not in toplevel scope"
 msgstr ""
 
-#: paper.scm:114
-#, lisp-format
+#: paper.scm:117
+#, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:126
-#, lisp-format
+#: paper.scm:129
+#, scheme-format
 msgid "Unknown papersize: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:141
+#: paper.scm:144
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "\\paper { ... } 內必須使用 #(set-paper-size .. )"
 
 #: parser-clef.scm:126
-#, lisp-format
+#, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "出現不明譜號 ‘~a’"
 
@@ -2134,29 +2171,61 @@ msgstr "出現不明譜號 ‘~a’"
 msgid "see scm/clef.scm for supported clefs"
 msgstr "請在 scm/clef.scm 內參考目前支援的譜號"
 
-#: ps-to-png.scm:97
-#, fuzzy, lisp-format
+#: ps-to-png.scm:88
+#, fuzzy, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "%s 結束,回傳值為: %d"
 
 #: to-xml.scm:190
-msgid "assertion failed"
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
 
+#, fuzzy
+#~ msgid "show warranty"
+#~ msgstr "顯示保證條款及版權資訊"
+
+#~ msgid "Convert MIDI to LilyPond source."
+#~ msgstr "將 MIDI 轉換為 LilyPond 來源檔。"
+
+#, fuzzy
+#~ msgid "example"
+#~ msgstr "例子"
+
+#~ msgid "loading default font"
+#~ msgstr "正在載入預設字型"
+
+#~ msgid "cannot find default font: `%s'"
+#~ msgstr "找不到預設字型:‘%s’"
+
+#, fuzzy
+#~ msgid "couldnnot find line breaking that satisfies constraints"
+#~ msgstr "找不到符合指定條件的斷行位置"
+
+#~ msgid "crescendo too small"
+#~ msgstr "漸強符號太小"
+
+#~ msgid "print this help"
+#~ msgstr "印出這段說明訊息"
+
+#, fuzzy
+#~ msgid "cannot open file %s"
+#~ msgstr "無法開啟檔案: ‘%s’"
+
+#~ msgid "Incorrect lilypond version: %s (%s, %s)"
+#~ msgstr "lilypond 版本不正確: %s (%s, %s)"
+
 #~ msgid "distance undefined, assuming 0.1"
 #~ msgstr "未定義距離,假設為 0.1"
 
 #~ msgid "no feasible line breaking found"
 #~ msgstr "無法找出適當斷行位置"
 
-#~ msgid "can't find line breaking that satisfies constraints"
-#~ msgstr "找不到符合指定條件的斷行位置"
-
 #~ msgid ""
 #~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
 #~ msgstr "%s: TFM 檔案有 %u 個參數,多於目前能夠處理的 %u 個"
 
-#~ msgid "can't find ascii character: %d"
+#~ msgid "cannot find ascii character: %d"
 #~ msgstr "找不到 ascii 字元: %d"
 
 #~ msgid "unterminated trill spanner"
@@ -2168,9 +2237,6 @@ msgstr ""
 #~ msgid "lilylib module"
 #~ msgstr "lilylib 模組"
 
-#~ msgid "Usage: %s [OPTIONS]... FILE"
-#~ msgstr "用法: %s [選項]... 檔案"
-
 #~ msgid "Opening pipe `%s'"
 #~ msgstr "開啟管線 ‘%s’"
 
@@ -2221,12 +2287,6 @@ msgstr ""
 #~ msgid "command exited with value %d"
 #~ msgstr "指令結束,回傳值為 %d"
 
-#~ msgid "Example:"
-#~ msgstr "例子:"
-
-#~ msgid "Convert mup to LilyPond source."
-#~ msgstr "將 mup 格式轉換至 LilyPond 格式。"
-
 #~ msgid "debug"
 #~ msgstr "偵錯"
 
@@ -2251,7 +2311,7 @@ msgstr ""
 #~ msgid "Wrote `%s'"
 #~ msgstr "寫入‘%s’"
 
-#~ msgid "can't dlopen: %s: %s"
+#~ msgid "cannot dlopen: %s: %s"
 #~ msgstr "無法 dlopen: %s: %s"
 
 #~ msgid "error opening kpathsea library"
@@ -2266,9 +2326,6 @@ msgstr ""
 #~ msgid "checksum mismatch for font file: `%s'"
 #~ msgstr "字型檔的檢查碼出現錯誤: ‘%s’"
 
-#~ msgid "does not match: `%s'"
-#~ msgstr "不符合: ‘%s’"
-
 #~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
 #~ msgstr "重新產生所有 .afm 檔,並移除所有 .pk 和 .tfm 檔。"
 
@@ -2322,5 +2379,5 @@ msgstr ""
 #~ msgid "syntax error"
 #~ msgstr "語法錯誤"
 
-#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
+#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
 #~ msgstr "找不到 CFF/PFA/PFB 字型 ~S=~S"
index a2ac08534b12706c02d643d7ad5c7b1b83d6b6ff..a4d47978915c0915f0b14f07694f7f5040990f9c 100644 (file)
@@ -2885,3 +2885,69 @@ def conv (str):
 
 conversions.append (((2, 11, 2), conv, """ly:clone-parser -> ly:parser-clone"""))
 
+
+
+def conv (str):
+    str = re.sub ("Accidental\s*#'cautionary-style\s*=\s*#'smaller",
+                   "AccidentalCautionary #'font-size = #-2", str)
+    str = re.sub ("Accidental\s*#'cautionary-style\s*=\s*#'parentheses",
+                   "AccidentalCautionary #'parenthesized = ##t", str)
+    str = re.sub ("([A-Za-z]+)\s*#'cautionary-style\s*=\s*#'parentheses",
+                   r"\1 #'parenthesized = ##t", str)
+    str = re.sub ("([A-Za-z]+)\s*#'cautionary-style\s*=\s*#'smaller",
+                   r"\1 #'font-size = #-2", str)
+    
+    return str
+
+conversions.append (((2, 11, 5), conv, """deprecate cautionary-style. Use AccidentalCautionary properties"""))
+
+                    
+
+
+def conv (str):
+    
+    def sub_acc_name (m):
+        idx = int (m.group (1).replace ('M','-'))
+        
+        return ["accidentals.doublesharp",
+                "accidentals.sharp.slashslash.stemstemstem",
+                "accidentals.sharp",
+                "accidentals.sharp.slashslash.stem",
+                "accidentals.natural",
+                "accidentals.mirroredflat",
+                "accidentals.flat",
+                "accidentals.mirroredflat.flat",
+                "accidentals.flatflat"][4-idx]
+
+    str = re.sub (r"accidentals[.](M?[-0-9]+)",
+                  sub_acc_name, str) 
+    str = re.sub (r"(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)",
+                  r"\1 #'glyph-name-alist = #alteration-\2-glyph-name-alist", str)
+            
+    return str
+
+conversions.append (((2, 11, 6), conv, """Rename accidental glyphs, use glyph-name-alist."""))
+
+
+def conv (str):
+    str = re.sub (r'(\\set\s+)?([A-Z][a-zA-Z]+\s*\.\s*)allowBeamBreak',
+                  r"\override \2Beam #'breakable", str)
+    str = re.sub (r'(\\set\s+)?allowBeamBreak',
+                  r"\override Beam #'breakable", str)
+    str = re.sub (r'addquote' , 'addQuote', str)
+    if re.search ("Span_dynamic_performer", str):
+        error_file.write ("Span_dynamic_performer has been merged into Dynamic_performer")
+
+    return str
+
+conversions.append (((2, 11, 10), conv, """allowBeamBreak -> Beam #'breakable = ##t
+addquote -> addQuote
+
+"""))
+
+def conv (str):
+    str = re.sub (r'\(layout-set-staff-size \(\*\s*([0-9.]+)\s*(pt|mm|cm)\)\)',
+                  r'(layout-set-absolute-staff-size (* \1 \2))', str)
+    return str
+
+conversions.append (((2, 11, 11), conv, """layout-set-staff-size -> layout-set-absolute-staff-size"""))
index 877b98e360b1a67cd0390627385e524d9c87a9da..686993e5d87165b69c131aa33e7b1ca141eb22b8 100644 (file)
@@ -200,7 +200,7 @@ class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter):
                               metavar)
 
     def format_usage(self, usage):
-        return _("Usage: %s\n") % usage
+        return _("Usage: %s") % usage + '\n'
 
     def format_description(self, description):
        return description
index dc7d38196bec8c54aaf28ac6ab37b26541015f62..69ac12848cea0a9f2b9eb060e722fe79dd762ee1 100644 (file)
@@ -304,10 +304,10 @@ midi_parse_track (unsigned char **track, unsigned char *track_end)
 
   {  
     PyObject *pytime = PyInt_FromLong (0L);
+    unsigned char running_status = 0;
+       
     while (*track < track_end)
       {
-       unsigned char running_status = 0;
-       
        long dt = get_variable_length_number(track, track_end);
        PyObject *pyev = 0;
 
@@ -372,7 +372,7 @@ midi_parse (unsigned char **midi,unsigned  char *midi_end)
 
 
   if (division < 0)
-    /* return midi_error ("can't handle non-metrical time"); */
+    /* return midi_error (cannot handle non-metrical time"); */
     ;
   *midi += header_len - 6;
 
index fb01bcfbd55be2076198842e5cd9a5ae036dfcd7..f2555bb48132249db9f21b73362149beba2b87e7 100644 (file)
@@ -5,7 +5,7 @@ depth = ..
 INSTALLATION_DIR=$(local_lilypond_datadir)/scm/
 INSTALLATION_FILES=$(SCM_FILES)
 
-XGETTEXT_FLAGS = --language=Lisp
+XGETTEXT_FLAGS = --language=Scheme
 STEPMAKE_TEMPLATES=install scm po
 
 include $(depth)/make/stepmake.make
index 5258bcf516249978a06d25166fa46b6b50964dc4..eaefaf786752821a525cdfa406a353cbac0e18c9 100644 (file)
@@ -94,8 +94,7 @@
 
     (ly:message (_ "Converting to `~a'...") pdf-name)
     (ly:progress "\n")
-    (ly:system cmd)
-    ))
+    (ly:system cmd)))
 
 (use-modules (scm ps-to-png))
 
     ;; GS produces PNG files like BASE-page%d.png.
     ;;(ly:message (_ "Converting to `~a'...")
     ;;     (string-append (basename name ".ps") "-page1.png" )))
-  (let ((verbose (ly:get-option 'verbose))
-       (rename-page-1 #f))
-
+  (let* ((verbose (ly:get-option 'verbose))
+        (rename-page-1 #f))
     (ly:message (_ "Converting to ~a...") "PNG")
-
     (make-ps-images name
                    #:resolution resolution
-                   #:page-width  paper-width
+                   #:page-width paper-width
                    #:page-height paper-height
                    #:rename-page-1 rename-page-1
                    #:be-verbose verbose
                    #:anti-alias-factor (ly:get-option 'anti-alias-factor)
-                   #:pixmap-format (ly:get-option 'pixmap-format) 
-                   )
-    
+                   #:pixmap-format (ly:get-option 'pixmap-format))
     (ly:progress "\n")))
 
 (define-public (postprocess-output paper-book module filename formats)
-  (let*
-      ((completed (completize-formats formats))
-       (base (string-regexp-substitute "\\.[a-z]+$" "" filename))
-       (intermediate (remove
-                     (lambda (x)
-                       (member x formats)) 
-                     completed)))
-
-    (for-each
-     (lambda (f)
-       ((eval (string->symbol (format "convert-to-~a" f)) module)
-       paper-book filename))
-     completed)
-
+  (let* ((completed (completize-formats formats))
+        (base (string-regexp-substitute "\\.[a-z]+$" "" filename))
+        (intermediate (remove (lambda (x) (member x formats)) completed)))
+    
+    (for-each (lambda (f)
+               ((eval (string->symbol (format "convert-to-~a" f))
+                      module) paper-book filename)) completed)
     (if (ly:get-option 'delete-intermediate-files)
-       (for-each
-        (lambda (f)
-          (delete-file (string-append base "." f)))
-        intermediate))
-    ))
+       (for-each (lambda (f)
+                   (delete-file (string-append base "." f))) intermediate))))
 
 (define-public (completize-formats formats)
   (define new-fmts '())
-
   (if (member "png" formats)
       (set! formats (cons "ps" formats)))
   (if (member "pdf" formats)
       (set! formats (cons "ps" formats)))
-
-  (for-each
-   (lambda (x)
-     (if (member x formats) (set! new-fmts (cons x new-fmts))))
-   '("tex" "dvi" "ps" "pdf" "png"))
-
+  (for-each (lambda (x)
+             (if (member x formats) (set! new-fmts (cons x new-fmts))))
+           '("tex" "dvi" "ps" "pdf" "png"))
   (uniq-list (reverse new-fmts)))
 
 (define (header-to-file file-name key value)
index cf8ea886f28de2783db191bcb7a768d64092dcb6..275367bb39fec37fdb7663ab28ab9e9835f2b440 100644 (file)
@@ -218,6 +218,7 @@ DURATION, and INVERSION."
   (map (lambda (n)
         (define (nca x)
           (if (= x 7) FLAT 0))
+        
         (if (>= n 8)
             (ly:make-pitch 1 (- n 8) (nca n))
             (ly:make-pitch 0 (- n 1) (nca n))))
index fe4ba7ab12305dc9e126abfc13e203f9bfbe4e97..939ae7b91eebf91940af60650e9b11a96621a03a 100644 (file)
 ;; TODO: make into markup.
 ;; 
 (define-public (alteration->text-accidental-markup alteration)
+  
   (make-smaller-markup
    (make-raise-markup
     (if (= alteration FLAT)
        0.3
        0.6)
     (make-musicglyph-markup
-     (string-append "accidentals." (number->string alteration))))))
+     (assoc-get alteration standard-alteration-glyph-name-alist "")))))
   
 (define (accidental->markup alteration)
   "Return accidental markup for ALTERATION."
      (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename pitch)))
      (accidental->markup (ly:pitch-alteration pitch)))))
 
+(define (pitch-alteration-semitones pitch)
+  (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))
+
 (define-safe-public ((chord-name->german-markup B-instead-of-Bb) pitch)
   "Return pitch markup for PITCH, using german note names.
    If B-instead-of-Bb is set to #t real german names are returned.
    Otherwise semi-german names (with Bb and below keeping the british names)
 "
   (let* ((name (ly:pitch-notename pitch))
-         (alt (ly:pitch-alteration pitch))
-        (n-a (if (member (cons name alt) `((6 . ,FLAT) (6 . ,DOUBLE-FLAT)))
-                (cons 7 (+ (if B-instead-of-Bb SEMI-TONE 0) alt))
-                (cons name alt))))
+         (alt-semitones  (pitch-alteration-semitones pitch))
+        (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
+                 (cons 7 (+ (if B-instead-of-Bb 1 0) alt-semitones))
+                 (cons name alt-semitones))))
     (make-line-markup
      (list
       (make-simple-markup
        (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a)))
       (make-normal-size-super-markup
-       (accidental->markup (cdr n-a)))))))
+       (accidental->markup (/ (cdr n-a) 2)))))))
 
 (define-safe-public (note-name->german-markup pitch)
   (let* ((name (ly:pitch-notename pitch))
-        (alt (ly:pitch-alteration pitch))
-        (n-a (if (member (cons name alt) `((6 . ,FLAT) (6 . ,DOUBLE-FLAT)))
-                 (cons 7 (+ SEMI-TONE alt))
-                 (cons name alt))))
+        (alt-semitones (pitch-alteration-semitones pitch))
+        (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
+                 (cons 7 (+ 1 alt-semitones))
+                 (cons name alt-semitones))))
     (make-line-markup
      (list
       (string-append
        (list-ref '("c" "d" "e" "f" "g" "a" "h" "b") (car n-a))
        (if (or (equal? (car n-a) 2) (equal? (car n-a) 5))
-          (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (/ (cdr n-a) 2)))
-          (list-ref '("eses" "es" "" "is" "isis") (+ 2 (/ (cdr n-a) 2)))))))))
+          (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
+          (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))
 
 (define-public ((chord-name->italian-markup re-with-eacute) pitch)
   "Return pitch markup for PITCH, using italian/french note names.
index fe32b4ecd96cd923114968a4f19f440e073921e8..7dda76b16bf885aa8986e1a502dc41573c1efdb3 100644 (file)
@@ -38,7 +38,6 @@
      (alignBassFigureAccidentals ,boolean?
                                 "If true, then the accidentals are aligned in bass figure context.")
 
-     (allowBeamBreak ,boolean? "If true allow line breaks for beams over bar lines.")
      (associatedVoice ,string? "Name of the
 @code{Voice} that has the melody for this @code{Lyrics} line.")
      (autoBeamSettings ,list? "Specifies
@@ -249,6 +248,8 @@ selector for tab notation.")
      (ignoreBarChecks ,boolean? "Ignore bar checks")
      (ignoreMelismata ,boolean? "Ignore melismata for this @internalsref{Lyrics} line.")
 
+     (implicitTimeSignatureVisibility ,vector? "break visibility for the default timesignature.")
+
      (implicitBassFigures ,list? "List of bass figures that are not
 printed as numbers, but only as extender lines.")
      
@@ -260,6 +261,10 @@ the @code{instr} property labels following lines.")
      (instrumentEqualizer ,procedure? "
 Function taking a string (instrument name), and returning a (@var{min} . @var{max}) pair of numbers for the loudness range of the instrument.
 ")
+
+     ;; the definition is reversed wrt  traditional transposition
+     ;; this because \transpose { \transposition .. } won't work
+     ;; otherwise.
      (instrumentTransposition ,ly:pitch? "Defines the transposition of
 the instrument. Its value is the pitch that sounds like middle C. This
 is used to transpose the MIDI output, and @code{\\quote}s.")
@@ -275,9 +280,10 @@ alterations should be printed.  The format is (@var{step}
 ")
 
      (keySignature ,list? "The current key signature. This is an alist
-containing (@var{name} . @var{alter}) or ((@var{octave} . @var{name}) . @var{alter}).
- where @var{name} is from 0.. 6 and
-@var{alter} from -4 (double flat) to 4 (double sharp).
+containing (@var{step} . @var{alter}) or ((@var{octave} . @var{step})
+. @var{alter}).  where @var{step} is from 0.. 6 and @var{alter} a fraction, denoting
+alteration.  For alterations, use symbols, eg.
+@code{keySignature = #`((6 . ,FLAT))}
 ")
      (majorSevenSymbol ,markup? "How should
 the major 7th be formatted in a chord name?")
@@ -480,7 +486,7 @@ Valid values are described in @internalsref{bar-line-interface}.
      )
 
    `((slurMelismaBusy ,boolean? "Signal if a slur is present.")
-     (originalCentralCPosition
+     (originalMiddleCPosition
       ,integer?
       "Used for temporary overriding middle C in octavation brackets. ")
      (melismaBusy ,boolean? "Signifies
@@ -502,9 +508,6 @@ measure.  The format is the same as for keySignature, but can also
 contain ((@var{octave} . @var{name}) . (@var{alter} . @var{barnumber}))
 pairs. It is reset at every bar line.")
 
-     
-     (localKeySignatureChanges ,list? "Experimental. [DOCME]")
-
      (finalizations ,list? "List of expressions to evaluate before proceeding to next time step. Internal variable.")
      (busyGrobs ,list? "a queue of (@var{end-moment} . @var{GROB})
 conses. This is for internal (C++) use only.  This property contains
index e7d59622d4fec6af82016cdbe0d3c73cd4364f07..2bda1a2d025f020c4fcc3c20c5c3a05bc367db9b 100644 (file)
@@ -37,6 +37,7 @@
     (span-dynamic-event . (decrescendo-event crescendo-event))
     (pedal-event . (sostenuto-event sustain-event una-corda-event))
     (rhythmic-event . (lyric-event melodic-event multi-measure-rest-event
+                                  percent-event
                                   rest-event skip-event bass-figure-event))
     (melodic-event . (cluster-note-event note-event))
     (() . (Announcement))
index c6eb5204936c859ac80d3ea840048179a6ac6e7c..e141103e05b05d0aadfe0d5098e56912d76405a1 100644 (file)
  "Keep track of durations in a run of grace notes."
  '(columns common-shortest-duration))
 
+(ly:add-interface
+ 'key-cancellation-interface
+ "A key cancellation"
+ '())
+
 (ly:add-interface
  'ligature-interface
  "A ligature"
  '())
 
+(ly:add-interface
+ 'key-cancellation-interface
+ "A key cancellation"
+ '())
+
 (ly:add-interface
  'ligature-bracket-interface
  "A bracket indicating a ligature in the original edition"
 (ly:add-interface
  'trill-pitch-accidental-interface
  "An accidental for trill pitch"
- '(accidentals))
+ '()
+ )
 
 (ly:add-interface
  'rhythmic-grob-interface
- "Any object with a rhythmic basis. Used to determine which grobs
-are interesting enough to maintain a hara-kiri staff."
+ "Any object with a duration. Used to determine which grobs are
+interesting enough to maintain a hara-kiri staff."
  '())
 
 
@@ -165,6 +176,13 @@ are interesting enough to maintain a hara-kiri staff."
  "An interface for any notes set in a tablature staff"
  '())
 
+(ly:add-interface
+ 'unbreakable-spanner-interface
+ "A spanner that should not be broken across line breaks. Override
+with @code{breakable=##t}. "
+ '(breakable))
+
 (ly:add-interface
  'vertically-spaceable-interface
  "Objects that should be kept at constant vertical distances. Typically:
index 140cf382b7ba71a14059eee106f206dcb6c7c0fc..bddef11f2c8b4da0322a49354527e20c774d440b 100644 (file)
@@ -25,7 +25,7 @@
      (X-offset ,number? "The horizontal amount that this object is moved relative to its X-parent")
      (Y-offset ,number? "The vertical amount that this object is moved
 relative to its Y-parent")
-     (accidentals ,list? "List of alteration numbers")
+     (alteration ,number? "alteration numbers for accidental")
      (after-line-breaking ,boolean? "Dummy property, used to trigger callback for after-line-breaking")
      (alteration-alist ,list? "List of @code{(@var{pitch}
 . @var{accidental})} pairs for key signature.")
@@ -68,6 +68,7 @@ beaming patterns from stem to stem inside a beam.")
      (bracket-flare ,number-pair? "A pair of numbers specifying how
 much edges of brackets should slant outward.  Value 0.0 means straight
 edges")
+     (breakable ,boolean? "Allow breaks here.")
      (break-align-symbol ,symbol? "This key is used for aligning and
 spacing breakable items.")
      (break-align-orders ,vector? " Defines the order in which
@@ -98,10 +99,6 @@ tuplet bracket.")
 #t means visible, #f means killed.")
      (c0-position ,integer? "An integer indicating the position of
 middle C.")
-     (cautionary-style ,symbol? "How to print cautionary
-accidentals. Choices are @code{smaller} or
-@code{parentheses}.")
-     (cautionary ,boolean? "Is this a cautionary accidental?")
      (concaveness ,number? "A beam is concave when its inner stems are
 closer to the beam than the two outside stems. This number is a
 measure of the closeness of the inner stems. It is used for damping
@@ -141,6 +138,7 @@ edges '(@var{left-text} . @var{right-text}).")
      (extra-X-extent ,number-pair? "A grob is enlarged in X dimension
 by this much.")
      (extra-Y-extent ,number-pair? "See @code{extra-X-extent}.")
+     (extra-spacing-width ,number-pair? "In the horizontal spacing problem, we pad each item by this amount (by adding the car on the left side of the item and adding the cdr on the right side of the item). In order to make a grob take up no horizontal space at all, set this to (+inf.0 . -inf.0)")
      (X-extent ,number-pair? "Hard coded extent in X direction. ")
      (Y-extent ,number-pair? "See @code{X-extent}.")
      (extra-offset ,number-pair? "A pair representing an offset. This
@@ -189,6 +187,7 @@ typeset. Valid choices depend on the function that is reading this
 property.")
      (gap ,ly:dimension? "Size of a gap in a variable symbol.")
      (gap-count ,integer? "Number of gapped beams for tremolo.")
+     (glyph-name-alist ,list? "Alist of key-string pairs.")
      (grow-direction ,ly:dir? "Crescendo or decrescendo?")
      (hair-thickness ,number? "Thickness of the thin line in a bar line.")
      (head-direction ,ly:dir? "Are the note heads left or right in a semitie?")
@@ -200,7 +199,12 @@ of note-column for horizontal shifting. This is used by
 @internalsref{note-collision-interface}.")
      (avoid-slur ,symbol? "Method of handling slur collisions.
 Choices are @code{around}, @code{inside}, @code{outside}.  If unset, script
-and slur ignore eachother.")
+and slur ignore each other.  @code{around} will only move the script if
+there is a collision; @code{outside} will always move the script.")
+     (ignore-collision ,boolean? "If set, don't do note collision resolution on this NoteColumn.")
+     (infinite-spacing-height ,boolean? "If true, then for the purposes of
+horizontal spacing, treat this item as though it were infinitely tall. That
+is, no object from another column will be allowed to stick above or below this item.")
      (inspect-quants ,number-pair? "If debugging is set,
 set beam/slur quant to this position, and print the respective scores.")
      (inspect-index ,integer? "If debugging is set,
@@ -237,6 +241,8 @@ column is the start of a system.")
      (long-text ,markup? "Text markup.  See @usermanref{Text markup}.")
      (max-beam-connect ,integer? "Maximum number of beams to connect
 to beams from this stem. Further beams are typeset as beamlets.")
+     (max-stretch ,number? "The maximum amount that this vertical-axis-group
+can be vertically stretched (for example, in order to better fill a page).")
      (measure-length ,ly:moment? "Length of a
 measure. Used in some spacing situations.")
      (measure-count ,integer? "The number of measures for a
@@ -245,10 +251,14 @@ multimeasure rest.")
 note heads in collisions, even if they have different note heads. The
 smaller of the two heads will be rendered invisible. This used
 polyphonic guitar notation. The value of this setting is used by
-@internalsref{note-collision-interface} .")
+@internalsref{note-collision-interface} .
+merge-differently-headed only applies to opposing stem dirs
+(ie. Voice 1 & 2).")
      (merge-differently-dotted ,boolean? "Merge note heads in
 collisions, even if they have a different number of dots. This normal
-notation for some types of polyphonic music. ")
+notation for some types of polyphonic music.
+merge-differently-dotted only applies to opposing stem dirs
+(ie. Voice 1 & 2).")
      (minimum-length-fraction ,number? "Minimum length of ledger line as fraction of note head size.")
      (minimum-distance ,ly:dimension? "Minimum distance between rest
 and notes or beam.")
@@ -268,8 +278,6 @@ to flip the direction of custos stem.")
      (note-names ,vector? "Vector of strings containing names for
 easy-notation note heads.")
      (no-ledgers ,boolean? "If set, don't draw ledger lines on this object.")
-     (no-spacing-rods ,boolean? "Items with this property do not cause
-spacing constraints.")
      (no-stem-extend ,boolean? "If set, notes with ledger lines do not
 get stems extending to the middle staff line.")
      (non-musical ,boolean? "True if the grob belongs in a NonMusicalPaperColumn.")
@@ -301,6 +309,7 @@ with a negative penalty.")
 This affects the choices of the page breaker; it will avoid a page
 turn at a column with a positive penalty and prefer a page turn at a column
 with a negative penalty.")
+     (parenthesized ,boolean? "Parenthesize this grob.")
      (line-break-penalty ,number? "Penalty for a line break at this column.
 This affects the choices of the line breaker; it will avoid a line
 break at a column with a positive penalty and prefer a line break at a column
@@ -314,6 +323,7 @@ quicker the slur attains it @code{height-limit}.")
      (remove-empty ,boolean? "If set, remove group if it contains no
 @code{interesting-items}")
      (remove-first ,boolean? "Remove the first staff of a orchestral score?")
+     (restore-first ,boolean? "Print a natural before the accidental.")
      (rhythmic-location ,rhythmic-location? "Where (bar number, measure position) in the score.")
      (right-padding ,ly:dimension? "Space to insert on the right side  of an object (eg. between note and its accidentals.)")
      (rotation ,list? "Number of degrees to rotate this object, and what point
@@ -403,8 +413,11 @@ use LEFT.")
      (threshold ,number-pair? "(@var{min} . @var{max}), where
 @var{min} and @var{max} are dimensions in staff space.")
      (tie-configuration ,list? "List of (@var{position} . @var{dir})
-pairs, indicating the desired tie configuration. A non-pair entry in
-the list will cause said tie to be formatted automatically. ")
+pairs, indicating the desired tie configuration where @var{position} is
+the offset from the center of the
+staff in staff space and @var{dir} indicates the direction of the tie
+(1=>up, -1=>down, 0=>center).  A non-pair entry in the list will cause
+the corresponding tie to be formatted automatically.")
      (transparent ,boolean? "This makes the grob invisible.")
      (uniform-stretching ,boolean? "If set, items stretch proportional
 to their durations. This looks better in complex polyphonic patterns")
@@ -439,9 +452,12 @@ glissando line can be constructed from a whole number of squiggles.")
      (apply define-internal-grob-property x))
    
    `(
-     (pure-relevant-elements ,ly:grob-array? "The subset of elements that are relevant for finding the pure-Y-extent.")
+
+     ;;;;;;;;;;;;;;;;
+     ;; grobs & grob arrays. (alphabetical)
+     (Y-common ,ly:grob? "See X-common")
+     (X-common ,ly:grob? "Common refpoint for axis group.")
      (cached-pure-extents ,vector? "Used by a VerticalAxisGroup to cache the Y-extents of different column ranges.")
-     (common-refpoint-of-elements ,ly:grob? "Caches the common_refpoint_of_array of the elements grob-set")
      (axis-group-parent-X ,ly:grob? "Containing X axis group")
      (axis-group-parent-Y ,ly:grob? "Containing Y axis group")
      (accidental-grobs ,list? "Alist with (NOTENAME . GROBLIST) entries")
@@ -457,8 +473,21 @@ set, which grob to get the direction from .")
      (dots ,ly:grob-array? "multiple Dots objects.")
      (figures ,ly:grob-array? "Figured bass objects for continuation line.")
      (important-column-ranks ,vector? "Cache of columns that contain items-worth-living.")
+     (items-worth-living ,ly:grob-array? "A list of interesting items. If
+empty in a particular staff, then that staff is erased.")
+
      (glyph-name ,string? "a name of character within font.")
+     (left-neighbors ,ly:grob-array? " List of
+spacing-wish grobs that are close to the current column.
+
+The closest spacing-wishes determine the actual distances between the
+columns.
+")
+     (left-items ,ly:grob-array? "")
      (pedal-text ,ly:grob? "Pointer to the text of a mixed-style piano pedal.")
+     
+     (pure-Y-common ,ly:grob? "Caches the common_refpoint_of_array of the elements grob-set")
+     (pure-relevant-elements ,ly:grob-array? "The subset of elements that are relevant for finding the pure-Y-extent.")
      (stem ,ly:grob? "pointer to Stem object.")
      (tremolo-flag ,ly:grob? "The tremolo object on a stem.")
      (tie ,ly:grob? "")
@@ -471,7 +500,7 @@ set, which grob to get the direction from .")
      (bounded-by-me ,ly:grob-array? "list of spanners that have this
 column as start/begin point. Only columns that have grobs or act as
 bounds are spaced.")
-     (circled-tip ,boolean? "Put a circle at start/end of hairpins (al/del niente)")
+     
      (columns ,ly:grob-array? "list of grobs, typically containing
 paper-columns or note-column objects.")
      (conditional-elements ,ly:grob-array? "Internal use only")
@@ -480,93 +509,84 @@ in addition to notes and stems.")
      (elements ,ly:grob-array? "list of grobs, type depending on the Grob
 where this is set in.")
      (grace-spacing ,ly:grob? "a run of grace notes.")
-     (spacing ,ly:grob? "the spacing spanner governing this section.")
      (heads ,ly:grob-array? "List of note heads.")
-     (items-worth-living ,ly:grob-array? "A list of interesting items. If
-empty in a particular staff, then that staff is erased.")
-     (details ,list? "alist of parameters for detailed grob behavior.
 
-more information on the allowed parameters can be found by inspecting
-lily/slur-scoring.cc, lily/beam-quanting.cc, and
-lily/tie-formatting-problem.cc.  Setting @code{debug-tie-scoring},
-@code{debug-beam-scoring} or @code{debug-slur-scoring} also provides
-useful clues.
+     (note-columns ,pair? "list of NoteColumn grobs.")
 
-")
+     (normal-stems ,ly:grob-array? "Array of visible stems.") 
      (note-heads ,ly:grob-array? "List of note head grobs")
      (note-head ,ly:grob? "A single note head")
+     (right-items ,ly:grob-array? "")
+     (right-neighbors ,ly:grob-array? "see left-neighbors")
+     (separation-item ,ly:grob? "A separation item.")
+     (slur ,ly:grob? "A pointer to a slur object")
+     (spacing ,ly:grob? "the spacing spanner governing this section.")
+     (spaceable-staves ,ly:grob-array? "Objects to be spaced during page layout.")
      (side-support-elements ,ly:grob-array? "the support, a list of grobs.")
      (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing objects.")
      (stems ,ly:grob-array? "list of stem objects, corresponding to the notes that the arpeggio has to be before.")
      (tuplets ,ly:grob-array? "list of smaller tuplet brackets")
      (tuplet-number ,ly:grob? "the number for a bracket.")
 
-     (left-neighbors ,ly:grob-array? " List of
-spacing-wish grobs that are close to the current column.
+     
+     
+     ;;;;;;;;;;;;;;;;
+     ;; other
+     (begin-of-line-visible ,boolean? "Used for marking ChordNames that should only show changes.")
+     (cause ,scheme? "Any kind of causation objects (i.e. music, or perhaps translator) that was the cause for this grob.  ")
+     (circled-tip ,boolean? "Put a circle at start/end of hairpins (al/del niente)")
+     (delta-position ,number? "vertical position difference")
+     (details ,list? "alist of parameters for detailed grob behavior.
+
+more information on the allowed parameters can be found by inspecting
+lily/slur-scoring.cc, lily/beam-quanting.cc, and
+lily/tie-formatting-problem.cc.  Setting @code{debug-tie-scoring},
+@code{debug-beam-scoring} or @code{debug-slur-scoring} also provides
+useful clues.
 
-The closest spacing-wishes determine the actual distances between the
-columns.
 ")
-     (right-neighbors ,ly:grob-array? "see left-neighbors")
-     (left-items ,ly:grob-array? "")
-     (right-items ,ly:grob-array? "")
-     (cause ,scheme? "Any kind of causation objects (i.e. music, or perhaps translator) that was the cause for this grob.  ")
+
      (font ,ly:font-metric? "Cached font metric object")
+     (head-width ,ly:dimension? "width of this ligature head")
+     
+     (ideal-distances ,list? "(@var{obj} . (@var{dist} . @var{strength})) pairs.")
+     (interfaces ,list? "list of symbols indicating the interfaces supported by this object. Is initialized from the @code{meta} field.")
+     (least-squares-dy ,number? 
+                      "ideal beam slope, without damping.")
 
+     (meta ,list? "Contains meta information. It is an alist with the
+entries @code{name} and @code{interfaces}.")
+     (minimum-distances ,list? "list of rods, that have the format (@var{obj} . @var{dist}).")
+     
      (positioning-done ,boolean?
                       "Used to signal that a positioning element
 did its job. This ensures that a positioning is only done once.")
      (pure-Y-extent ,number-pair? "The estimated height of a system")
 
-
-     (script-stencil ,pair? "Pair (@code{type} . @code{arg}), which
-acts as an index for looking up a Stencil object.")
-
-     (meta ,list? "Contains meta information. It is an alist with the
-entries @code{name} and @code{interfaces}.")
-
-
-     ;; TODO: use interface for this!
      (quantized-positions ,number-pair? "Beam positions after quanting.")
-     (begin-of-line-visible ,boolean? "Used for marking ChordNames that should only show changes.")
-
      (quantize-position ,boolean? "If set, a vertical alignment is aligned to be within staff spaces.")
      (quant-score ,string? "Beam quanting score -- can be stored for
 debugging")
      
-     (least-squares-dy ,number? 
-                      "ideal beam slope, without damping.")
-     (stem-info ,pair? "caching of stem parameters")
-     (note-columns ,pair? "list of NoteColumn grobs.")
-
-;;; add-join would be enough if in ly:mensural-ligature::brew-ligature-primitive
-;;; the next note could be seen
-     (join-right-amount ,number? "")
-
-     (delta-position ,number? "vertical position difference")
-     (head-width ,ly:dimension? "width of this ligature head")
-
-     ;; [TODO: change this]
-     (primitive ,integer? "Pointer to a ligature primitive, i.e. an item similar to a note head that is part of a ligature. ")
-     (ideal-distances ,list? "(@var{obj} . (@var{dist} . @var{strength})) pairs.")
-     (minimum-distances ,list? "list of rods, that have the format (@var{obj} . @var{dist}).")
+     (script-stencil ,pair? "Pair (@code{type} . @code{arg}), which
+acts as an index for looking up a Stencil object.")
 
-     (interfaces ,list? "list of symbols indicating the interfaces supported by this object. Is initialized from the @code{meta} field.")
+     (stem-info ,pair? "caching of stem parameters")
      (shorten ,ly:dimension? "The amount of space that a
 stem. Internally used to distribute beam shortening over stems. ")
-     (slur ,ly:grob? "A pointer to a slur object")
+     (skyline-distance ,number? "The distance between this staff and the next one, as determined by a skyline algorithm.")
+     (skyline-horizontal-padding ,number? "For determining the vertical distance between 2 staves, it is possible to have a configuration which would result in a tight interleaving of grobs from the top staff and the bottom staff. The larger this parameter is, the farther apart the staves will be placed in such a configuration.")
      (use-breve-rest ,boolean? "Use breve rests for measures longer
 than a whole rest.")
      
 
-     (spaceable-staves ,ly:grob-array? "Objects to be spaced during page layout.")
-     (skyline-distance ,number? "The distance between this staff and the next one, as determined by a skyline algorithm.")
-     (skyline-horizontal-padding ,number? "For determining the vertical distance between 2 staves, it is possible to have a configuration which would result in a tight interleaving of grobs from the top staff and the bottom staff. The larger this parameter is, the farther apart the staves will be placed in such a configuration.")
-
      
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; ancient notation
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+     (join-right-amount ,number? "")
+     (primitive ,integer? "Pointer to a ligature primitive, i.e. an item similar to a note head that is part of a ligature. ")
+
+     
      ;;;;;;; TODO:
      ;; there are too many properties for ancient notation
      ;; probably neume-types (a list of symbols) would also work.
index 10a35dc68dd02a88c059c57a81fabd2ec7b0721d..a31b95dda69e128893d6229ff2a39f16a2bfcbe4 100644 (file)
     (Accidental
      . (
        (avoid-slur . inside)
-       (cautionary-style . parentheses)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+       (alteration . ,accidental-interface::calc-alteration) 
        (stencil . ,ly:accidental-interface::print)
-       (after-line-breaking
-        . ,ly:accidental-interface::after-line-breaking)
+       (Y-extent . ,ly:accidental-interface::height)
        (meta . ((class . Item)
                 (interfaces . (accidental-interface
                                font-interface))))))
+    (AccidentalCautionary
+     . (
+       (avoid-slur . inside)
+       (parenthesized . #t)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+       (alteration . ,accidental-interface::calc-alteration) 
+       (stencil . ,ly:accidental-interface::print)
+       (Y-extent . ,ly:accidental-interface::height)
+       (meta . ((class . Item)
+                (interfaces . (accidental-interface
+                               font-interface))))))
+
     
     (AccidentalSuggestion
      . (
        (stencil . ,ly:accidental-interface::print)
+       (Y-extent . ,ly:accidental-interface::height)
        (X-offset . ,(ly:make-simple-closure
                      `(,+
                        ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent))
                        ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self)))))
        (self-alignment-X . ,CENTER)
-       (cautionary . #t)
-       (cautionary-style . smaller)
+       (font-size . -2)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
+       (alteration . ,accidental-interface::calc-alteration)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
-       (cautionary-style . parentheses)
        (direction . ,UP)
        (staff-padding . 0.25)
+       (outside-staff-priority . 0)
        (script-priority . 0)
        (side-axis . ,X)
        (meta . ((class . Item)
        (padding . 0.5)
        (X-offset . ,ly:side-position-interface::x-aligned-side)
        (direction . ,LEFT)
-       (cautionary-style . parentheses)
        (stencil . ,ly:accidental-interface::print)
-       (after-line-breaking . ,ly:accidental-interface::after-line-breaking)
+       (Y-extent . ,ly:accidental-interface::height)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)      
        (side-axis . ,X)
        (meta . ((class . Item)
-                (interfaces . (item-interface
+                (interfaces . (
                                accidental-interface
                                break-aligned-interface
                                side-position-interface
        (layer . 0)
        (break-visibility . ,all-visible)
        (non-musical . #t)
-
        (stencil . ,ly:bar-line::print)
        (glyph-name . ,bar-line::calc-glyph-name)
        (bar-size .  ,ly:bar-line::calc-bar-size)
                        (key-signature . (extra-space . 1.0))
                        (key-cancellation . (extra-space . 1.0))
                        (first-note . (fixed-space . 1.3))
-                       (next-note . (semi-fixed-space . 1.3))
+                       (next-note . (semi-fixed-space . 0.9))
                        (right-edge . (extra-space . 0.0))))
 
        ;;
        (font-size . -2)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (side-axis . ,Y)
+       (outside-staff-priority . 100)
        (X-offset . ,(ly:make-simple-closure
                      `(,+
                        ,(ly:make-simple-closure
        (positioning-done . ,ly:align-interface::calc-positioning-done)
        (Y-extent . ,ly:axis-group-interface::height)
        (stacking-dir . -1)
+       (padding . 0.2)
        (meta . ((class . Spanner)
                 (interfaces . (align-interface
                                bass-figure-alignment-interface
        (beaming . ,ly:beam::calc-beaming)
        (stencil . ,ly:beam::print)
        (clip-edges . #t)
-       
+
+       (details .  ((hint-direction-penalty . 20)))
        ;; TODO: should be in SLT.
        (thickness . 0.48) ; in staff-space
        (neutral-direction . ,DOWN)
        ;; only for debugging.
        (font-family . roman)
        (meta . ((class . Spanner)
+                (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems))) 
                 (interfaces . (staff-symbol-referencer-interface
+                               unbreakable-spanner-interface
                                beam-interface))))))
 
     (BendAfter
      . (
        (Y-extent . ,ly:cluster-beacon::height)
        (meta . ((class . Item)
-                (interfaces . (cluster-beacon-interface))))))
+                (interfaces . (rhythmic-grob-interface
+                               cluster-beacon-interface))))))
 
     (ClusterSpanner
      . (
                                rhythmic-grob-interface
                                text-interface
                                chord-name-interface
-                               item-interface))))))
+                               ))))))
 
     (CombineTextScript
      . (
        (stencil . ,ly:text-interface::print)
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
        (direction . ,UP)
      . (
        (stencil . ,ly:dots::print)
        (dot-count . ,dots::calc-dot-count)
+       (staff-position . ,dots::calc-staff-position)
        (meta . ((class . Item)
                 (interfaces . (font-interface
                                staff-symbol-referencer-interface
        (font-encoding . fetaDynamic)
        (font-shape . italic)
        (avoid-slur . around)
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (outside-staff-priority . 250)
        (meta . ((class . Item)
                 (interfaces . (font-interface
        (self-alignment-X . 0)
        (self-alignment-Y . 0)
        (script-priority . 100)
-
        (stencil . ,ly:text-interface::print)
        (direction . ,ly:script-interface::calc-direction)
        (text . ,fingering::calc-text) 
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
     (FretBoard
      . ((stencil . ,fret-board::calc-stencil)
        (finger-code . below-string)
        (after-line-breaking . ,ly:line-spanner::after-line-breaking)
        (meta . ((class . Spanner)
                 (interfaces . (line-interface
+                               unbreakable-spanner-interface
                                line-spanner-interface))))))
 
     (GraceSpacing
        (shortest-duration-space . 1.6)
        (meta . ((class . Spanner)
                 (interfaces . (grace-spacing-interface
-                               spacing-interface
+                               
                                spacing-options-interface
                                spanner-interface))))))
     (GridPoint
     (KeyCancellation
      . (
        (stencil . ,ly:key-signature-interface::print)
+       (glyph-name-alist . ,cancellation-glyph-name-alist)
        (space-alist . (
                        (time-signature . (extra-space . 1.25))
                        (staff-bar . (extra-space . 0.6))
        (break-visibility . ,begin-of-line-invisible)
        (non-musical . #t)
        (meta . ((class . Item)
-                (interfaces . (key-signature-interface
+                (interfaces . (key-cancellation-interface
+                               key-signature-interface
                                font-interface
                                break-aligned-interface))))))
     (KeySignature
      . (
        (stencil . ,ly:key-signature-interface::print)
        (avoid-slur . inside)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
        (space-alist . (
                        (time-signature . (extra-space . 1.15))
                        (staff-bar . (extra-space . 1.1))
        (X-extent . #f)
        (meta . ((class . Spanner)
                 (interfaces . (spanner-interface
-                               lyric-hyphen-interface spacing-interface))
+                               lyric-hyphen-interface ))
                 ))
        ))
     
      . (
        (neutral-direction . ,DOWN)
        (meta . ((class . Item)
-                (interfaces . (melody-spanner-interface spacing-interface))))))
+                (interfaces . (melody-spanner-interface ))))))
     (MensuralLigature
      . (
        (thickness . 1.4)
        (direction . ,UP)
        (padding . 0.8)
        (side-axis . ,Y)
+       (outside-staff-priority . 1000)
        (meta . ((class . Item)
                 (interfaces . (text-interface
                                side-position-interface
        ;; If you ever change this back, please document! --hwn
        (knee-spacing-correction . 1.0)
        (meta . ((class . Item)
-                (interfaces . (spacing-interface
+                (interfaces . (
                                note-spacing-interface))))))
 
     (NoteName
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (stencil . ,ly:text-interface::print)
        (font-shape . italic)
-       (padding . 0.6)
        (staff-padding . 0.2)
        (font-size . -4)
        (meta . ((class . Item)
        (font-size . 2)
        (baseline-skip . 2)
        (break-visibility . ,end-of-line-invisible)
-       (break-align-symbol . staff-bar)
+       (break-align-symbol . clef)
        (padding . 0.8)
-       (outside-staff-priority . 1000)
+       (outside-staff-priority . 1500)
        (meta . ((class . Item)
                 (interfaces . (text-interface
                                side-position-interface
        (thickness . 0.48)
        (slope . 1.7)
        (meta . ((class . Item)
-                (interfaces . (percent-repeat-item-interface))))))
+                (interfaces . (rhythmic-grob-interface
+                               percent-repeat-item-interface))))))
 
     (RepeatTie
      . (
 
        ;; padding set in script definitions.
        (staff-padding . 0.25)
-       ;; (script-priority . 0) priorities for scripts, see script.scm
        (X-offset . ,ly:self-alignment-interface::centered-on-x-parent)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (side-axis . ,Y)
        (Y-extent . ,ly:axis-group-interface::height)
        (skylines . ,ly:separation-item::calc-skylines)
        (meta . ((class . Item)
-                (interfaces . (spacing-interface
+                (interfaces . (
                                separation-item-interface))))))
 
     (SeparatingGroupSpanner
        (springs-and-rods . ,ly:separating-group-spanner::set-spacing-rods)
        (meta . ((class . Spanner)
                 (interfaces . (only-prebreak-interface
-                               spacing-interface
+                               
                                separating-group-spanner-interface))))))
 
     (Slur
        (stencil . ,ly:text-interface::print)
        (direction . ,RIGHT)
        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
        (font-shape . italic)
        (self-alignment-X . 0)
        
        (base-shortest-duration . ,(ly:make-moment 3 16))
        (meta . ((class . Spanner)
-                (interfaces . (spacing-interface
+                (interfaces . (
                                spacing-options-interface                               
                                spacing-spanner-interface))))))
 
        (non-musical . #t)
        (stem-spacing-correction . 0.4)
        (meta . ((class . Item)
-                (interfaces . (spacing-interface
-                               staff-spacing-interface))))))
+                (interfaces . (staff-spacing-interface))))))
 
    
     (StaffSymbol
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
     
     (StrokeFinger
      . (
                                text-interface
                                side-position-interface
                                self-alignment-interface
-                               item-interface))))))
+                               ))))))
     
 
     (SustainPedal
      . (
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (stencil . ,ly:sustain-pedal::print)
        (self-alignment-X . 0)
        (direction . ,RIGHT)
        (X-extent . ,ly:axis-group-interface::width)
        (Y-extent . ,ly:axis-group-interface::height)
        (skylines . ,ly:axis-group-interface::calc-skylines)
+       (max-stretch . ,ly:axis-group-interface::calc-max-stretch)
        (skyline-horizontal-padding . 1.0)
        (meta . ((class . System)
                 (interfaces . (system-interface
 
     (TextScript
      . (
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
        (Y-offset . ,ly:side-position-interface::y-aligned-side)
        (side-axis . ,Y)
                    (stem-gap . 0.35)
                    (height-limit . 1.0)
                    (horizontal-distance-penalty-factor . 10)
-                   (min-length-penalty-factor . 20)
+                   (same-dir-as-stem-penalty . 8)
+                   (min-length-penalty-factor . 26)
                    (tie-tie-collision-distance . 0.45) 
                    (tie-tie-collision-penalty . 25.0)
                    (intra-space-threshold . 1.25)
                    (outer-tie-vertical-distance-symmetry-penalty-factor . 10)
                    (outer-tie-length-symmetry-penalty-factor . 10)
+                   (vertical-distance-penalty-factor . 7)
                    (outer-tie-vertical-gap . 0.25)
                    (multi-tie-region-size . 1)
+                   (single-tie-region-size . 4)
                    (between-length-limit . 1.0)))
        
        (thickness . 1.2)
        (font-size . -4)
        (side-axis . ,X)
        (stencil . ,ly:accidental-interface::print)
+       (Y-extent . ,ly:accidental-interface::height)
+       (glyph-name-alist . ,standard-alteration-glyph-name-alist)
        (meta . ((class . Item)
-                (interfaces . (item-interface
-                               trill-pitch-accidental-interface
+                (interfaces . (trill-pitch-accidental-interface
+                               accidental-interface
                                side-position-interface
                                font-interface))))))
 
        (padding . 0.3)
        (meta . ((class . Item)
                 (interfaces . (side-position-interface
+                               parentheses-interface
                                note-head-interface
                                rhythmic-head-interface
                                font-interface
-                               accidental-interface
                                axis-group-interface))))))
 
     (TrillPitchHead
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (font-size . -4)
        (meta . ((class . Item)
-                (interfaces . (item-interface
-                               rhythmic-head-interface
+                (interfaces . (rhythmic-head-interface
                                font-interface
                                pitched-trill-interface
                                ledgered-interface
      . (
        (stencil . ,ly:text-interface::print)
        (font-shape . italic)
-       (no-spacing-rods . #t)
+       (extra-spacing-width . (+inf.0 . -inf.0))
        (self-alignment-X . 0)
        (direction . ,RIGHT)
        (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
        (Y-extent . ,ly:axis-group-interface::height)
        (X-extent . ,ly:axis-group-interface::width)
        (stacking-dir . -1)
-       (padding . 0.1)
+       (padding . 0.5)
        (skylines . ,ly:axis-group-interface::combine-skylines)
+       (max-stretch . ,ly:align-interface::calc-max-stretch)
        (meta . ((class . Spanner)
+                (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)))
                 (interfaces . (align-interface
                                axis-group-interface))))))
     (VerticalAxisGroup
        (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
        (Y-extent . ,ly:hara-kiri-group-spanner::y-extent)
        (X-extent . ,ly:axis-group-interface::width)
-       (skylines . ,ly:axis-group-interface::calc-skylines);
+       (skylines . ,ly:axis-group-interface::calc-skylines)
+       (max-stretch . ,ly:axis-group-interface::calc-max-stretch)
        (meta . ((class . Spanner)
+                (object-callbacks . ((X-common . ,ly:axis-group-interface::calc-x-common)))
                 (interfaces . (axis-group-interface
                                hara-kiri-group-spanner-interface
                                vertically-spaceable-interface))))))
                               (cons 'spanner-interface ifaces-entry))))
      (else
       (ly:warning "Unknown class ~a" class)))
+
+    (set! ifaces-entry (uniq-list (sort ifaces-entry symbol<?)))
     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
 
     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
   (list
    ly:bar-line::print
    ly:note-head::print
-   ly:accidental-interface::print
    ly:dots::print
    ly:clef::print
    ly:text-interface::print
        '(0 . 0))))
 
 (define pure-conversions-alist
-  (list
-   `(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
-   `(,ly:stem::height . ,ly:stem::pure-height)
-   `(,ly:grob::stencil-height . ,pure-stencil-height)
-   `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)
-   `(,ly:axis-group-interface::height . ,ly:axis-group-interface::pure-height)
-   `(,ly:hara-kiri-group-spanner::y-extent . ,ly:hara-kiri-group-spanner::pure-height)
-   `(,ly:slur::height . ,ly:slur::pure-height)
-   `(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)))
+  `(
+    (,ly:accidental-interface::height . ,ly:accidental-interface::pure-height)
+    (,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
+    (,ly:stem::height . ,ly:stem::pure-height)
+    (,ly:rest::height . ,ly:rest::pure-height)
+    (,ly:grob::stencil-height . ,pure-stencil-height)
+    (,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)
+    (,ly:axis-group-interface::height . ,ly:axis-group-interface::pure-height)
+    (,ly:hara-kiri-group-spanner::y-extent . ,ly:hara-kiri-group-spanner::pure-height)
+    (,ly:slur::height . ,ly:slur::pure-height)
+    (,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)))
 
 (define pure-functions
   (list
    ly:staff-symbol-referencer::callback
    ly:staff-symbol::height))
 
-(define-public (pure-relevant grob)
+(define-public (pure-relevant? grob)
   (let ((extent-callback (ly:grob-property-data grob 'Y-extent)))
     (not (eq? #f
              (or
                  (or
                   (not (eq? extent-callback ly:grob::stencil-height))
                   (memq (ly:grob-property-data grob 'stencil) pure-print-callbacks)
-                  (ly:stencil? (ly:grob-property-data grob 'stencil))))))))))
+                  (ly:stencil? (ly:grob-property-data grob 'stencil))
+
+                  ))))))))
 
 (define-public (call-pure-function unpure args start end)
   (if (ly:simple-closure? unpure)
              (apply unpure args)
              (let ((pure (assq unpure pure-conversions-alist)))
                (if pure
-                   (apply (cdr pure) (append (list (car args) start end) (cdr args)))))))))
+                   (apply (cdr pure)
+                          (append
+                           (list (car args) start end)
+                           (cdr args)))))))))
index 5d96ecb179be690a0930a48c51ec4dfb72cddc8e..12dd691634b4bf127761ac77f29056e1dcf1145e 100644 (file)
 ;; geometric shapes
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (draw-circle layout props radius thickness fill)
+(define-builtin-markup-command (draw-circle layout props radius thickness fill)
   (number? number? boolean?)
   "A circle of radius @var{radius}, thickness @var{thickness} and
 optionally filled."
   (make-circle-stencil radius thickness fill))
 
-(define-markup-command (triangle layout props filled) (boolean?)
+(define-builtin-markup-command (triangle layout props filled) (boolean?)
   "A triangle, filled or not"
   (let*
       ((th (chain-assoc-get 'thickness props  0.1))
@@ -51,7 +51,7 @@ optionally filled."
      (cons 0 (* .86 ex))
      )))
 
-(define-markup-command (circle layout props arg) (markup?)
+(define-builtin-markup-command (circle layout props arg) (markup?)
   "Draw a circle around @var{arg}.  Use @code{thickness},
 @code{circle-padding} and @code{font-size} properties to determine line
 thickness and padding around the markup."
@@ -64,7 +64,7 @@ thickness and padding around the markup."
         (m (interpret-markup layout props arg)))
     (circle-stencil m th pad)))
 
-(define-markup-command (with-url layout props url arg) (string? markup?)
+(define-builtin-markup-command (with-url layout props url arg) (string? markup?)
   "Add a link to URL @var{url} around @var{arg}. This only works in
 the PDF backend."
   (let* ((stil (interpret-markup layout props arg))
@@ -75,7 +75,7 @@ the PDF backend."
     (ly:stencil-add (ly:make-stencil url-expr xextent yextent) stil)))
 
 
-(define-markup-command (beam layout props width slope thickness)
+(define-builtin-markup-command (beam layout props width slope thickness)
   (number? number? number?)
   "Create a beam with the specified parameters."
   (let* ((y (* slope width))
@@ -94,7 +94,7 @@ the PDF backend."
      (cons (+ (- half) (car yext))
           (+ half (cdr yext))))))
 
-(define-markup-command (box layout props arg) (markup?)
+(define-builtin-markup-command (box layout props arg) (markup?)
   "Draw a box round @var{arg}.  Looks at @code{thickness},
 @code{box-padding} and @code{font-size} properties to determine line
 thickness and padding around the markup."
@@ -106,7 +106,7 @@ thickness and padding around the markup."
         (m (interpret-markup layout props arg)))
     (box-stencil m th pad)))
 
-(define-markup-command (filled-box layout props xext yext blot)
+(define-builtin-markup-command (filled-box layout props xext yext blot)
   (number-pair? number-pair? number?)
   "Draw a box with rounded corners of dimensions @var{xext} and
 @var{yext}.  For example,
@@ -119,17 +119,17 @@ circle of diameter 0 (ie sharp corners)."
   (ly:round-filled-box
    xext yext blot))
 
-(define-markup-command (rotate layout props ang arg) (number? markup?)
+(define-builtin-markup-command (rotate layout props ang arg) (number? markup?)
   "Rotate object with @var{ang} degrees around its center."
   (let* ((stil (interpret-markup layout props arg)))
     (ly:stencil-rotate stil ang 0 0)))
 
 
-(define-markup-command (whiteout layout props arg) (markup?)
+(define-builtin-markup-command (whiteout layout props arg) (markup?)
   "Provide a white underground for @var{arg}"
   (stencil-whiteout (interpret-markup layout props arg)))
 
-(define-markup-command (pad-markup layout props padding arg) (number? markup?)
+(define-builtin-markup-command (pad-markup layout props padding arg) (number? markup?)
   "Add space around a markup object."
 
   (let*
@@ -147,7 +147,7 @@ circle of diameter 0 (ie sharp corners)."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;FIXME: is this working? 
-(define-markup-command (strut layout props) ()
+(define-builtin-markup-command (strut layout props) ()
   "Create a box of the same height as the space in the current font."
   (let ((m (ly:text-interface::interpret-markup layout props " ")))
     (ly:make-stencil (ly:stencil-expr m)
@@ -157,7 +157,7 @@ circle of diameter 0 (ie sharp corners)."
 
 
 ;; todo: fix negative space
-(define-markup-command (hspace layout props amount) (number?)
+(define-builtin-markup-command (hspace layout props amount) (number?)
   "This produces a invisible object taking horizontal space.
 @example 
 \\markup @{ A \\hspace #2.0 B @} 
@@ -174,7 +174,7 @@ normally inserted before elements on a line.
 ;; importing graphics.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (stencil layout props stil) (ly:stencil?)
+(define-builtin-markup-command (stencil layout props stil) (ly:stencil?)
   "Stencil as markup"
   stil)
 
@@ -193,7 +193,7 @@ normally inserted before elements on a line.
             
        #f)))
 
-(define-markup-command (epsfile layout props axis size file-name) (number? number? string?)
+(define-builtin-markup-command (epsfile layout props axis size file-name) (number? number? string?)
   "Inline an EPS image. The image is scaled along @var{axis} to
 @var{size}."
 
@@ -202,7 +202,7 @@ normally inserted before elements on a line.
       (eps-file->stencil axis size file-name)
       ))
 
-(define-markup-command (postscript layout props str) (string?)
+(define-builtin-markup-command (postscript layout props str) (string?)
   "This inserts @var{str} directly into the output as a PostScript
 command string.  Due to technicalities of the output backends,
 different scales should be used for the @TeX{} and PostScript backend,
@@ -244,7 +244,7 @@ grestore
    '(0 . 0) '(0 . 0)))
 
 
-(define-markup-command (score layout props score) (ly:score?)
+(define-builtin-markup-command (score layout props score) (ly:score?)
   "Inline an image of music."
   (let* ((output (ly:score-embedded-format score layout)))
 
@@ -255,7 +255,7 @@ grestore
          (ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
          empty-stencil))))
 
-(define-markup-command (null layout props) ()
+(define-builtin-markup-command (null layout props) ()
   "An empty markup with extents of a single point"
 
   point-stencil)
@@ -266,12 +266,12 @@ grestore
 
 
 
-(define-markup-command (simple layout props str) (string?)
+(define-builtin-markup-command (simple layout props str) (string?)
   "A simple text string; @code{\\markup @{ foo @}} is equivalent with
 @code{\\markup @{ \\simple #\"foo\" @}}."
   (interpret-markup layout props str))
 
-(define-markup-command (tied-lyric layout props str) (string?)
+(define-builtin-markup-command (tied-lyric layout props str) (string?)
   
   "Like simple-markup, but use tie characters for ~ tilde symbols."
 
@@ -329,7 +329,7 @@ grestore
        (/ (+ (car text-widths) (car (cdr text-widths))) 2))
      (get-fill-space word-count line-width (cdr text-widths))))))
 
-(define-markup-command (fill-line layout props markups)
+(define-builtin-markup-command (fill-line layout props markups)
   (markup-list?)
   "Put @var{markups} in a horizontal line of width @var{line-width}.
    The markups are spaced/flushed to fill the entire line.
@@ -389,7 +389,7 @@ grestore
        (stack-stencils-padding-list X
                                     RIGHT fill-space-normal line-stencils))))
        
-(define-markup-command (line layout props args) (markup-list?)
+(define-builtin-markup-command (line layout props args) (markup-list?)
   "Put @var{args} in a horizontal line.  The property @code{word-space}
 determines the space between each markup in @var{args}."
   (let*
@@ -406,7 +406,7 @@ determines the space between each markup in @var{args}."
      space
      (remove ly:stencil-empty? stencils))))
 
-(define-markup-command (concat layout props args) (markup-list?)
+(define-builtin-markup-command (concat layout props args) (markup-list?)
   "Concatenate @var{args} in a horizontal line, without spaces inbetween.
 Strings and simple markups are concatenated on the input level, allowing
 ligatures.  For example, @code{\\concat @{ \"f\" \\simple #\"i\" @}} is
@@ -524,14 +524,14 @@ equivalent to @code{\"fi\"}."
 
     (stack-lines DOWN 0.0 baseline-skip lines)))
 
-(define-markup-command (justify layout props args) (markup-list?)
+(define-builtin-markup-command (justify layout props args) (markup-list?)
   "Like wordwrap, but with lines stretched to justify the margins.
 Use @code{\\override #'(line-width . X)} to set line-width, where X
 is the number of staff spaces."
 
   (wordwrap-markups layout props args #t))
 
-(define-markup-command (wordwrap layout props args) (markup-list?)
+(define-builtin-markup-command (wordwrap layout props args) (markup-list?)
   "Simple wordwrap.  Use @code{\\override #'(line-width . X)} to set
 line-width, where X is the number of staff spaces."
 
@@ -572,23 +572,23 @@ line-width, where X is the number of staff spaces."
     (stack-lines DOWN 0.0 baseline-skip (apply append para-lines))))
 
 
-(define-markup-command (wordwrap-string layout props arg) (string?)
+(define-builtin-markup-command (wordwrap-string layout props arg) (string?)
   "Wordwrap a string. Paragraphs may be separated with double newlines"
   (wordwrap-string layout props  #f arg))
   
-(define-markup-command (justify-string layout props arg) (string?)
+(define-builtin-markup-command (justify-string layout props arg) (string?)
   "Justify a string. Paragraphs may be separated with double newlines"
   (wordwrap-string layout props #t arg))
 
 
-(define-markup-command (wordwrap-field layout props symbol) (symbol?)
+(define-builtin-markup-command (wordwrap-field layout props symbol) (symbol?)
    (let* ((m (chain-assoc-get symbol props)))
      (if (string? m)
       (interpret-markup layout props
        (list wordwrap-string-markup m))
       (ly:make-stencil '()  '(1 . -1) '(1 . -1)))))
 
-(define-markup-command (justify-field layout props symbol) (symbol?)
+(define-builtin-markup-command (justify-field layout props symbol) (symbol?)
    (let* ((m (chain-assoc-get symbol props)))
      (if (string? m)
       (interpret-markup layout props
@@ -597,7 +597,7 @@ line-width, where X is the number of staff spaces."
 
 
 
-(define-markup-command (combine layout props m1 m2) (markup? markup?)
+(define-builtin-markup-command (combine layout props m1 m2) (markup? markup?)
   "Print two markups on top of each other."
   (let* ((s1 (interpret-markup layout props m1))
         (s2 (interpret-markup layout props m2)))
@@ -606,7 +606,7 @@ line-width, where X is the number of staff spaces."
 ;;
 ;; TODO: should extract baseline-skip from each argument somehow..
 ;; 
-(define-markup-command (column layout props args) (markup-list?)
+(define-builtin-markup-command (column layout props args) (markup-list?)
   "Stack the markups in @var{args} vertically.  The property
 @code{baseline-skip} determines the space between each markup in @var{args}."
 
@@ -620,7 +620,7 @@ line-width, where X is the number of staff spaces."
      (remove ly:stencil-empty? arg-stencils))))
 
 
-(define-markup-command (dir-column layout props args) (markup-list?)
+(define-builtin-markup-command (dir-column layout props args) (markup-list?)
   "Make a column of args, going up or down, depending on the setting
 of the @code{#'direction} layout property."
   (let* ((dir (chain-assoc-get 'direction props)))
@@ -630,39 +630,39 @@ of the @code{#'direction} layout property."
      (chain-assoc-get 'baseline-skip props)
      (map (lambda (x) (interpret-markup layout props x)) args))))
 
-(define-markup-command (center-align layout props args) (markup-list?)
+(define-builtin-markup-command (center-align layout props args) (markup-list?)
   "Put @code{args} in a centered column. "
   (let* ((mols (map (lambda (x) (interpret-markup layout props x)) args))
          (cmols (map (lambda (x) (ly:stencil-aligned-to x X CENTER)) mols)))
     
     (stack-lines -1 0.0 (chain-assoc-get 'baseline-skip props) cmols)))
 
-(define-markup-command (vcenter layout props arg) (markup?)
+(define-builtin-markup-command (vcenter layout props arg) (markup?)
   "Align @code{arg} to its Y center. "
   (let* ((mol (interpret-markup layout props arg)))
     (ly:stencil-aligned-to mol Y CENTER)))
 
-(define-markup-command (hcenter layout props arg) (markup?)
+(define-builtin-markup-command (hcenter layout props arg) (markup?)
   "Align @code{arg} to its X center. "
   (let* ((mol (interpret-markup layout props arg)))
     (ly:stencil-aligned-to mol X CENTER)))
 
-(define-markup-command (right-align layout props arg) (markup?)
+(define-builtin-markup-command (right-align layout props arg) (markup?)
   "Align @var{arg} on its right edge. "
   (let* ((m (interpret-markup layout props arg)))
     (ly:stencil-aligned-to m X RIGHT)))
 
-(define-markup-command (left-align layout props arg) (markup?)
+(define-builtin-markup-command (left-align layout props arg) (markup?)
   "Align @var{arg} on its left edge. "
   (let* ((m (interpret-markup layout props arg)))
     (ly:stencil-aligned-to m X LEFT)))
 
-(define-markup-command (general-align layout props axis dir arg)  (integer? number? markup?)
+(define-builtin-markup-command (general-align layout props axis dir arg)  (integer? number? markup?)
   "Align @var{arg} in @var{axis} direction to the @var{dir} side."
   (let* ((m (interpret-markup layout props arg)))
     (ly:stencil-aligned-to m axis dir)))
 
-(define-markup-command (halign layout props dir arg) (number? markup?)
+(define-builtin-markup-command (halign layout props dir arg) (number? markup?)
   "Set horizontal alignment. If @var{dir} is @code{-1}, then it is
 left-aligned, while @code{+1} is right. Values in between interpolate
 alignment accordingly."
@@ -671,14 +671,14 @@ alignment accordingly."
 
 
 
-(define-markup-command (with-dimensions layout props x y arg) (number-pair? number-pair? markup?)
+(define-builtin-markup-command (with-dimensions layout props x y arg) (number-pair? number-pair? markup?)
   "Set the dimensions of @var{arg} to @var{x} and @var{y}."
   
   (let* ((m (interpret-markup layout props arg)))
     (ly:make-stencil (ly:stencil-expr m) x y)))
 
 
-(define-markup-command (pad-around layout props amount arg) (number? markup?)
+(define-builtin-markup-command (pad-around layout props amount arg) (number? markup?)
 
   "Add padding @var{amount} all around @var{arg}. "
   
@@ -694,7 +694,7 @@ alignment accordingly."
    ))
 
 
-(define-markup-command (pad-x layout props amount arg) (number? markup?)
+(define-builtin-markup-command (pad-x layout props amount arg) (number? markup?)
 
   "Add padding @var{amount} around @var{arg} in the X-direction. "
   (let*
@@ -709,17 +709,17 @@ alignment accordingly."
    ))
 
 
-(define-markup-command (put-adjacent layout props arg1 axis dir arg2) (markup? integer? ly:dir?  markup?)
+(define-builtin-markup-command (put-adjacent layout props arg1 axis dir arg2) (markup? integer? ly:dir?  markup?)
 
   "Put @var{arg2} next to @var{arg1}, without moving @var{arg1}.  "
   
   (let* ((m1 (interpret-markup layout props arg1))
         (m2 (interpret-markup layout props arg2)))
 
-    (ly:stencil-combine-at-edge m1 axis dir m2 0.0 0.0)
+    (ly:stencil-combine-at-edge m1 axis dir m2 0.0)
   ))
 
-(define-markup-command (transparent layout props arg) (markup?)
+(define-builtin-markup-command (transparent layout props arg) (markup?)
   "Make the argument transparent"
   (let*
       ((m (interpret-markup layout props arg))
@@ -732,7 +732,7 @@ alignment accordingly."
                     x y)))
 
 
-(define-markup-command (pad-to-box layout props x-ext y-ext arg)
+(define-builtin-markup-command (pad-to-box layout props x-ext y-ext arg)
   (number-pair? number-pair? markup?)
   "Make @var{arg} take at least @var{x-ext}, @var{y-ext} space"
 
@@ -746,7 +746,7 @@ alignment accordingly."
                     (interval-union y-ext y))))
 
 
-(define-markup-command (hcenter-in layout props length arg)
+(define-builtin-markup-command (hcenter-in layout props length arg)
   (number? markup?)
   "Center @var{arg} horizontally within a box of extending
 @var{length}/2 to the left and right."
@@ -762,7 +762,7 @@ alignment accordingly."
 ;; property
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (fromproperty layout props symbol) (symbol?)
+(define-builtin-markup-command (fromproperty layout props symbol) (symbol?)
   "Read the @var{symbol} from property settings, and produce a stencil
   from the markup contained within. If @var{symbol} is not defined, it
   returns an empty markup"
@@ -772,7 +772,7 @@ alignment accordingly."
        (ly:make-stencil '()  '(1 . -1) '(1 . -1)))))
 
 
-(define-markup-command (on-the-fly layout props procedure arg) (symbol? markup?)
+(define-builtin-markup-command (on-the-fly layout props procedure arg) (symbol? markup?)
   "Apply the @var{procedure} markup command to
 @var{arg}. @var{procedure} should take a single argument."
   (let* ((anonymous-with-signature (lambda (layout props arg) (procedure layout props arg))))
@@ -783,7 +783,7 @@ alignment accordingly."
 
 
 
-(define-markup-command (override layout props new-prop arg) (pair? markup?)
+(define-builtin-markup-command (override layout props new-prop arg) (pair? markup?)
   "Add the first argument in to the property list.  Properties may be
 any sort of property supported by @internalsref{font-interface} and
 @internalsref{text-interface}, for example
@@ -799,7 +799,7 @@ any sort of property supported by @internalsref{font-interface} and
 ;; files
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (verbatim-file layout props name) (string?)
+(define-builtin-markup-command (verbatim-file layout props name) (string?)
   "Read the contents of a file, and include verbatimly"
 
   (interpret-markup
@@ -819,26 +819,26 @@ any sort of property supported by @internalsref{font-interface} and
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
-(define-markup-command (bigger layout props arg) (markup?)
+(define-builtin-markup-command (bigger layout props arg) (markup?)
   "Increase the font size relative to current setting"
   (interpret-markup layout props
    `(,fontsize-markup 1 ,arg)))
 
-(define-markup-command (smaller layout props arg) (markup?)
+(define-builtin-markup-command (smaller layout props arg) (markup?)
   "Decrease the font size relative to current setting"
   (interpret-markup layout props
    `(,fontsize-markup -1 ,arg)))
 
-(define-markup-command larger (markup?) bigger-markup)
+(define-builtin-markup-command larger (markup?) bigger-markup)
 
-(define-markup-command (finger layout props arg) (markup?)
+(define-builtin-markup-command (finger layout props arg) (markup?)
   "Set the argument as small numbers."
   (interpret-markup layout
                     (cons '((font-size . -5) (font-encoding . fetaNumber)) props)
                     arg))
 
 
-(define-markup-command (fontsize layout props increment arg) (number? markup?)
+(define-builtin-markup-command (fontsize layout props increment arg) (number? markup?)
   "Add @var{increment} to the font-size. Adjust baseline skip accordingly."
 
   (let* ((fs (chain-assoc-get 'font-size props 0))
@@ -852,7 +852,7 @@ any sort of property supported by @internalsref{font-interface} and
 
 
 ;; FIXME -> should convert to font-size.
-(define-markup-command (magnify layout props sz arg) (number? markup?)
+(define-builtin-markup-command (magnify layout props sz arg) (number? markup?)
   "Set the font magnification for the its argument. In the following
 example, the middle A will be 10% larger:
 @example
@@ -866,54 +866,54 @@ Use @code{\\fontsize} otherwise."
    (prepend-alist-chain 'font-magnification sz props)
    arg))
 
-(define-markup-command (bold layout props arg) (markup?)
+(define-builtin-markup-command (bold layout props arg) (markup?)
   "Switch to bold font-series"
   (interpret-markup layout (prepend-alist-chain 'font-series 'bold props) arg))
 
-(define-markup-command (sans layout props arg) (markup?)
+(define-builtin-markup-command (sans layout props arg) (markup?)
   "Switch to the sans serif family"
   (interpret-markup layout (prepend-alist-chain 'font-family 'sans props) arg))
 
-(define-markup-command (number layout props arg) (markup?)
+(define-builtin-markup-command (number layout props arg) (markup?)
   "Set font family to @code{number}, which yields the font used for
 time signatures and fingerings.  This font only contains numbers and
 some punctuation. It doesn't have any letters.  "
   (interpret-markup layout (prepend-alist-chain 'font-encoding 'fetaNumber props) arg))
 
-(define-markup-command (roman layout props arg) (markup?)
+(define-builtin-markup-command (roman layout props arg) (markup?)
   "Set font family to @code{roman}."
   (interpret-markup layout (prepend-alist-chain 'font-family 'roman props) arg))
 
-(define-markup-command (huge layout props arg) (markup?)
+(define-builtin-markup-command (huge layout props arg) (markup?)
   "Set font size to +2."
   (interpret-markup layout (prepend-alist-chain 'font-size 2 props) arg))
 
-(define-markup-command (large layout props arg) (markup?)
+(define-builtin-markup-command (large layout props arg) (markup?)
   "Set font size to +1."
   (interpret-markup layout (prepend-alist-chain 'font-size 1 props) arg))
 
-(define-markup-command (normalsize layout props arg) (markup?)
+(define-builtin-markup-command (normalsize layout props arg) (markup?)
   "Set font size to default."
   (interpret-markup layout (prepend-alist-chain 'font-size 0 props) arg))
 
-(define-markup-command (small layout props arg) (markup?)
+(define-builtin-markup-command (small layout props arg) (markup?)
   "Set font size to -1."
   (interpret-markup layout (prepend-alist-chain 'font-size -1 props) arg))
 
-(define-markup-command (tiny layout props arg) (markup?)
+(define-builtin-markup-command (tiny layout props arg) (markup?)
   "Set font size to -2."
   (interpret-markup layout (prepend-alist-chain 'font-size -2 props) arg))
 
-(define-markup-command (teeny layout props arg) (markup?)
+(define-builtin-markup-command (teeny layout props arg) (markup?)
   "Set font size to -3."
   (interpret-markup layout (prepend-alist-chain 'font-size -3 props) arg))
 
-(define-markup-command (fontCaps layout props arg) (markup?)
+(define-builtin-markup-command (fontCaps layout props arg) (markup?)
   "Set @code{font-shape} to @code{caps}."
   (interpret-markup layout (prepend-alist-chain 'font-shape 'caps props) arg))
 
 ;; Poor man's caps
-(define-markup-command (smallCaps layout props text) (markup?)
+(define-builtin-markup-command (smallCaps layout props text) (markup?)
   "Turn @code{text}, which should be a string, to small caps.
 @example
 \\markup \\smallCaps \"Text between double quotes\"
@@ -978,10 +978,10 @@ some punctuation. It doesn't have any letters.  "
                                                 #f
                                                 #f)))
 
-(define-markup-command (caps layout props arg) (markup?)
+(define-builtin-markup-command (caps layout props arg) (markup?)
   (interpret-markup layout props (make-smallCaps-markup arg)))
 
-(define-markup-command (dynamic layout props arg) (markup?)
+(define-builtin-markup-command (dynamic layout props arg) (markup?)
   "Use the dynamic font.  This font only contains @b{s}, @b{f}, @b{m},
 @b{z}, @b{p}, and @b{r}.  When producing phrases, like ``pi@`{u} @b{f}'', the
 normal words (like ``pi@`{u}'') should be done in a different font.  The
@@ -989,7 +989,7 @@ recommend font for this is bold and italic"
   (interpret-markup
    layout (prepend-alist-chain 'font-encoding 'fetaDynamic props) arg))
 
-(define-markup-command (text layout props arg) (markup?)
+(define-builtin-markup-command (text layout props arg) (markup?)
   "Use a text font instead of music symbol or music alphabet font."  
 
   ;; ugh - latin1
@@ -997,26 +997,26 @@ recommend font for this is bold and italic"
                    arg))
 
 
-(define-markup-command (italic layout props arg) (markup?)
+(define-builtin-markup-command (italic layout props arg) (markup?)
   "Use italic @code{font-shape} for @var{arg}. "
   (interpret-markup layout (prepend-alist-chain 'font-shape 'italic props) arg))
 
-(define-markup-command (typewriter layout props arg) (markup?)
+(define-builtin-markup-command (typewriter layout props arg) (markup?)
   "Use @code{font-family} typewriter for @var{arg}."
   (interpret-markup
    layout (prepend-alist-chain 'font-family 'typewriter props) arg))
 
-(define-markup-command (upright layout props arg) (markup?)
+(define-builtin-markup-command (upright layout props arg) (markup?)
   "Set font shape to @code{upright}.  This is the opposite of @code{italic}."
   (interpret-markup
    layout (prepend-alist-chain 'font-shape 'upright props) arg))
 
-(define-markup-command (medium layout props arg) (markup?)
+(define-builtin-markup-command (medium layout props arg) (markup?)
   "Switch to medium font-series (in contrast to bold)."
   (interpret-markup layout (prepend-alist-chain 'font-series 'medium props)
                    arg))
 
-(define-markup-command (normal-text layout props arg) (markup?)
+(define-builtin-markup-command (normal-text layout props arg) (markup?)
   "Set all font related properties (except the size) to get the default normal text font, no matter what font was used earlier."
   ;; ugh - latin1
   (interpret-markup layout
@@ -1029,44 +1029,45 @@ recommend font for this is bold and italic"
 ;; symbols.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (doublesharp layout props) ()
+(define-builtin-markup-command (doublesharp layout props) ()
   "Draw a double sharp symbol."
 
-  (interpret-markup layout props (markup #:musicglyph "accidentals.4")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get 1 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (sesquisharp layout props) ()
+(define-builtin-markup-command (sesquisharp layout props) ()
   "Draw a 3/2 sharp symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.3")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get 3/4 standard-alteration-glyph-name-alist ""))))
+                                        
 
-(define-markup-command (sharp layout props) ()
+(define-builtin-markup-command (sharp layout props) ()
   "Draw a sharp symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.2")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get 1/2 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (semisharp layout props) ()
+(define-builtin-markup-command (semisharp layout props) ()
   "Draw a semi sharp symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.1")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get 1/4 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (natural layout props) ()
+(define-builtin-markup-command (natural layout props) ()
   "Draw a natural symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.0")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get 0 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (semiflat layout props) ()
+(define-builtin-markup-command (semiflat layout props) ()
   "Draw a semiflat."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.M1")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get -1/4 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (flat layout props) ()
+(define-builtin-markup-command (flat layout props) ()
   "Draw a flat symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.M2")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get -1/2 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (sesquiflat layout props) ()
+(define-builtin-markup-command (sesquiflat layout props) ()
   "Draw a 3/2 flat symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.M3")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get -3/4 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (doubleflat layout props) ()
+(define-builtin-markup-command (doubleflat layout props) ()
   "Draw a double flat symbol."
-  (interpret-markup layout props (markup #:musicglyph "accidentals.M4")))
+  (interpret-markup layout props (markup #:musicglyph (assoc-get -1 standard-alteration-glyph-name-alist ""))))
 
-(define-markup-command (with-color layout props color arg) (color? markup?)
+(define-builtin-markup-command (with-color layout props color arg) (color? markup?)
   "Draw @var{arg} in color specified by @var{color}"
 
   (let* ((stil (interpret-markup layout props arg)))
@@ -1081,7 +1082,7 @@ recommend font for this is bold and italic"
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
-(define-markup-command (arrow-head layout props axis direction filled)
+(define-builtin-markup-command (arrow-head layout props axis direction filled)
   (integer? ly:dir? boolean?)
   "produce an arrow head in specified direction and axis. Use the filled head if @var{filled} is  specified."
   (let*
@@ -1096,21 +1097,21 @@ recommend font for this is bold and italic"
                                     props))
      name)))
 
-(define-markup-command (musicglyph layout props glyph-name) (string?)
+(define-builtin-markup-command (musicglyph layout props glyph-name) (string?)
   "This is converted to a musical symbol, e.g. @code{\\musicglyph
-#\"accidentals.0\"} will select the natural sign from the music font.
+#\"accidentals.natural\"} will select the natural sign from the music font.
 See @usermanref{The Feta font} for  a complete listing of the possible glyphs."
   (ly:font-get-glyph
    (ly:paper-get-font layout (cons '((font-encoding . fetaMusic))
                                   props))
    glyph-name))
 
-(define-markup-command (lookup layout props glyph-name) (string?)
+(define-builtin-markup-command (lookup layout props glyph-name) (string?)
   "Lookup a glyph by name."
   (ly:font-get-glyph (ly:paper-get-font layout props)
                     glyph-name))
 
-(define-markup-command (char layout props num) (integer?)
+(define-builtin-markup-command (char layout props num) (integer?)
   "Produce a single character, e.g. @code{\\char #65} produces the 
 letter 'A'."
 
@@ -1138,13 +1139,13 @@ letter 'A'."
                       (number->markletter-string vec (remainder n lst)))
        (make-string 1 (vector-ref vec n)))))
 
-(define-markup-command (markletter layout props num) (integer?)
+(define-builtin-markup-command (markletter layout props num) (integer?)
   "Make a markup letter for @var{num}.  The letters start with A to Z
  (skipping I), and continues with double letters."
   (ly:text-interface::interpret-markup layout props
     (number->markletter-string number->mark-letter-vector num)))
 
-(define-markup-command (markalphabet layout props num) (integer?)
+(define-builtin-markup-command (markalphabet layout props num) (integer?)
    "Make a markup letter for @var{num}.  The letters start with A to Z
  and continues with double letters."
    (ly:text-interface::interpret-markup layout props
@@ -1152,7 +1153,7 @@ letter 'A'."
 
 
 
-(define-markup-command (slashed-digit layout props num) (integer?)
+(define-builtin-markup-command (slashed-digit layout props num) (integer?)
   "A feta number, with slash. This is for use in the context of
 figured bass notation"
   (let*
@@ -1167,30 +1168,42 @@ figured bass notation"
        (num-x (interval-widen (ly:stencil-extent number-stencil X)
                              (* mag 0.2)))
        (num-y (ly:stencil-extent number-stencil Y))
-       (slash-stencil 
-       (ly:make-stencil
-        `(draw-line
-          ,thickness
-          ,(car num-x) ,(- (interval-center num-y) dy)
-          ,(cdr num-x) ,(+ (interval-center num-y) dy))
-        num-x num-y
-        )))
-
-    (ly:stencil-add number-stencil
-                   (cond
-                    ((= num 5) (ly:stencil-translate slash-stencil
-                                                     ;;(cons (* mag -0.05) (* mag 0.42))
-                                                     (cons (* mag -0.00) (* mag -0.07))
-
-                                                     ))
-                    ((= num 7) (ly:stencil-translate slash-stencil
-                                                     ;;(cons (* mag -0.05) (* mag 0.42))
-                                                     (cons (* mag -0.00) (* mag -0.15))
-
-                                                     ))
-                    
-                    (else slash-stencil)))
-    ))
+       (is-sane (and (interval-sane? num-x) (interval-sane? num-y)))
+       
+       (slash-stencil
+       (if is-sane
+           (ly:make-stencil
+            `(draw-line
+              ,thickness
+              ,(car num-x) ,(- (interval-center num-y) dy)
+              ,(cdr num-x) ,(+ (interval-center num-y) dy))
+            num-x num-y)
+           #f)))
+
+    (set! slash-stencil
+         (cond
+          ((not (ly:stencil? slash-stencil)) #f)
+          ((= num 5) (ly:stencil-translate slash-stencil
+                                           ;;(cons (* mag -0.05) (* mag 0.42))
+                                           (cons (* mag -0.00) (* mag -0.07))
+
+                                           ))
+          ((= num 7) (ly:stencil-translate slash-stencil
+                                           ;;(cons (* mag -0.05) (* mag 0.42))
+                                           (cons (* mag -0.00) (* mag -0.15))
+
+                                           ))
+          
+          (else slash-stencil)))
+
+    (if slash-stencil
+       (set! number-stencil
+             (ly:stencil-add number-stencil slash-stencil))
+       
+       (ly:warning "invalid number for slashed digit ~a" num))
+
+
+    number-stencil))
 \f
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; the note command.
@@ -1199,7 +1212,7 @@ figured bass notation"
 
 ;; TODO: better syntax.
 
-(define-markup-command (note-by-number layout props log dot-count dir) (number? number? number?)
+(define-builtin-markup-command (note-by-number layout props log dot-count dir) (number? number? number?)
   "Construct a note symbol, with stem.  By using fractional values for
 @var{dir}, you can obtain longer or shorter stems."
 
@@ -1250,8 +1263,8 @@ figured bass notation"
                     (apply ly:stencil-add
                            (map (lambda (x)
                                   (ly:stencil-translate-axis
-                                   dot  (* (+ 1 (* 2 x)) dotwid) X))
-                                (iota dot-count 1)))))
+                                   dot (* 2 x dotwid) X))
+                                (iota dot-count)))))
          (flaggl (and (> log 2)
                       (ly:stencil-translate
                        (ly:font-get-glyph font
@@ -1259,6 +1272,9 @@ figured bass notation"
                                                         (if (> dir 0) "u" "d")
                                                         (number->string log)))
                        (cons (+ (car attach-off) (/ stem-thickness 2)) stemy)))))
+
+    (if (and dots flaggl (> dir 0))
+       (set! dots (ly:stencil-translate-axis dots 0.35 X)))
     (if flaggl
         (set! stem-glyph (ly:stencil-add flaggl stem-glyph)))
     (if (ly:stencil? stem-glyph)
@@ -1269,12 +1285,7 @@ figured bass notation"
               (ly:stencil-add
                (ly:stencil-translate-axis
                dots
-               (+ (if (and (> dir 0) (> log 2))
-                      (* 1.5 dotwid)
-                      0)
-                  ;; huh ? why not necessary?
-                  ;;(cdr (ly:stencil-extent head-glyph X))
-                  dotwid)
+               (+ (cdr (ly:stencil-extent head-glyph X)) dotwid)
                X)
                stem-glyph)))
     stem-glyph))
@@ -1296,7 +1307,7 @@ figured bass notation"
                 (if dots (string-length dots) 0)))
         (ly:error (_ "not a valid duration string: ~a") duration-string))))
 
-(define-markup-command (note layout props duration dir) (string? number?)
+(define-builtin-markup-command (note layout props duration dir) (string? number?)
   "This produces a note with a stem pointing in @var{dir} direction, with
 the @var{duration} for the note head type and augmentation dots. For
 example, @code{\\note #\"4.\" #-0.75} creates a dotted quarter note, with
@@ -1309,7 +1320,7 @@ a shortened down stem."
 ;; translating.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (lower layout props amount arg) (number? markup?)
+(define-builtin-markup-command (lower layout props amount arg) (number? markup?)
   "
 Lower @var{arg}, by the distance @var{amount}.
 A negative @var{amount} indicates raising, see also @code{\\raise}.
@@ -1318,7 +1329,7 @@ A negative @var{amount} indicates raising, see also @code{\\raise}.
                             (- amount) Y))
 
 
-(define-markup-command (translate-scaled layout props offset arg) (number-pair? markup?)
+(define-builtin-markup-command (translate-scaled layout props offset arg) (number-pair? markup?)
   "Translate @var{arg} by @var{offset}, scaling the offset by the @code{font-size}."
 
   (let*
@@ -1329,7 +1340,7 @@ A negative @var{amount} indicates raising, see also @code{\\raise}.
   (ly:stencil-translate (interpret-markup layout props arg)
                        scaled)))
 
-(define-markup-command (raise layout props amount arg) (number? markup?)
+(define-builtin-markup-command (raise layout props amount arg) (number? markup?)
   "
 Raise @var{arg}, by the distance @var{amount}.
 A negative @var{amount} indicates lowering, see also @code{\\lower}.
@@ -1348,7 +1359,7 @@ positions it next to the staff cancels any shift made with
 and/or @code{extra-offset} properties. "
   (ly:stencil-translate-axis (interpret-markup layout props arg) amount Y))
 
-(define-markup-command (fraction layout props arg1 arg2) (markup? markup?)
+(define-builtin-markup-command (fraction layout props arg1 arg2) (markup? markup?)
   "Make a fraction of two markups."
   (let* ((m1 (interpret-markup layout props arg1))
          (m2 (interpret-markup layout props arg2))
@@ -1376,13 +1387,13 @@ and/or @code{extra-offset} properties. "
 
 
 
-(define-markup-command (normal-size-super layout props arg) (markup?)
+(define-builtin-markup-command (normal-size-super layout props arg) (markup?)
   "Set @var{arg} in superscript with a normal font size."
   (ly:stencil-translate-axis
    (interpret-markup layout props arg)
    (* 0.5 (chain-assoc-get 'baseline-skip props)) Y))
 
-(define-markup-command (super layout props arg) (markup?)
+(define-builtin-markup-command (super layout props arg) (markup?)
   "
 @cindex raising text
 @cindex lowering text
@@ -1408,7 +1419,7 @@ Raising and lowering texts can be done with @code{\\super} and
    (* 0.5 (chain-assoc-get 'baseline-skip props))
    Y))
 
-(define-markup-command (translate layout props offset arg) (number-pair? markup?)
+(define-builtin-markup-command (translate layout props offset arg) (number-pair? markup?)
   "This translates an object. Its first argument is a cons of numbers
 @example
 A \\translate #(cons 2 -3) @{ B C @} D
@@ -1422,7 +1433,7 @@ that.
   (ly:stencil-translate (interpret-markup  layout props arg)
                        offset))
 
-(define-markup-command (sub layout props arg) (markup?)
+(define-builtin-markup-command (sub layout props arg) (markup?)
   "Set @var{arg} in subscript."
   (ly:stencil-translate-axis
    (interpret-markup
@@ -1432,7 +1443,7 @@ that.
    (* -0.5 (chain-assoc-get 'baseline-skip props))
    Y))
 
-(define-markup-command (normal-size-sub layout props arg) (markup?)
+(define-builtin-markup-command (normal-size-sub layout props arg) (markup?)
   "Set @var{arg} in subscript, in a normal font size."
   (ly:stencil-translate-axis
    (interpret-markup layout props arg)
@@ -1443,91 +1454,17 @@ that.
 ;; brackets.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-markup-command (hbracket layout props arg) (markup?)
+(define-builtin-markup-command (hbracket layout props arg) (markup?)
   "Draw horizontal brackets around @var{arg}."  
   (let ((th 0.1) ;; todo: take from GROB.
         (m (interpret-markup layout props arg)))
     (bracketify-stencil m X th (* 2.5 th) th)))
 
-(define-markup-command (bracket layout props arg) (markup?)
+(define-builtin-markup-command (bracket layout props arg) (markup?)
   "Draw vertical brackets around @var{arg}."  
   (let ((th 0.1) ;; todo: take from GROB.
         (m (interpret-markup layout props arg)))
     (bracketify-stencil m Y th (* 2.5 th) th)))
-
-(define-markup-command (bracketed-y-column layout props indices args)
-  (list? markup-list?)
-  "Make a column of the markups in @var{args}, putting brackets around
-the elements marked in @var{indices}, which is a list of numbers.
-
-"
-;;
-;; DROPME? This command is a relic from the old figured bass implementation.
-;;
-  
-  (define (sublist lst start stop)
-    (take (drop lst start) (- (1+ stop) start)))
-
-  (define (stencil-list-extent ss axis)
-    (cons
-     (apply min (map (lambda (x) (car (ly:stencil-extent x axis))) ss))
-     (apply max (map (lambda (x) (cdr (ly:stencil-extent x axis))) ss))))
-  
-
-  (define (stack-stencils-vertically stencils bskip last-stencil)
-    (cond
-     ((null? stencils) '())
-     ((not (ly:stencil? last-stencil))
-      (cons (car stencils)
-           (stack-stencils-vertically (cdr stencils) bskip (car stencils))))
-     (else
-      (let* ((orig (car stencils))
-            (dir (chain-assoc-get 'direction  props DOWN))
-            (new (ly:stencil-moved-to-edge last-stencil Y dir
-                                           orig
-                                           0.1 bskip)))
-
-       (cons new (stack-stencils-vertically (cdr stencils) bskip new))))))
-
-  (define (make-brackets stencils indices acc)
-    (if (and stencils
-            (pair? indices)
-            (pair? (cdr indices)))
-       (let* ((encl (sublist stencils (car indices) (cadr indices)))
-              (x-ext (stencil-list-extent encl X))
-              (y-ext (stencil-list-extent encl Y))
-              (thick 0.10)
-              (pad 0.35)
-              (protusion (* 2.5 thick))
-              (lb
-               (ly:stencil-translate-axis 
-                (ly:bracket Y y-ext thick protusion)
-                (- (car x-ext) pad) X))
-              (rb (ly:stencil-translate-axis
-                   (ly:bracket Y y-ext thick (- protusion))
-                   (+ (cdr x-ext) pad) X)))
-
-         (make-brackets
-          stencils (cddr indices)
-          (append
-           (list lb rb)
-           acc)))
-       acc))
-
-  (let* ((stencils
-         (map (lambda (x)
-                (interpret-markup
-                 layout
-                 props
-                 x)) args))
-        (leading
-         (chain-assoc-get 'baseline-skip props))
-        (stacked (stack-stencils-vertically
-                  (remove ly:stencil-empty? stencils) 1.25 #f))
-        (brackets (make-brackets stacked indices '())))
-
-    (apply ly:stencil-add
-          (append stacked brackets))))
 \f
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
index 66beb27cea6373b35ae9d3f39942878dcbb2b10e..ea72b1147646fcbd6c81e4b720ac99dfe2467893 100644 (file)
@@ -598,6 +598,7 @@ Otherwise, return #f."
        (fig (ly:music-property figure 'figure))
        (bracket-start (ly:music-property figure 'bracket-start))
        (bracket-stop (ly:music-property figure 'bracket-stop)))
+
     (format #f "~a~a~a~a"
            (if (null? bracket-start) "" "[")
            (cond ((null? fig) "_")
@@ -605,12 +606,12 @@ Otherwise, return #f."
                  (else fig))
            (if (null? alteration)
                ""
-               (case alteration
-                 ((-4) "--")
-                 ((-2) "-")
-                 ((0) "!")
-                 ((2) "+")
-                 ((4) "++")
+               (cond 
+                 ((= alteration DOUBLE-FLAT) "--")
+                 ((= alteration FLAT) "-")
+                 ((= alteration NATURAL) "!")
+                 ((= alteration SHARP) "+")
+                 ((= alteration DOUBLE-SHARP) "++")
                  (else "")))
            (if (null? bracket-stop) "" "]"))))
 
@@ -829,10 +830,14 @@ Otherwise, return #f."
 ;;; Layout properties
 
 (define-display-method OverrideProperty (expr parser)
-  (let ((symbol          (ly:music-property expr 'symbol))
-       (properties (ly:music-property expr 'grob-property-path))
-       (value    (ly:music-property expr 'grob-value))
-       (once     (ly:music-property expr 'once)))
+  (let* ((symbol         (ly:music-property expr 'symbol))
+        (property-path   (ly:music-property expr 'grob-property-path))
+        (properties      (if (pair? property-path)
+                             property-path
+                             (list (ly:music-property expr 'grob-property))))
+        (value   (ly:music-property expr 'grob-value))
+        (once    (ly:music-property expr 'once)))
+
     (format #f "~a\\override ~a~a #'~a = ~a~a"
            (if (or (null? once)
                    (not once))
index b9901d5d86793efc0478a40a62b9a15b1e6090bb..4a898263e4911020ad92749f3685847a3c823d64 100644 (file)
@@ -96,9 +96,6 @@ It must take a single argument, being the context.")
      (quoted-context-id ,string? "The id of the context to direct quotes to, eg., @code{cue}.")
      (quoted-transposition ,ly:pitch? "The pitch used for the quote, overriding \\transposition")
      (to-relative-callback ,procedure? "How to transform a piece of music to relative pitches")
-     (tweaks ,list? "An alist of properties to override in the backend
-for the grob made of this event.")
-     
      (repeat-count  ,integer? "do a @code{\repeat} how ofen?")
      (span-direction ,ly:dir? "Does this start or stop a spanner?")
      (span-type ,string? "What kind of spanner should be created?
@@ -122,6 +119,8 @@ e.g. @code{\\tag #'part ...} could tag a piece of music as only being active in
      (type ,symbol? "The type of this music object. Determines iteration in some cases.")
      (types ,list? "The types of this music object; determines by what
 engraver this music expression is processed.")
+     (tweaks ,list? "An alist of properties to override in the backend
+-for the grob made of this event.")
      (value ,scheme? "Assignment value for a
 translation property")
      (void ,boolean? "If this property is #t, then the music expression is to be
index 99036e4ed49f9c0fea41f5e0878a51bad20a3187..c421eefdf58690f562e9765d58e686441123e4df 100644 (file)
@@ -283,14 +283,6 @@ e.g. @code{\\mark \"A\"}.")
 
        (types . (general-music mark-event event))
        ))
-    (ManualMelismaEvent
-     . (
-       (description .  "Start or stop a melisma.
-
-Syntax: @code{c4\\melisma d\\melismaEnd}.")
-       (types . (general-music melisma-span-event event))
-       ))
-
     (MultiMeasureRestMusic
      . (
        (description . "Rests that may be compressed into Multi rests. 
@@ -387,7 +379,7 @@ Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.")
     (PercentEvent
      . (
        (description .  "Used internally to signal percent repeats.")
-       (types . (general-music event percent-event))
+       (types . (general-music event percent-event rhythmic-event))
        ))
 
     (PesOrFlexaEvent
@@ -751,7 +743,7 @@ and values. E.g:
       (ly:error (_ "symbol expected: ~S") name))
   (let ((props (hashq-ref music-name-to-property-table name '())))
     (if (not (pair? props))
-       (ly:error (_ "can't find music object: ~S") name))
+       (ly:error (_ "cannot find music object: ~S") name))
     (let ((m (ly:make-music props)))
       (define (set-props mus-props)
        (if (and (not (null? mus-props))
index 6b22d7f300a4aebe842db28dae3220e7a4b3ede7..08cc17cd33ce4d64c12e366d9a8e48e1a19ec7f7 100644 (file)
@@ -132,7 +132,7 @@ node."
 (define (check-dangling-properties prop)
   (if (not (object-property prop 'iface-marked))
       (ly:error (string-append "define-grob-properties.scm: "
-               (_ "can't find interface for property: ~S")) prop)))
+               (_ "cannot find interface for property: ~S")) prop)))
 
 (map check-dangling-properties all-backend-properties)
 
index 9a5e51eb19e7ec53349febb59f85747f70300b2e..27d1229ddebc4414958224e75a92a7eba57adced 100644 (file)
         (f-name (symbol->string (procedure-name  func)))
         (c-name (regexp-substitute/global #f "-markup$" f-name  'pre "" 'post))
         (sig (object-property func 'markup-signature))
-        (arg-names
-         (map symbol->string 
-              (cddr (cadr (procedure-source func)))))
-        
+        (arg-names (let ((arg-list (cadr (procedure-source func))))
+                      (if (list? arg-list)
+                          (map symbol->string (cddr arg-list))
+                          (make-list (length sig) "arg"))))
         (sig-type-names (map type-name sig))
         (signature-str
          (string-join
index ce91651e7785234fcec35d80698aae021d1a1d11..5a0afbbf34c51d5d4cbf2aef69570db4a190a008 100644 (file)
@@ -169,7 +169,7 @@ with init values from ALIST (1st optional argument)
         (handle (assoc sym alist)))
 
     (if (eq? desc #f)
-       (ly:error (_ "can't find description for property ~S (~S)") sym where))
+       (ly:error (_ "cannot find description for property ~S (~S)") sym where))
     
     (cons
      (string-append "@code{" name "} "
index e2215ede41b7b68913bc51bc6a41c93be9aac763..cf9bec54b30888aa08fc3526bcecb2a24fa8596a 100644 (file)
 stencil, so LaTeX includegraphics doesn't fuck up the alignment."
 
   (define left
-    (apply min
-          (map (lambda (stc)
-                 (interval-start (ly:stencil-extent stc X)))
-               stencils)))
+    (if (pair? stencils)
 
+       (apply min
+              (map (lambda (stc)
+                     (interval-start (ly:stencil-extent stc X)))
+                   stencils))
+       0.0))
+    
   (map (lambda (stil)
         
         (ly:make-stencil
@@ -79,18 +82,22 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment."
          (dump-stencils-as-separate-EPS rest (1+ count)))))
 
   ;; main body 
-  (let* ((tex-system-name (format "~a-systems.tex" basename))
-        (texi-system-name (format "~a-systems.texi" basename))
-        (tex-system-port (open-output-file tex-system-name))
-        (texi-system-port (open-output-file texi-system-name))
+  (let* ((write-file (lambda (str-port ext)
+                      (let*
+                          ((name (format "~a-systems.~a" basename ext))
+                           (port (open-output-file name)))
+                        (ly:message (_ "Writing ~a...") name)
+                        (display (get-output-string str-port) port)
+                        (close-output-port port)
+                        )))
+        
+        (tex-system-port (open-output-string))
+        (texi-system-port (open-output-string))
         (widened-stencils (widen-left-stencil-edges stencils))
         (counted-systems  (count-list widened-stencils))
         (eps-files (map dump-counted-stencil  counted-systems))
         )
     
-    (ly:message (_ "Writing ~a...") tex-system-name)
-    (ly:message (_ "Writing ~a...") texi-system-name)
-
     (if do-pdf
 
        ;; par-for-each: a bit faster ...  
@@ -113,15 +120,16 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment."
                                 basename (1+ c)) texi-system-port))
              (iota (length stencils)))
     
-    (display "@c eof - 'eof' is a Makefile marker; do not remove. " texi-system-port)
-    (display "% eof - 'eof' is Makefile marker; do not remove. " tex-system-port)
-    
-    (close-output-port texi-system-port)
-    (close-output-port tex-system-port)
+    (display "@c eof." texi-system-port)
+    (display "% eof. " tex-system-port)
     
     (dump-infinite-stack-EPS stencils)
     (postprocess-output book framework-eps-module
-                       (format "~a.eps" basename) (ly:output-formats))))
+                       (format "~a.eps" basename) (ly:output-formats))
+
+    (write-file texi-system-port "texi")
+    (write-file tex-system-port "tex")
+    ))
 
 
 
index 9e8cf4510d955dcd123aca45a1fd85927ab79072..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,421 +0,0 @@
-;;;; framework-gnome.scm --
-;;;;
-;;;;  source file of the GNU LilyPond music typesetter
-;;;; 
-;;;; (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
-
-;;;; See output-gnome.scm for usage information.
-
-
-(define-module (scm framework-gnome))
-
-(use-modules (guile)
-            (oop goops)
-            (scm page)
-            (scm paper-system)
-            (lily))
-
-(use-modules
- (srfi srfi-2)
- (ice-9 regex)
- (gnome gtk)
- (gnome gtk gdk-event)
- (gnome gw canvas))
-
-(define-public (output-framework basename book scopes fields )
-  (gnome-main book basename))
-
-(define SCROLLBAR-SIZE 20)
-(define BUTTON-HEIGHT 25)
-(define PANELS-HEIGHT 80)
-
-(define PIXELS-PER-UNIT 2)
-;; 2.5??
-(define OUTPUT-SCALE (* 2.5 PIXELS-PER-UNIT))
-(define-public output-scale OUTPUT-SCALE)
-
-(define (debugf string . rest)
-  (if #f
-      (apply stderr (cons string rest))))
-
-(define-class <gnome-outputter> ()
-  (name #:init-value "untitled" #:init-keyword #:name #:accessor name)
-
-  ;; FIXME
-  (dragging #:init-value #f #:accessor dragging)
-  (drag-origin #:init-value #f #:accessor drag-origin)
-  (drag-location #:init-value #f #:accessor drag-location)
-  
-  (page-stencils ;;#:init-value '#()
-   #:init-keyword #:page-stencils #:accessor page-stencils)
-  (window #:init-value (make <gtk-window> #:type 'toplevel) #:accessor window)
-  (scrolled #:init-value (make <gtk-scrolled-window>) #:accessor scrolled)
-  (canvas #:init-value #f #:accessor canvas)
-  (page-number #:init-value 0 #:accessor page-number)
-  (pixels-per-unit #:init-value PIXELS-PER-UNIT #:accessor pixels-per-unit)
-  (text-items #:init-value '() #:accessor text-items)
-  (grob #:init-value #f #:accessor grob)
-  (item-grobs #:init-value (make-hash-table 31) #:accessor item-grobs)
-  (window-width #:init-keyword #:window-width #:accessor window-width)
-  (window-height #:init-keyword #:window-height #:accessor window-height)
-  (canvas-width #:init-keyword #:canvas-width #:accessor canvas-width)
-  (canvas-height #:init-keyword #:canvas-height #:accessor canvas-height))
-
-(define-method (initialize (go <gnome-outputter>))
-  (let* ((save (make <gtk-button> #:label "Save"))
-        (exit (make <gtk-button> #:label "Exit"))
-        (next (make <gtk-button> #:label "Next"))
-        (prev (make <gtk-button> #:label "Previous"))
-        (vbox (make <gtk-vbox> #:homogeneous #f))
-        (hbox (make <gtk-hbox> #:homogeneous #f)))
-
-    (set-size-request (window go) (window-width go) (window-height go))
-    
-    (set-size-request (scrolled go) (window-width go) (- (window-height go)
-                                                        BUTTON-HEIGHT
-                                                        SCROLLBAR-SIZE))
-
-    (new-canvas go)
-
-    (add (window go) vbox)
-    (add vbox (scrolled go))
-    
-    (add (scrolled go) (canvas go))
-
-    ;; buttons
-    (add vbox hbox)
-    (set-size-request hbox (window-width go) BUTTON-HEIGHT)
-
-    ;; hmm?  These are broken when using <gnome-outputter>.
-    ;;(set-child-packing vbox hbox #f #f 0 'end)
-    ;;(set-child-packing hbox button #f #f 0 'end)
-    
-    (set-size-request exit (quotient (window-width go) 2) BUTTON-HEIGHT)
-
-    
-    (add hbox next)
-    (add hbox prev)
-    (add hbox save)
-    (add hbox exit)
-
-    ;; signals
-    (connect exit 'clicked (lambda (b) (gtk-main-quit)))
-    (connect save 'clicked (lambda (b) (save-tweaks go)))
-    (connect next 'clicked (lambda (b) (dump-page go (1+ (page-number go)))))
-    (connect prev 'clicked (lambda (b) (dump-page go (1- (page-number go)))))
-    (connect (window go) 'key-press-event
-            (lambda (w e) (key-press-event go w e)))
-    
-    (show-all (window go))))
-
-
-(define (gnome-main book name)
-  (let* ((paper (ly:paper-book-paper book))
-        (paper-width (ly:output-def-lookup paper 'paper-width))
-        (paper-height (ly:output-def-lookup paper 'paper-height))
-        (page-width (inexact->exact (ceiling (* OUTPUT-SCALE paper-width))))
-        (page-height (inexact->exact (ceiling (* OUTPUT-SCALE paper-height))))
-        ;;(page-width (inexact->exact (ceiling paper-width)))
-        ;;(page-height (inexact->exact (ceiling paper-height)))
-
-        (screen-width (gdk-screen-width))
-        (screen-height (gdk-screen-height))
-         (desktop-height (- screen-height PANELS-HEIGHT))
-
-        (go (make <gnome-outputter>
-              #:name name
-              #:page-stencils (list->vector (map page-stencil (ly:paper-book-pages book)))
-              #:canvas-width page-width
-              #:canvas-height page-height
-              #:window-width
-              ;; huh, *2 -- pixels-per-unit?
-              (min (+ SCROLLBAR-SIZE (* page-width 2)) screen-width)
-              #:window-height
-              (min (+ BUTTON-HEIGHT SCROLLBAR-SIZE (* page-height 2))
-                   desktop-height))))
-
-    ;; ugh.  The GOOPS doc promises this is called automagically.
-    ;; possibly a goops 1.6.4 problem
-    (initialize go)
-
-    (dump-page go 0)
-
-    (gtk-main)))
-
-(define (dump-page go number)
-  (if (or (not (page-stencils go))
-         (< number 0)
-         (>= number (vector-length (page-stencils go))))
-      (stderr "No such page: ~S\n" (1+ number))
-      
-      (let ((old-canvas (canvas go)))
-       (new-canvas go)
-       (set! (page-number go) number)
-       
-       ;; no destroy method for gnome-canvas-text yet.
-       ;;(map destroy (gtk-container-get-children main-canvas))
-       ;;(map destroy text-items)
-
-       (set! (text-items go) '())
-       (debugf "page-stencil ~S: ~S\n"
-               (page-number go)                
-               (vector-ref (page-stencils go) (page-number go)))
-       
-       (ly:interpret-stencil-expression 
-        ;; ;;(vector-ref (page-stencils go) (page-number go))
-        (ly:stencil-expr (vector-ref (page-stencils go) (page-number go)))
-        gnome-output-expression go '(0 . 0))
-
-       (if old-canvas (destroy old-canvas))
-       (add (scrolled go) (canvas go))
-       (show (canvas go)))))
-
-(define ifs #f)
-(define (get-ifs)
-  (if (not ifs)
-      (set! ifs (getenv "IFS")))
-  (if (not ifs)
-      (set! ifs "      "))
-  ifs)
-
-(define (spawn-editor location)
-  (let* ((file-name (car location))
-        (line (cadr location))
-        (char (caddr location))
-        (column (cadddr location))
-        (command (get-editor-command file line char column)))
-    (debugf "spawning: ~s\n" command)
-    (if (= (primitive-fork) 0)
-       (let ((command-list (string-split command #\ )));; (get-ifs))))
-         (apply execlp command-list)
-         (primitive-exit)))))
-
-(define location-callback spawn-editor)
-
-(define (get-location grob)
-  (and-let* ((p (procedure? point-and-click))
-            (g grob)
-            (cause (ly:grob-property grob 'cause))
-            (music-origin (if (ly:event? cause)
-                              (ly:event-property cause 'origin)
-                              ;; How come #<unspecified> [and '()]
-                              ;; are #t? :-(
-                              #f)))
-           (if (ly:input-location? music-origin)
-               (ly:input-location music-origin)
-               #f)))
-
-;; todo: how to integrate nicely?
-;(define-public (tweak-grob-property grob sym val)
-;  (set! (ly:grob-property grob sym) val))
-
-
-(define-method (tweak (go <gnome-outputter>) item offset)
-  (let* ((grob (hashq-ref (item-grobs go) item #f))
-        (extra-offset (ly:grob-property grob 'extra-offset))
-        (origin (if (null? extra-offset) '(0 . 0)
-                    (offset-flip-y extra-offset))))
-
-    (if grob
-       (ly:grob-replace-tweak
-        grob (list tweak-grob-property
-                   'extra-offset
-                   (offset-flip-y (offset-add origin offset)))))))
-
-(define-method (save-tweaks (go <gnome-outputter>))
-  (let* ((dumper (ly:make-dumper))
-        (tweaks (ly:all-tweaks))
-        (serialized-tweaks
-         (map
-          (lambda (tweak) (append 
-                           (list (ly:dumper-key-serial dumper (car tweak))
-                                 (list 'unquote (procedure-name (cadr tweak))))
-                           (cddr tweak)))
-          tweaks)))
-
-    (if (not (null? serialized-tweaks))
-       (let ((file (open-file (string-append (name go) ".twy") "w")))
-         (format file
-                 ";;;tweaks. Generated file. Do not edit. 
-(ly:tweak-clear-registry)
-(ly:tweak-define-keys `~S)
-(ly:tweak-define-tweaks `~S)"
-                 (ly:dumper-definitions dumper)
-                 serialized-tweaks)))))
-
-;;;(define (item-event go grob item event)
-(define (item-event go item event)
-  ;;(stderr "EVENT: ~S\n" event)
-  ;;(stderr "TYPE: ~S\n" (gdk-event:type event))
-  (case (gdk-event:type event)
-    ((enter-notify) (gobject-set-property item 'fill-color "red"))
-    ((leave-notify) (gobject-set-property item 'fill-color "black"))
-    ((motion-notify) (if (ly:grob? (dragging go))
-                        (let ((x (gdk-event-motion:x event))
-                              (y (gdk-event-motion:y event))
-                              (s output-scale)
-                              (r (drag-location go)))
-                          ;;(stderr "MOVED AT: ~S ~S\n" x y)
-                          (move item (/ (- x (car r)) s) (/ (- y (cdr r)) s))
-                          (set! (drag-location go) (cons x y)))))
-    ((button-release) (if (ly:grob? (dragging go))
-                         (let ((x (gdk-event-button:x event))
-                               (y (gdk-event-button:y event))
-                               (s output-scale)
-                               (o (drag-origin go))
-                               (r (drag-location go)))
-                           (move item (/ (- x (car r)) s) (/ (- y (cdr r)) s))
-                           (set! (drag-location go) #f)
-                           (set! (drag-origin go) #f)
-                           (stderr "RELEASE at: ~S ~S\n" x y)
-                           (set! (dragging go) #f)
-                           (tweak go item (cons (/ (- x (car o)) s)
-                                                (/ (- y (cdr o)) s))))))
-    ((button-press)
-     (let ((button (gdk-event-button:button event)))
-       (cond
-       ((= button 1)
-        (if (null? (gdk-event-button:modifiers event))
-            (let ((x (gdk-event-button:x event))
-                  (y (gdk-event-button:y event)))
-              (stderr "CLICK at: ~S ~S\n" x y)
-              (set! (dragging go) (hashq-ref (item-grobs go) item #f))
-              (set! (drag-origin go) (cons x y))
-              (set! (drag-location go) (cons x y)))
-            (begin
-              (stderr "CLICK WITH MODIFIERS: ~S\n"
-                      (gdk-event-button:modifiers event))
-              
-              ;; some modifier, do jump to source
-              (and-let* ((grob (hashq-ref (item-grobs go) item #f))
-                         (location (get-location grob)))
-                        (location-callback location)))))
-       ((= button 2)
-        (and-let* ((grob (hashq-ref (item-grobs go) item #f)))
-                  
-                  (let ((properties (ly:grob-properties grob))
-                        (basic-properties (ly:grob-basic-properties grob))
-                        (x (inexact->exact (gdk-event-button:x-root event)))
-                        (y (inexact->exact (gdk-event-button:y-root event))))
-                    
-                    (debugf "GROB: ~S\n" grob)
-                    (debugf "PROPERTIES: ~S\n" properties)
-                    (debugf "BASIC PROPERTIES: ~S\n" basic-properties)
-
-                    ;; FIXME: dialog iso window?
-                    ;; http://www.gtk.org/tutorial/sec-textentries.html
-                    (let ((window (make <gtk-window>))
-                          (vbox (make <gtk-vbox>))
-                          (ok (make <gtk-button> #:label "Ok")))
-                      
-                      (add window vbox)
-                      (connect ok 'clicked (lambda (b) (destroy window)))
-
-                      (for-each
-                       (lambda (x)
-                         (let ((label (make <gtk-label>
-                                        ;;#:label (symbol->string (car x))))
-                                        #:label (format #f "~S" (car x))))
-                               ;;(symbol->string (car x))))
-                               (entry (make <gtk-entry>
-                                        #:text (format #f "~S" (cdr x))))
-                               (hbox (make <gtk-hbox>)))
-                           (add hbox label)
-                           (add hbox entry)
-                           (set-size-request label 150 BUTTON-HEIGHT)
-                           (add vbox hbox)))
-                       (append properties basic-properties))
-                      (add vbox ok)
-                      
-                      (show-all window)
-                      (move window x y))))))))
-    
-    ((2button-press) (gobject-set-property item 'fill-color "green"))
-    ((key-press)
-     (let ((keyval (gdk-event-key:keyval event))
-          (mods (gdk-event-key:modifiers event))
-          (step (quotient (pixels-per-unit go) 2)))
-       (cond ((and (null? mods)
-                  (eq? keyval gdk:Up))
-             (tweak go item (cons 0 (- 0 step))))
-            ((and (null? mods)
-                  (eq? keyval gdk:Down))
-             (tweak go item (cons 0 step)))
-            ((and (null? mods)
-                  (eq? keyval gdk:Left))
-             (tweak go item (cons (- 0 step) 0)))
-            ((and (null? mods)
-                  (eq? keyval gdk:Right))
-             (tweak go item (cons step 0)))))))
-  #t)
-
-(define (scale-canvas go factor)
-  (set! (pixels-per-unit go) (* (pixels-per-unit go) factor))
-  (set-pixels-per-unit (canvas go) (pixels-per-unit go))
-  (for-each
-   (lambda (x)
-     (let ((scale (gobject-get-property x 'scale))
-          (points (gobject-get-property x 'size-points)))
-       ;;(gobject-set-property x 'scale pixels-per-unit)
-       (gobject-set-property x 'size-points (* points factor))))
-   (text-items go)))
-
-(define (key-press-event go item event)
-  (let ((keyval (gdk-event-key:keyval event))
-       (mods (gdk-event-key:modifiers event)))
-    (cond ((and (or (eq? keyval gdk:q)
-                   (eq? keyval gdk:w))
-               (equal? mods '(control-mask modifier-mask)))
-          (gtk-main-quit))
-         ((and (eq? keyval gdk:s)
-               (equal? mods '(control-mask modifier-mask)))
-               (save-tweaks go))
-         ((and #t ;;(null? mods)
-               (eq? keyval gdk:plus))
-          (scale-canvas go 2))
-         ((and #t ;; (null? mods)
-               (eq? keyval gdk:minus))
-          (scale-canvas go 0.5))
-         ((or (eq? keyval gdk:Page-Up)
-              (eq? keyval gdk:BackSpace))
-          (dump-page go (1- (page-number go))))
-         ((or (eq? keyval gdk:Page-Down)
-              (eq? keyval gdk:space))
-          (dump-page go (1+ (page-number go)))))
-    #f))
-
-(define (new-canvas go)
-  (set! (canvas go) (make <gnome-canvas>))
-  (set-size-request (canvas go) (window-width go) (window-height go))
-  (set-scroll-region (canvas go) 0 0 (canvas-width go) (canvas-height go))
-  (set-pixels-per-unit (canvas go) (pixels-per-unit go))
-  (make <gnome-canvas-rect>
-    #:parent (root (canvas go))
-    #:x2 (canvas-width go) #:y2 (canvas-height go)
-    #:fill-color "white"))
-
-(define output-gnome-module #f)
-(define (get-output-gnome-module go)
-  (if (not output-gnome-module)
-      (let ((m  (resolve-module '(scm output-gnome))))
-       (module-define! m 'canvas-root (lambda () (root (canvas go))))
-       (module-define! m 'output-scale output-scale)
-       (set! output-gnome-module m)))
-  output-gnome-module)
-
-(define-public (gnome-output-expression go expr)
-  (let* ((m (get-output-gnome-module go))
-        (result (eval expr m)))
-    (cond
-     ((ly:grob? result) (set! (grob go) result))
-     ((is-a? result <gnome-canvas-item>)
-      
-      ;; AAARGH; grobs happen after stencils
-      ;; (connect result 'event (lambda (w e) (item-event go (grob go) w e)))
-      (connect result 'event (lambda (w e) (item-event go w e)))
-      (if (grob go)
-         (hashq-set! (item-grobs go) result (grob go)))
-      (set! (grob go) #f)
-      
-      (if (is-a? result <gnome-canvas-text>)
-         (set! (text-items go) (cons result (text-items go))))))))
index e17c3d478024cd75757ed71867e14d42bbdbe888..670e28e538d35cb053aee265af64a41c8124ce41 100644 (file)
@@ -8,9 +8,7 @@
 
 ;;; this is still too big a mess.
 
-(use-modules (ice-9 regex)
-            (ice-9 string-fun)
-            (ice-9 format)
+(use-modules (ice-9 string-fun)
             (guile)
             (scm page)
             (scm paper-system)
             (scm clip-region)
             (lily))
 
+(define (format dest . rest)
+  (if (string? dest)
+      (apply simple-format (cons #f (cons dest rest)))
+      (apply simple-format (cons dest rest))))
 
 (define framework-ps-module (current-module))
 
 
     (string-append
      "magfont"
-     (string-regexp-substitute "[ /%]" "_" name)
+     (ly:string-substitute
+      " " "_"
+      (ly:string-substitute
+       "/" "_"
+       (ly:string-substitute
+       "%" "_" name)))
      "m" (string-encode-integer (inexact->exact (round (* 1000 magnify)))))))
 
 (define (tex-font? fontname)
               (ly:output-def-lookup paper 'output-scale))
            (ly:bp 1)))
        (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t)))
-  (format "%%DocumentMedia: ~a ~$ ~$ ~a ~a ~a\n"
+  (format "%%DocumentMedia: ~a ~a ~a ~a ~a ~a\n"
    (ly:output-def-lookup paper 'papersizename)
-   (if landscape? h w)
-   (if landscape? w h)
+   (round2 (if landscape? h w))
+   (round2 (if landscape? w h))
    80  ;; weight
    "()" ;; color
    "()"  ;; type
       (format
        (if (string? name)
           "(~a) (r) file .loadfont\n"
-          "% can't find font file: ~a\n")
+          "% cannot find font file: ~a\n")
        name))
 
     (let* ((font (car font-name-filename))
        (if (mac-font? bare-file-name)
           (handle-mac-font name bare-file-name)
           (cond
-           ((string-match "^([eE]mmentaler|[Aa]ybabtu)" file-name)
+           ((or (string-startswith file-name "Emmentaler")
+                (string-startswith file-name "emmentaler")
+                (string-startswith file-name "aybabtu")
+                (string-startswith file-name "Aybabtu"))
             (ps-load-file (ly:find-file
                            (format "~a.otf"  file-name))))
            ((string? bare-file-name)
             (ps-load-file file-name))
            (else
-            (ly:warning (_ "can't embed ~S=~S") name file-name)
+            (ly:warning (_ "cannot embed ~S=~S") name file-name)
             "")))
 
          )))
       (if (not embed)
          (begin
            (set! embed "% failed \n")
-           (ly:warning (_ "can't extract file matching ~a from ~a") name filename)))
+           (ly:warning (_ "cannot extract file matching ~a from ~a") name filename)))
       embed))
 
     (define (font-file-as-ps-string name file-name)
          ((downcase-file-name (string-downcase file-name)))
        
       (cond
-       ((and file-name (string-match "\\.pfa" downcase-file-name))
+       ((and file-name (string-endswith downcase-file-name ".pfa"))
        (embed-document file-name))
-       ((and file-name (string-match "\\.pfb" downcase-file-name))
+       ((and file-name (string-endswith downcase-file-name ".pfb"))
        (ly:pfb->pfa file-name))
-       ((and file-name (string-match "\\.ttf" downcase-file-name))
+       ((and file-name (string-endswith downcase-file-name ".ttf"))
        (ly:ttf->pfa file-name))
-       ((and file-name (string-match "\\.otf" downcase-file-name))
+       ((and file-name (string-endswith downcase-file-name ".otf"))
        (ps-embed-cff (ly:otf->cff file-name) name 0))
        (else
-       (ly:warning (_ "don't know how to embed ~S=~S") name file-name)
+       (ly:warning (_ "do not know how to embed ~S=~S") name file-name)
        ""))))
 
     (define (mac-font? bare-file-name)
        (eq? PLATFORM 'darwin)
        bare-file-name
        (or
-       (string-match "\\.dfont" bare-file-name)
+       (string-endswith  bare-file-name ".dfont")
        (= (stat:size (stat bare-file-name)) 0))))
 
   (define (load-font font-name-filename)
 
        (bare-file-name (font-file-as-ps-string name bare-file-name))
        (else
-        (ly:warning (_ "don't know how to embed font ~s ~s ~s")
+        (ly:warning (_ "do not know how to embed font ~s ~s ~s")
                     name file-name font))))))
        
 
   (let*
       ((xext (ly:stencil-extent dump-me X))
        (yext (ly:stencil-extent dump-me Y))
-       (left-overshoot (ly:get-option 'eps-box-padding))
+       (padding (ly:get-option 'eps-box-padding))
+       (left-overshoot (if (number? padding)
+                          (* -1 padding (ly:output-def-lookup paper 'mm))
+                          #f))
        (bbox
        (map
         (lambda (x)
         )
 
     (if (equal? (basename name ".ps") "-")
-       (ly:warning (_ "can't convert <stdout> to ~S" "PDF"))
+       (ly:warning (_ "cannot convert <stdout> to ~S" "PDF"))
        (postscript->pdf w h name))))
 
 (define-public (convert-to-png book name)
                     name)))
 
 (define-public (convert-to-dvi book name)
-  (ly:warning (_ "can't generate ~S using the postscript back-end") "DVI"))
+  (ly:warning (_ "cannot generate ~S using the postscript back-end") "DVI"))
 
 (define-public (convert-to-tex book name)
-  (ly:warning (_ "can't generate ~S using the postscript back-end") "TeX"))
+  (ly:warning (_ "cannot generate ~S using the postscript back-end") "TeX"))
 
 (define-public (convert-to-ps book name)
   #t)
 
 (define-public (output-classic-framework basename book scopes fields)
 
-  (ly:error (_ "\nThe PostScript backend does not support the 'classic'
-framework. Use the EPS backend instead,
+  (ly:error (_ "\nThe PostScript backend does not support the system-by-system 
+output. For that, use the EPS backend instead,
 
   lilypond -b eps <file>
 
-or remove the lilypond-book specific settings from the input.
+If have cut & pasted a lilypond fragment from a webpage, be sure
+to only remove anything before
+
+  %% ****************************************************************
+  %% Start cut-&-pastable-section
+  %% ****************************************************************
+
 ")))
index 2792ef7956197d0d3dcb5bf2518fe5f81944ad47..69194956f326c1810c1745c942e05103f1e461af 100644 (file)
@@ -80,44 +80,44 @@ Line thickness is given by @var{th}, fret & string spacing by
         (ly:stencil-combine-at-edge
          (draw-strings (- string-count 1) fret-range th size) X RIGHT
          string-stencil
-         gap 0))))
+         gap))))
 
 (define (draw-fret-lines fret-count string-count th size)
- "Draw @var{fret-count} frets (horizontal lines) for a fret diagram
 "Draw @var{fret-count} frets (horizontal lines) for a fret diagram
 with @var{string-count} strings.  Line thickness is given by @var{th},
 fret & string spacing by @var{size}. "
-   (let* ((fret-length (* (- string-count 1) size))
-          (sth (* size th))
-          (half-thickness (* sth 0.5))
-          (gap (- size sth))
-          (fret-line (ly:make-stencil (list 'draw-line sth half-thickness size (- fret-length half-thickness) size)
-                          (cons 0 fret-length)
-                          (cons (- size half-thickness) (+  size half-thickness)))))
-       (if (= fret-count 1)
-         fret-line
-         (ly:stencil-combine-at-edge fret-line Y UP
-          (draw-fret-lines (- fret-count 1) string-count th size)
-          gap 0))))
-          
+  (let* ((fret-length (* (- string-count 1) size))
+        (sth (* size th))
+        (half-thickness (* sth 0.5))
+        (gap (- size sth))
+        (fret-line (ly:make-stencil (list 'draw-line sth half-thickness size (- fret-length half-thickness) size)
+                                    (cons 0 fret-length)
+                                    (cons (- size half-thickness) (+  size half-thickness)))))
+    (if (= fret-count 1)
+       fret-line
+       (ly:stencil-combine-at-edge fret-line Y UP
+                                   (draw-fret-lines (- fret-count 1) string-count th size)
+                                   gap))))
+
 (define (draw-thick-top-fret props string-count th size)
- "Draw a thick top fret for a fret diagram whose base fret is not 1."
-   (let* ((sth (* th size))
-;          (top-fret-thick (* sth (chain-assoc-get 'top-fret-thickness props 3.0)))
-          (top-fret-thick (* sth 3.0))
-;          (top-half-thick (* top-fret-thick 0.5))
-          (half-thick (* sth 0.5))
-          (x1 half-thick)
-          (x2 (+ half-thick (* size (- string-count 1))))
-          (y1 (- half-thick))
-          (y2 (+ top-fret-thick half-thick))
-          (x-extent (cons (- x1) x2))
-          (y-extent (cons 0 y2)))
-          (ly:make-stencil (list 'round-filled-box x1 x2 y1 y2 sth)
-                            x-extent y-extent)))           
 "Draw a thick top fret for a fret diagram whose base fret is not 1."
+  (let* ((sth (* th size))
+                                       ;          (top-fret-thick (* sth (chain-assoc-get 'top-fret-thickness props 3.0)))
+        (top-fret-thick (* sth 3.0))
+                                       ;          (top-half-thick (* top-fret-thick 0.5))
+        (half-thick (* sth 0.5))
+        (x1 half-thick)
+        (x2 (+ half-thick (* size (- string-count 1))))
+        (y1 (- half-thick))
+        (y2 (+ top-fret-thick half-thick))
+        (x-extent (cons (- x1) x2))
+        (y-extent (cons 0 y2)))
+    (ly:make-stencil (list 'round-filled-box x1 x2 y1 y2 sth)
+                    x-extent y-extent)))           
+
+
 (define (draw-frets layout props fret-range string-count th size)
- "Draw the frets (horizontal lines) for a fret diagram with
 "Draw the frets (horizontal lines) for a fret diagram with
 @var{string-count} strings and frets as indicated in @var{fret-range}.
 Line thickness is given by @var{th}, fret & string spacing by
 @var{size}. "
@@ -125,13 +125,13 @@ Line thickness is given by @var{th}, fret & string spacing by
          (fret-length (* (- string-count 1) size))
          (half-thickness (* th 0.5))
          (base-fret (car fret-range)))
-       (ly:stencil-combine-at-edge
-          (draw-fret-lines fret-count string-count th size) Y UP
-             (if (= base-fret 1)
-                 (draw-thick-top-fret props string-count th size)
-                 (draw-fret-lines 1 string-count th size)) 
-                 (- size th) 0))) 
-                 
+    (ly:stencil-combine-at-edge
+     (draw-fret-lines fret-count string-count th size) Y UP
+     (if (= base-fret 1)
+        (draw-thick-top-fret props string-count th size)
+        (draw-fret-lines 1 string-count th size)) 
+     (- size th)))) 
+
 
 (define (draw-dots layout props string-count fret-range size finger-code 
                     dot-position dot-radius dot-thickness dot-list)
@@ -295,7 +295,7 @@ Line thickness is given by @var{th}, fret & string spacing by
            (sans-serif-stencil layout props (* size label-font-mag) label-text) 
                        (* size (+ fret-count label-vertical-offset)) Y)))
  
-(define-markup-command (fret-diagram-verbose layout props marking-list)
+(define-builtin-markup-command (fret-diagram-verbose layout props marking-list)
   (list?)
   "Make a fret diagram containing the symbols indicated in @var{marking-list}
   
@@ -383,15 +383,15 @@ indications per string.
          (if (not (null? xo-list))
              (set! fret-diagram-stencil (ly:stencil-combine-at-edge
                                     fret-diagram-stencil Y UP
-                                    (draw-xo layout props string-count fret-range size xo-list) xo-padding 0)))
+                                    (draw-xo layout props string-count fret-range size xo-list) xo-padding)))
          (if (> (car fret-range) 1) 
              (set! fret-diagram-stencil
                    (ly:stencil-combine-at-edge fret-diagram-stencil X label-dir
-                                              (label-fret layout props string-count fret-range size) label-space 0)))
+                                              (label-fret layout props string-count fret-range size) label-space)))
          (ly:stencil-aligned-to fret-diagram-stencil X alignment)
         ))
          
-(define-markup-command (fret-diagram layout props definition-string)
+(define-builtin-markup-command (fret-diagram layout props definition-string)
   (string?)
   "  
 Example
@@ -522,7 +522,7 @@ Note:  There is no limit to the number of fret indications per string.
                 (cons* numeric-value (numerify (cdr mylist)))
                 (cons* (car (string->list (car mylist))) (numerify (cdr mylist)))))))
            
-(define-markup-command (fret-diagram-terse layout props definition-string)
+(define-builtin-markup-command (fret-diagram-terse layout props definition-string)
   (string?)
   "Make a fret diagram markup using terse string-based syntax.
 
index d946890049fbb6653e4088f4dd7cdb736391a884..8edfd9c757f33365f1fcf65ba9d5d0f2665ffb51 100644 (file)
@@ -59,7 +59,7 @@
        ly:beam::quanting
        (check-beam-quant l r)
        ))
-                       
+
 
 (define-public (check-slope-callbacks comparison)
   (list ly:beam::calc-least-squares-positions
@@ -68,3 +68,4 @@
        ly:beam::quanting
        (check-beam-slope-sign comparison)      
        ))
+
index 50815ac2ef8c833603eb91f223ac8b120e53fdf2..8237106f063ff967f447d05ae27cde2dd41a307b 100644 (file)
        (format out-port "~a\n~a\n" skip base)
        (dump-tweaks out-port (cdr tweak-list) (graceless-moment now)))))
 
-(define (dump-all-tweaks pages tweaks)
-  (let* ((paper (ly:paper-book-paper (page-property  (car pages) 'paper-book)))
-        (parser (ly:output-def-parser paper))
-        (name  (format "~a-page-layout.ly"
-                       (ly:parser-output-name parser)))
+(define (dump-all-tweaks pages tweaks output-name)
+  (let* ((paper (ly:paper-book-paper (page-property (car pages) 'paper-book)))
+        (name (format "~a-page-layout.ly" output-name))
         (out-port (open-output-file name)))
+    
     (ly:message "Writing page layout to ~a" name)
     (hash-for-each
      (lambda (key val)
@@ -85,7 +84,7 @@
      tweaks)
     (close-port out-port)))
 
-(define (write-page-breaks pages)
+(define (write-page-breaks pages output-name)
   "Dump page breaks and tweaks"
   (let ((tweaks (make-hash-table 60)))
     (define (handle-page page)
                (record-line-tweak (cdr lines) #f (1+ index)))))))
     ;; Compute tweaks for each page, then dump them to the page-layout file
     (for-each handle-page pages)
-    (dump-all-tweaks pages tweaks)))
+    (dump-all-tweaks pages tweaks output-name)))
index f7853b01bbb0128cde2c7d31cc83047bd1e62d25..5b030d868c388ef4ec799bc8d47c3962636a2d78 100644 (file)
   #:use-module (lily)
   #:export (post-process-pages optimal-page-breaks make-page-from-systems
            page-breaking-wrapper
+           stretchable-line? ; delete me
            ;; utilities for writing custom page breaking functions
             line-height line-next-space line-next-padding
            line-minimum-distance line-ideal-distance
            first-line-position
            line-ideal-relative-position line-minimum-relative-position
-            line-minimum-position-on-page stretchable-line?
+            line-minimum-position-on-page
            page-maximum-space-to-fill page-maximum-space-left space-systems))
 
+; this is for 2-pass spacing. Delete me.
+(define (stretchable-line? line)
+  "Say whether a system can be stretched."
+  (not (or (ly:prob-property? line 'is-title)
+          (let ((system-extent (paper-system-staff-extents line)))
+            (= (interval-start system-extent)
+               (interval-end   system-extent))))))
+
+(define (stretch-and-draw-page paper-book systems page-number ragged last)
+  (define (stretchable? sys)
+    (and (ly:grob? sys)
+        (ly:grob-property sys 'stretchable)))
+
+  (define (height-estimate sys)
+    (interval-length
+     (if (ly:grob? sys)
+        (ly:grob-property sys 'pure-Y-extent)
+        (paper-system-extent sys Y))))
+
+  (define (max-stretch sys)
+    (if (stretchable? sys)
+       (ly:grob-property sys 'max-stretch)
+       0.0))
+
+  (define (print-system sys)
+    (if (ly:grob? sys)
+       (ly:system-print sys)
+       sys))
+
+  (define (set-line-stretch! sorted-lines rest-height space-left)
+    (if (not (null? sorted-lines))
+       (let* ((line (first sorted-lines))
+              (height (height-estimate line))
+              (stretch (min (max-stretch line)
+                            (if (positive? rest-height)
+                                (/ (* height space-left) rest-height)
+                                  0.0))))
+         (if (stretchable? line)
+             (ly:system-stretch line stretch))
+         (set-line-stretch! (cdr sorted-lines)
+                            (if (stretchable? line)
+                                (- rest-height height)
+                                rest-height)
+                            (- space-left stretch)))))
+
+  (let* ((page (make-page paper-book
+                         'page-number page-number
+                         'is-last last))
+        (paper (ly:paper-book-paper paper-book))
+        (height (page-printable-height page))
+        ; there is a certain amount of impreciseness going on here:
+        ; the system heights are estimated, we aren't using skyline distances
+        ; yet, etc. If we overstretch because of underestimation, the result
+        ; is very bad. So we stick in some extra space, just to be sure.
+        (buffer (/ height 10.0))
+        (total-system-height (apply + (map height-estimate systems)))
+        (height-left (- height total-system-height buffer)))
+
+    (if (not ragged)
+       (set-line-stretch! (sort systems
+                                (lambda (s1 s2)
+                                  (< (height-estimate s1)
+                                     (height-estimate s2))))
+                          (apply + (map height-estimate
+                                        (filter stretchable? systems)))
+                          (- (page-printable-height page)
+                             total-system-height)))
+
+    (let* ((lines (map print-system systems))
+          (posns (if (null? lines)
+                     (list)
+                     (let* ((paper (ly:paper-book-paper paper-book))
+                            (space-to-fill (page-maximum-space-to-fill
+                                            page lines paper))
+                            (spacing (space-systems space-to-fill lines ragged paper #f)))
+                       (if (and (> (length lines) 1)
+                                (or (not (car spacing)) (inf? (car spacing))))
+                           (begin
+                             (ly:warning (_ "Can't fit systems on page -- ignoring between-system-padding"))
+                             (cdr (space-systems space-to-fill lines ragged paper #t)))
+                           (cdr spacing))))))
+      (page-set-property! page 'lines lines)
+      (page-set-property! page 'configuration posns)
+      page)))
+
 (define (page-breaking-wrapper paper-book)
   "Compute line and page breaks by calling the page-breaking paper variable,
   then performs the post process function using the page-post-process paper
 (define (post-process-pages layout pages)
   "If the write-page-layout paper variable is true, dumps page breaks
   and tweaks."
-  (if (ly:output-def-lookup layout 'write-page-layout #f)
-      (write-page-breaks pages)))
+
+  (let*
+      ((parser (ly:modules-lookup (list (current-module)) 'parser))
+       (output-name (ly:parser-output-name parser)) 
+       )
+
+    (if (ly:output-def-lookup layout 'write-page-layout #f)
+       (write-page-breaks pages output-name))))
 
 ;;;
 ;;; Utilities for computing line distances and positions
 ;;;
+(define (line-extent line)
+  "Return the extent of the line (its lowest and highest Y-coordinates)."
+  (paper-system-extent line Y))
+
 (define (line-height line)
   "Return the system height, that is the length of its vertical extent."
-  (interval-length (paper-system-extent line Y)))
+  (interval-length (line-extent line)))
 
 (define (line-next-space line next-line layout)
   "Return space to use between `line' and `next-line'.
   "Minimum distance between `line' reference position and `next-line'
  reference position. If next-line is #f, return #f."
   (and next-line
-       (let ((non-skyline-distance (- (interval-end (paper-system-extent next-line Y))
-                                     (interval-start (paper-system-extent line Y)))))
-        (max 0 (+ (ly:prob-property next-line 'skyline-distance non-skyline-distance)
-                  (if ignore-padding 0 (line-next-padding line next-line layout)))))))
+       (let ((padding (if ignore-padding
+                         0
+                         (line-next-padding line next-line layout))))
+        (if (or (ly:grob? line) (ly:grob? next-line))
+            (max 0 (+ padding
+                      (- (interval-start (line-extent line))
+                         (interval-end (line-extent next-line)))))
+            (max 0 (+ padding
+                      (ly:paper-system-minimum-distance line next-line)))))))
 
 (define (line-ideal-distance line next-line layout ignore-padding)
   "Ideal distance between `line' reference position and `next-line'
              0.0
            (ly:output-def-lookup layout 'page-top-space))
          (interval-end (paper-system-staff-extents line)))
-       (interval-end (paper-system-extent line Y))))
+       (interval-end (line-extent line))))
 
 (define (line-ideal-relative-position line prev-line layout ignore-padding)
   "Return ideal position of `line', relative to `prev-line' position.
          (position (+ (line-minimum-relative-position line prev-line layout #f)
                       (if prev-line prev-position 0.0)))
          (bottom-position (- position
-                             (interval-start (paper-system-extent line Y)))))
+                             (interval-start (line-extent line)))))
     (and (or (not prev-line)
              (< bottom-position (page-printable-height page)))
          position)))
 
-(define (stretchable-line? line)
-  "Say whether a system can be stretched."
-  (not (or (ly:prob-property? line 'is-title)
-          (let ((system-extent (paper-system-staff-extents line)))
-            (= (interval-start system-extent)
-               (interval-end   system-extent))))))
-
 (define (page-maximum-space-to-fill page lines paper)
   "Return the space between the first line top position and the last line
   bottom position. This constitutes the maximum space to fill on `page'
        (first-line-position (first lines) paper)
        (ly:prob-property last-line
                         'bottom-space 0.0)
-       (- (interval-start (paper-system-extent last-line Y))))))
+       (- (interval-start (line-extent last-line))))))
 
 (define (page-maximum-space-left page)
   (let ((paper (ly:paper-book-paper (page-property page 'paper-book))))
                 (and position
                      (- (page-printable-height page)
                         (- position
-                           (interval-start (paper-system-extent line Y)))))
+                           (interval-start (line-extent line)))))
                 (bottom-position (cdr lines) line position)))))))
 
 ;;;
                   (+ y topskip)))
               (cdr space-result)))))
 
-(define (make-page-from-systems paper-book lines page-number ragged last)
-  "Return a new page, filled with `lines'."
-  (let* ((page (make-page paper-book
-                         'lines lines
-                         'page-number page-number
-                         'is-last last))
-        (posns (if (null? lines)
-                   (list)
-                   (let* ((paper (ly:paper-book-paper paper-book))
-                          (space-to-fill (page-maximum-space-to-fill
-                                           page lines paper))
-                          (spacing (space-systems space-to-fill lines ragged paper #f)))
-                     (if (or (not (car spacing)) (inf? (car spacing)))
-                         (cdr (space-systems space-to-fill lines ragged paper #t))
-                         (cdr spacing))))))
-    (page-set-property! page 'configuration posns)
-    page))
 
 ;;;
 ;;; Page breaking function
index 0d09beae53b5c6f9e994c10cbc5dbe0cd192eb47..0746876ca3d6625d9c678c857618fe38f8ebf00a 100644 (file)
 (define-public DOWN -1)
 (define-public CENTER 0)
 
-(define-safe-public DOUBLE-FLAT -4)
-(define-safe-public THREE-Q-FLAT -3)
-(define-safe-public FLAT -2)
-(define-safe-public SEMI-FLAT -1)
+(define-safe-public DOUBLE-FLAT-QTS -4)
+(define-safe-public THREE-Q-FLAT-QTS -3)
+(define-safe-public FLAT-QTS -2)
+(define-safe-public SEMI-FLAT-QTS -1)
+(define-safe-public NATURAL-QTS 0)
+(define-safe-public SEMI-SHARP-QTS 1)
+(define-safe-public SHARP-QTS 2)
+(define-safe-public THREE-Q-SHARP-QTS 3)
+(define-safe-public DOUBLE-SHARP-QTS 4)
+(define-safe-public SEMI-TONE-QTS 2)
+
+(define-safe-public DOUBLE-FLAT  -1)
+(define-safe-public THREE-Q-FLAT -3/4)
+(define-safe-public FLAT -1/2)
+(define-safe-public SEMI-FLAT -1/4)
 (define-safe-public NATURAL 0)
-(define-safe-public SEMI-SHARP 1)
-(define-safe-public SHARP 2)
-(define-safe-public THREE-Q-SHARP 3)
-(define-safe-public DOUBLE-SHARP 4)
-(define-safe-public SEMI-TONE 2)
+(define-safe-public SEMI-SHARP 1/4)
+(define-safe-public SHARP 1/2)
+(define-safe-public THREE-Q-SHARP 3/4)
+(define-safe-public DOUBLE-SHARP 1)
+(define-safe-public SEMI-TONE 1/2)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; moments
 (define-public (moment-min a b)
   (if (ly:moment<? a b) a b))
 
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; arithmetic
 (define-public (average x . lst)
   (/ (+ x (apply + lst)) (1+ (length lst))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; lily specific variables.
-
-(define-public default-script-alist '())
-
-
-;; parser stuff.
-(define-public (print-music-as-book parser music)
-  (let* ((head (ly:parser-lookup parser '$defaultheader))
-        (book (ly:make-book (ly:parser-lookup parser '$defaultpaper)
-                            head (scorify-music music parser))))
-    (print-book-with-defaults parser book)))
-
-(define-public (print-score-as-book parser score)
-  (let* ((head (ly:parser-lookup parser '$defaultheader))
-        (book (ly:make-book (ly:parser-lookup parser '$defaultpaper)
-                            head score)))
-    (print-book-with-defaults parser book)))
+;; parser <-> output hooks.
 
-(define-public (print-score parser score)
-  (let* ((head (ly:parser-lookup parser '$defaultheader))
-        (book (ly:make-book (ly:parser-lookup parser '$defaultpaper)
-                            head score)))
-    (ly:parser-print-score parser book)))
                
 (define-public (collect-scores-for-book parser score)
   (ly:parser-define!
    parser 'toplevel-scores
    (cons score (ly:parser-lookup parser 'toplevel-scores))))
 
+(define-public (collect-music-for-book parser music)
+  ;; discard music if its 'void property is true.
+  (let ((void-music (ly:music-property music 'void)))
+    (if (or (null? void-music) (not void-music))
+        (collect-scores-for-book parser (scorify-music music parser)))))
 
 (define-public (scorify-music music parser)
+  "Preprocess MUSIC."
   
   (for-each (lambda (func)
              (set! music (func music parser)))
 
   (ly:make-score music))
 
-(define-public (collect-music-for-book parser music)
-  ;; discard music if its 'void property is true.
-  (let ((void-music (ly:music-property music 'void)))
-    (if (or (null? void-music) (not void-music))
-        (collect-scores-for-book parser (scorify-music music parser)))))
-
-
-(define-public (print-book-with-defaults parser book)
+(define (print-book-with parser book process-procedure)
   (let*
       ((paper (ly:parser-lookup parser '$defaultpaper))
        (layout (ly:parser-lookup parser '$defaultlayout))
-       (count (ly:parser-lookup parser 'output-count))
-       (base (ly:parser-output-name parser)))
 
-    (if (not (integer? count))
-       (set! count 0))
-
-    (if (> count 0)
-       (set! base (format #f "~a-~a" base count)))
-
-    (ly:parser-define! parser 'output-count (1+ count))
-    (ly:book-process book paper layout base)
-    ))
-
-(define-public (print-score-with-defaults parser score)
-  (let*
-      ((paper (ly:parser-lookup parser '$defaultpaper))
-       (layout (ly:parser-lookup parser '$defaultlayout))
-       (header (ly:parser-lookup parser '$defaultheader))
        (count (ly:parser-lookup parser 'output-count))
        (base (ly:parser-output-name parser)))
 
+    ;; must be careful: output-count is under user control.
     (if (not (integer? count))
        (set! count 0))
 
        (set! base (format #f "~a-~a" base count)))
 
     (ly:parser-define! parser 'output-count (1+ count))
-    (ly:score-process score header paper layout base)
+    (process-procedure book paper layout base)
     ))
 
+(define-public (print-book-with-defaults parser book)
+  (print-book-with parser book ly:book-process))
+
+(define-public (print-book-with-defaults-as-systems parser book)
+  (print-book-with parser book ly:book-process-to-systems))
 
 ;;;;;;;;;;;;;;;;
 ;; alist
@@ -211,24 +188,9 @@ found."
 ;;;;;;;;;;;;;;;;
 ;; hash
 
-(if (not (defined? 'hash-table?)) ;; guile 1.6 compat
-    (begin
-      (define hash-table? vector?)
-      (define-public (hash-for-each proc tab)
-       (hash-fold (lambda (k v prior)
-                    (proc k v)
-                    #f)
-                  #f
-                  tab))
-      (define-public (hash-table->alist t)
-       "Convert table t to list"
-       (apply append (vector->list t))))
-
-    ;; native hashtabs.
-    (begin
-      (define-public (hash-table->alist t)
-       (hash-fold (lambda (k v acc) (acons  k v  acc))
-                  '() t))))
+(define-public (hash-table->alist t)
+  (hash-fold (lambda (k v acc) (acons  k v  acc))
+            '() t))
 
 ;; todo: code dup with C++. 
 (define-safe-public (alist->hash-table lst)
@@ -418,6 +380,9 @@ found."
 
 (define-public interval-end cdr)
 
+(define-public (interval-bound interval dir)
+  ((if (= dir RIGHT) cdr car) interval))
+
 (define-public (interval-index interval dir)
   "Interpolate INTERVAL between between left (DIR=-1) and right (DIR=+1)"
   
@@ -461,9 +426,16 @@ found."
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-
-
+;; string
+
+(define-public (string-endswith s suffix)
+  (equal? suffix (substring s
+                           (max 0 (- (string-length s) (string-length suffix)))
+                           (string-length s))))
+            
+(define-public (string-startswith s prefix)
+  (equal? prefix (substring s 0 (min (string-length s) (string-length prefix)))))
+            
 (define-public (string-encode-integer i)
   (cond
    ((= i  0) "o")
@@ -554,6 +526,12 @@ possibly turned off."
       0
       (if (< x 0) -1 1)))
 
+(define-public (round2 num)
+  (/ (round (* 100 num)) 100))
+
+(define-public (round4 num)
+  (/ (round (* 10000 num)) 10000))
+
 (define-public (car< a b) (< (car a) (car b)))
 
 (define-public (symbol<? lst r)
@@ -609,14 +587,16 @@ possibly turned off."
 
 (define-public (version-not-seen-message input-file-name)
   (ly:message
-   (string-append
-    input-file-name ": 0: " (_ "warning: ")
-   (format #f
-          (_ "no \\version statement found, please add~afor future compatibility")
-          (format #f "\n\n\\version ~s\n\n" (lilypond-version))))))
+   "~a:0: ~a: ~a" 
+    input-file-name
+    (_ "warning: ")
+    (format #f
+           (_ "no \\version statement found, please add~afor future compatibility")
+           (format #f "\n\n\\version ~s\n\n" (lilypond-version)))))
 
 (define-public (old-relative-not-used-message input-file-name)
   (ly:message
-   (string-append
-    input-file-name ": 0: " (_ "warning: ")
-    (_ "old relative compatibility not used"))))
+   "~a:0: ~a: ~a" 
+    input-file-name
+    (_ "warning: ")
+    (_ "old relative compatibility not used")))
index a016901bcb4754c54c8eb99b7afeb011efbece35..e98897fca850ecb62ae1d66f9757de634c61843b 100644 (file)
@@ -5,6 +5,18 @@
 ;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
 
+;; Internationalisation: (_i "to be translated") gets an entry in the
+;; POT file (gettext ) must be invoked explicitely to do the actual
+;; "translation".
+;;(define-macro (_i x) x)
+;;(define-macro-public _i (x) x)
+;;(define-public-macro _i (x) x)
+;; Abbrv-PWR!
+(defmacro-public _i (x) x)
+
+(read-enable 'positions)
+(debug-enable 'debug)
+
 
 (define (define-scheme-options)
   (for-each (lambda (x)
              (check-internal-types #f "check every property assignment for types")
              (clip-systems #f "Generate cut-out snippets of a score")
              (debug-gc #f "dump memory debugging statistics")
-             (debug-gc-assert-parsed-dead
-              #f "for memory debugging: ensure that all refs to parsed objects are dead.")
+             (debug-gc-assert-parsed-dead #f "for memory debugging:
+ensure that all refs to parsed objects are dead.  This is an internal option, and is switched on automatically for -ddebug-gc.") 
              (debug-lexer #f "debug the flex lexer")
-             (debug-midi #f "generate human readable MIDI")
              (debug-parser #f "debug the bison parser")
              (debug-skylines #f "debug skylines")
              (delete-intermediate-files #f
                                         "delete unusable PostScript files")
-             (dump-signatures #f "dump output signatures of each system")
-             (dump-tweaks #f "dump page layout and tweaks for each score having the tweak-key layout property set.")
+             (dump-profile #f "dump timing information for each file")
+             (dump-signatures #f "dump output signatures of each system.  Used for regression testing.")
+             
+             (eps-box-padding #f "Pad EPS bounding box left edge.  Guarantee alignment between systems in LaTeX.")
              (gs-load-fonts #f
                            "load fonts via Ghostscript.")
+             (gui #f "running from gui; redirect stderr to log file")
+
              (include-book-title-preview #t "include book-titles in preview images.")
              (include-eps-fonts #t "Include fonts in separate-system EPS files.")
              (job-count #f "Process in parallel") 
-
-             (eps-box-padding #f "Pad EPS bounding box left edge by this much to guarantee alignment between systems")
-
-             (gui #f "running from gui; redirect stderr to log file")
              (log-file #f "redirect output to log FILE.log")
+
              (old-relative #f
                            "relative for simultaneous music works
 similar to chord syntax")
-             (object-keys #f
-                          "experimental mechanism for remembering tweaks")
              (point-and-click #t "use point & click")
              (paper-size "a4" "the default paper size")
              (pixmap-format "png16m" "GS format to use for pixel images")
@@ -58,16 +68,20 @@ on errors, and print a stack trace.")
              (read-file-list #f "Read files to be processed from command line arguments")
 
              (safe #f "Run safely")
-             (strict-infinity-checking #f "If yes, crash on encountering Inf/NaN")
-
+             (strict-infinity-checking #f "If yes, crash on encountering Inf/NaN.")
+             (separate-log-files #f "Output to FILE.log per file.")
+             (trace-memory-frequency #f "Record Scheme cell usage this many times per second, and dump to file.")
              (ttf-verbosity 0
                             "how much verbosity for TTF font embedding?")
-
              (show-available-fonts #f
-                                   "List  font names available.")
-
+                                   "List font names available.")
              (verbose ,(ly:command-line-verbose?) "value for the --verbose flag")
-             )))
+             ))
+
+  (map
+   (lambda (x)
+     (ly:set-option (car x) (cdr x))) 
+   (eval-string (ly:command-line-options))))
 
 
 ;; need to do this in the beginning. Other parts of the
@@ -75,6 +89,8 @@ on errors, and print a stack trace.")
 ;;
 (define-scheme-options)
 
+
+
 (debug-set! stack 0)
 
 (if (defined? 'set-debug-cell-accesses!)
@@ -84,18 +100,19 @@ on errors, and print a stack trace.")
 
 (use-modules (ice-9 regex)
             (ice-9 safe)
+            (ice-9 rdelim)
              (ice-9 optargs)
             (oop goops)
             (srfi srfi-1)
             (srfi srfi-13)
             (srfi srfi-14)
             (scm clip-region)
-
+            (scm memory-trace)
             )
 
-
 ;; my display
-(define-public (myd k v) (display k) (display ": ") (display v) (display ", "))
+(define-public (myd k v) (display k) (display ": ") (display v) (display ", ")
+  v)
 
 (define-public (print . args)
   (apply format (cons (current-output-port) args)))
@@ -141,7 +158,7 @@ on errors, and print a stack trace.")
     (if (ly:get-option 'verbose)
        (ly:progress "[~A" file-name))
     (if (not file-name)
-       (ly:error (_ "Can't find ~A") x))
+       (ly:error (_ "cannot find: ~A") x))
     (primitive-load file-name)
     (if (ly:get-option 'verbose)
        (ly:progress "]"))))
@@ -254,16 +271,17 @@ The syntax is the same as `define*-public'."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; init pitch system
 
-(ly:set-default-scale (ly:make-scale #(0 2 4 5 7 9 11)))
+(ly:set-default-scale (ly:make-scale #(0 1 2 5/2 7/2 9/2 11/2)))
 
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; other files.
 
-(for-each ly:load
-         ;; load-from-path
-         '("lily-library.scm"
+
+(define
+  init-scheme-files
+  '("lily-library.scm"
            "file-cache.scm"
            "define-event-classes.scm"
            "define-music-types.scm"
@@ -310,6 +328,11 @@ The syntax is the same as `define*-public'."
            "safe-lily.scm"))
 
 
+
+
+(for-each ly:load init-scheme-files)
+
+
 (set! type-p-name-alist
       `(
        (,boolean-or-symbol? . "boolean or symbol")
@@ -348,12 +371,48 @@ The syntax is the same as `define*-public'."
        (,symbol? . "symbol")
        (,vector? . "vector")))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; timing
+
+(define (profile-measurements)
+  (let* ((t (times))
+        (stats (gc-stats)))
+    
+    (list
+     (- (+ (tms:cutime t)
+          (tms:utime t))
+       (ly:assoc-get 'gc-time-taken stats))
+     
+     (ly:assoc-get 'total-cells-allocated  stats 0)
+     )))
+
+(define (dump-profile base last this)
+  (let*
+      ((outname (format "~a.profile" (basename base ".ly")))
+       (diff (map (lambda (y) (apply - y)) (zip this last))))
+    
+    (ly:progress "\nWriting timing to ~a..." outname)
+    (format (open-file outname "w")
+           "time: ~a\ncells: ~a\n"
+           (car diff)
+           (cadr diff)
+           )))
+
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; debug mem leaks
 
 (define gc-dumping #f)
 (define gc-protect-stat-count 0)
+
+(define-public (dump-live-object-stats outfile)
+  (for-each
+   (lambda (x)
+     (format outfile "~a: ~a\n" (car x) (cdr x)))
+   (sort (gc-live-object-stats)
+        (lambda (x y)
+          (string<? (car x) (car y))))))
+
 (define-public (dump-gc-protects)
   (set! gc-protect-stat-count (1+ gc-protect-stat-count))
   (let* ((protects (sort
@@ -395,20 +454,14 @@ The syntax is the same as `define*-public'."
          (ly:reset-all-fonts)
          (gc)
          (gc)
+         (display "Asserting dead objects\n")
          (ly:set-option 'debug-gc-assert-parsed-dead #t)
          (gc)
          (ly:set-option 'debug-gc-assert-parsed-dead #f)
 
          (set! stats (gc-live-object-stats))
          (display "Dumping live object statistics.\n")
-         
-         (for-each
-          (lambda (x)
-            (format outfile "~a: ~a\n" (car x) (cdr x)))
-          (sort (gc-live-object-stats)
-                (lambda (x y)
-                  (string<? (car x) (car y)))))))
-
+         (dump-live-object-stats outfile)))
 
     (newline outfile)
     (let*
@@ -430,6 +483,36 @@ The syntax is the same as `define*-public'."
                           )))
 
     (set! gc-dumping #f)
+    (close-port outfile)
+    
+    ))
+
+
+(define (check-memory)
+  "read /proc/self to check up on memory use." 
+  (define (gulp-file name)
+    (let* ((file (open-input-file name))
+          (text (read-delimited "" file)))
+      (close file)
+      text))
+  (let*
+      ((stat (gulp-file "/proc/self/status"))
+       (lines (string-split stat #\newline))
+       (interesting (filter identity
+                           (map
+                            (lambda (l)
+                              (string-match "^VmData:[ \t]*([0-9]*) kB" l))
+                            lines)))
+       (mem (string->number (match:substring (car interesting) 1)))
+       )
+
+    
+    (display (format  "VMDATA: ~a\n" mem))
+    (display (gc-stats))
+    (if (> mem 100000)
+       (begin
+         (dump-gc-protects)
+         (raise 1)))
     
     ))
 
@@ -450,11 +533,13 @@ The syntax is the same as `define*-public'."
 
 (define-public (lilypond-main files)
   "Entry point for LilyPond."
-  
+
   (define (no-files-handler)
     (ly:usage)
     (exit 2))
 
+  (eval-string (ly:command-line-code))
+  
   (if (ly:get-option 'gui)
       (gui-main files))
 
@@ -471,7 +556,7 @@ The syntax is the same as `define*-public'."
            ))
   
   (if (and (number? (ly:get-option 'job-count))
-          (> (length files) (ly:get-option 'job-count)))
+          (>= (length files) (ly:get-option 'job-count)))
       
       (let*
          ((count (ly:get-option 'job-count))
@@ -493,31 +578,43 @@ The syntax is the same as `define*-public'."
              (for-each
               (lambda (pid)
                 (let* ((stat (cdr (waitpid pid))))
-
+                  
                   (if (not (= stat 0))
-                      (set! errors (cons (list-element-index joblist pid) errors)))))
+                      (set! errors (acons (list-element-index joblist pid) stat errors)))))
               joblist)
 
              (for-each
               (lambda (x)
-                (let* ((logfile  (format "~a-~a.log"
-                                         (ly:get-option 'log-file) x))
+                (let* ((job (car x))
+                       (state (cdr x))
+                       (logfile  (format "~a-~a.log"
+                                         (ly:get-option 'log-file) job))
                        (log (ly:gulp-file logfile))
                        (len (string-length log))
                        (tail (substring  log (max 0 (- len 1024)))))
 
-                  (display (format "\n\nlogfile ~a:\n\n ~a" logfile tail))))
+                  (if (status:term-sig state)
+                      (ly:message "\n\n~a\n"
+                                  (format (_ "job ~a terminated with signal: ~a")
+                                          job
+                                          (status:term-sig state)))
+                      (ly:message (_ "logfile ~a (exit ~a):\n~a") logfile (status:exit-val state) tail))))
 
               errors)
 
              (if (pair? errors)
-                 (ly:error "Children ~a exited with errors." errors))
+                 (ly:error "Children ~a exited with errors." (map car errors)))
+
+             ;; must overwrite individual entries
+             (if (ly:get-option 'dump-profile)
+                 (dump-profile "lily-run-total" '(0 0) (profile-measurements)))
 
            (exit (if (null? errors) 0 1))))))
              
           
   (if (string-or-symbol? (ly:get-option 'log-file))
       (ly:stderr-redirect (format "~a.log" (ly:get-option 'log-file)) "w"))
+
   
   (let ((failed (lilypond-all files)))
     (if (pair? failed)
@@ -531,7 +628,7 @@ The syntax is the same as `define*-public'."
          (exit 0)))))
 
 (define-public (lilypond-all files)
-
+  
 
   (if (ly:get-option 'show-available-fonts)
       (begin
@@ -540,26 +637,63 @@ The syntax is the same as `define*-public'."
        ))
   
   (let* ((failed '())
-        (first #t)
+        (separate-logs (ly:get-option 'separate-log-files))
+        (do-measurements (ly:get-option 'dump-profile))
         (handler (lambda (key failed-file)
                    (set! failed (append (list failed-file) failed)))))
 
+    (gc)
     (for-each
      (lambda (x)
-
-       ;; We don't carry info across file boundaries
-       (if first
-          (set! first #f)
-          (gc))
-       
-       (lilypond-file handler x)
-       (ly:clear-anonymous-modules)
-       (if (ly:get-option 'debug-gc)
-          (dump-gc-protects)
-          (if (= (random 40) 1)
-              (ly:reset-all-fonts))))
+       (let*
+          ((start-measurements (if do-measurements
+                                   (profile-measurements)
+                                   #f))
+           (base (basename x ".ly"))
+           (all-settings (ly:all-options)))
+
+        (if separate-logs
+            (ly:stderr-redirect (format "~a.log" base) "w"))
+        (if (ly:get-option 'trace-memory-frequency) 
+            (mtrace:start-trace  (ly:get-option 'trace-memory-frequency)))
+        
+        (lilypond-file handler x)
+        (if start-measurements
+            (dump-profile x start-measurements (profile-measurements)))
+
+        (if (ly:get-option 'trace-memory-frequency)
+            (begin
+              (mtrace:stop-trace)
+              (mtrace:dump-results base)))
+                
+        (for-each
+         (lambda (s)
+           (ly:set-option (car s) (cdr s)))
+         all-settings)
+
+        (ly:clear-anonymous-modules)
+        (ly:set-option 'debug-gc-assert-parsed-dead #t)
+        (gc)
+        (ly:set-option 'debug-gc-assert-parsed-dead #f)
+
+        
+        (if (ly:get-option 'debug-gc)
+            (dump-gc-protects)
+            (if (= (random 40) 1)
+                (ly:reset-all-fonts)))))
 
      files)
+
+    ;; we want the failed-files notice in the aggregrate logfile.
+    (if (ly:get-option 'separate-logs)
+       (ly:stderr-redirect
+        (if (string-or-symbol? (ly:get-option 'log-file))
+            (format "~a.log" (ly:get-option 'log-file))
+            "/dev/tty") "a"))
+
+    (if (ly:get-option 'dump-profile)
+       (dump-profile "lily-run-total" '(0 0) (profile-measurements)))
+
     failed))
 
 (define (lilypond-file handler file-name)
index bd20798e91df98f8128447350e1dabbf8b20a0e5..c786c16890f1b64bbf7c80d3d9d7a131165a31b5 100644 (file)
@@ -20,7 +20,9 @@ The function should return a stencil (i.e. a formatted, ready to
 print object).
 
 
-To add a function, use the define-markup-command utility.
+To add a builtin markup command, use the define-builtin-markup-command
+utility. In a user file, the define-markup-command macro shall be used
+(see ly/markup-init.ly).
 
   (define-markup-command (mycommand layout prop arg1 ...) (arg1-type? ...)
     \"my command usage and description\"
@@ -28,7 +30,6 @@ To add a function, use the define-markup-command utility.
 
 The command is now available in markup mode, e.g.
 
-
   \\markup { .... \\MYCOMMAND #1 argument ... }
 
 " ; "
@@ -36,34 +37,8 @@ The command is now available in markup mode, e.g.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; markup definer utilities
 
-(defmacro-public in-module-define-variable (module-name symbol value)
-  "Define a variable in a module and export its name.
-  (in-module-define-variable (some module) symbol value)"
-  (let ((gmodule (gensym "module")))
-    `(let ((,gmodule (resolve-module ',module-name)))
-       (module-define! ,gmodule ',symbol ,value)
-       (module-export! ,gmodule '(,symbol)))))
-
-(defmacro-public in-module-define-function
-                 (module-name function-name+arg-list . body)
-  "Define a public function in a module:
-  (in-module-define-function (some module) (function-name . args)
-    ..body..)"
-  `(in-module-define-variable
-    ,module-name
-    ,(car function-name+arg-list)
-    (let ((proc (lambda ,(cdr function-name+arg-list)
-                  ,@body)))
-      (set-procedure-property! proc
-                               'name
-                               ',(car function-name+arg-list))
-      proc)))
-
-;;; `define-markup-command' can be used both for built-in markup
-;;; definitions and user defined markups.
-(defmacro-public define-markup-command (command-and-args signature . body)
+(define-macro (define-builtin-markup-command command-and-args signature . body)
   "
-
 * Define a COMMAND-markup function after command-and-args and body,
 register COMMAND-markup and its signature,
 
@@ -74,40 +49,36 @@ register COMMAND-markup and its signature,
 * define a make-COMMAND-markup function.
 
 Syntax:
-  (define-markup-command (COMMAND layout props arg1 arg2 ...) (arg1-type? arg2-type? ...)
+  (define-builtin-markup-command (COMMAND layout props arg1 arg2 ...)
+                                 (arg1-type? arg2-type? ...)
     \"documentation string\"
     ...command body...)
-or:
-  (define-markup-command COMMAND (arg1-type? arg2-type? ...) function)
+ or:
+  (define-builtin-markup-command COMMAND (arg1-type? arg2-type? ...)
+    function)
 "
-  (let* ((command (if (pair? command-and-args)
-                      (car command-and-args)
-                      command-and-args))
+  (let* ((command (if (pair? command-and-args) (car command-and-args) command-and-args))
+         (args (if (pair? command-and-args) (cdr command-and-args) '()))
          (command-name (string->symbol (format #f "~a-markup" command)))
          (make-markup-name (string->symbol (format #f "make-~a-markup" command))))
-    `(let ((lily-module (resolve-module '(lily))))
-       ;; define the COMMAND-markup procedure in (lily) module
-       ,(if (pair? command-and-args)
-            ;; two cases:
-            ;; 1/ (define (COMMAND-markup layout props arg1 arg2 ...)
-            ;;      ..command body))
-            `(in-module-define-function (lily) (,command-name ,@(cdr command-and-args))
+    `(begin
+       ;; define the COMMAND-markup function
+       ,(if (pair? args)
+            `(define-public (,command-name ,@args)
                ,@body)
-            ;; 2/ (define COMMAND-markup function)
-            `(in-module-define-variable (lily) ,command-name ,(car body)))
-       (let ((command-proc (module-ref lily-module ',command-name)))
-         ;; register its command signature
-         (set! (markup-command-signature command-proc)
-               (list ,@signature))
-         ;; add the COMMAND-markup procedure to the list of markup functions
-         (if (not (member command-proc markup-function-list))
-             (set! markup-function-list (cons command-proc markup-function-list)))
-         ;; define the make-COMMAND-markup procedure in (lily) module
-         (in-module-define-function (lily) (,make-markup-name . args)
-           (make-markup command-proc
-                        ,(symbol->string make-markup-name)
-                        (list ,@signature)
-                        args))))))
+            (let ((args (gensym "args"))
+                  (markup-command (car body)))
+            `(define-public (,command-name . ,args)
+               ,(format #f "Copy of the ~a command" markup-command)
+               (apply ,markup-command ,args))))
+       (set! (markup-command-signature ,command-name) (list ,@signature))
+       ;; add the command to markup-function-list, for markup documentation
+       (if (not (member ,command-name markup-function-list))
+           (set! markup-function-list (cons ,command-name markup-function-list)))
+       ;; define the make-COMMAND-markup function
+       (define-public (,make-markup-name . args)
+         (let ((sig (list ,@signature)))
+           (make-markup ,command-name ,(symbol->string make-markup-name) sig args))))))
 
 (define-public (make-markup markup-function make-name signature args)
   " Construct a markup object from MARKUP-FUNCTION and ARGS. Typecheck
@@ -141,22 +112,21 @@ against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
   "The `markup' macro provides a lilypond-like syntax for building markups.
 
  - #:COMMAND is used instead of \\COMMAND
- - #:lines ( ... ) is used instead of { ... }
- - #:center-align ( ... ) is used instead of \\center-align < ... >
+ - #:line ( ... ) is used instead of \\line { ... }
  - etc.
 
 Example:
   \\markup { foo
             \\raise #0.2 \\hbracket \\bold bar
             \\override #'(baseline-skip . 4)
-            \\bracket \\column < baz bazr bla >
+            \\bracket \\column { baz bazr bla }
   }
          <==>
   (markup \"foo\"
           #:raise 0.2 #:hbracket #:bold \"bar\"
           #:override '(baseline-skip . 4) 
           #:bracket #:column (\"baz\" \"bazr\" \"bla\"))
-Use `markup*' in a \\notes block."
+Use `markup*' in a \\notemode context."
   
   (car (compile-all-markup-expressions `(#:line ,body))))
 
@@ -269,44 +239,28 @@ Use `markup*' in a \\notes block."
 ;;; (markup-command-keyword raise-markup) ==> "scheme0-markup1"
 ;;; 
 
-(define markup-command-signatures (make-hash-table 50))
+(define-public (markup-command-keyword markup-command)
+  "Return markup-command's argument keyword, ie a string describing the command
+  arguments, eg. \"scheme0markup1\""
+  (object-property markup-command 'markup-keyword))
 
-(define (markup-command-signature-ref markup-command)
-  "Return markup-command's signature, e.g. (number? markup?).
-markup-command may be a procedure."
-  (let ((sig-key (hashq-ref markup-command-signatures
-                            markup-command)))
-    (if sig-key (car sig-key) #f)))
+(define-public (markup-command-signature-ref markup-command)
+  "Return markup-command's signature (the 'markup-signature object property)"
+  (object-property markup-command 'markup-signature))
 
-(define-public (markup-command-keyword markup-command)
-  "Return markup-command's keyword, e.g. \"scheme0markup1\".
-markup-command may be a procedure."
-  (let ((sig-key (hashq-ref markup-command-signatures
-                            markup-command)))
-    (if sig-key (cdr sig-key) #f)))
-
-(define (markup-command-signatureset! markup-command signature)
-  "Set markup-command's signature. markup-command must be a named procedure.
-Also set markup-signature and markup-keyword object properties."
-  (hashq-set! markup-command-signatures
-              markup-command
-              (cons signature (markup-signature-to-keyword signature)))
-  ;; these object properties are still in use somewhere
+(define-public (markup-command-signature-set! markup-command signature)
+  "Set markup-command's signature and keyword (as object properties)"
   (set-object-property! markup-command 'markup-signature signature)
-  (set-object-property! markup-command 'markup-keyword (markup-signature-to-keyword signature)))
-  
-(define-public markup-command-signature
-  (make-procedure-with-setter markup-command-signature-ref markup-command-signatureset!))
+  (set-object-property! markup-command 'markup-keyword 
+                        (markup-signature-to-keyword signature))
+  signature)
 
-(define (markup-symbol-to-proc markup-sym)
-  "Return the markup command procedure which name is `markup-sym', if any."
-  (hash-fold (lambda (key val prev)
-               (or prev
-                   (if (eqv? (procedure-name key) markup-sym) key #f)))
-             #f
-             markup-command-signatures))
+(define-public markup-command-signature
+  (make-procedure-with-setter markup-command-signature-ref
+                              markup-command-signature-set!))
 
-(define-public markup-function-list '())
+;; For documentation purposes
+(define-public markup-function-list (list))
 
 (define-public (markup-signature-to-keyword sig)
   " (A B C) -> a0-b1-c2 "
@@ -329,8 +283,13 @@ Also set markup-signature and markup-keyword object properties."
                          "-"))))
 
 (define-public (lookup-markup-command code)
-  (let ((proc (markup-symbol-to-proc (string->symbol (string-append code "-markup")))))
-    (and proc (cons proc (markup-command-keyword proc)))))
+  (let ((proc (catch 'misc-error
+                (lambda ()
+                  (module-ref (current-module)
+                              (string->symbol (format #f "~a-markup" code))))
+                (lambda (key . args) #f))))
+    (and (procedure? proc)
+         (cons proc (markup-command-keyword proc)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;
 ;;; used in parser.yy to map a list of markup commands on markup arguments
diff --git a/scm/memory-trace.scm b/scm/memory-trace.scm
new file mode 100644 (file)
index 0000000..dd86c49
--- /dev/null
@@ -0,0 +1,133 @@
+(define-module (scm memory-trace))
+
+(use-modules (ice-9 format))
+(define-public (mtrace:start-trace freq)
+  (set! usecond-interval (inexact->exact (/ 1000000 freq)))
+  (call-with-new-thread start-install-tracepoint))
+
+(define-public (mtrace:stop-trace)
+  (set! continue-tracing #f))
+
+(define-public mtrace:trace-depth 12)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define trace-points '())
+(define continue-tracing #t)
+(define busy-tracing #f)
+(define trace-thread #f)
+
+(define trace-count 0)
+(define usecond-interval 100000)
+(define (arg-procedure args)
+  (if (and (pair? args)
+          (pair? (cdr args))
+          (pair? (cadr args)))
+      (caadr args) #f))
+
+(define (record-stack key continuation . args)
+  (if (eq? (current-thread) trace-thread)
+      #t ;; do nothing.
+      (begin
+       (set! busy-tracing #t)
+       (trap-disable 'traps)
+       (trap-disable 'enter-frame)
+       (set! trace-count (1+ trace-count))
+
+       (set! trace-points
+             (cons (list
+                    (assoc 'total-cells-allocated (gc-stats))
+                    (cons 'stack (extract-trace continuation))
+                    (cons 'proc (arg-procedure args))
+                    )
+                   
+                   trace-points))
+
+       (set! busy-tracing #f))))
+
+(define (start-install-tracepoint)
+  (set! trace-thread (current-thread))
+  (install-tracepoint))
+
+(define (install-tracepoint)
+  (if busy-tracing
+      (display "last trace not finished yet\n" (current-error-port))
+      (begin
+       (trap-set! enter-frame-handler record-stack)
+       (trap-enable 'enter-frame)
+       (trap-enable 'traps)))
+  
+  (usleep usecond-interval)
+  (if continue-tracing
+      (install-tracepoint)))
+
+(define-public (mtrace:dump-results base)
+  (define out (open-output-file (format #f "~a.graph" base)))
+  (define stacks-out (open-output-file (format #f "~a.stacks" base)))
+  (define i 0)
+  (define last-mem 0) 
+  (format out "# memory trace with ~a points\n" (length trace-points))
+  
+  (for-each
+   (lambda (r)
+     (let*
+        ((mem (cdr (assoc 'total-cells-allocated r)))
+         (proc (cdr (assoc 'proc r)))
+         (stack (cdr (assoc 'stack r))))
+       
+       (format out "~a ~a\n" i mem)
+       (if stack
+          (begin
+            (format stacks-out "~15a - delta-mem: ~15a - ~a \n" i
+                    (- mem last-mem) proc)
+            (do
+                ((j 0 (1+ j))
+                 (stack (cdr (assoc 'stack r)) stack))
+                ((>= j (vector-length stack)))
+              
+              (format stacks-out "\t~a\n"
+                      (vector-ref stack j)))))
+       
+       (set! i (1+ i))
+       (set! last-mem mem)
+       ))
+   (reverse trace-points)))
+
+
+
+(define (test-graph . rest)
+  (mtrace:start-trace 100)
+  (iota 100000)
+  (mtrace:stop-trace)
+  (mtrace:dump-results "test"))
+
+
+
+(define (extract-trace continuation)
+  (let*
+      ((stack (make-stack continuation))
+       (depth (min (stack-length stack) mtrace:trace-depth))
+       (trace (make-vector depth #f)))
+
+    (do
+       ((i 0 (1+ i)))
+       ((>= i depth))
+
+      (vector-set!
+       trace i
+       (let*
+          ((source (frame-source (stack-ref stack i))))
+
+          (and source
+               (cons (source-property source 'filename)
+                     (source-property source 'line))))))
+
+    trace))
+
+
+
+
+
+
+       
+       
index dee999868e7a22f2eaf1a5699d8fa2878931827a..cef0fae28b07d31369ec4860f2eae14120131f43 100644 (file)
@@ -276,17 +276,18 @@ returns the program of the instrument
 
 (define-public (alterations-in-key pitch-list)
   "Count number of sharps minus number of flats"
-  (/ (apply + (map cdr pitch-list)) 2))
+  
+  (* (apply + (map cdr pitch-list)) 2))
 
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 
-(define-public (paper-book-write-midis paper-book basename)
+(define-public (write-performances-midis performances basename)
   (let
       loop
-    ((perfs (ly:paper-book-performances paper-book))
+    ((perfs performances)
      (count 0))
 
 
index 7b0d5d0658aead0f69b1da9ad422f46647cce5a3..21617676ad71f64fef61530ba42116bb9c63e3d0 100644 (file)
@@ -210,7 +210,7 @@ Returns `obj'.
   "create a repeat music expression, with all properties initialized properly"
   (let ((talts (if (< times (length alts))
                   (begin
-                    (ly:warning (_ "More alternatives than repeats. Junking excess alternatives"))
+                    (ly:warning (_ "More alternatives than repeats.  Junking excess alternatives"))
                     (take alts times))
                   alts))
        (r (make-repeated-music name)))
@@ -228,10 +228,15 @@ Returns `obj'.
          (if (memq 'sequential-music (ly:music-property main 'types))
              ;; \repeat "tremolo" { c4 d4 }
              (let ((children (length (ly:music-property main 'elements))))
-               (if (not (= children 2))
+
+               ;; fixme: should be more generic.
+               (if (and (not (= children 2))
+                        (not (= children 1)))
                    (ly:warning (_ "expecting 2 elements for chord tremolo, found ~a") children))
                (ly:music-compress r (ly:make-moment 1 children))
-               (shift-duration-log r (1- shift) dots))
+               (shift-duration-log r
+                                   (if (= children 2)  (1- shift) shift)
+                                   dots))
              ;; \repeat "tremolo" c4
              (shift-duration-log r shift dots)))
        r)))
@@ -410,23 +415,26 @@ i.e.  this is not an override"
 old middleCPosition, add OCTAVATION to middleCPosition, and set
 OTTAVATION to `8va', or whatever appropriate."     
       (if (number? (ly:context-property         context 'middleCPosition))
-         (if (= octavation 0)
-             (let ((where (ly:context-property-where-defined context 'middleCPosition))
-                   (oc0 (ly:context-property context 'originalCentralCPosition)))
-               (ly:context-set-property! context 'middleCPosition oc0)
-               (ly:context-unset-property where 'originalCentralCPosition)
-               (ly:context-unset-property where 'ottavation))
-             (let* ((where (ly:context-property-where-defined context 'middleCPosition))
-                    (c0 (ly:context-property context 'middleCPosition))
-                    (new-c0 (+ c0 (* -7 octavation)))
-                    (string (cdr (assoc octavation '((2 . "15ma")
-                                                     (1 . "8va")
-                                                     (0 . #f)
-                                                     (-1 . "8vb")
-                                                     (-2 . "15mb"))))))
-               (ly:context-set-property! context 'middleCPosition new-c0)
-               (ly:context-set-property! context 'originalCentralCPosition c0)
-               (ly:context-set-property! context 'ottavation string)))))
+         (begin
+           (if (number? (ly:context-property context 'originalMiddleCPosition))
+               (let ((where (ly:context-property-where-defined context 'middleCPosition)))
+                 
+                 (ly:context-set-property! context 'middleCPosition
+                                           (ly:context-property context 'originalMiddleCPosition))
+                 (ly:context-unset-property where 'originalMiddleCPosition)
+                 (ly:context-unset-property where 'ottavation)))
+ot         
+           (let* ((where (ly:context-property-where-defined context 'middleCPosition))
+                  (c0 (ly:context-property context 'middleCPosition))
+                  (new-c0 (+ c0 (* -7 octavation)))
+                  (string (cdr (assoc octavation '((2 . "15ma")
+                                                   (1 . "8va")
+                                                   (0 . #f)
+                                                   (-1 . "8vb")
+                                                   (-2 . "15mb"))))))
+             (ly:context-set-property! context 'middleCPosition new-c0)
+             (ly:context-set-property! context 'originalMiddleCPosition c0)
+             (ly:context-set-property! context 'ottavation string)))))
     (set! (ly:music-property m 'procedure) ottava-modify)
     (context-spec-music m 'Staff)))
 
@@ -491,9 +499,9 @@ of beat groupings "
              'duration duration
              'text string))
 
-(define-safe-public (make-span-event type spandir)
+(define-safe-public (make-span-event type span-dir)
   (make-music type
-             'span-direction spandir))
+             'span-direction span-dir))
 
 (define-public (set-mus-properties! m alist)
   "Set all of ALIST as properties of M." 
@@ -745,7 +753,7 @@ Syntax:
              (set! (ly:music-property music 'quoted-events) quoted-vector)
              (set! (ly:music-property music 'iterator-ctor)
                    ly:quote-iterator::constructor))
-           (ly:warning (_ "can't find quoted music `~S'" quoted-name))))
+           (ly:warning (_ "cannot find quoted music: `~S'") quoted-name)))
     music))
 
 
index ccb6d9d04b110025ee51136964aeba4cc26de72c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,339 +0,0 @@
-;;;; output-gnome.scm -- implement GNOME canvas output
-;;;;
-;;;;  source file of the GNU LilyPond music typesetter
-;;;; 
-;;;; (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
-
-;;;; TODO:
-;;;;
-;;;;  * .cff MUST NOT be in fc's fontpath.
-;;;;    - workaround: remove mf/out from ~/.fonts.conf,
-;;;;      instead add ~/.fonts and symlink all /mf/out/*otf there.
-;;;;    - bug in fontconfig/freetype/pango?
-
-;;;  * check: blot+scaling
-;;;  * Figure out and fix font scaling and character placement
-;;;  * EC font package: add missing X font directories and AFMs
-;;;  * User-interface, keybindings
-;;;  * Implement missing stencil functions
-;;;  * Implement missing commands
-;;;  * More information in stencils, e.g., location and grob tag.
-;;;  * Embedded Lily:
-;;;    - allow GnomeCanvas or `toplevel' GtkWindow to be created
-;;;      outside of LilyPond
-;;;    - lilylib.
-;;;  * Release schedule and packaging of dependencies.
-;;;    - g-wrap-1.9.3 is already in incoming.
-;;;    - guile-gnome-platform-2.8.0 will probably be packaged early 2005.
-
-;;; You need:
-;;;
-;;;   * Rotty's g-wrap >= 1.9.3
-;;;   * guile-gnome-platform >= 2.7.97
-;;;   * pango >= 1.6.0
-;;;
-;;; See also: guile-gtk-general@gnu.org
-
-;;; Try it
-;;;
-;;;   * Install gnome/gtk and libffi development stuff
-;;;
-;;;   * Install [pango, g-wrap and] guile-gnome from source,
-;;;     see buildscripts/guile-gnome.sh
-;;;  
-;;;   * Build LilyPond with gui support: configure --enable-gui
-;;;
-;;;   * Supposing that LilyPond was built in ~/cvs/savannah/lilypond,
-;;;     tell fontconfig about the feta fonts dir and run fc-cache
-"
-cat > ~/.fonts.conf << EOF
-<fontconfig>
-<dir>~/cvs/savannah/lilypond/mf/out</dir>
-<dir>/usr/share/texmf/fonts/type1/public/ec-fonts-mftraced</dir>
-</fontconfig>
-EOF
-fc-cache
-"
-;;;     or copy all your .pfa/.pfb's to ~/.fonts if your fontconfig
-;;;     already looks there for fonts.  Check if it works by doing:
-"
-fc-list | grep -i lily
-"
-;;;
-;;;   * Setup environment
-"
-export GUILE_LOAD_PATH=$HOME/usr/pkg/g-wrap/share/guile/site:$HOME/usr/pkg/g-wrap/share/guile/site/g-wrap:$HOME/usr/pkg/guile-gnome/share/guile:$GUILE_LOAD_PATH
-export LD_LIBRARY_PATH=$HOME/usr/pkg/pango/lib:$HOME/usr/pkg/g-wrap/lib:$HOME/usr/pkg/guile-gnome/lib:$LD_LIBRARY_PATH
-export XEDITOR='/usr/bin/emacsclient --no-wait +%l:%c %f'
-"
-;;;  * Also for GNOME point-and-click, you need to set XEDITOR and add
-"
-#(ly:set-point-and-click 'line-column)
-"
-;;;    to your .ly.
-;;;
-;;;  * Run lily:
-"
-lilypond -fgnome input/simple-song.ly
-"
-;;; point-and-click: (mouse-1) click on a graphical object;
-;;; grob-property-list: (mouse-3) click on a graphical object.
-
-(define-module (scm output-gnome))
-(define this-module (current-module))
-
-(use-modules
- (guile)
- (ice-9 regex)
- (srfi srfi-13)
- (lily)
- (gnome gtk)
- (gnome gw canvas))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; globals
-
-;;; set by framework-gnome.scm
-(define canvas-root #f)
-(define output-scale #f)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; helper functions
-
-(define (utf-8 i)
-  (cond
-   ((< i #x80) (list (integer->char i)))
-   ((< i #x800) (map integer->char
-                    (list (+ #xc0 (quotient i #x40))
-                          (+ #x80 (modulo i #x40)))))
-   ((< i #x10000)
-    (let ((x (quotient i #x1000))
-         (y (modulo i #x1000)))
-      (map integer->char
-          (list (+ #xe0 x)
-                (+ #x80 (quotient y #x40))
-                (+ #x80 (modulo y #x40))))))
-   (else (begin (stderr "programming-error: utf-8 too big:~x\n" i)
-               (list (integer->char 32))))))
-
-(define (integer->utf-8-string integer)
-  (list->string (utf-8 integer)))
-
-(define (char->utf-8-string char)
-  (list->string (utf-8 (char->integer char))))
-
-(define (string->utf-8-string string)
-  (apply
-   string-append
-   (map (lambda (x) (char->utf-8-string x)) (string->list string))))
-
-(define (music-font? font)
-  (let ((family (car (font-name-style font))))
-    (string=? (substring family 0 (min (string-length family) 10))
-             "Emmentaler")))
-
-;;; FONT may be font smob, or pango font string
-(define (pango-font-name font)
-  (if (string? font)
-      (list font "Regular")
-      (apply format (append '(#f "~a, ~a") (font-name-style font)))))
-
-;;; FONT may be font smob, or pango font string
-(define (canvas-font-size font)
-  ;; FIXME: 1.85?
-  (* 1.85
-     (if (string? font)
-        12
-        (* output-scale (modified-font-metric-font-scaling font)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Wrappers from guile-gnome TLA
-;;; guile-gnome-devel@gnu.org--2004
-;;; http://arch.gna.org/guile-gnome/archive-2004
-;;;
-;;; janneke@gnu.org--2004-gnome
-;;; http://lilypond.org/~janneke/{arch}/2004-gnome
-;;;
-(if (not (defined? '<gnome-canvas-path-def>))
-    (begin
-      (define-class <gnome-canvas-path-def> (<gobject>)
-       (closure #:init-value (gnome-canvas-path-def-new)
-                #:init-keyword #:path-def
-                #:getter get-def #:setter set-def))
-      
-      (define-method (moveto (this <gnome-canvas-path-def>) x y)
-       (gnome-canvas-path-def-moveto (get-def this) x y))
-      (define-method (curveto (this <gnome-canvas-path-def>) x1 y1 x2 y2 x3 y3)
-       (gnome-canvas-path-def-curveto (get-def this)  x1 y1 x2 y2 x3 y3))
-      (define-method (lineto (this <gnome-canvas-path-def>) x y)
-       (gnome-canvas-path-def-lineto (get-def this) x y))
-      (define-method (closepath (this <gnome-canvas-path-def>))
-       (gnome-canvas-path-def-closepath (get-def this)))
-      (define-method (reset (this <gnome-canvas-path-def>))
-       (gnome-canvas-path-def-reset (get-def this)))
-      
-      (define -set-path-def set-path-def)
-      (define -get-path-def get-path-def)
-      
-      (define-method (set-path-def (this <gnome-canvas-shape>)
-                                  (def <gnome-canvas-path-def>))
-       (-set-path-def this (get-def def)))
-      
-      (define-method (get-path-def (this <gnome-canvas-shape>))
-       (make <gnome-canvas-path-def> #:path-def (-get-path-def this)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; stencil outputters
-;;;
-
-;;; catch-all for missing stuff
-;;; comment this out to see find out what functions you miss :-)
-(define (dummy . foo) #f)
-(map (lambda (x) (module-define! this-module x dummy))
-     (append
-      (ly:all-stencil-expressions)
-      (ly:all-output-backend-commands)))
-
-;; two beziers
-(define (bezier-sandwich lst thick)
-  (let* ((def (make <gnome-canvas-path-def>))
-        (bezier (make <gnome-canvas-bpath>
-                  #:parent (canvas-root)
-                  #:fill-color "black"
-                  #:outline-color "black"
-                  #:width-units thick
-                  #:join-style 'round)))
-
-    (reset def)
-
-    ;; FIXME: LST is pre-mangled for direct ps stack usage
-    ;; cl cr r l  0 1 2 3 
-    ;; cr cl l r  4 5 6 7
-    
-    (moveto def (car (list-ref lst 3)) (- (cdr (list-ref lst 3))))
-    (curveto def (car (list-ref lst 0)) (- (cdr (list-ref lst 0)))
-            (car (list-ref lst 1)) (- (cdr (list-ref lst 1)))
-            (car (list-ref lst 2)) (- (cdr (list-ref lst 2))))
-
-    (lineto def (car (list-ref lst 7)) (- (cdr (list-ref lst 7))))
-    (curveto def (car (list-ref lst 4)) (- (cdr (list-ref lst 4)))
-            (car (list-ref lst 5)) (- (cdr (list-ref lst 5)))
-            (car (list-ref lst 6)) (- (cdr (list-ref lst 6))))
-    (lineto def (car (list-ref lst 3)) (- (cdr (list-ref lst 3))))
-
-    (closepath def)
-    (set-path-def bezier def)
-    bezier))
-
-(define (char font i)
-  (text font (ly:font-index-to-charcode font i)))
-
-(define (dashed-line thick on off dx dy)
-  (draw-line thick 0 0 dx dy))
-
-(define (draw-line thick x1 y1 x2 y2)
-  (let* ((def (make <gnome-canvas-path-def>))
-        (props (make <gnome-canvas-bpath>
-                 #:parent (canvas-root)
-                 #:fill-color "black"
-                 #:outline-color "black"
-                 #:width-units thick)))
-    (reset def)
-    (moveto def x1 (- y1))
-    (lineto def x2 (- y2))
-    (set-path-def props def)
-    props))
-
-
-;; FIXME: the framework-gnome backend needs to see every item that
-;; gets created.  All items created here must should be put in a group
-;; that gets returned.
-(define (glyph-string font postscript-font-name w-x-y-named-glyphs)
-  (for-each
-   (lambda (x)
-
-     ;; UGR, glyph names not found
-     (stderr "GLYPH:~S\n" (caddr x))
-     (stderr "ID:~S\n" (ly:font-glyph-name-to-charcode font (caddr x)))
-     (placebox (cadr x) (caddr x)
-              (make <gnome-canvas-text>
-                #:parent (canvas-root)
-                ;;#:x 0.0 #:y (if (music-font? font) 0.15 0.69)
-                #:x 0.0 #:y 0.0
-                #:anchor 'west
-                #:font (pango-font-name font)
-                #:size-points (canvas-font-size font)
-                #:size-set #t
-                #:text
-                (integer->utf-8-string
-                 (ly:font-glyph-name-to-charcode font (cadddr x))))))
-   w-x-y-named-glyphs))
-
-(define (grob-cause offset grob)
-  grob)
-
-
-(define (named-glyph font name)
-  (text font (ly:font-glyph-name-to-charcode font name)))
-
-(define (placebox x y expr)
-  (let ((item expr))
-    ;;(if item
-    ;; FIXME ugly hack to skip #unspecified ...
-    (if (and item (not (eq? item (if #f #f))))
-       (begin
-         (move item (* output-scale x) (* output-scale (- y)))
-         (affine-relative item output-scale 0 0 output-scale 0 0)
-         item)
-       #f)))
-
-(define (polygon coords blot-diameter)
-  (let* ((def (make <gnome-canvas-path-def>))
-        (props (make <gnome-canvas-bpath>
-                 #:parent (canvas-root)
-                 #:fill-color "black"
-                 #:outline-color "black"
-                 #:join-style 'round)
-               #:width-units blot-diameter)
-        (points (ly:list->offsets '() coords))
-        (last-point (car (last-pair points))))
-    
-    (reset def)
-    (moveto def (car last-point) (cdr last-point))
-    (for-each (lambda (x) (lineto def (car x) (cdr x))) points)
-    (closepath def)
-    (set-path-def props def)
-    props))
-
-(define (round-filled-box breapth width depth height blot-diameter)
-  (let ((r (/ blot-diameter 2)))
-    (make <gnome-canvas-rect>
-      #:parent (canvas-root)
-      #:x1 (- r breapth) #:y1 (- depth r) #:x2 (- width r) #:y2 (- r height)
-      #:fill-color "black"
-      #:outline-color "black"
-      #:width-units blot-diameter
-      #:join-style 'round)))
-
-(define (text font s)
-  (make <gnome-canvas-text>
-    #:parent (canvas-root)
-    ;;#:x 0.0 #:y 0.0
-    #:x 0.0 #:y (if (music-font? font) 0.15 0.69)
-    #:anchor (if (music-font? font) 'west 'south-west)
-    #:font (pango-font-name font)
-    #:size-points (canvas-font-size font)
-    #:size-set #t
-    #:text (if (integer? s)
-              (integer->utf-8-string s)
-              (string->utf-8-string s))))
-
-(define (utf-8-string pango-font-description string)
-  (make <gnome-canvas-text>
-    #:parent (canvas-root)
-    #:x 0.0 #:y 0.0
-    #:anchor 'west
-    #:font pango-font-description
-    #:size-points (canvas-font-size pango-font-description)
-    #:size-set #t
-    #:text string))
index f15fb8ca257f3e9c8892293ff71c2078fa41f712..f66a78bcbc7bf42082f35d66831dbd64c5e58c70 100644 (file)
   (ly:duration-dot-count
    (ly:event-property (event-cause grob) 'duration)))
 
+(define-public (dots::calc-staff-position grob)
+  (let*
+      ((head (ly:grob-parent grob Y))
+       (log (ly:grob-property head 'duration-log)))
+
+    (cond
+     ((or (not (grob::has-interface head 'rest-interface))
+        (not (integer? log))) 0)
+     ((= log 7) 4)
+     ((> log 4) 3)
+     ((= log 0) -1)
+     ((= log 1) 1)
+     ((= log -1) 1)
+     (else 0))))
+
 (define (note-head::calc-tablature-stem-attachment grob)
   (cons 0.0 1.35))
 
@@ -303,16 +318,120 @@ centered, X==1 is at the right, X == -1 is at the left."
 (define-public darkmagenta '(0.5 0.0 0.5))
 (define-public darkyellow  '(0.5 0.5 0.0))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; key signature
+
+
+(define-public (key-signature-interface::alteration-position step alter c0-position)
+  ;; TODO: memoize - this is mostly constant.
+  
+  ;; fes, ges, as and bes typeset in lower octave
+  (define FLAT_TOP_PITCH 2)
+  
+  ;; ais and bis typeset in lower octave
+  (define SHARP_TOP_PITCH 4)
+
+  (if (pair? step)
+      (+ (cdr step) (* (car step) 7)  c0-position)
+      (let*
+         ((from-bottom-pos (modulo (+ 4 49 c0-position)  7))
+          (p step)
+          (c0 (- from-bottom-pos  4)))
+       
+       (if
+        (or (and (< alter 0) (or (> p FLAT_TOP_PITCH) (> (+ p c0) 4)) (> (+ p c0) 1))
+            (and (> alter 0) (or (> p SHARP_TOP_PITCH) (> (+ p c0) 5)) (> (+ p c0) 2))
+            )
+
+        ;; Typeset below c_position 
+        (set! p (- p 7)))
+
+       ;; Provide for the four cases in which there's a glitch
+       ;; it's a hack, but probably not worth
+       ;; the effort of finding a nicer solution.
+       ;; --dl. 
+       (cond
+        ((and (= c0 2) (= p 3) (> alter 0))
+         (set! p (- p 7)))
+        ((and (= c0 -3) (= p -1) (> alter 0))
+         (set! p (+ p 7)))
+        ((and (= c0 -4) (= p -1) (< alter 0))
+         (set! p (+ p 7)))
+        ((and (= c0 -2) (= p -3) (< alter 0))
+         (set! p (+ p 7))))
+
+       (+ c0 p))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; accidentals
+
+(define-public (accidental-interface::calc-alteration grob)
+  (ly:pitch-alteration  (ly:event-property (event-cause grob) 'pitch)))
+
+
+(define-public cancellation-glyph-name-alist
+  '((0 . "accidentals.natural")))
+
+(define-public standard-alteration-glyph-name-alist
+     '(
+       ;; ordered for optimal performance.
+       (0 . "accidentals.natural")
+       (-1/2 . "accidentals.flat")
+       (1/2 . "accidentals.sharp")
+
+       (1 . "accidentals.doublesharp")
+       (-1 . "accidentals.flatflat")
+       
+       (3/4 . "accidentals.sharp.slashslash.stemstemstem")
+       (1/4 . "accidentals.sharp.slashslash.stem")
+       (-1/4 . "accidentals.mirroredflat")
+       (-3/4 . "accidentals.mirroredflat.flat")
+       ))
+
+(define-public makam-alteration-glyph-name-alist
+     '((1 . "accidentals.doublesharp")
+       (8/9 . "accidentals.sharp.slashslashslash.stemstem")
+       (5/9 . "accidentals.sharp.slashslashslash.stem")
+       (4/9 . "accidentals.sharp")
+       (1/9 . "accidentals.sharp.slashslash.stem")
+       (0 . "accidentals.natural")
+       (-1/9 . "accidentals.mirroredflat")
+       (-4/9 . "accidentals.flat.slash")
+       (-5/9 . "accidentals.flat")
+       (-8/9 . "accidentals.flat.slashslash")
+       (-1 . "accidentals.flatflat")
+       ))
+  
+(define-public alteration-hufnagel-glyph-name-alist
+   '((1/2 . "accidentals.hufnagel-1")
+     (0 . "accidentals.vaticana0")
+     (-1/2 . "accidentals.mensural1")))
+
+(define-public alteration-medicaea-glyph-name-alist
+   '((1/2 . "accidentals.medicaea-1")
+     (0 . "accidentals.vaticana0")
+     (-1/2 . "accidentals.mensural1")))
+
+(define-public alteration-vaticana-glyph-name-alist
+   '((1/2 . "accidentals.vaticana-1")
+     (0 . "accidentals.vaticana0")
+     (-1/2 . "accidentals.mensural1")))
+
+(define-public alteration-mensural-glyph-name-alist
+   '((1/2 . "accidentals.mensural-1")
+     (0 . "accidentals.vaticana0")
+     (-1/2 . "accidentals.mensural1")))
+
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; * Pitch Trill Heads
 ;; * Parentheses
 
 (define-public (parentheses-item::calc-parenthesis-stencils grob)
-  (let* (
-        (font (ly:grob-default-font grob))
+  (let* ((font (ly:grob-default-font grob))
         (lp (ly:font-get-glyph font "accidentals.leftparen"))
-        (rp (ly:font-get-glyph font "accidentals.rightparen"))
-        )
+        (rp (ly:font-get-glyph font "accidentals.rightparen")))
 
     (list lp rp)))
 
@@ -422,8 +541,6 @@ centered, X==1 is at the right, X == -1 is at the left."
                            (interval-end (ly:grob-robust-relative-extent dots common X))
                            -10000) ;; TODO: use real infinity constant.
                        )))
-       (x (display (grob::has-interface left-span 'note-head-interface)))
-
        (right-x (- (interval-start
                    (ly:grob-robust-relative-extent right-span common X))
                   padding))
@@ -439,10 +556,8 @@ centered, X==1 is at the right, X == -1 is at the left."
                     0
                     ,dx ,(* 0.66 delta-y)
                     ,dx ,delta-y
-                    ))))
-       )
+                    )))))
 
-    (display left-span)
     (ly:make-stencil
      exp
      (cons (- left-x self-x) (- right-x self-x))
index a50f82d639da8dfd80e8e15be14d738e9d6a4643..8af5b3fa3dd47d1164f2148fd51e90236a7ffcdd 100644 (file)
 ;;;
 
 
+;; ice-9 format uses a lot of memory
+;; using simple-format almost halves lilypond cell usage
+(define format simple-format)
+
 (define (escape-parentheses s)
   (regexp-substitute/global #f "(^|[^\\])([\\(\\)])" s 'pre 1 "\\" 2 'post))
 
-(define (ps-encoding text)
-  (escape-parentheses text))
-
-(define (round2 num)
-  (/ (round (* 100 num)) 100))
-
-(define (round4 num)
-  (/ (round (* 10000 num)) 10000))
-
 (define (str4 num)
-  (format #f "~f" (round4 num)))
+  (if (or (nan? num) (inf? num))
+      (begin
+       (ly:warning (_ "Found infinity or nan in output. Substituting 0.0"))
+       (if (ly:get-option 'strict-infinity-checking)
+           (exit 1))
+       "0.0")
+      (ly:number->string num)))
 
 (define (number-pair->string4 numpair)
-  (format #f "~f ~f" (round4 (car numpair)) (round4 (cdr numpair))))
+  (string-append (str4 (car numpair))
+                " "
+                (str4 (cdr numpair))))
 
 (define (numbers->string4 numlist)
   (string-join (map str4 numlist) " "))
 
 (define (circle radius thick fill)
   (format #f
-   "~a ~f ~f draw_circle"
+   "~a ~a ~a draw_circle"
    (if fill
      "true"
      "false")
-   (round4 radius) (round4 thick)))
+   (str4 radius) (str4 thick)))
 
 (define (dashed-line thick on off dx dy phase)
   (format #f "~a ~a ~a [ ~a ~a ] ~a draw_dashed_line"
 
   (define (glyph-spec w x y g)
     (let ((prefix (if (string? g) "/" "")))
-      (format #f "~f ~f ~a~a"
-             (round2 (+ w x))
-             (round2 y)
+      (format #f "~a ~a ~a~a"
+             (str4 (+ w x))
+             (str4 y)
              prefix g)))
   
   (format #f
 
          (if (and (< 0 (interval-length x-ext))
                   (< 0 (interval-length y-ext)))
-             (format #f "~$ ~$ ~$ ~$ (textedit://~a:~a:~a:~a) mark_URI\n"
-                     (+ (car offset) (car x-ext))
-                     (+ (cdr offset) (car y-ext))
-                     (+ (car offset) (cdr x-ext))
-                     (+ (cdr offset) (cdr y-ext))
+             (format #f "~a ~a ~a ~a (textedit://~a:~a:~a:~a) mark_URI\n"
+                     (str4 (+ (car offset) (car x-ext)))
+                     (str4 (+ (cdr offset) (car y-ext)))
+                     (str4 (+ (car offset) (cdr x-ext)))
+                     (str4 (+ (cdr offset) (cdr y-ext)))
 
                      ;; TODO
                      ;;full escaping.
 
                      ;; backslash is interpreted by GS.
-                     (string-regexp-substitute "\\\\" "/" 
-                                     (string-regexp-substitute " " "%20" file))
+                     (ly:string-substitute "\\" "/" 
+                                           (ly:string-substitute " " "%20" file))
                      (cadr location)
                      (caddr location)
                      (cadddr location))
 
 ;; rotation around given point
 (define (setrotation ang x y)
-  (format "gsave ~a translate ~a rotate ~a translate\n"
+  (format #f "gsave ~a translate ~a rotate ~a translate\n"
     (numbers->string4 (list x y))
     (number->string ang)
     (numbers->string4 (list (* -1 x) (* -1 y)))))
   "\n unknown\n")
 
 (define (url-link url x y)
-  (format #f "~$ ~$ ~$ ~$ (~a) mark_URI"
+  (format #f "~a ~a ~a ~a (~a) mark_URI"
          (car x)
          (car y)
          (cdr x)
             )
 
          ;; WARNING: this is a vulnerability: a user can output arbitrary PS code here.
-         (cons (format "~a ~a "
-                       (string-join (map (lambda (x) (format "~a " x)) args) " ")
+         (cons (format #f
+                       "~a ~a "
+                       (string-join (map (lambda (x) (format #f "~a " x)) args) " ")
                        head)
                (convert-path-exps (drop rest arity))))
        '()))
     
     
-  (format
+  (format #f
    "1 setlinecap ~a setlinewidth\n~a stroke"
    thickness
    (string-join (convert-path-exps exps) " ")))
index 27dfe4e74aafbc6b3c81d7f98038e54f444a41bc..b0bf088b3697fb2867bd267a5fdd2852e9a1554b 100644 (file)
          (set! size
                (string->number (match:substring match 3))))
 
-       (ly:warning (_ "can't decypher Pango description: ~a") str))
+       (ly:warning (_ "cannot decypher Pango description: ~a") str))
 
     (set! style
          (if (string? style)
index 3a3e023ebe77e302b0c65341a7763cc7ce91cb65..d9a97b90934139f5316153473e957dcdc799923d 100644 (file)
@@ -95,7 +95,7 @@
                       "\\char" (number->string subidx))
 
        (begin
-         (ly:warning (_ "can't find ~a in ~a" name font))
+         (ly:warning (_ "cannot find ~a in ~a" name font))
          ""))))
 
 (define (dashed-line thick on off dx dy phase)
 (define (no-origin) "")
 
 
-
-
 (define-public (line-location  file line col)
   "Print an input location, without column number ."
   (string-append (number->string line) " " file))
            (string-append "\\special{src:"
                           (line-column-location location) "}")
            ""))
-      ""))
+      ""))
\ No newline at end of file
index 40fd537557f0ad6b5c8f91d03e97c52f5620308e..3e25bdaaee3b46059ce22a90eb1578cb8b7b6426 100644 (file)
          (set! head-stencil
                (ly:stencil-combine-at-edge
                 stencil Y dir head-stencil
-                sep 0.0))
+                sep))
 
          
          ;; add arrow markers 
index 6c0c031c02aa1ccb905dac3d9fddc358eb37afe1..4750b518f7d67db2c40eb6ae71ba648f9175142b 100644 (file)
                       staff-space line-thickness ledgerline-thickness
                       blot-diameter left-margin right-margin)))
 
-(define-public (layout-set-staff-size sz)
-  "Function to be called inside a \\layout{} block to set the staff size."
-  (let* ((m (current-module))
-        (ss (/ sz 4))
-        (pt (eval 'pt m))
-
-        
-        ;; linear interpolation.
-        (x1 (* 4.125 pt))
-        (x0 (* 5 pt))
-        (f1 (* 0.47 pt))
-        (f0 (* 0.50 pt))
-        (lt (/
-             (+
-              (* f1 (- ss x0))
-              (* f0 (- x1 ss)))
-             (- x1 x0)))
-        
-        (mm (eval 'mm m)))
-
-    (module-define! m 'text-font-size (* 12 (/ sz (* 20 pt))))
+(define (calc-line-thickness staff-space pt)
+  ;; linear interpolation.
+
+  ;; !! synchronize with feta-params.mf
+  (let*
+    ((x1 (* 4.125 pt))
+     (x0 (* 5 pt))
+     (f1 (* 0.47 pt))
+     (f0 (* 0.50 pt)))
+
+    (/
+     (+
+      (* f1 (- staff-space x0))
+          (* f0 (- x1 staff-space)))
+     (- x1 x0))))
+
+(define-public (layout-set-absolute-staff-size-in-module m staff-height)
+  (let*
+      ((pt (eval 'pt m))
+       (ss (/ staff-height 4))
+       (factor (/ staff-height (* 20 pt))))
+
+    (module-define! m 'text-font-size (* 12 factor))
     
     (module-define! m 'output-scale ss)
     (module-define! m 'fonts
                    (if tex-backend?
-                       (make-cmr-tree (/  sz (* 20 pt)))
-                       (make-century-schoolbook-tree
-                        (/ sz (* 20 pt)))))
-    (module-define! m 'staff-height sz)
-    (module-define! m 'staff-space ss)
+                       (make-cmr-tree factor)
+                       (make-century-schoolbook-tree factor)))
+    (module-define! m 'staff-height staff-height)
     (module-define! m 'staff-space ss)
 
-    ;; !! synchronize with feta-params.mf
-    (module-define! m 'line-thickness lt)
+    (module-define! m 'line-thickness (calc-line-thickness ss pt))
+
+    ;;  sync with feta  
     (module-define! m 'ledgerline-thickness (+ (* 0.5 pt) (/ ss 10)))
+
+    ;;  sync with feta  
     (module-define! m 'blot-diameter (* 0.4 pt))
     ))
 
+ (define-public (layout-set-absolute-staff-size sz)
+  "Function to be called inside a \\layout{} block to set the staff size. SZ is in
+points"
+  
+  (layout-set-absolute-staff-size-in-module (current-module) sz))
+
+(define-public (layout-set-staff-size sz)
+  "Function to be called inside a \\layout{} block to set the staff size. SZ is in
+points"
+  
+  (layout-set-absolute-staff-size (* (eval 'pt (current-module)) sz)))
+
 (define-safe-public (set-global-staff-size sz)
   "Set the default staff size, where SZ is thought to be in PT."
-  (let* ((old-mod (current-module))
-        (pap (eval '$defaultpaper old-mod))
-        (in-layout? (or (module-defined? old-mod 'is-paper)
-                        (module-defined? old-mod 'is-layout)))
+  (let* ((current-mod (current-module))
+        (pap (eval '$defaultpaper current-mod))
+        (in-layout? (or (module-defined? current-mod 'is-paper)
+                        (module-defined? current-mod 'is-layout)))
 
         ; maybe not necessary.
         ; but let's be paranoid. Maybe someone still refers to the
         (new-scope (ly:output-def-scope new-paper)))
     
     (if in-layout?
-       (ly:warning (_ "Not in toplevel scope")))
-    (set-current-module new-scope)
-    (layout-set-staff-size (* sz (eval 'pt new-scope)))
-    (set-current-module old-mod)
-    (module-define! old-mod '$defaultpaper new-paper)))
+       (ly:warning (_ "set-global-staff-size: not in toplevel scope")))
+
+    (layout-set-absolute-staff-size-in-module new-scope
+                                             (* sz (eval 'pt new-scope)))
+    (module-define! current-mod '$defaultpaper new-paper)))
 
 (define-public paper-alist
 
index 2d429886f30b24ffd0b3f7bef81250e351b9b0f5..9959afdbfe6f48b24da675dfbdc713c7dc61f23a 100644 (file)
     (read-string!/partial str port 0 max-length)
     str))
 
-(define (gulp-file nm len)
-
-  ;; string routines barf when strlen() != string-length,.
-  ;; which may happen as side effect of read-string!/partial.
-  
-                                       ;  (gulp-port (open-file nm "r") len))
-  (ly:gulp-file nm len))
-
+(define-public (gulp-file file-name . max-size)
+  (ly:gulp-file file-name (if (pair? max-size) (car max-size))))
 
 (define BOUNDING-BOX-RE
   "^%%BoundingBox: (-?[0-9]+) (-?[0-9]+) (-?[0-9]+) (-?[0-9]+)")
 
-(define (get-bbox file-name)
+(define (unused-found-broken-get-bbox file-name)
   (let* ((bbox (string-append file-name ".bbox"))
         ;; -sOutputFile does not work with bbox?
         (cmd (format #t "gs\
@@ -71,7 +65,7 @@
  -c quit 2>~S"
                      file-name bbox))
         (status (system cmd))
-        (s (gulp-file bbox 10240))
+        (s (gulp-file bbox 10240))
         (m (string-match BOUNDING_BOX_RE s)))
 
     (if m
       (begin
        (format (current-error-port) (_ "Invoking `~a'...") cmd)
        (newline (current-error-port))))
-
-  
   (set! status (system cmd))
-  
   (if (not (= status 0))
       (begin
        (format (current-error-port)
                (format #f (_ "~a exited with status: ~S") "GS" status))
-       (if exit-on-error
-           (exit 1))))
-
+       (if exit-on-error (exit 1))))
   status)
 
 (define (scale-down-image be-verbose factor file)
-  (let* ((status 0)
-        (percentage (* 100 (/ 1.0 factor)))
-        (old (string-append file ".old")))
-
-    (rename-file file old)
-    (my-system be-verbose
-              #t
-              (format #f "convert -scale \"~a%\" -depth 8 ~a ~a" percentage old file))
-    (delete-file old)
-    ))
+  (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-public (ps-page-count ps-name)
-  (let*
-      ((byte-count 10240)
-       (header (gulp-file ps-name byte-count))
-       (first-null (string-index header #\nul))
-       (match (string-match "%%Pages: ([0-9]+)"
-                           (if (number? first-null)
-                               (substring header 0 first-null)
-                               header))))
-
-    (if match
-       (string->number (match:substring match 1))
-       0)))
+  (let* ((byte-count 10240)
+        (header (gulp-file ps-name byte-count))
+        (first-null (string-index header #\nul))
+        (match (string-match "%%Pages: ([0-9]+)"
+                             (if (number? first-null)
+                                 (substring header 0 first-null)
+                                 header))))
+    (if match (string->number (match:substring match 1)) 0)))
 
 (define-public (make-ps-images ps-name . rest)
   (let-keywords*
    rest #f
-     ((resolution 90)
-      (page-width  100)
-      (page-height 100)
-      (rename-page-1 #f)
-      (be-verbose #f)
-      (pixmap-format 'png16m)
-      (anti-alias-factor 1))
-     
-   (let* (
-         (format-str (format "~a" pixmap-format))
+   ((resolution 90)
+    (page-width  100)
+    (page-height 100)
+    (rename-page-1 #f)
+    (be-verbose #f)
+    (pixmap-format 'png16m)
+    (anti-alias-factor 1))
+
+   (let* ((format-str (format "~a" pixmap-format))
          (extension (cond
                      ((string-contains format-str "png") "png")
                      ((string-contains format-str "jpg") "jpeg")
 
          (gs-variable-options
           (if multi-page?
-              (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f" page-width page-height)
+              (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
+                      page-width page-height)
               "-dEPSCrop"))
-
          (cmd (format #f "~a\
  ~a\
  ~a\
           ))
 
      (if (not (= 1 anti-alias-factor))
-        (for-each  (lambda (f) (scale-down-image be-verbose anti-alias-factor f))
-                   files))
-
+        (for-each
+         (lambda (f) (scale-down-image be-verbose anti-alias-factor f)) files))
      files)))
index 370bfea2a8dcb78ef84060c0c59390a0a6d6d562..c47f05583b26f21e3b2f888ef44f15a78090f1ce 100644 (file)
    ly:output-description
    ly:paper-book?
    ly:prob-property
-   ly:layout-def?
+   ly:output-def?
    ly:paper-get-font
    ly:paper-get-number
    ly:paper-system?
    ly:output-def-lookup
-   ly:parse-string
    ly:parser-parse-string
    ly:pitch-alteration
    ly:pitch-diff
    ly:stencil-combine-at-edge
    ly:stencil-expr
    ly:stencil-extent
-   ly:stencil-moved-to-edge
    ly:stencil-translate
    ly:stencil-translate-axis
    ly:stencil?
index 6044f61a1881cfaf88fa79c566258724e3410296..a31e201abab03290ecf773760b8ab89aeea4540c 100644 (file)
 ;;;; 
 ;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-(set! default-script-alist
-      (append 
-       '(("thumb" .
-         ((script-stencil . (feta . ("thumb"  . "thumb")))
-          (avoid-slur . inside)
-          (padding . 0.20)        
-          (direction . 1)))
-         ("accent" .
-         ((avoid-slur . around)
-          (padding . 0.20)        
-          (quantize-position . #t)
-          (script-stencil . (feta . ("sforzato" .  "sforzato")))
-          (side-relative-direction . -1)))
-         ("espressivo" .
-         ((avoid-slur . around)
-          (padding . 0.20)        
-          (quantize-position . #t)
-          (script-stencil . (feta . ("espr" .  "espr")))
-          (side-relative-direction . -1)))      
-        ("marcato" .
-         ((script-stencil . (feta . ("dmarcato" . "umarcato")))
-          (padding . 0.20)
-          (avoid-slur . inside)
-;         (staff-padding . ())
-          (quantize-position . #t)
-          (side-relative-direction .  -1)))
-        ("staccatissimo" .
-         ((avoid-slur . inside) 
-          (script-stencil . (feta . ("dstaccatissimo" . "ustaccatissimo")))
-          (padding . 0.20)        
-          (side-relative-direction .  -1)))
-        
-        ("portato" .
-         ((script-stencil . (feta . ("uportato" . "dportato")))
-          (avoid-slur . around)
-          (slur-padding . 0.3)
-          (padding . 0.45)
-          (side-relative-direction . -1)))
+(define-public default-script-alist
+  '(("thumb" .
+     ((script-stencil . (feta . ("thumb"  . "thumb")))
+      (avoid-slur . inside)
+      (padding . 0.20)    
+      (direction . 1)))
+    ("accent" .
+     ((avoid-slur . around)
+      (padding . 0.20)    
+      (quantize-position . #t)
+      (script-stencil . (feta . ("sforzato" .  "sforzato")))
+      (side-relative-direction . -1)))
+    ("espressivo" .
+     ((avoid-slur . around)
+      (padding . 0.20)    
+      (quantize-position . #t)
+      (script-stencil . (feta . ("espr" .  "espr")))
+      (side-relative-direction . -1)))  
+    ("marcato" .
+     ((script-stencil . (feta . ("dmarcato" . "umarcato")))
+      (padding . 0.20)
+      (avoid-slur . inside)
+                                       ;          (staff-padding . ())
+      (quantize-position . #t)
+      (side-relative-direction .  -1)))
+    ("staccatissimo" .
+     ((avoid-slur . inside) 
+      (script-stencil . (feta . ("dstaccatissimo" . "ustaccatissimo")))
+      (padding . 0.20)    
+      (side-relative-direction .  -1)))
+    
+    ("portato" .
+     ((script-stencil . (feta . ("uportato" . "dportato")))
+      (avoid-slur . around)
+      (slur-padding . 0.3)
+      (padding . 0.45)
+      (side-relative-direction . -1)))
 
-        ("accentus" .
-         ((script-stencil . (feta . ("uaccentus" . "uaccentus")))
-          (side-relative-direction .  -1)
-          (padding . 0.20)        
-          (quantize-position . #t)
-          (script-priority . -100)
-          (direction  . 1)))
-        ("ictus" .
-         ((script-stencil . (feta . ("ictus" . "ictus")))
-          (side-relative-direction .  -1)
-          (quantize-position . #t)
-          (padding . 0.20)        
-          (script-priority . -100)
-          (direction  . -1)))
-        ("semicirculus" .
-         ((script-stencil . (feta . ("dsemicirculus" . "dsemicirculus")))
-          (side-relative-direction .  -1)
-          (quantize-position . #t)
-          (padding . 0.20)        
-          (script-priority . -100)
-          (direction  . 1)))
-        ("circulus" .
-         ((script-stencil . (feta . ("circulus" . "circulus")))
-          (side-relative-direction .  -1)
-          (padding . 0.20)        
-          (quantize-position . #t)
-          (script-priority . -100)
-          (direction  . 1)))
+    ("accentus" .
+     ((script-stencil . (feta . ("uaccentus" . "uaccentus")))
+      (side-relative-direction .  -1)
+      (avoid-slur . #f)
+      (padding . 0.20)    
+      (quantize-position . #t)
+      (script-priority . -100)
+      (direction  . 1)))
+    ("ictus" .
+     ((script-stencil . (feta . ("ictus" . "ictus")))
+      (side-relative-direction .  -1)
+      (quantize-position . #t)
+      (avoid-slur . #f)
+      (padding . 0.20)    
+      (script-priority . -100)
+      (direction  . -1)))
+    ("semicirculus" .
+     ((script-stencil . (feta . ("dsemicirculus" . "dsemicirculus")))
+      (side-relative-direction .  -1)
+      (quantize-position . #t)
+      (avoid-slur . #f)
+      (padding . 0.20)    
+      (script-priority . -100)
+      (direction  . 1)))
+    ("circulus" .
+     ((script-stencil . (feta . ("circulus" . "circulus")))
+      (side-relative-direction .  -1)
+      (avoid-slur . #f)
+      (padding . 0.20)    
+      (quantize-position . #t)
+      (script-priority . -100)
+      (direction  . 1)))
 
-        ("signumcongruentiae" .
-         ((script-stencil . (feta . ("dsignumcongruentiae" . "usignumcongruentiae")))
-          (padding . 0.20)        
-          (direction .  1)))
-        ("fermata" .
-         ((script-stencil . (feta . ("dfermata" . "ufermata")))
-          (padding . 0.20)        
-          (avoid-slur . around)
-          (script-priority . 4000)
-          (direction .  1)))
-        ("shortfermata" .
-         ((script-stencil . (feta . ("dshortfermata" . "ushortfermata")))
-          (padding . 0.20)        
-          (direction .  1)))
-        ("longfermata" .
-         ((script-stencil . (feta . ("dlongfermata" . "ulongfermata")))
-          (padding . 0.20)        
-          (direction .  1)))
-        ("verylongfermata" .
-         ((script-stencil . (feta . ("dverylongfermata" . "uverylongfermata")))
-          (padding . 0.20)        
-          (direction .  1)))
-        ("stopped" .
-         ((script-stencil . (feta . ("stopped" . "stopped")))
-          (avoid-slur . inside)
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("staccato" .
-         ((script-stencil . (feta . ("staccato" . "staccato")))
-          (side-relative-direction .  -1)
-          (quantize-position . #t)
-          (avoid-slur . inside) 
-          (padding . 0.20)        
-          (script-priority . -100)))
-        ("tenuto" .
-         ((script-stencil . (feta . ("tenuto" . "tenuto")))
-          (quantize-position . #t)
-          (avoid-slur . inside)
-          (padding . 0.20)        
-          (side-relative-direction . -1)))
-        ("comma" .
-         ((script-stencil . (feta . ("lcomma" . "rcomma")))
-          (quantize-position . #t)
-          (padding . 0.20)        
-          (direction . 1)))
-        ("varcomma" .
-         ((script-stencil . (feta . ("lvarcomma" . "rvarcomma")))
-          (quantize-position . #t)
-          (padding . 0.20)        
-          (direction . 1)))
-        ("upbow" .
-         ((script-stencil . (feta . ("upbow" . "upbow")))
-          (avoid-slur . around)
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("downbow" .
-         ((script-stencil . (feta . ("downbow" . "downbow")))
-          (padding . 0.20)        
-          (avoid-slur . around)
-          (direction  . 1)))
-        ("lheel" .
-         ((script-stencil . (feta . ("upedalheel" . "upedalheel")))
-          (padding . 0.20)        
-          (direction .  -1))
-         )
-        ("rheel" .
-         ((script-stencil . (feta . ("dpedalheel" . "dpedalheel")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("ltoe" .
-         ((script-stencil . (feta . ("upedaltoe" . "upedaltoe")))
-          (padding . 0.20)        
-          (direction  . -1)))
-        ("rtoe" .
-         ((script-stencil . (feta . ("dpedaltoe" . "dpedaltoe")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("turn" .
-         ((script-stencil . (feta . ("turn" . "turn")))
-          (avoid-slur . inside)
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("open" .
-         ((avoid-slur . outside)
-          (padding . 0.20)        
-          (script-stencil . (feta . ("open" . "open")))
-          (direction  . 1)))
-        ("flageolet" .
-         ((script-stencil . (feta . ("flageolet" . "flageolet")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("reverseturn" .
-         ((script-stencil . (feta . ("reverseturn" . "reverseturn")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("trill" .
-         ((script-stencil . (feta . ("trill" . "trill")))
-          (direction . 1)
-          (padding . 0.20)        
-          (avoid-slur . outside)
-          (script-priority . 2000)))
-        ("prall" .
-         ((script-stencil . (feta . ("prall" . "prall")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("mordent" .
-         ((script-stencil . (feta . ("mordent" . "mordent")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("prallprall" .
-         ((script-stencil . (feta . ("prallprall" . "prallprall")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("prallmordent" .
-         ((script-stencil . (feta . ("prallmordent" . "prallmordent")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("upprall" .
-         ((script-stencil . (feta . ("upprall" . "upprall")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("downprall" .
-         ((script-stencil . (feta . ("downprall" . "downprall")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("upmordent" .
-         ((script-stencil . (feta . ("upmordent" . "upmordent")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("downmordent" .
-         ((script-stencil . (feta . ("downmordent" . "downmordent")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("lineprall" .
-         ((script-stencil . (feta . ("lineprall" . "lineprall")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("pralldown" .
-         ((script-stencil . (feta . ("pralldown" . "pralldown")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("prallup" .
-         ((script-stencil . (feta . ("prallup" . "prallup")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("segno" .
-         ((script-stencil . (feta . ("segno" . "segno")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("coda" .
-         ((script-stencil . (feta . ("coda" . "coda")))
-          (padding . 0.20)        
-          (direction  . 1)))
-        ("varcoda" .
-         ((script-stencil . (feta . ("varcoda" . "varcoda")))
-          (padding . 0.20)        
-          (direction  . 1))))
-       default-script-alist)
-      )
+    ("signumcongruentiae" .
+     ((script-stencil . (feta . ("dsignumcongruentiae" . "usignumcongruentiae")))
+      (padding . 0.20)    
+      (avoid-slur . outside)
+      (direction .  1)))
+    ("fermata" .
+     ((script-stencil . (feta . ("dfermata" . "ufermata")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (script-priority . 4000)
+      (direction .  1)))
+    ("shortfermata" .
+     ((script-stencil . (feta . ("dshortfermata" . "ushortfermata")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction .  1)))
+    ("longfermata" .
+     ((script-stencil . (feta . ("dlongfermata" . "ulongfermata")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction .  1)))
+    ("verylongfermata" .
+     ((script-stencil . (feta . ("dverylongfermata" . "uverylongfermata")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction .  1)))
+    ("stopped" .
+     ((script-stencil . (feta . ("stopped" . "stopped")))
+      (avoid-slur . inside)
+      (padding . 0.20)    
+      (direction  . 1)))
+    ("staccato" .
+     ((script-stencil . (feta . ("staccato" . "staccato")))
+      (side-relative-direction .  -1)
+      (quantize-position . #t)
+      (avoid-slur . inside) 
+      (padding . 0.20)    
+      (script-priority . -100)))
+    ("tenuto" .
+     ((script-stencil . (feta . ("tenuto" . "tenuto")))
+      (quantize-position . #t)
+      (avoid-slur . inside)
+      (padding . 0.20)    
+      (side-relative-direction . -1)))
+    ("comma" .
+     ((script-stencil . (feta . ("lcomma" . "rcomma")))
+      (quantize-position . #t)
+      (padding . 0.20)    
+      (avoid-slur . #f)
+      (direction . 1)))
+    ("varcomma" .
+     ((script-stencil . (feta . ("lvarcomma" . "rvarcomma")))
+      (quantize-position . #t)
+      (padding . 0.20)    
+      (avoid-slur . #f)
+      (direction . 1)))
+    ("upbow" .
+     ((script-stencil . (feta . ("upbow" . "upbow")))
+      (avoid-slur . around)
+      (padding . 0.20)    
+      (direction  . 1)))
+    ("downbow" .
+     ((script-stencil . (feta . ("downbow" . "downbow")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("lheel" .
+     ((script-stencil . (feta . ("upedalheel" . "upedalheel")))
+      (padding . 0.20)    
+      (avoid-slur . around) ;guessing?
+      (direction .  -1))
+     )
+    ("rheel" .
+     ((script-stencil . (feta . ("dpedalheel" . "dpedalheel")))
+      (padding . 0.20)    
+      (avoid-slur . around) ;guessing?
+      (direction  . 1)))
+    ("ltoe" .
+     ((script-stencil . (feta . ("upedaltoe" . "upedaltoe")))
+      (padding . 0.20)    
+      (avoid-slur . around) ;guessing?
+      (direction  . -1)))
+    ("rtoe" .
+     ((script-stencil . (feta . ("dpedaltoe" . "dpedaltoe")))
+      (padding . 0.20)    
+      (avoid-slur . around) ;guessing?
+      (direction  . 1)))
+    ("turn" .
+     ((script-stencil . (feta . ("turn" . "turn")))
+      (avoid-slur . inside)
+      (padding . 0.20)    
+      (direction  . 1)))
+    ("open" .
+     ((avoid-slur . outside)
+      (padding . 0.20)    
+      (script-stencil . (feta . ("open" . "open")))
+      (direction  . 1)))
+    ("flageolet" .
+     ((script-stencil . (feta . ("flageolet" . "flageolet")))
+      (padding . 0.20)    
+      (avoid-slur . around) ;guessing?
+      (direction  . 1)))
+    ("reverseturn" .
+     ((script-stencil . (feta . ("reverseturn" . "reverseturn")))
+      (padding . 0.20)    
+      (avoid-slur . inside)
+      (direction  . 1)))
+    ("trill" .
+     ((script-stencil . (feta . ("trill" . "trill")))
+      (direction . 1)
+      (padding . 0.20)    
+      (avoid-slur . outside)
+      (script-priority . 2000)))
+    ("prall" .
+     ((script-stencil . (feta . ("prall" . "prall")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("mordent" .
+     ((script-stencil . (feta . ("mordent" . "mordent")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("prallprall" .
+     ((script-stencil . (feta . ("prallprall" . "prallprall")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("prallmordent" .
+     ((script-stencil . (feta . ("prallmordent" . "prallmordent")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("upprall" .
+     ((script-stencil . (feta . ("upprall" . "upprall")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("downprall" .
+     ((script-stencil . (feta . ("downprall" . "downprall")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("upmordent" .
+     ((script-stencil . (feta . ("upmordent" . "upmordent")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("downmordent" .
+     ((script-stencil . (feta . ("downmordent" . "downmordent")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("lineprall" .
+     ((script-stencil . (feta . ("lineprall" . "lineprall")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("pralldown" .
+     ((script-stencil . (feta . ("pralldown" . "pralldown")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("prallup" .
+     ((script-stencil . (feta . ("prallup" . "prallup")))
+      (padding . 0.20)    
+      (avoid-slur . around)
+      (direction  . 1)))
+    ("segno" .
+     ((script-stencil . (feta . ("segno" . "segno")))
+      (padding . 0.20)    
+      (avoid-slur . outside)
+      (direction  . 1)))
+    ("coda" .
+     ((script-stencil . (feta . ("coda" . "coda")))
+      (padding . 0.20)    
+      (avoid-slur . outside)
+      (direction  . 1)))
+    ("varcoda" .
+     ((script-stencil . (feta . ("varcoda" . "varcoda")))
+      (padding . 0.20)    
+      (avoid-slur . outside)
+      (direction  . 1)))))
index 681a49d04297727f11ff25c2ac8a757e7d755811..5a644d2b3d1b8c9e1312f90b5b39ea306e469ab2 100644 (file)
@@ -5,6 +5,9 @@
 ;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;                 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
+
+(use-modules (ice-9 rdelim))
+
 (define standalone (not (defined? 'ly:gulp-file)))
 ;;(write standalone (current-error-port))
 
@@ -16,8 +19,8 @@
 
 (define (scm-gulp-file name)
   (set! %load-path 
-       (cons (string-append (getenv 'LILYPONDPREFIX) "/ly")
-             (cons (string-append (getenv 'LILYPONDPREFIX) "/ps")
+       (cons (string-append (getenv "LILYPONDPREFIX") "/ly")
+             (cons (string-append (getenv "LILYPONDPREFIX") "/ps")
                    %load-path)))
   (let ((path (%search-load-path name)))
        (if path
index 62b43cebc260a13f4f2ec3402c99ba9475dbe4df..463a082fd337e63e25230fc4fe89f70c3091206f 100644 (file)
 
 (define-public (stack-lines dir padding baseline stils)
   "Stack vertically with a baseline-skip."
-  (if (null? stils)
-      empty-stencil
-      (if (null? (cdr stils))
-         (car stils)
-         (ly:stencil-combine-at-edge
-          (car stils) Y dir 
-          (stack-lines dir padding baseline (cdr stils))
-          padding baseline))))
+  (define result empty-stencil)
+  (define last-y #f)
+  (do
+      ((last-stencil #f (car p))
+       (p stils (cdr p)))
+      
+      ((null? p))
+
+    (if (number? last-y)
+       (begin
+         (let* ((dy (max (+ (* dir (interval-bound (ly:stencil-extent last-stencil Y) dir))
+                            padding
+                            (* (- dir) (interval-bound (ly:stencil-extent (car p) Y) (- dir))))
+                         baseline))
+                (y (+ last-y  (* dir dy))))
+           
+                         
+           
+           (set! result
+                 (ly:stencil-add result (ly:stencil-translate-axis (car p) y Y)))
+           (set! last-y y)))
+       (begin
+         (set! last-y 0)
+         (set! result (car p)))))
+
+  result)
+    
 
 (define-public (bracketify-stencil stil axis thick protusion padding)
   "Add brackets around STIL, producing a new stencil."
@@ -240,11 +259,11 @@ encloses the contents.
          (set! annotation
                 (center-stencil-on-extent text-stencil))
          (set! annotation
-               (ly:stencil-combine-at-edge arrows X RIGHT annotation 0.5 0))
+               (ly:stencil-combine-at-edge arrows X RIGHT annotation 0.5))
          (set! annotation
                (ly:stencil-combine-at-edge annotation X LEFT
                                             (center-stencil-on-extent dim-stencil)
-                                            0.5 0))
+                                            0.5))
          (set! annotation
                (ly:make-stencil (list 'color color (ly:stencil-expr annotation))
                                 (ly:stencil-extent annotation X)
index 5f2828a3704089de71308354bbc80c975d98d4a6..409247d0a554963bb2c52cdd379a22bd12739f43 100644 (file)
@@ -5,8 +5,11 @@
 ;;;; (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 
+(define-module (scm to-xml))
+
 (use-modules (ice-9 regex)
             (srfi srfi-1)
+            (lily)
             (oop goops))
 
 "
@@ -187,7 +190,7 @@ is then separated.
 (define (assert x)
   (if x
       #t
-      (ly:error (_ "assertion failed"))))
+      (ly:error (_ "assertion failed: ~S") x)))
 
 (define (re-sub re to string)
   (regexp-substitute/global #f re string 'pre to 'post))
index e28577fb1c88b9eaed15d91b6b3309c5f42fc616..83dc1f79ae4d135b12b6c8b1d19a5be0a72d4ecd 100644 (file)
@@ -328,7 +328,7 @@ def gulp_file(f):
         n = i.tell ()
         i.seek (0,0)
     except:
-        sys.stderr.write ("can't open file: `%s'\n" % f)
+        sys.stderr.write ("cannot open file: `%s'\n" % f)
         return ''
     s = i.read (n)
     if len (s) <= 0:
@@ -1179,7 +1179,7 @@ def try_parse_bar (str,state):
         close_beam_state(state)
         voices_append (bs)
         if do_curly != '':
-            voices_append("} }")
+            voices_append("} ")
             do_curly = ''
     return str
 
@@ -1338,7 +1338,7 @@ def identify():
     sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
 
 authors = """
-Written by Han-Wen Nienhuys <hanwen@cs.uu.nl>, Laura Conrad
+Written by Han-Wen Nienhuys <hanwen@xs4all.nl>, Laura Conrad
 <lconrad@laymusic.org>, Roy Rankin <Roy.Rankin@@alcatel.com.au>.
 """
 
@@ -1346,28 +1346,29 @@ def print_version ():
     print r"""abc2ly (GNU lilypond) %s""" % version
 
 def get_option_parser ():
-    p = ly.get_option_parser (usage='abc2ly [OPTIONS] FILE',
+    p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'abc2ly',
                  version="abc2ly (LilyPond) @TOPLEVEL_VERSION@",
-                 description=_('''This program converts ABC music files (see
-http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input.'''))
-
-    p.add_option ('-o', '--output', metavar='FILE',help=_("set output filename to FILE"),
-           action='store')
-    p.add_option ('-s', '--strict', help=_("be strict about succes"),
-           action='store_true')
-    p.add_option ('-b', '--beams', help=_("preserve ABC's notion of beams"))
-    p.add_option_group  ('bugs',
-              description='''Report bugs via http://post.gmane.org/post.php'''
-              '''?group=gmane.comp.gnu.lilypond.bugs\n''')
-    
+                 description=_ ('''abc2ly converts ABC music files (see
+%s) to LilyPond input.''') % 'http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt')
+
+    p.add_option ('-o', '--output', metavar='FILE',
+                  help=_ ("write output to FILE"),
+                  action='store')
+    p.add_option ('-s', '--strict', help=_ ("be strict about succes"),
+                  action='store_true')
+    p.add_option ('-b', '--beams', help=_ ("preserve ABC's notion of beams"))
+    p.add_option_group ('bugs',
+                        description=(_ ('Report bugs via')
+                                     + ''' http://post.gmane.org/post.php'''
+                                     '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
     return p
 
 
-option_parser = get_option_parser()
-(global_options, files) = option_parser.parse_args()
+option_parser = get_option_parser ()
+(global_options, files) = option_parser.parse_args ()
 
 
-identify()
+identify ()
 
 header['tagline'] = 'Lily was here %s -- automatically converted from ABC' % version
 for f in files:
index 1f0ef120f1a1250dc9ce8baf87c2ca3bddadf762..474144c3ce081d16b3f45f67e1a0aa0a52d53ff3 100644 (file)
@@ -4,7 +4,7 @@
 #
 # source file of the GNU LilyPond music typesetter
 #
-# (c) 1998--2006  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# (c) 1998--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
 #                 Jan Nieuwenhuizen <janneke@gnu.org>
 #
 # converting rules are found in python/convertrules.py
@@ -31,24 +31,23 @@ for p in ['share', 'lib']:
 import lilylib as ly
 global _;_=ly._
 
-from convertrules import *
+import convertrules
 
 lilypond_version_re_str = '\\\\version *\"([0-9.]+)"'
 lilypond_version_re = re.compile (lilypond_version_re_str)
 
 
-help_summary = _ (
-'''Update LilyPond input to newer version.  By default, update from the
-version taken from the \\version command, to the current LilyPond version.
-
-Examples:
-
+help_summary = (
+_ ('''Update LilyPond input to newer version.  By default, update from the
+version taken from the \\version command, to the current LilyPond version.''')
++ _ ("Examples:")
++ '''
   convert-ly -e old.ly
   convert-ly --from=2.3.28 --to 2.5.21 foobar.ly
 ''')
 
 copyright = ('Jan Nieuwenhuizen <janneke@gnu.org>',
-         'Han-Wen Nienhuys <hanwen@cs.uu.nl>')
+             'Han-Wen Nienhuys <hanwen@xs4all.nl>')
 
 program_name = os.path.basename (sys.argv[0])
 program_version = '@TOPLEVEL_VERSION@'
@@ -73,13 +72,12 @@ Copyright (c) %s by
 %s
 %s
 '''  ( '2001--2006',
-       _('Distributed under terms of the GNU General Public License.'),
-       _('It comes with NO WARRANTY.')))
-
+       _ ("Distributed under terms of the GNU General Public License."),
+       _ ('It comes with NO WARRANTY.')))
 
 
 def get_option_parser ():
-    p = ly.get_option_parser (usage='convert-ly [OPTIONS] FILE',
+    p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'convert-ly',
                   version="@TOPLEVEL_VERSION@",
                   description=help_summary)
 
@@ -87,32 +85,33 @@ def get_option_parser ():
               action="store",
               metavar=_ ("VERSION"),
               dest="from_version",
-              help=_('start from VERSION [default: \\version found in file]'),
+              help=_ ("start from VERSION [default: \\version found in file]"),
               default='')
     
-    p.add_option ('-e', '--edit', help=_('edit in place'),
+    p.add_option ('-e', '--edit', help=_ ("edit in place"),
               action='store_true')
     p.add_option ('-n', '--no-version',
-              help=_ ('do not add \\version command if missing'),
+              help=_ ("do not add \\version command if missing"),
               action='store_true',
               dest='skip_version_add',
               default=False)
     
     p.add_option ("-s", '--show-rules',
-              help=_('print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]'),
+              help=_ ("show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"),
               dest='show_rules',
               action='store_true', default=False)
     
     p.add_option ('-t', '--to',
-              help=_('convert to VERSION [default: @TOPLEVEL_VERSION@]'),
-              metavar=_('VERSION'),
+              help=_ ("convert to VERSION [default: @TOPLEVEL_VERSION@]"),
+              metavar=_ ('VERSION'),
               action='store',
               dest="to_version",
               default='')
 
-    p.add_option_group  ('bugs',
-                 description='''Report bugs via http://post.gmane.org/post.php'''
-                 '''?group=gmane.comp.gnu.lilypond.bugs\n''')
+    p.add_option_group ('bugs',
+                        description=(_ ("Report bugs via")
+                                     + ''' http://post.gmane.org/post.php'''
+                                     '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
     
     return p
 
@@ -133,13 +132,13 @@ def version_cmp (t1, t2):
 def get_conversions (from_version, to_version):
     def is_applicable (v, f = from_version, t = to_version):
         return version_cmp (v[0], f) > 0 and version_cmp (v[0], t) <= 0
-    return filter (is_applicable, conversions)
+    return filter (is_applicable, convertrules.conversions)
 
 def latest_version ():
-    return conversions[-1][0]
+    return convertrules.conversions[-1][0]
 
 def show_rules (file, from_version, to_version):
-    for x in conversions:
+    for x in convertrules.conversions:
         if (not from_version or x[0] > from_version) \
            and (not to_version or x[0] <= to_version):
             file.write  ('%s: %s\n' % (tup_to_str (x[0]), x[2]))
@@ -150,25 +149,24 @@ tuple (LAST,STR), with the last succesful conversion and the resulting
 string."""
     conv_list = get_conversions (from_version, to_version)
 
-    if error_file:
-        error_file.write (_ ("Applying conversion: "))
+    if convertrules.error_file:
+        convertrules.error_file.write (_ ("Applying conversion: "))
         
     last_conversion = ()
     try:
         for x in conv_list:
-            error_file.write (tup_to_str (x[0]))
+            convertrules.error_file.write (tup_to_str (x[0]))
             if x != conv_list[-1]:
-                error_file.write (', ')
+                convertrules.error_file.write (', ')
             str = x[1] (str)
             last_conversion = x[0]
 
-    except FatalConversionError:
-        error_file.write (_ ("error while converting")) 
-        error_file.write ('\n')
-        error_file.write (_ ("Aborting"))
-        error_file.write ('\n')
-
-
+    except convertrules.FatalConversionError:
+        convertrules.error_file.write ('\n'
+                                       + _ ("Error while converting")
+                                       + '\n'
+                                       + _ ("Stopping at last succesful rule")
+                                       + '\n')
 
     return (last_conversion, str)
 
@@ -225,7 +223,7 @@ def do_one_file (infile_name):
         elif not global_options.skip_version_add:
             result = newversion + '\n' + result
             
-        error_file.write ('\n')            
+        convertrules.error_file.write ('\n')            
     
         if global_options.edit:
             try:
@@ -276,14 +274,14 @@ def main ():
         if f == '-':
             f = ''
         elif not os.path.isfile (f):
-            error (_ ("can't open file: `%s'") % f)
+            error (_ ("cannot open file: `%s'") % f)
             if len (files) == 1:
                 sys.exit (1)
             continue
         try:
             do_one_file (f)
         except UnknownVersion:
-            error (_ ("can't determine version for `%s'. Skipping") % f)
+            error (_ ("cannot determine version for `%s'.  Skipping") % f)
 
     sys.stderr.write ('\n')
 
index 0e85317a2ee9791c25c6d238422f9c54cacab9c8..126288f6766723928689a2bd15b14dca78ca467f 100644 (file)
@@ -844,7 +844,7 @@ Return: (value, rest-of-STR)
             
         return (string.atoi (dec), str)
     else:
-        sys.stderr.write ("can't convert `%s'\n" % str)
+        sys.stderr.write ("cannot convert `%s'\n" % str)
         return (None, str)
 
 
@@ -1193,21 +1193,21 @@ Copyright (c) %s by
 
 
 def get_option_parser ():
-    p = ly.get_option_parser (usage='etf2ly [OPTIONS]... ETF-FILE',
+    p = ly.get_option_parser (usage=_ ("%s [OPTION]... ETF-FILE") % 'etf2ly',
                  version="etf2ly (LilyPond) @TOPLEVEL_VERSION@",
-                 description=_("""Enigma Transport Format is a format used by Coda Music Technology's
-Finale product. This program will convert a subset of ETF to a
-ready-to-use lilypond file."""))
-    p.add_option ('-o', '--output', help=_("write output to FILE"),
+                 description=_ ("""Enigma Transport Format is a format used by Coda Music Technology's
+Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond file."""))
+    p.add_option ('-o', '--output', help=_ ("write output to FILE"),
            metavar=_("FILE"),
            action='store')
-    p.add_option ('-w', '--warranty', help=_ ("show warranty"),
+    p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"),
            action='store_true',
            ),
 
-    p.add_option_group  ('bugs',
-              description='''Report bugs via http://post.gmane.org/post.php'''
-              '''?group=gmane.comp.gnu.lilypond.bugs\n''')
+    p.add_option_group ('bugs',
+                        description=(_ ('Report bugs via')
+                                     + ''' http://post.gmane.org/post.php'''
+                                     '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
     return p
 
 def do_options ():
index 6699ba2dcb8b5a269536238c32f4331b6c5f92cb..dd495fc7509e213d10fbe49c3153aefc5e4e9489 100644 (file)
@@ -67,20 +67,19 @@ program_name = os.path.basename (sys.argv[0])
 original_dir = os.getcwd ()
 backend = 'ps'
 
-help_summary = (
-'''Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document.
-
-Example usage:
-
- lilypond-book --filter="tr '[a-z]' '[A-Z]'" BOOK
- lilypond-book --filter="convert-ly --no-version --from=2.0.0 -" BOOK
- lilypond-book --process='lilypond -I include' BOOK
-''')
+help_summary = (
+_ ("Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document.")
++ '\n\n'
++ _ ("Examples:")
++ '''
+ lilypond-book --filter="tr '[a-z]' '[A-Z]'" %(BOOK)s
+ lilypond-book --filter="convert-ly --no-version --from=2.0.0 -" %(BOOK)s
+ lilypond-book --process='lilypond -I include' %(BOOK)s
+''' % {'BOOK': _ ("BOOK")})
 
 authors = ('Jan Nieuwenhuizen <janneke@gnu.org>',
-      'Han-Wen Nienhuys <hanwen@cs.uu.nl>')
+      'Han-Wen Nienhuys <hanwen@xs4all.nl>')
 
-    
 ################################################################
 def exit (i):
     if global_options.verbose:
@@ -116,14 +115,13 @@ def warranty ():
 
 %s
 %s
-''' % ( _('Copyright (c) %s by') % '2001--2006',
+''' % ( _ ('Copyright (c) %s by') % '2001--2006',
     ' '.join (authors),
-   _('Distributed under terms of the GNU General Public License.'),
-   _('It comes with NO WARRANTY.')))
-
+   _ ("Distributed under terms of the GNU General Public License."),
+   _ ("It comes with NO WARRANTY.")))
 
 def get_option_parser ():
-    p = ly.get_option_parser (usage='lilypond-book [OPTIONS] FILE',
+    p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'lilypond-book',
                               version="@TOPLEVEL_VERSION@",
                               description=help_summary)
 
@@ -133,47 +131,50 @@ def get_option_parser ():
                   help=_ ("pipe snippets through FILTER [convert-ly -n -]"),
                   default=None)
     p.add_option ('-f', '--format',
-                  help=_('''use output format FORMAT (texi [default], texi-html, latex, html, docbook)'''),
+                  help=_ ("use output format FORMAT (texi [default], texi-html, latex, html, docbook)"),
                   action='store')
     
-    p.add_option ("-I", '--include', help=_('add DIR to include path'),
-                  metavar="DIR",
+    p.add_option ("-I", '--include', help=_ ("add DIR to include path"),
+                  metavar=_ ("DIR"),
                   action='append', dest='include_path',
                   default=[os.path.abspath (os.getcwd ())])
+
+    p.add_option ('--left-padding', 
+                  metavar=_("PAD"),
+                  dest="padding_mm",
+                  help="Pad left side of music to align music inspite of uneven bar numbers. (in mm)",
+                  type="float",
+                  default=3.0)
     
-    p.add_option ("-o", '--output', help=_('write output to DIR'),
-                  metavar="DIR",
+    p.add_option ("-o", '--output', help=_ ("write output to DIR"),
+                  metavar=_ ("DIR"),
                   action='store', dest='output_name',
                   default='')
-    p.add_option ('-P', '--process', metavar=_("COMMAND"),
+    
+    p.add_option ('-P', '--process', metavar=_ ("COMMAND"),
                   help = _ ("process ly_files using COMMAND FILE..."),
                   action='store', 
                   dest='process_cmd', default='lilypond -b eps')
-
     p.add_option ('--pdf',
                   action="store_true",
                   dest="create_pdf",
-                  help="Create PDF files for use with PDFTeX",
+                  help=_ ("Create PDF files for use with PDFTeX"),
                   default=False)
-    
     p.add_option ('', '--psfonts', action="store_true", dest="psfonts",
                   help=_ ('''extract all PostScript fonts into INPUT.psfonts for LaTeX
 must use this with dvips -h INPUT.psfonts'''),
                   default=None)
-    p.add_option ('-V', '--verbose', help=_("be verbose"),
+    p.add_option ('-V', '--verbose', help=_ ("be verbose"),
                   action="store_true",
                   default=False,
                   dest="verbose")
-    
     p.add_option ('-w', '--warranty',
-                  help=_("show warranty and copyright"),
+                  help=_ ("show warranty and copyright"),
                   action='store_true')
-
-    
-    p.add_option_group  ('bugs',
-                         description='''Report bugs via http://post.gmane.org/post.php'''
-                         '''?group=gmane.comp.gnu.lilypond.bugs\n''')
-    
+    p.add_option_group ('bugs',
+                        description=(_ ("Report bugs via")
+                                     + ''' http://post.gmane.org/post.php'''
+                                     '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
     return p
 
 lilypond_binary = os.path.join ('@bindir@', 'lilypond')
@@ -704,6 +705,8 @@ PREAMBLE_LY = '''%%%% Generated by %(program_name)s
   #(define dump-extents #t)
   %(font_dump_setting)s
   %(paper_string)s
+  force-assignment = #""
+  line-width = #(- line-width (* mm  %(padding_mm)f))
 }
 
 \layout {
@@ -1058,7 +1061,7 @@ class Lilypond_snippet (Snippet):
                       '\n  ') % vars ()
         preamble_string = string.join (compose_dict[PREAMBLE],
                        '\n  ') % override
-        
+        padding_mm = global_options.padding_mm
         font_dump_setting = ''
         if FONTLOAD in self.option_dict:
             font_dump_setting = '#(define-public force-eps-font-include #t)\n'
@@ -1106,8 +1109,7 @@ class Lilypond_snippet (Snippet):
             and (self.relevant_contents (self.full_ly ())
                  == self.relevant_contents (open (ly_file).read ()))):
             return None
-        if global_options.verbose:
-            print 'OUT OF DATE: ', ly_file
+
         return self
 
     def png_is_outdated (self):
@@ -1445,10 +1447,12 @@ def process_snippets (cmd, ly_snippets, texstr_snippets, png_snippets):
                             be_verbose=global_options.verbose, 
                             progress_p=1)
 
-    if global_options.format in (HTML, TEXINFO):
+    if global_options.format in (HTML, TEXINFO) and '--formats' not in cmd:
         cmd += ' --formats=png '
-    if global_options.format in (DOCBOOK):
+    elif global_options.format in (DOCBOOK) and '--formats' not in cmd:
         cmd += ' --formats=png,pdf '
+
+        
     # UGH
     # the --process=CMD switch is a bad idea
     # it is too generic for lilypond-book.
@@ -1479,7 +1483,7 @@ LATEX_INSPECTION_DOCUMENT = r'''
 def get_latex_textwidth (source):
     m = re.search (r'''(?P<preamble>\\begin\s*{document})''', source)
     if m == None:
-        warning (_ ("Can't find \\begin{document} in LaTeX document"))
+        warning (_ ("cannot find \\begin{document} in LaTeX document"))
         
         ## what's a sensible default?
         return 550.0
@@ -1560,6 +1564,7 @@ def write_file_map (lys, name):
     snippet_map = open ('snippet-map.ly', 'w')
     snippet_map.write ("""
 #(define version-seen #t)
+#(define output-empty-score-list #f)
 #(ly:add-file-name-alist '(
 """)
     for ly in lys:
@@ -1572,7 +1577,7 @@ def write_file_map (lys, name):
 def do_process_cmd (chunks, input_name):
     all_lys = filter (lambda x: is_derived_class (x.__class__,
                            Lilypond_snippet),
-             chunks)
+                      chunks)
 
     write_file_map (all_lys, input_name)
     ly_outdated = filter (lambda x: is_derived_class (x.__class__,
@@ -1608,7 +1613,7 @@ def guess_format (input_filename):
         # FIXME
         format = ext2format[e]
     else:
-        error (_ ("can't determine format for: %s" \
+        error (_ ("cannot determine format for: %s" \
               % input_filename))
         exit (1)
     return format
@@ -1768,6 +1773,22 @@ def do_options ():
         
     return args
 
+def psfonts_warning (options, basename):
+    if options.format in (TEXINFO, LATEX):
+        psfonts_file = os.path.join (options.output_name, basename + '.psfonts')
+        output = os.path.join (options.output_name, basename +  '.dvi' )
+
+        if not options.create_pdf:
+            if not options.psfonts:
+                warning (_ ("option --psfonts not used"))
+                warning (_ ("processing with dvips will have no fonts"))
+            else:
+                progress ('\n')
+                progress (_ ("DVIPS usage:"))
+                progress ('\n')
+                progress ("    dvips -h %(psfonts_file)s %(output)s" % vars ())
+                progress ('\n')
+
 def main ():
     # FIXME: 85 lines of `main' macramee??
     files = do_options ()
@@ -1796,17 +1817,16 @@ def main ():
     if global_options.format in (TEXINFO, LATEX):
         ## prevent PDF from being switched on by default.
         global_options.process_cmd += ' --formats=eps '
-        
-    if (global_options.format in (TEXINFO, LATEX)
-        and global_options.create_pdf):
-        global_options.process_cmd += "--pdf  -dinclude-eps-fonts -dgs-load-fonts "
-
-        
+        if global_options.create_pdf:
+            global_options.process_cmd += "--pdf -dinclude-eps-fonts -dgs-load-fonts "
     
     if global_options.verbose:
         global_options.process_cmd += " --verbose "
 
-    global_options.process_cmd += " -dread-file-list -deps-box-padding=-3 "
+    if global_options.padding_mm:
+        global_options.process_cmd += " -deps-box-padding=%f " % global_options.padding_mm
+        
+    global_options.process_cmd += " -dread-file-list "
 
     identify ()
 
@@ -1830,19 +1850,7 @@ def main ():
     except Compile_error:
         exit (1)
 
-    if global_options.format in (TEXINFO, LATEX):
-        psfonts_file = os.path.join (global_options.output_name, basename + '.psfonts')
-        output = os.path.join (global_options.output_name, basename +  '.dvi' )
-        
-        if not global_options.psfonts and not global_options.create_pdf:
-            warning (_ ("option --psfonts not used"))
-            warning (_ ("processing with dvips will have no fonts"))
-        else:
-            progress ('\n')
-            progress (_ ("DVIPS usage:"))
-            progress ('\n')
-            progress ("    dvips -h %(psfonts_file)s %(output)s" % vars ())
-            progress ('\n')
+    psfonts_warning (global_options, basename)
 
     inputs = note_input_file ('')
     inputs.pop ()
index 4a0d956211a3b185a318ecd8c3f5626d4b51ad98..f1db678cfb3990a50cda7e70925bcdb65e9d1fcb 100644 (file)
@@ -4,7 +4,7 @@
 # 
 # source file of the GNU LilyPond music typesetter
 #
-# (c) 1998--2006  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# (c) 1998--2006  Han-Wen Nienhuys <hanwen@xs4all.nl>
 #                 Jan Nieuwenhuizen <janneke@gnu.org>
 
 
@@ -866,23 +866,23 @@ def convert_midi (in_file, out_file):
 
 
 def get_option_parser ():
-    p = ly.get_option_parser (usage='midi2ly [OPTIONS] FILE',
+    p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'midi2ly',
                  version="midi2ly (LilyPond) @TOPLEVEL_VERSION@",
-                 description=_('''Convert MIDI to LilyPond source.'''))
+                 description=_ ("Convert %s to LilyPond input.") % 'MIDI')
 
     p.add_option ('-a', '--absolute-pitches',
            action='store_true',
            help=_ ("print absolute pitches"))
     p.add_option ('-d', '--duration-quant',
            metavar= _("DUR"),
-           help=_("quantise note durations on DUR"))
+           help=_ ("quantise note durations on DUR"))
     p.add_option ('-e', '--explicit-durations',
            action='store_true',
            help=_ ("print explicit durations"))
     p.add_option('-k', '--key', help=_ ("set key: ALT=+sharps|-flats; MINOR=1"),
           metavar=_ ("ALT[:MINOR]"),
           default='0'),
-    p.add_option ('-o', '--output', help=_("write output to FILE"),
+    p.add_option ('-o', '--output', help=_ ("write output to FILE"),
            metavar=_("FILE"),
            action='store')
     p.add_option ('-s', '--start-quant',help= _ ("quantise note starts on DUR"),
@@ -893,25 +893,24 @@ def get_option_parser ():
            dest="allowed_tuplets",
            help=_ ("allow tuplet durations DUR*NUM/DEN"),
            default=[])
-    p.add_option ('-V', '--verbose', help=_("be verbose"),
+    p.add_option ('-V', '--verbose', help=_ ("be verbose"),
            action='store_true'
            ),
-    p.add_option ('-w', '--warranty', help=_("show warranty"),
+    p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"),
            action='store_true',
            ),
-    p.add_option ('-x', '--text-lyrics', help=_("treat every text as a lyric"),
+    p.add_option ('-x', '--text-lyrics', help=_ ("treat every text as a lyric"),
            action='store_true')
 
-    p.add_option_group (_ ("example"),
+    p.add_option_group (_ ("Examples"),
               description = r'''
   midi2ly --key=-2:1 --duration-quant=32 \
     --allow-tuplet=4*2/3 --allow-tuplet=2*4/3 foo.midi
 ''')
-    
-    p.add_option_group  ('bugs',
-              description='''Report bugs via http://post.gmane.org/post.php'''
-              '''?group=gmane.comp.gnu.lilypond.bugs\n''')
-    
+    p.add_option_group ('bugs',
+                        description=(_ ('Report bugs via')
+                                     + ''' http://post.gmane.org/post.php'''
+                                     '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
     return p
 
 
index 4240b3aaaee0e77faa8ce0665ccd2794859df921..665cc1d02fcab5623e45e14784d77f44c4fad17b 100644 (file)
@@ -208,11 +208,14 @@ def musicxml_note_to_lily_main_event (n):
         event = musicexp.RestEvent()
     elif n.instrument_name:
         event = musicexp.NoteEvent ()
-        event.drum_type = instrument_drumtype_dict[n.instrument_name]
-        
+        try:
+            event.drum_type = instrument_drumtype_dict[n.instrument_name]
+        except KeyError:
+            n.message ("drum %s type unknow, please add to instrument_drumtype_dict" % n.instrument_name)
+            event.drum_type = 'acousticsnare'
     
     if not event:
-        n.message ("could not find suitable event")
+        n.message ("cannot find suitable event")
 
     event.duration = musicxml_duration_to_lily (n)
     return event
@@ -264,7 +267,8 @@ class LilyPondVoiceBuilder:
         diff = moment - current_end
         
         if diff < Rational (0):
-            raise NegativeSkip(current_end, moment)
+            print 'Negative skip', diff
+            diff = Rational (0)
 
         if diff > Rational (0):
             skip = musicexp.SkipEvent()
@@ -313,7 +317,12 @@ def musicxml_voice_to_lily_voice (voice):
             
         if isinstance (n, musicxml.Attributes):
             if n.is_first () and n._measure_position == Rational (0):
-                voice_builder.add_bar_check (int (n.get_parent ().number))
+                try:
+                    number = int (n.get_parent ().number)
+                except ValueError:
+                    number = 0
+                
+                voice_builder.add_bar_check (number)
             for a in musicxml_attributes_to_lily (n):
                 voice_builder.add_music (a, Rational (0))
             continue
@@ -330,7 +339,10 @@ def musicxml_voice_to_lily_voice (voice):
             continue
 
         if n.is_first () and n._measure_position == Rational (0):
-            num = int (n.get_parent ().number)
+            try: 
+                num = int (n.get_parent ().number)
+            except ValueError:
+                num = 0
             voice_builder.add_bar_check (num)
         
         main_event = musicxml_note_to_lily_main_event (n)
@@ -470,44 +482,41 @@ def get_all_voices (parts):
 
 
 def option_parser ():
-    p = ly.get_option_parser(usage='musicxml2ly FILE.xml',
-                 version = """%prog (LilyPond) @TOPLEVEL_VERSION@
-
-This program is free software.  It is covered by the GNU General Public
+    p = ly.get_option_parser(usage=_ ("musicxml2ly FILE.xml"),
+                             version=('''%prog (LilyPond) @TOPLEVEL_VERSION@\n\n'''
+                                      +
+_ ("""This program is free software.  It is covered by the GNU General Public
 License and you are welcome to change it and/or distribute copies of it
-under certain conditions.  Invoke as `lilypond --warranty' for more
-information.
-
+under certain conditions.  Invoke as `%s --warranty' for more
+information.""") % 'lilypond'
++ """
 Copyright (c) 2005--2006 by
     Han-Wen Nienhuys <hanwen@xs4all.nl> and
     Jan Nieuwenhuizen <janneke@gnu.org>
-""",
-
-                 description  =
-                 """Convert MusicXML file to LilyPond input.
-"""
-                 )
+"""),
+                             description=_ ("Convert %s to LilyPond input.") % 'MusicXML' + "\n")
     p.add_option ('-v', '--verbose',
-                  action = "store_true",
-                  dest = 'verbose',
-                  help = 'be verbose')
+                  action="store_true",
+                  dest='verbose',
+                  help=_ ("be verbose"))
 
     p.add_option ('', '--lxml',
                   action="store_true",
                   default=False,
                   dest="use_lxml",
-                  help="Use lxml.etree; uses less memory and cpu time.")
+                  help=_ ("Use lxml.etree; uses less memory and cpu time."))
     
     p.add_option ('-o', '--output',
-                  metavar = 'FILE',
+                  metavar=_ ("FILE"),
                   action="store",
                   default=None,
                   type='string',
                   dest='output_name',
-                  help='set output file')
-
-    p.add_option_group  ('', description = '''Report bugs via http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs
-''')
+                  help=_ ("set output filename to FILE"))
+    p.add_option_group ('bugs',
+                        description=(_ ("Report bugs via")
+                                     + ''' http://post.gmane.org/post.php'''
+                                     '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
     return p
 
 def music_xml_voice_name_to_lily_name (part, name):
diff --git a/stepmake/CHANGES b/stepmake/CHANGES
deleted file mode 100644 (file)
index 980c358..0000000
+++ /dev/null
@@ -1,388 +0,0 @@
-pl 82
-       - allow srcdir builds
-
-pl 81
-       - Yodl-free (tm)
-       - bf: package-zet: too many symlinks
-       - bf: yodl-targets.make
-
-pl 80
-       - use mgsmerge iso tupdate
-
-pl 79
-       - empty sed script fix for aix
-
-pl 78
-       - yodl mode, mp fixes
-
-pl 77
-       - mfmode
-
-pl 76
-       - bfs: shells, scripts
-
-pl 75
-       - bfs: release
-
-pl 74
-       - avoid buggy /bin/sh on hp-ux
-       - bf: make/stepmake.make
-       - simple prolog support
-
-pl 73
-       - bf: invoke sed only once
-
-pl 72
-       - bf: mfplain dependency
-       - inimf, inimf checking (sigh)
-
-pl 71
-       - bf: c-tags
-       - yodl: groff, ditroff
-
-pl 70
-       - GUILE config fixes (AF)
-
-pl 69
-       - package_depth detection fix
-
-pl 68
-       - support for install-libraries
-
-pl 66
-       - check for tbl and gmake
-
-pl 65
-       - unix style pathsep/dirsep for cygwin
-
-pl 64
-       - gcc-2.8/egcs
-
-pl 63
-       - CFLAGS from yodl debian patch
-
-pl 62
-       - fixed dist from subdirs
-       - junked stepmake/aclocal.m4 (again?)
-       - resurrected po stuff
-
-pl 61
-       - bf: package-diff
-
-pl 60
-       - small fixes.
-
-pl 59
-       - bf: package-diff (remove missing automatic)
-       - install templates, (urg) INSTALL*1,2 INSTALL_OUT*1,2
-
-pl 58
-       - distribute formatted txt files: no yodl needed for operation!
-       - guile 1.2 and 1.3 support
-
-pl 57
-       - yodl first build script fixes
-       - uninstall fixes, but, urg, still have to uninstall twice
-         to get rid of all subdirs
-       - installed stepmake
-         * install not required
-         * only installs on explicit make install from toplevel stepdir
-         * rather urg, 'make dist' needs absolute distdir!
-
-pl 56
-       - crude metapost stuff
-
-pl 55
-       - table-to-html stuff moved .
-
-pl 54
-       - && for TeX
-
-pl 53
-       - moved TeX stuff into tex template
-
-pl 52
-       - striproff
-       - reeable $(PACKAGE)_LIBES,_INCLUDES
-       - metafont rules
-       - GTK+, --, -draw config stuff
-
-pl 51
-       - bumped version nr
-
-pl 50
-       - bf's: PATHSEP
-       - png
-
-pl 49
-       - use yodl2ms and striproff for txt conversion
-       - bf: chmod fail
-
-pl 48
-       - bumped version for yodl after various (lily pl7) changes
-
-pl 47
-       - bf: patch in website after 'make release'
-       - windows ln -> cp
-       - bf: texinfo build
-
-pl 46
-       - bf: versioning typo: topleveL_MAJOR
-       - bf: reincluded optional STATE-VECTOR
-pl 45
-       - Foo_rules.make -> foo-rules.make
-
-pl 44
-       - split: Toplevel.make, debian/Makefile, Documentation/topdocs/Makefile
-
-pl 43
-       - grand split up in targets/rules/variables.  The vars should be before rules!!
-pl 42
-       - fake-msgfmt.sh; urg copied from fake-yodl
-
-pl 41
-       - standard naming: _FILES
-       - use install-sh
-       - junked most check-X-deps
-       - standard naming: dir/out/library.a
-       - split C++ / C stuff in separate files.  Moved out of default stuff
-       - automake.yo updates
-       - fake-yodl.sh
-
-pl 40
-       - bf's: texinfo
-       - bf's: package-zip.sh for bash-2.0
-       - typo package-diff
-
-pl 39
-       - disabled toplevel index
-
-pl 38
-       - bf's: topweb, Documentation
-       - bf: ls-latex
-
-pl 37
-       - bf's: add-html-footer (ok, i've been reading /.)
-       
-pl 36.hwn1
-       - Metafont.make
-       - use := assignment for shell & wildcard stuff
-
-pl 36
-       - bf: Executable.make install
-
-pl 35
-       - bf: Po_rules
-       - grand foreach hack (HWN)
-
-pl 34
-       - stepmake/*shared.make
-
-pl 33
-       - make dist fix
-       - yodl/lily website fixes
-
-pl 32
-       - DEPTH: enable fixing of 'yodl using yodl'
-       - bf's: package-diff: --dir-* 
-
-pl 31.hwn1
-       - bf ls-latex.py; added format
-
-pl 31
-       - fixed make-flags
-       - fixup package-diff and added to-dir, from-dir
-
-pl 30.hwn2
-       - 
-
-pl 30.hwn1
-       - doc++ target  
-       - make -> $(MAKE)
-
-pl 30
-       - add-html-footer: html/body/title
-
-pl 29.hwn1
-       - automake.urgh -> automake.yo
-
-pl 29
-       - counter fix
-
-pl 28
-       - mini fix voor soladeris (HWN)
-       - add-html-footer fixes
-       - dropped pl
-
-pl 27
-       - irix fixes(?) (HWN)
-
-pl 26.jcn3
-       - update.py: try at stupid advice
-       - bf: ls-latex .yo author
-       - bf: Excutable.make install
-
-pl 26.jcn2
-       - no changes
-
-pl 26.hwn1
-       - no changes; just testin' make update
-
-pl 26.jcn1
-       - no changes
-
-pl 26
-       - make apply
-       - package-to.diff.gz
-       - package-from-to.diff.gz with state-vector
-       - state vector
-
-pl 25
-       - bf: add-html-footer.py: version_str iso tuple
-       - typo: Executable.make
-       - for 2latex: yodl2latex of yodl-1.30.0.pre9
-       - package depth 'detected' by configure (kinda ugh)
-       - fixes (HWN)
-
-pl 24
-       - binary releases:
-         * make deb
-           * dpkg 1.4.0.23.2
-           * debhelper 0.96
-           * /usr/bin/db_*: remove -p from install options (urg)
-         * make rpm
-         * make zip
-       - debian fixes
-       - SEXECUTABLES / EXECUTABLES (JBR)
-       - fixed package-zip.sh (again?)
-       - bf's: make zip
-       - some doco
-       - bf: STRIPFILES
-       - rpm from tarball in $(depth)/$(outdir)
-       - dropped lilypython, pythonblurb
-       - bf's: flower.py/packagepython.py/package-diff.py
-
-
-pl 23.hwn2
-       - add mailaddress to package-diff, beautifications
-
-pl 23.hwn1
-       - release.py: check make dist retval
-       - revamped rpm stuff. 
-       - bf abs-step-bindir
-
-
-pl 23
-       - relaxed 'error' to '-echo' for non-vital utilities
-       - table-to-html.py
-       - bin/stepdirs.sh
-       - bin/stepmakeise.sh
-       - --package-ised
-       - windows-nt fixes (JBR)
-
-pl 22
-       - new zip stuff
-
-pl 21
-       - packagepythonified add-html-footer, ls-latex
-       - packagepython (dankje lieverd)
-       - LD
-       - bf: don't diff .pyc
-       - yodl2 -> YODL2
-       - AC_STEPMAKE_YODL
-       - vars: GCC/TROFF/LD
-
-pl 20
-       - bf: ls-latex: .yo author + title
-       - htmldoc fix
-       - ls-latex
-       - add-html-footer
-       - po stuff
-       - latex + bibtex
-       - latex2yodl fixes
-
-pl 19
-       - add htmlfooter to all yodl chapter files
-       - .latex for latex files
-       - tex2html -> latex2html.sh
-
-pl 18
-       - package-zet.sh
-       - cleaned-out configure -> aclocal.m4
-       - (step)make targets:
-         * diff
-         * help
-         * rpm
-         * zip
-       - tex2yodl.pl helper
-       - patches are now called $package-$TOPLEVEL_VERSION.diff
-       - fixed @FILE@ and @VAR@ substitute
-       - bf: DO_CXX_COMPILE
-
-pl 17
-       - C rules :-)
-       - bf's Template.make
-
-pl 16
-       - more lily macros -> generic stepmake
-       - dropped POD configuration
-       - used it
-       - pod2yodl: one time conversion helper
-
-pl 15
-       - fixes: texi2man
-
-pl 14
-       - text2html
-
-pl 13
-       - texinfo support
-       - removed mudela rules
-
-pl 12
-       - irix patch
-
-pl 11
-       - 'urg comment' by wendy
-       - python fixes
-
-pl 10
-       - more from lily
-       - sed-stuff
-
-pl 9
-       - configure fix for irix tr
-       - bf: Install_*.make
-       - bf: PACKAGE_ ROOTDIR
-
-pl 8
-       - some python stuff from lily
-
-pl 7
-       - PACKAGE_NAME
-       - BLURB
-       - INSTALL doco
-       - Documentation/
-
-pl 6
-       - bf: include makedir/Rules.make too
-       - Documentation/automake.urgh
-
-pl 5
-       - allow chained make-dist
-
-pl 4
-       - DOTTEXT->.txt
-
-pl 3
-       - included more Lily makefiles
-
-pl 2
-       - dropped $(package) in makefile names
-       - moved stepmake makes to stepmake/
-
-pl 1
-       - preparing for verbatim include
-
-pl 0
-       - shared between lilypond-0.1.69 lilyx-0.1.0
index 7d11336ea7ee2aad9a3a8d4695b8498745f1b404..8a3eb0159ab23e6213a2dc2f8990381954976cd2 100644 (file)
@@ -12,7 +12,7 @@ SUBDIRS = bin stepmake
 # list of distribution files:
 #
 SCRIPTS =  aclocal.m4 autogen.sh
-README_FILES = CHANGES README TODO
+README_FILES = README
 README_TXT_FILES =
 EXTRA_DIST_FILES = $(README_FILES)  $(SCRIPTS)
 NON_ESSENTIAL_DIST_FILES = $(README_TXT_FILES)
diff --git a/stepmake/TODO b/stepmake/TODO
deleted file mode 100644 (file)
index e828ae4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-       * urg, fix flower.py dirname, tarball etc. (package-diff, release)
-
-       * use RE iso REG{SUB,EX} for python stuff.
-
-       * (re-)enable use outside of make system, e.g.
-         
-         - /usr/bin/make-patch for direct use on tarballs
-
-       * drop silly 'package' prefixes
-
-       * all perl scripts to python
-
-       * more doco
-         - Variable names of StepMake, e.g. 'depth', 'EXTRA_DISTFILES' etc.
-         - AC_STEPMAKE calls
-
-       * template package
-
-       * move bin stuff from LilyPond to stepmake
-
-       * shared lib (use libtool)
-
-       * fix autoconf, allowing aclocal.m4 to be included only once
-         (if possible from stepmake/bin)
-
index 25a0f5426b65915f87b8c4e0831102b947db6a1f..b69dc9c23b4c78dd1f77f8bbab56230ed66826f0 100644 (file)
@@ -34,7 +34,7 @@ AC_DEFUN(STEPMAKE_GET_VERSION, [
     ## grab the first version number in  --version output.
     eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '\(^\| \)[0-9][0-9]*\.[0-9]' \
         | head -n 1 \
-       | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\"
+       | tr ' ' '\n' | sed 's/\([0-9][0-9]*\.[0-9][0-9.]*\).*/\1/g' | grep '\(^\| \)[0-9][0-9]*\.[0-9]' | head -n 1\`\"
 
     if test -z "$_ver"; then
         ## If empty, try date [fontforge]
diff --git a/stepmake/bin/add-html-footer.py b/stepmake/bin/add-html-footer.py
deleted file mode 100644 (file)
index 08ff5ff..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-#!@PYTHON@
-
-"""
-Print a nice footer.  add the top of the ChangeLog file (up to the ********)
-"""
-import re
-import sys
-import os
-import time
-import string 
-import getopt
-
-index_url=''
-top_url=''
-changelog_file=''
-content_negotiation = False
-package_name = ''
-package_version = ''
-
-mail_address = '(address unknown)'
-try:
-    mail_address= os.environ['MAILADDRESS']
-except KeyError:
-    pass
-
-mail_address_url= 'mailto:' + mail_address
-if re.search ("http://", mail_address):
-    mail_address_url = mail_address
-    
-webmaster= mail_address
-try:
-    webmaster= os.environ['WEBMASTER']
-except KeyError:
-    pass
-
-header_file = ''
-footer_file = ''
-default_header = r"""
-"""
-
-
-#wiki_base = 'http://afavant.elte.hu/lywiki/'
-wiki_base = None 
-
-
-default_footer = r"""<hr>Please take me <a href=@INDEX@>back to the index</a>
-of @PACKAGE_NAME@
-"""
-
-built = r'''
-<div style="background-color: #e8ffe8; padding: 2; border: #c0ffc0 1px solid;">
-%(wiki_string)s
-<p>
-<font size="-1">
-This page is for %(package_name)s-%(package_version)s (%(branch_str)s). <br>
-</font>
-<address><font size="-1">
-Report errors to <a href="%(mail_address_url)s">%(mail_address)s</a>.</font></address>
-</p>
-</div>
-'''
-
-
-
-
-def help ():
-    sys.stdout.write (r"""Usage: add-html-footer [OPTIONS]... HTML-FILE
-Add header, footer and top of ChangLog file (up to the ********) to HTML-FILE
-
-Options:
- --changelog=FILE          use FILE as ChangeLog [ChangeLog]
- --content-negotiation     strip .html and .png from urls
- --footer=FILE             use FILE as footer
- --header=FILE             use FILE as header
- -h, --help                print this help
- --index=URL               set homepage to URL
- --name=NAME               set package_name to NAME
- --version=VERSION         set package version to VERSION
-
-""")
-    sys.exit (0)
-
-(options, files) = getopt.getopt(sys.argv[1:], 'h', [
-    'changelog=', 'footer=', 'header=', 'help', 'index=',
-    'name=', 'content-negotiation', 'version=']) 
-
-for opt in options:
-    o = opt[0]
-    a = opt[1]
-    if o == '--changelog':
-        changelog_file = a
-    elif o == '--content-negotiation':
-        content_negotiation = True
-    elif o == '--footer':
-        footer_file = a
-    elif o == '--header':
-        header_file = a
-    elif o == '-h' or o == '--help':
-        help ()
-    # urg, this is top!
-    elif o == '--index':
-        index_url = a
-    elif o == '--name':
-        package_name = a
-    elif o == '--version':
-        package_version = a
-    else:
-        raise 'unknown opt ', o
-
-
-def compose (default, file):
-    s = default
-    if file:
-        s = open (file).read ()
-    return s
-
-localtime = time.strftime ('%c %Z', time.localtime (time.time ()))
-
-if os.path.basename (index_url) != "index.html":
-    index_url = os.path.join (index_url , "index.html")
-top_url = os.path.dirname (index_url) + "/"
-
-header = compose (default_header, header_file)
-
-# compose (default_footer, footer_file)
-footer =  built
-header_tag = '<!-- header_tag -->'
-footer_tag = '<!-- footer_tag -->'
-
-# Python < 1.5.2 compatibility
-#
-# On most platforms, this is equivalent to
-#`normpath(join(os.getcwd()), PATH)'.  *Added in Python version 1.5.2*
-if os.path.__dict__.has_key ('abspath'):
-    abspath = os.path.abspath
-else:
-    def abspath (path):
-        return os.path.normpath (os.path.join (os.getcwd (), path))
-
-
-def remove_self_ref (s):        
-    self_url = abspath (os.getcwd () + '/' + f)
-    #sys.stderr.write ('url0: %s\n' % self_url)
-
-    # self_url = re.sub ('.*?' + string.lower (package_name) + '[^/]*/',
-    #                 '', self_url)
-    # URG - this only works when source tree is unpacked in `src/' dir
-    # For some reason, .*? still eats away
-    #     /home/fred/usr/src/lilypond-1.5.14/Documentation/user/out-www/lilypond/
-    # instead of just
-    #
-    #     /home/fred/usr/src/lilypond-1.5.14/
-    #
-    #     Tutorial.html
-    self_url = re.sub ('.*?src/' + string.lower (package_name) + '[^/]*/',
-            '', self_url)
-
-    #sys.stderr.write ('url1: %s\n' % self_url)
-    
-    #urg, ugly lily-specific toplevel index hack
-    self_url = re.sub ('.*topdocs/out-www/index.html', 'index.html', self_url)
-    #sys.stderr.write ('url2: %s\n' % self_url)
-
-    # ugh, python2.[12] re is broken.
-    ## pat = re.compile ('.*?(<a href="[\./]*' + self_url + '#?[^"]*">)([^<]*)(</a>)', re.DOTALL)
-    pat = re.compile ('[.\n]*?(<a href="[\./]*' + self_url + '#?[^"]*">)([^<]*)(</a>)')
-    m = pat.search (s)
-    while m:
-        #sys.stderr.write ('self: %s\n' % m.group (2))
-        s = s[:m.start (1)] + m.group (2) + s[m.end (3):]
-        m = pat.search (s)
-    return s
-
-def do_file (f):
-    s = open (f).read()
-    s = re.sub ('%', '%%', s)
-
-
-    if re.search (header_tag, s) == None:
-        body = '<BODY BGCOLOR=WHITE TEXT=BLACK>'
-        s = re.sub ('(?i)<body>', body, s)
-        if re.search ('(?i)<BODY', s):
-            s = re.sub ('(?i)<body[^>]*>', body + header, s, 1)
-        elif re.search ('(?i)<html', s):                
-            s = re.sub ('(?i)<html>', '<HTML>' + header, s, 1)
-        else:
-            s = header + s
-
-        s = header_tag + '\n' + s
-
-        if re.search ('(?i)<!DOCTYPE', s) == None:
-            doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n'
-            s = doctype + s
-
-    if re.search (footer_tag, s) == None:
-        if re.search ('(?i)</body', s):
-            s = re.sub ('(?i)</body>', footer_tag + footer + '\n' + '</BODY>', s, 1)
-        elif re.search ('(?i)</html', s):                
-            s = re.sub ('(?i)</html>', footer_tag + footer + '\n' + '</HTML>', s, 1)
-        else:
-            s = s + footer_tag + footer + '\n'
-
-        s = i18n (f, s)
-
-    #URUGRGOUSNGUOUNRIU
-    index = index_url
-    top = top_url
-    if os.path.basename (f) == "index.html":
-        cwd = os.getcwd ()
-        if os.path.basename (cwd) == "topdocs":
-            index = "index.html"
-            top = ""
-
-        # don't cause ///////index.html entries in log files.
-        #        index = "./index.html"
-        #        top = "./"
-            
-    versiontup = string.split(package_version, '.')
-    branch_str = 'stable-branch'
-    if string.atoi ( versiontup[1]) %  2:
-        branch_str = 'development-branch'
-
-    wiki_page = ('v%s.%s-' % (versiontup[0], versiontup[1]) +  f)
-    wiki_page = re.sub ('out-www/', '', wiki_page)
-    wiki_page = re.sub ('/', '-', wiki_page) 
-    wiki_page = re.sub (r'\.-', '', wiki_page) 
-    wiki_page = re.sub ('.html', '', wiki_page)
-
-    wiki_string = ''
-
-    if wiki_base:
-        wiki_string = (r'''<a href="%(wiki_base)s%(wiki_page)s">Read </a> comments on this page, or
-        <a href="%(wiki_base)s%(wiki_page)s?action=edit">add</a> one.''' % 
-               { 'wiki_base': wiki_base,
-                'wiki_page': wiki_page})
-        
-    subst = globals ()
-    subst.update (locals())
-    s = s % subst
-
-    # urg
-    # maybe find first node?
-    fallback_web_title = '-- --'
-
-    # ugh, python2.[12] re is broken.
-    #m = re.match ('.*?<title>\(.*?\)</title>', s, re.DOTALL)
-    m = re.match ('[.\n]*?<title>([.\n]*?)</title>', s)
-    if m:
-        fallback_web_title = m.group (1)
-    s = re.sub ('@WEB-TITLE@', fallback_web_title, s)
-    
-    s = remove_self_ref (s)
-
-    # remove info's annoying's indication of referencing external document
-    s = re.sub (' \((lilypond|lilypond-internals|music-glossary)\)</a>',
-          '</a>', s)
-
-    open (f, 'w').write (s)
-
-
-
-localedir = 'out/locale'
-try:
-    import gettext
-    gettext.bindtextdomain ('newweb', localedir)
-    gettext.textdomain ('newweb')
-    _ = gettext.gettext
-except:
-    def _ (s):
-        return s
-underscore = _
-
-C = 'site'
-LANGUAGES = (
-    (C, 'English'),
-    ('nl', 'Nederlands'),
-    ('fr', 'French')
-    )
-
-language_available = _ ("Other languages: %s.") % "%(language_menu)s"
-browser_language = _ ("Using <A HREF='%s'>automatic language selection</A>.") \
-           % "%(root_url)sabout/browser-language"
-
-LANGUAGES_TEMPLATE = '''\
-<P>
- %(language_available)s
- <BR>
- %(browser_language)s
-</P>
-''' % vars ()
-
-def file_lang (file, lang):
-    (base, ext) = os.path.splitext (file)
-    base = os.path.splitext (base)[0]
-    if lang and lang != C:
-        return base + '.' + lang + ext
-    return base + ext
-
-
-def i18n (file_name, page):
-    # ugh
-    root_url = "/web/"
-
-    base_name = os.path.basename (file_name)
-
-    lang = C
-    m = re.match ('.*[.]([^/.]*).html', file_name)
-    if m:
-        lang = m.group (1)
-
-    # Find available translations of this page.
-    available = filter (lambda x: lang != x[0] \
-              and os.path.exists (file_lang (file_name, x[0])),
-              LANGUAGES)
-
-    # Strip .html, .png suffix for auto language selection (content
-    # negotiation).  The menu must keep the full extension, so do
-    # this before adding the menu.
-    if content_negotiation:
-        page = re.sub ('''(href|src)=[\'"]([^/][.]*[^.:\'"]*)(.html|.png)(#[^"\']*|)[\'"]''',
-                       '\\1="\\2\\4"', page)
-
-    # Add menu after stripping: must not have autoselection for language menu.
-    language_menu = ''
-    for (prefix, name) in available:
-        lang_file = file_lang (base_name, prefix)
-        if language_menu != '':
-            language_menu += ', '
-        language_menu += '<a href="%(lang_file)s">%(name)s</a>' % vars ()
-
-    languages = ''
-    if language_menu:
-        languages = LANGUAGES_TEMPLATE % vars ()
-
-    # Put language menu before '</body>' and '</html>' tags
-    if re.search ('(?i)</body', page):
-        page = re.sub ('(?i)</body>', languages + '</BODY>', page, 1)
-    elif re.search ('(?i)</html', page):                
-        page = re.sub ('(?i)</html>', languages + '</HTML>', page, 1)
-    else:
-        page = page + languages
-
-    return page
-
-for f in files:
-    do_file (f)
-
diff --git a/stepmake/bin/install-dot-exe.sh b/stepmake/bin/install-dot-exe.sh
deleted file mode 100755 (executable)
index 1881b2d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# install-dot-exe.sh  -- add .exe for cygnus gnu-windows
-# hack for doos install
-
-realinstall=install
-
-args=''
-while [ $# -ne 0 ] 
-do
-    x=`echo $1 | sed 's@//@/@g'`
-    case $1 in
-       -*) args="$args $x"
-           ;;
-
-        *) if [ -f $1.exe ]; then
-               args="$args $x.exe"
-           else
-               args="$args $x"
-           fi
-           ;;
-    esac
-    shift
-done
-
-$realinstall $args
diff --git a/stepmake/bin/install-layout.sh b/stepmake/bin/install-layout.sh
deleted file mode 100644 (file)
index 4e54a99..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# install-layout.sh --- build an installation layout
-#
-prefix=$HOME/usr
-dirs='bin src/patches src/releases lib/texmf/tex lib/texmf/mf/source/public'
-
-for i in $dirs; do
-       if [ ! -e $prefix/$i ]; then
-               echo +mkdir -p $prefix/$i
-               mkdir -p $prefix/$i
-       fi
-done
diff --git a/stepmake/bin/ls-latex.py b/stepmake/bin/ls-latex.py
deleted file mode 100644 (file)
index 3c97ed9..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-#!@PYTHON@
-
-# name isn't really appropriate now ...
-
-name = 'ls-latex'
-version = '0.1'
-
-import sys
-import os
-import string
-import __main__
-import glob
-import re
-
-format_names  = {'ps.gz': 'Compressed PostScript',
-                'html' : 'HTML'
-                }
-
-def gulp_file(f):
-    try:
-        i = open(f)
-        i.seek (0, 2)
-        n = i.tell ()
-        i.seek (0,0)
-    except:
-        sys.stderr.write ("can't open file: %s\n" % f)
-        return ''
-    s = i.read (n)
-    if len (s) <= 0:
-        sys.stderr.write ("gulped empty file: %s\n" % f)
-    i.close ()
-    return s
-
-class Latex_head:
-    def __init__ (self):
-        self.author = ''
-        self.title = ''
-        self.date = ''
-        self.format = ''
-        
-def read_latex_header (s):
-    header = Latex_head()
-    m = re.search(r'\\author{([^}]+)}', s)
-    if m:
-        header.author = m.group (1)
-
-    m = re.search (r'\\title{([^}]+)}',s )
-    if m:
-        header.title = m.group (1)
-
-    header.formats = ['ps.gz']
-    return  header
-
-
-def read_bib_header (s):
-    m = re.search ('% *AUTHOR *= *(.*)\n',s)
-
-    header = Latex_head()
-
-    if m:
-        header.author = m.group (1)
-
-    m = re.search ('% *TITLE *= *(.*)\n',s )
-    if m:
-        header.title = m.group (1)
-
-    header.formats = ['html']
-    return header
-
-
-def read_pod_header (s):
-    header = Latex_head ()
-
-    i = re.search( '[^\n \t]', s)
-    s = s[i:]
-    i = re.search( '\n\n', s)
-    s = s[i+2:]        
-    i = re.search( '\n\n', s)
-    header.title = s[:i]
-
-    header.formats = ['html']
-    return  header
-
-def read_texinfo_header (s):
-    header = Latex_head ()
-
-    m = re.search( '@settitle (.*)\n', s)
-    if m:
-        header.title = m.group (1)
-    m = re.search( '@author (.*)\n', s)
-    if m:
-        header.author = m.group (1)
-    
-    header.formats = ['html', 'ps.gz']
-    return header
-
-# urg
-# should make a 'next_parens '
-yo_article_re = re.compile ('article(\\([^)]*\\))[ \t\n]*(\\([^)]*\\))')
-yo_report_re = re.compile ('report(\\([^)]*\\))[\t\n ]*(\\([^)]*\\))')
-yo_sect_re  =  re.compile ('sect(\\([^)]*\\))')
-yo_chapter_re  =  re.compile ('chapter(\\([^)]*\\))')
-
-def read_yodl_header (s):
-    header = Latex_head ()
-    report = yo_report_re.search (s)
-    article = 0
-    sect = 0
-    chapter = 0
-    if report:
-        header.author = report.group (2)
-        header.title = yo_report_re.group (1)
-    else:
-        article = yo_article_re.search (s)
-        if article:
-            header.author = article.group (2)
-            header.title = article.group (1)
-        else:
-            chapter = yo_chapter_re.search (s)
-            if chapter:
-                header.title = chapter.group (1)
-            else:
-                sect = yo_sect_re.search (s)
-                if sect:
-                    header.title = sect.group (1)
-
-    header.formats = ['html']
-    return  header
-
-
-def print_html_head (l,o,h):
-    pre =o
-    
-    fn = pre + h.basename
-
-    t = h.filename 
-    if h.title :
-        t = t + ': '+ h.title
-
-    l.write ('<li>%s </a>' % t)
-
-    if h.author:
-        l.write ('<p>by %s</p>' % h.author)
-
-    for f in h.formats:
-        l.write ('(<a href=%s.%s>%s</a>)' % (fn, f, format_names [f]))
-    l.write ('</li>\n')
-
-def help ():
-    sys.stdout.write (r"""Usage: ls-latex [OPTIONS]... FILE...
-Generate html index file for FILE...
-
-Options:
--h, --help                print this help
-""")
-    sys.exit (0)
-
-import getopt
-
-(options, files) = getopt.getopt(sys.argv[1:], 
-    'e:h', ['help', 'prefix=',  'title='])
-
-tex = ''
-output =''
-pre = ''
-title = ''
-for opt in options:
-    o = opt[0]
-    a = opt[1]
-    if o == '--prefix':
-        pre = a
-    elif o == '--title':
-        title = a  
-    elif o == '-h' or o == '--help':
-            help ()
-
-
-l = sys.stdout
-
-l.write (r"""<html><title>%s</title>
-<body>
-<h1> %s</h1><ul>
-""" % (title, title))
-
-
-read_header_funcs = {
-    'pod' : read_pod_header,
-    'tex' : read_latex_header,
-    'doc' : read_latex_header,
-    'bib': read_bib_header, 
-    'latex' : read_latex_header,
-    'tely' : read_texinfo_header,
-    'texi': read_texinfo_header,
-    'yo': read_yodl_header, 
-}        
-
-
-for x in files:
-    m = re.search ('\\.([^.]*)$', x)
-    if m == None:
-        continue
-
-    s = gulp_file (x)
-    head = read_header_funcs [m.group(1)] (s)
-
-    head.filename = x
-    head.basename = re.sub ("\\.[^.]+", '', x)
-    
-    print_html_head (l, pre, head)
-
-l.write ('</ul></body></html>')
-
diff --git a/stepmake/bin/package-zet.sh b/stepmake/bin/package-zet.sh
deleted file mode 100755 (executable)
index 4f0b79e..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-# package-zet.sh --- help configure a StepMake package's sourcetree
-# normally invoked by a script like:
-# 
-#   zet-pack.sh  ( e.g.: ". bin/zet-lily.sh")
-#
-PACKAGE=`echo $PACKAGE_NAME | tr '[a-z]' '[A-Z]'`
-package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
-#
-# You should set ${PACKAGE}_SOURCEDIR to the latest unpacked source dir,
-# it will default to:
-#
-#  $sources/$package  (e.g.: LILYPOND_SOURCEDIR=/home/fred/usr/src/lilypond)
-#
-
-
-PACKAGE_SOURCEDIR=`eval echo '\$'${PACKAGE}_SOURCEDIR`
-if [ "x$PACKAGE_SOURCEDIR" = "x" ]; then
-    eval ${PACKAGE}_SOURCEDIR="$prefix/src/$package"
-    export ${PACKAGE}_SOURCEDIR
-    PACKAGE_SOURCEDIR=`eval echo '\$'${PACKAGE}_SOURCEDIR`
-fi
-#
-# and create links to here, if necessary
-#
-sourcetree=`basename \`pwd\``
-if [ "x$sourcetree" != "x$package" ]; then
-       (cd ..; rm -f $package 2>&1 > /dev/null)
-       (cd ..; ln -s $sourcetree $package)
-fi
-#
-if [ ! -r $sources ]; then
-       (cd ..; ln -s `pwd` $sources)
-fi
-#
-mkdir -p $prefix/bin
-result=`echo $PATH | grep "$HOME/usr/bin"`
-if [ "x$result" = "x" ]; then
-    PATH=$PATH:$HOME/usr/bin
-fi
-result=`echo $PATH | grep "$sources/$package/bin"`
-if [ "x$result" = "x" ]; then
-    PATH=$PATH:$sources/$package/bin
-fi
diff --git a/stepmake/bin/package-zip.sh b/stepmake/bin/package-zip.sh
deleted file mode 100644 (file)
index e325688..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-# package-zip.sh --- make a windoze distribution
-
-set -x
-
-if [ $# -lt 2 ]; then
-       echo "Usage: package-zip.sh PACKAGE_SOURCEDIR FILE..."
-       exit 2
-fi
-
-topdir=$1
-shift
-. $topdir/VERSION
-
-VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
-if [ "x$MY_PATCH_LEVEL" != "x" ]; then
-       VERSION=$VERSION.$MY_PATCH_LEVEL
-fi
-
-package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
-name=$package-$VERSION
-ZIP="zip -r -9"
-builddir="/tmp/$package-doos"
-
-{ cd $topdir/..; PACKAGE_ROOTDIR=`pwd`; export PACKAGE_ROOTDIR; }
-
-zip="$PACKAGE_ROOTDIR/doos/zip/$name.exe.zip"
-
-
-if [ ! -e $PACKAGE_ROOTDIR/doos/zip ]; then
-       doo mkdir -p $PACKAGE_ROOTDIR/doos/zip
-fi
-
-set -x
-
-cd $PACKAGE_ROOTDIR/doos || exit 1
-
-rm -rf $package-*
-
-tar xzf $PACKAGE_ROOTDIR/releases/$name.tar.gz || exit 1
-cd $name
-
-export PATH=/usr/doos/bin:$PATH
-./configure --host=i386-pc-linux --target=i386-pc-cygwin32 --prefix=/usr --enable-debugging --enable-printing --enable-checking
-
-make
-make -C Documentation info || true
-rm -rf $builddir
-make prefix="$builddir/usr" DOTEXE=.exe install
-make prefix="$builddir/usr" installextradoc
-
-rm -f $zip
-(cd $builddir; $ZIP $zip $*)
-# urg
-true "Wrote: $zip"
-
-# huh?
-# ln out/$name.exe.zip $zip
-
diff --git a/stepmake/bin/package-zip32.sh b/stepmake/bin/package-zip32.sh
deleted file mode 100644 (file)
index 75039f9..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/bin/sh
-# package-zip32.sh --- make a windoze formated distribution
-
-set -x
-
-if [ $# -lt 1 ]; then
-       echo "Usage: $0 PACKAGE_SOURCEDIR"
-       exit 2
-fi
-
-srcdir=$1
-shift
-
-. $srcdir/VERSION
-
-VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
-if [ "x$MY_PATCH_LEVEL" != "x" ]; then
-    VERSION=$VERSION.$MY_PATCH_LEVEL
-fi
-
-package=`echo $PACKAGE_NAME | tr '[A-Z]' '[a-z]'`
-name=$package-$VERSION
-ZIP_CMD="zip -r -9"
-
-here=`pwd`
-cd $srcdir/.. 
-PACKAGE_ROOTDIR=`pwd` 
-export PACKAGE_ROOTDIR 
-cd $here
-
-RELEASE_DIR="$PACKAGE_ROOTDIR/bin.releases/winnt"
-ZIP_FILE="$RELEASE_DIR/$name.bin.zip"
-
-
-if [ ! -e $RELEASE_DIR ]; then
-    mkdir -p $RELEASE_DIR
-fi
-
-distdir=/tmp/${name}
-
-#
-# Maybe we can get away without reconfiguring
-#
-# rm -f ${srcdir}/config.cache
-# PYTHON=${PYTHON:-python} ${srcdir}/configure --prefix=${distdir} \
-#     --srcdir=${srcdir}
-
-if ! make ; then
-    echo "make failed"
-    exit 1
-fi
-
-# failure allowed
-#make -C Documentation info
-
-if ! make install ; then
-    echo "make install failed"
-    exit 1
-fi
-
-#if ! make -C Documentation/man WWW ; then
-#    echo "make -C documentation/man WWW failed"
-#    exit 1
-#fi
-
-if ! make -C Documentation/ntweb WWW ; then
-    echo "make -C documentation/ntweb WWW failed"
-    exit 1
-fi
-
-#
-# Post install clean up
-#
-CYGWIN_LIB=$PACKAGE_ROOTDIR/distfiles/winnt/cygwin1.dll
-if [ ! -e $CYGWIN_LIB ]; then
-    echo "Unable to locate $CYGWIN_LIB"
-    exit 1
-fi
-
-#
-# copy cygwin lib into bin
-#
-cp $CYGWIN_LIB $distdir/bin
-
-ASH_EXE=$PACKAGE_ROOTDIR/distfiles/winnt/ash.exe
-if [ ! -e $ASH_EXE ]; then
-    echo "Unable to locate $ASH_EXE"
-    exit 1
-fi
-
-#
-# copy ash into bin
-#
-cp $ASH_EXE $distdir/bin
-
-GUILE_SCM=$PACKAGE_ROOTDIR/distfiles/winnt/ice-9
-if [ ! -e $GUILE_SCM ]; then
-    echo "Unable to locate $GUILE_SCM"
-    exit 1
-fi
-
-#
-# copy guile init files into share/lilypond
-#
-echo "copy $GUILE_SCM to $distdir/share/lilypond"
-cp -r $GUILE_SCM $distdir/share/lilypond
-
-#
-# Rename python files to <filename>.py
-#
-mv $distdir/bin/lilypond $distdir/bin/lilypond.py
-mv $distdir/bin/convert-mudela $distdir/bin/convert-mudela.py
-mv $distdir/bin/mudela-book $distdir/bin/mudela-book.py
-
-#
-# copy man documentation to doc directory
-#
-#mkdir $distdir/doc
-#cp Documentation/man/out/*.html $distdir/doc
-
-#
-# copy web documentation to web directory
-#
-mkdir $distdir/web
-for i in index.html guile-1.3.4-gnu-windows.patch angels.ly
-do
-  cp Documentation/ntweb/out/$i $distdir/web || exit 1
-done
-
-#
-# Zip it up
-#
-cd $distdir/..
-$ZIP_CMD $ZIP_FILE $name
-echo "Wrote $ZIP_FILE"
-rm -rf $name
-exit 0
-
-
diff --git a/stepmake/bin/packagepython.py b/stepmake/bin/packagepython.py
deleted file mode 100755 (executable)
index 51a0d8a..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/python
-
-
-#ugh. junkme.
-
-# packagepython.py --  implement general StepMake-wide python stuff
-# 
-# source file of the GNU LilyPond music typesetter
-# 
-# (c) 1997--2006 Han-Wen Nienhuys <hanwen@stack.nl>
-#                Jan Nieuwenhuizen <janneke@gnu.org>
-
-import re
-import string
-
-import sys
-import os
-import getopt
-
-make_assign_re = re.compile ('^([A-Z_]*)=(.*)$')
-
-def read_makefile (fn):
-    file = open (fn)
-    lines = file.readlines()
-
-    mi = pa = mj = 0
-    mp = ''
-
-    make_dict = {}
-    for l in lines:
-        m = make_assign_re.search (l)
-        if m:
-            nm = m.group (1)
-            val = m.group (2)
-            make_dict[nm] = val
-    return make_dict
-
-class Package:
-    def __init__ (self, dirname):
-        dict = read_makefile (dirname + '/VERSION')
-        version_list = []
-        for x in [ 'MAJOR_VERSION', 'MINOR_VERSION', 'PATCH_LEVEL']:
-            version_list.append (string.atoi (dict[x]))
-        version_list.append (dict['MY_PATCH_LEVEL'])
-        self.topdir = dirname
-        self.groupdir = self.topdir + '/..'
-        self.patch_dir = self.groupdir + '/patches/'
-        self.release_dir = self.groupdir + '/releases/'
-        self.test_dir = self.groupdir + '/test/'
-        self.version =  tuple(version_list)
-        self.Name = dict['PACKAGE_NAME']
-        self.name = string.lower (self.Name)
-        if self.name == 'lilypond':
-            self.nickname = 'lelie'
-        else:
-            self.nickname = self.name
-        self.NAME = string.upper (self.Name)
-
-
-class Packager:
-    def __init__ (self):
-        try:
-            m= os.environ['MAILADDRESS']
-        except KeyError:
-            m= '(address unknown)'
-        self.mail= m
-        try:
-            m= os.environ['WEBMASTER']
-        except KeyError:
-            m= self.mail
-        self.webmaster= m
-
-
-def full_version_tup(tup):
-    t = [0,0,0,'']
-    for i in range (4):
-     try:
-         t[i] = tup[i]
-     except IndexError:
-         break
-    return tuple(t)
-
-def split_my_patchlevel (str):
-    m = re.match ('(.*?)([0-9]*)$', str)
-    return (m.group (1), string.atoi (m.group (2)))
-
-def next_version(tup):
-    l = list(full_version_tup (tup))
-    t3name=t3num=''
-    if l[3]:
-        (t3name,t3num)= split_my_patchlevel (l[3])
-        if t3num: 
-            t3num = '%d' % (t3num + 1)
-        else:
-            t3num = t3name =''
-    else:
-        l[2] = l[2] +1
-
-    return tuple(l[0:3] + [t3name +  t3num])
-
-def prev_version(tup):
-    l = list(full_version_tup (tup))
-    t3name=t3num=''
-    if l[3]:
-        (t3name, t3num) = split_my_patchlevel (l[3])
-        if t3num and t3num - 1 > 0:
-            t3num = '%d' %(t3num - 1)
-        else:
-            t3num = t3name =''
-
-    else:
-        l[2] = l[2] -1
-        
-    return tuple(l[0:3] + [t3name +  t3num])
-
-def version_tuple_to_str(tup):
-    tup = full_version_tup (tup)
-    if tup[3]:
-        my = '.' + tup[3]
-    else:
-        my = ''
-    return ('%d.%d.%d' % tup[0:3]) + my
-
-def version_str_to_tuple(str):
-    t = string.split(str, '.')
-    mypatch = ''
-    if len (t) >= 4:
-        mypatch = string.join (t[3:], '.')
-    return (string.atoi(t[0]), string.atoi(t[1]), string.atoi(t[2]), mypatch)
-
-def version_compare (ltup, rtup):
-    rtup = full_version_tup (ltup)
-    rtup = full_version_tup (rtup)
-    for i in (0,1,2):
-        if ltup[i] - rtup[i]: return ltup[i] - rtup[i]
-    if ltup[3] and rtup[3]:
-        (lname, lnum) = split_my_patchlevel (ltup[i])
-        (rname, rnum) = split_my_patchlevel (rtup[3])
-        if lname != rname:
-            raise 'ambiguous'
-        return sign (lnum - rnum)
-    if ltup[3]:
-        return 1
-    else:
-        return -1
-    
-if __name__ == '__main__':
-    p = Package ('.')
-    v=  p.version
-    print v, prev_version(v), next_version(v)
-    pv=(0,1,1,'jcn4')
-    print version_tuple_to_str(pv), prev_version(pv), next_version(pv)
-    print version_tuple_to_str((0,1,1,''))    
-    print full_version_tup ((0,1))
-
-    
-def dump_file(f, s):
-    i = open(f, 'w')
-    i.write(s)
-    i.close ()
-
diff --git a/stepmake/bin/release.py b/stepmake/bin/release.py
deleted file mode 100755 (executable)
index 90703a2..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#!@PYTHON@
-# release.py
-
-import os
-import packagepython
-import getopt
-import string
-import sys
-import time
-
-(options, files) = getopt.getopt (sys.argv[1:], 'ho:p:',
-                 ['help', 'outdir=', 'package='])
-
-def help ():
-    sys.stdout.write (r"""Usage: release [OPTIONS]...
-Make a tarball and patch.
-
-Options:
- -o, --outdir=DIR       specify where to leave patches
- -h, --help                 print this help
- -p, --package=DIR      specify package"""
-)
-    sys.exit (0)
-
-
-topdir = ''
-outdir = '.'
-
-for opt in options:
-    o = opt[0]
-    a = opt[1]
-    if o == '-h' or o == '--help':
-        help ()
-    elif o == '-p' or o == '--package':
-        topdir = a
-    elif o == '--outdir' or o == '-o':
-        outdir = a
-      
-sys.path.append (topdir + '/stepmake/bin')
-
-package = packagepython.Package (topdir)
-os.chdir (package.topdir)
-
-release_version = packagepython.version_tuple_to_str (package.version)
-basename = string.join ((package.name, release_version), '-')
-tarball = basename + '.tar.gz'
-out_tarfile = os.path.join (outdir, tarball)
-release_tarfile = os.path.join (package.release_dir, tarball)
-
-if os.path.exists (out_tarfile):
-    os.unlink (out_tarfile)
-
-changelog_name = os.path.join (topdir, 'ChangeLog')
-lines = open (changelog_name).readlines ()
-release_marker = '\t* VERSION: %(release_version)s' % vars ()
-if not package.version[3] \
- and lines[2][0:len (release_marker) - 1] != release_marker:
-    sys.stderr.write ("warning: ChangeLog: adding VERSION: %s\n" \
-             % release_version)
-    user_changelog_entry = time.strftime ('%Y-%m-%d') \
-               + '  ' + os.environ['EMAIL']
-    changelog = open (changelog_name, 'w')
-    changelog.write (user_changelog_entry)
-    changelog.write ('\n\n')
-    changelog.write (release_marker)
-    changelog.write ('\n\n')
-    changelog.writelines (lines)
-    changelog.close ()
-
-status = os.system ('make dist')
-if status:
-    raise 'make dist failed'
-
-if os.path.exists (release_tarfile):
-    os.unlink (release_tarfile)
-    
-os.link (out_tarfile, release_tarfile)
-
-diff_py = package.topdir + '/stepmake/bin/package-diff.py'
-diff_py_options = '--outdir=%(outdir)s --package=%(topdir)s' % vars ()
-status = os.system (string.join ((sys.executable, diff_py, diff_py_options)))
-if status:
-    raise 'make diff failed'
-
-previous_tuple = packagepython.prev_version (package.version)
-previous_version = packagepython.version_tuple_to_str (previous_tuple)
-
-diff_base = string.join ((package.name, previous_version, release_version),
-            '-')
-diff_name = diff_base + '.diff.gz'
-
-out_diff = os.path.join (outdir, diff_name)
-release_diff = os.path.join (package.patch_dir, diff_name)
-
-if not os.path.exists (out_diff):
-    sys.stderr.write ("error: cannot open: %s\n" % out_diff)
-    sys.exit (1)
-
-if os.path.exists (release_diff):
-    os.unlink (release_diff)
-
-os.link (out_diff, release_diff)
-
diff --git a/stepmake/bin/stepdirs.sh b/stepmake/bin/stepdirs.sh
deleted file mode 100755 (executable)
index fbda8e9..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-# stepdirs.sh
-
-help () {
-       echo "Usage: stepmake/bin/stepdirs.sh"
-}
-
-if [ $# -ne 0 ]; then
-       help
-       exit 2
-fi
-
-if [ ! -r stepmake ]; then
-       help
-       exit 2
-fi
-
-if [ -r VERSION ]; then
-       . ./VERSION
-       if [ "x$PACKAGE_NAME" = "xStepMake" ]; then
-               help
-               exit 2
-       fi
-fi
-
-dirs="RedHat doos patches releases test"
-
-echo -n "Checking StepMake layout..."
-for i in $dirs; do
-       if [ ! -r ../$i ]; then
-               missing="$missing ../$i"
-       fi
-done
-
-if [ "x$missing" = "x" ]; then
-       echo ok
-       exit 0
-fi
-
-echo
-
-echo "Creating missing directories:"
-for i in $missing; do
-       (set -x; mkdir $i)
-done
-
-echo done
index 1a19a4dc88d3d30934169b236c864e4222d81bea..2500d80d41c05b2dbc8b44b39dd769d410ffc534 100644 (file)
@@ -1,9 +1,6 @@
 $(outdir)/%: %.m4
        $(M4) $< > $@
 
-%.dep:
-       touch $@
-
 %.gz: %
        gzip -c9 $< > $@
 
index 2ccf2f7b2c3319998a4cfe823c63179d9003223b..b33bd10be6919f7db261dfb56714e1fa2ff04769 100644 (file)
@@ -1,4 +1,3 @@
-
 # Don't remove $(outdir)/.log's.  Logs are a target!
 
 # we want to see botched results as well.
@@ -8,25 +7,11 @@ $(outdir)/%.dvi: %.mf
        mv $(basename $<).dvi $(outdir)
        rm $(basename $<).*gf
 
-# This is not metafont, this is feta-specific
-$(outdir)/%.log: %.mf
-       MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;"
-       mv $(@F) $@
-       rm $(basename $(@F)).*gf
-
-$(outdir)/%.tfm $(outdir)%.log: %.mf
+$(outdir)/%.tfm $(outdir)/%.log: %.mf
        MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;"
 # Let's keep this log output, it saves another mf run.
        mv $(basename $(@F)).log $(basename $(@F)).tfm $(outdir)
-       rm $(basename $(@F)).*gf
-
-$(outdir)/%.$(XPM_RESOLUTION)gf: %.mf
-       MFINPUTS=$(src-dir) $(METAFONT) "\\mode=$(XPM_MODE); \\input $<"
-# Let's keep this log output, it saves another mf run.
-       mv $(@F) $(basename $(@F)).log $(basename $(@F)).tfm $(outdir)
-
-$(outdir)/%.$(XPM_RESOLUTION)pk: $(outdir)/%.$(XPM_RESOLUTION)gf
-       gftopk $< $@
+       rm -f $(basename $(@F)).*gf  $(basename $(@F)).*pk
 
 
 MFTRACE_FORMATS = pfa pfb svg
@@ -36,7 +21,3 @@ $(outdir)/%.pfb $(outdir)/%.svg $(outdir)/%.pfa: %.mf
        -mv $(basename $(@F)).pfa $(outdir)
        -mv $(basename $(@F)).pfb $(outdir)
        -mv $(basename $(@F)).svg $(outdir)
-
-#%.afm:
-#      $(SHELL) $(depth)/buildscripts/tfmtoafm.sh $(shell basename $@ .afm)
-#      mv $@ $@.in
index 616e5868a7fb99cfef7eda4c9ea82486326d6f28..dfaf2c18ce1cb77b261cc65efd189df519cf5688 100644 (file)
@@ -3,10 +3,5 @@ tfm: $(TFM_FILES)
 
 dvi: $(DVI_FILES)
 
-pks: $(addprefix $(outdir)/, $(XPM_FONTS:%=%.$(XPM_RESOLUTION)pk))
-
-xpms: $(addprefix $(outdir)/, $(XPM_FONTS:%=%.afm)) pks
-       $(foreach i, $(XPM_FONTS), $(SHELL) $(depth)/buildscripts/mf-to-xpms.sh $(i) && ) true
-
 pfb: $(PFB_FILES)
 
index c1636f1c9f936616723736bdad9b53a611be2fa4..db3722edcdec36c466c13841493f1c46c25eb53e 100644 (file)
@@ -7,14 +7,5 @@ MF_LOG_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.log))
 DVI_FILES += $(MF_DVI_FILES)
 TFM_FILES += $(MF_TFM_FILES)
 
-# XPM_MODE=sun
-# XPM_RESOLUTION=85
-
-# XPM_MODE=declarge
-# XPM_RESOLUTION=100
-
-XPM_MODE=ibmvga
-XPM_RESOLUTION=110
-
 
 
index 97a1c6b443b1e9993caeebd08cf10e2e8737f389..ffd57d480be07b1c7288ae29dca4297304009563 100644 (file)
@@ -4,4 +4,4 @@ O_FILES := $(filter-out $(outdir)/test%, $(O_FILES))
 TEST_EXECUTABLE = $(outdir)/test-$(NAME)
 TEST_MODULE_LIBES =$(addprefix $(outdir)/../, $(addsuffix /$(outbase)/library.a, $(TEST_MODULE_LIBS)))
 
-TEST_LOADLIBES = $(TEST_MODULE_LIBES) $(LOADLIBES) -lboost_unit_test_framework
+TEST_LOADLIBES = $(TEST_MODULE_LIBES) $(LOADLIBES)