From d765f3af45be51f15da55cf570a4b172200e1035 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 15 Sep 2002 21:35:11 +0000 Subject: [PATCH] * VERSION (MY_PATCH_LEVEL): make 1.7.0 --- ChangeLog | 4407 ++--------------- .../bibliography/computer-notation.bib | 27 + CHANGES => Documentation/misc/CHANGES-1.5 | 0 Documentation/misc/ChangeLog-1.5 | 4289 ++++++++++++++++ Documentation/misc/GNUmakefile | 2 +- Documentation/topdocs/INSTALL.texi | 19 +- Documentation/user/appendices.itely | 4 + Documentation/user/invoking.itexi | 2 + Documentation/user/preface.itely | 2 +- Documentation/user/refman.itely | 442 +- Documentation/user/tutorial.itely | 498 +- GNUmakefile.in | 22 +- NEWS | 4 +- THANKS | 17 + VERSION | 4 - buildscripts/lilypond-login.sh | 28 +- buildscripts/lilypond-profile.sh | 8 +- buildscripts/ps-to-gifs.sh | 90 - buildscripts/ps-to-pngs.sh | 4 - debian/changelog | 17 + debian/control | 10 +- debian/control.foka | 10 +- debian/rules | 12 +- flower/include/array.icc | 42 +- flower/include/file-path.hh | 1 + flower/include/parray.hh | 46 +- flower/include/polynomial.hh | 2 - flower/polynomial.cc | 63 +- .../SondagMorgen/SondagMorgenOmkvaedVolta2.ly | 175 - .../SondagMorgen/SondagMorgenOmkvaedVolta3.ly | 91 - input/SondagMorgen/SondagMorgenOutro.ly | 186 - input/mutopia/J.S.Bach/wtk1-fugue2.ly | 12 +- input/mutopia/R.Schumann/romanze-op28-2.ly | 5 +- input/regression/beam-shortened-lengths.ly | 4 +- .../regression/completion-heads-polyphony.ly | 23 + input/regression/lyric-align.ly | 16 +- input/regression/lyric-combine-polyphonic.ly | 39 + input/regression/molecule-hacking.ly | 10 +- input/regression/prefatory-empty-spacing.ly | 13 + input/regression/property-once.ly | 15 + input/regression/script-stacked.ly | 5 +- input/regression/system-extents.ly | 3 +- input/regression/tuplet-properties.ly | 2 +- input/sondag-morgen/GNUmakefile | 2 +- input/sondag-morgen/sondag-morgen-intro.ly | 24 +- .../sondag-morgen-omkvaed-volta1.ly | 18 +- .../sondag-morgen-omkvaed-volta2.ly | 25 +- .../sondag-morgen-omkvaed-volta3.ly | 4 +- input/sondag-morgen/sondag-morgen-omkvaed.ly | 44 +- input/sondag-morgen/sondag-morgen-outro.ly | 22 +- .../sondag-morgen-vers-volta1.ly | 2 +- .../sondag-morgen-vers-volta2.ly | 2 +- input/sondag-morgen/sondag-morgen-vers.ly | 12 +- input/sondag-morgen/sondag-morgen.ly | 5 + input/test/GNUmakefile | 2 +- input/test/accid.ly | 35 +- input/test/ancient-font.ly | 234 +- input/test/ancient-time.ly | 3 +- input/test/bar-number-every-fifth.ly | 12 + input/test/boxed-molecule.ly | 34 +- input/test/chords.ly | 7 +- input/test/clef-end-of-line.ly | 32 + input/test/custos.ly | 33 +- input/test/empty-staffs.ly | 23 + input/test/mensural-ligatures.ly | 57 +- input/test/poly-metric.ly | 32 + input/test/rests.ly | 51 +- input/test/stem-extend.ly | 2 +- input/test/tab-staff.ly | 40 - input/test/tablature.ly | 20 +- input/trip.ly | 16 +- input/tutorial/brahms-tweaked.ly | 2 +- lily/GNUmakefile | 9 +- lily/accidental.cc | 80 +- lily/all-font-metrics.cc | 1 + lily/auto-change-iterator.cc | 3 +- lily/bar-check-iterator.cc | 6 +- lily/bar-line.cc | 1 - lily/bar-number-engraver.cc | 23 +- lily/beam.cc | 19 +- lily/bezier.cc | 5 +- lily/break-align-interface.cc | 37 +- lily/chord-tremolo-engraver.cc | 2 +- lily/chord-tremolo-iterator.cc | 25 +- lily/clef-engraver.cc | 29 +- lily/clef.cc | 21 +- lily/completion-note-heads-engraver.cc | 18 +- lily/custos.cc | 138 +- lily/cxx-function-smob.cc | 67 - lily/engraver.cc | 12 +- lily/fingering-engraver.cc | 4 +- lily/folded-repeat-iterator.cc | 37 +- lily/font-metric.cc | 25 +- lily/gdb.cc | 9 + lily/global-translator.cc | 40 +- lily/grace-iterator.cc | 15 - lily/grace-music.cc | 4 +- lily/grob-pq-engraver.cc | 72 +- lily/grob.cc | 6 +- lily/include/accidental-interface.hh | 1 + lily/include/audio-item.hh | 7 +- lily/include/auto-change-iterator.hh | 6 +- lily/include/beam.hh | 3 + lily/include/change-iterator.hh | 3 +- lily/include/chord-tremolo-iterator.hh | 6 +- lily/include/cxx-function-smob.hh | 21 - lily/include/folded-repeat-iterator.hh | 6 +- lily/include/font-metric.hh | 4 +- lily/include/global-translator.hh | 7 +- lily/include/grace-iterator.hh | 4 +- lily/include/grob.hh | 2 +- lily/include/interpretation-context-handle.hh | 1 + lily/include/item.hh | 2 +- lily/include/lily-guile.hh | 25 +- lily/include/lyric-combine-music-iterator.hh | 6 +- lily/include/molecule.hh | 2 +- lily/include/music-iterator.hh | 53 +- lily/include/music-wrapper-iterator.hh | 5 +- lily/include/musical-request.hh | 6 + .../include/output-property-music-iterator.hh | 2 +- lily/include/part-combine-music-iterator.hh | 5 +- lily/include/percent-repeat-iterator.hh | 5 +- lily/include/property-iterator.hh | 17 +- lily/include/request-chord-iterator.hh | 2 +- lily/include/sequential-iterator.hh | 7 +- lily/include/sequential-music-iterator.hh | 2 +- lily/include/simple-music-iterator.hh | 3 +- lily/include/simultaneous-music-iterator.hh | 9 +- lily/include/source-file.hh | 6 +- lily/include/spanner.hh | 2 +- lily/include/time-scaled-music-iterator.hh | 2 +- lily/include/translator.hh | 2 + lily/include/virtual-font-metric.hh | 34 + lily/interpretation-context-handle.cc | 23 +- lily/item.cc | 2 +- lily/key-signature-interface.cc | 37 +- lily/kpath.cc | 12 + lily/lexer.ll | 10 + lily/ligature-head.cc | 8 - lily/lily-guile.cc | 50 +- lily/lyric-combine-music-iterator.cc | 43 +- lily/lyric-combine-music.cc | 2 +- lily/main.cc | 2 +- lily/mensural-ligature-engraver.cc | 15 - lily/molecule.cc | 2 +- lily/music-iterator.cc | 90 +- lily/music-wrapper-iterator.cc | 23 +- lily/music.cc | 3 + lily/musical-request.cc | 12 +- lily/my-lily-lexer.cc | 1 + lily/note-head.cc | 23 +- lily/note-spacing.cc | 9 +- lily/output-property-engraver.cc | 2 +- lily/paper-def.cc | 36 +- lily/parser.yy | 104 +- lily/part-combine-music-iterator.cc | 41 +- lily/part-combine-music.cc | 2 +- lily/percent-repeat-engraver.cc | 2 +- lily/percent-repeat-iterator.cc | 21 +- lily/property-iterator.cc | 67 +- lily/request-chord.cc | 4 +- lily/rest.cc | 73 +- lily/score-engraver.cc | 6 +- lily/score.cc | 26 +- lily/script-column.cc | 40 +- lily/script-engraver.cc | 7 +- lily/sequential-iterator.cc | 58 +- lily/sequential-music-iterator.cc | 2 +- lily/sequential-music.cc | 4 +- lily/simple-spacer.cc | 17 +- lily/simultaneous-music-iterator.cc | 91 +- lily/simultaneous-music.cc | 4 +- lily/source-file.cc | 31 +- lily/spanner.cc | 5 +- lily/staff-spacing.cc | 7 + lily/stem-engraver.cc | 17 +- lily/stem.cc | 71 +- lily/syllable-group.cc | 6 +- lily/system-start-delimiter.cc | 40 +- lily/tab-note-heads-engraver.cc | 34 +- lily/text-engraver.cc | 4 +- lily/text-spanner-engraver.cc | 39 +- lily/time-scaled-music-iterator.cc | 2 +- lily/time-scaled-music.cc | 2 +- lily/time-signature.cc | 66 +- lily/translator-def.cc | 22 +- lily/translator.cc | 2 + lily/tuplet-bracket.cc | 15 +- lily/unfolded-repeat-iterator.cc | 4 +- lily/virtual-font-metric.cc | 106 + ly/a3-init.ly | 5 + ly/engraver-init.ly | 17 +- ly/performer-init.ly | 3 +- ly/property-init.ly | 6 +- make/generic-rules.make | 6 - make/lilypond-vars.make | 5 +- make/lilypond.lsm.in | 14 +- make/lilypond.mandrake.spec.in | 243 +- make/lilypond.redhat.spec.in | 4 +- make/lilypond.suse.spec.in | 2 +- make/ly-rules.make | 15 +- make/lysdoc-rules.make | 3 + make/mutopia-rules.make | 8 +- mf/GNUmakefile | 14 +- mf/feta-eindelijk.mf | 14 +- mf/parmesan-heads.mf | 56 +- po/da.po | 267 +- po/fr.po | 214 +- scm/documentation-lib.scm | 14 +- scm/drums.scm | 1 + scm/font.scm | 69 +- scm/grob-description.scm | 5 +- scm/lily.scm | 4 +- scm/music-functions.scm | 49 +- scm/music-property-description.scm | 5 +- scm/output-lib.scm | 92 +- scm/tex.scm | 2 +- scm/translator-property-description.scm | 7 + scripts/lilypond-book.py | 69 +- scripts/ly2dvi.py | 28 +- tex/titledefs.tex | 7 + 221 files changed, 8134 insertions(+), 7003 deletions(-) rename CHANGES => Documentation/misc/CHANGES-1.5 (100%) create mode 100644 Documentation/misc/ChangeLog-1.5 create mode 100644 THANKS delete mode 100644 buildscripts/ps-to-gifs.sh delete mode 100644 buildscripts/ps-to-pngs.sh delete mode 100644 input/SondagMorgen/SondagMorgenOmkvaedVolta2.ly delete mode 100644 input/SondagMorgen/SondagMorgenOmkvaedVolta3.ly delete mode 100644 input/SondagMorgen/SondagMorgenOutro.ly create mode 100644 input/regression/completion-heads-polyphony.ly create mode 100644 input/regression/lyric-combine-polyphonic.ly create mode 100644 input/regression/prefatory-empty-spacing.ly create mode 100644 input/regression/property-once.ly create mode 100644 input/test/bar-number-every-fifth.ly create mode 100644 input/test/clef-end-of-line.ly create mode 100644 input/test/empty-staffs.ly create mode 100644 input/test/poly-metric.ly delete mode 100644 input/test/tab-staff.ly delete mode 100644 lily/cxx-function-smob.cc delete mode 100644 lily/include/cxx-function-smob.hh create mode 100644 lily/include/virtual-font-metric.hh create mode 100644 lily/virtual-font-metric.cc create mode 100644 ly/a3-init.ly diff --git a/ChangeLog b/ChangeLog index f6b5d401ac..c9f34af08c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4293 +1,520 @@ -2002-08-19 Jan Nieuwenhuizen +2002-09-15 Han-Wen Nienhuys - * VERSION: Add CVS HEAD trap. + * VERSION (MY_PATCH_LEVEL): make 1.7.0 -2002-08-19 Han-Wen Nienhuys - - * VERSION: release 1.6.0 - - * make/lilypond.redhat.spec.in: don't dist input/ separately - anymore - - * Documentation/user/latex-example.latex: restore from old version - - * Documentation/topdocs/index.tely: remove @settitle - - * Documentation/topdocs/README.texi: small fixes. - - * lily/self-aligment-interface.cc (centered_on_parent): only - return center if extents not empty. - - * scm/music-functions.scm (unfold-repeats): typo, - - * mf/feta-bolletjes.mf: use resolution independent variables. - -2002-08-19 janneke ; - - * lily/stem.cc (calc_stem_info): Fix [a8 a32]. - - * Documentation/index.texi (Top): Templates url fix, small url - name changes. - - * regular-spacing-engraver.cc: - * scm/grob-property-description.scm: Remove regular-distance-to. - - * input/test/spacing-regular.ly: - * lily/regular-spacing-engraver.cc: Remove. - -2002-08-18 janneke - - * mensural-ligature.cc: *** empty log message *** + * Documentation/user/refman.itely: patch by Graham Percival - * tab-note-heads-engraver.cc: * lily/tab-note-heads-engraver.cc: - * scm/translator-property-description.scm: Add tablatureFormat. + * scripts/lilypond-book.py (make_pixmap): let gs write to + outputfile directly - * input/test/staff-bracket.ly: Update. +2002-09-15 Han-Wen Nienhuys - * regular-spacing-engraver.cc: - * lily/regular-spacing-engraver.cc: Add regular-distance-to. + * lily/simultaneous-music-iterator.cc + (Simultaneous_music_iterator): init children_list_ - * ligature-bracket.cc, ligature-engraver.cc, ligature-head.cc, - mensural-ligature-engraver.cc, mensural-ligature.cc: + * lily/part-combine-music-iterator.cc + (Part_combine_music_iterator): init state_ - * lily/mensural-ligature-engraver.cc: - * scm/grob-property-description.scm: Add head-width, join-left, - primitive. + * lily/sequential-iterator.cc (Sequential_iterator): init cursor_ -2002-08-18 Han-Wen Nienhuys + * lily/percent-repeat-iterator.cc (Percent_repeat_iterator): init + child_iter_. - * ambitus.cc, parser.yy: - * Documentation/user/introduction.itely: small corrections. + * lily/sequential-iterator.cc (Sequential_iterator): init list_ - * lily/parser.yy (property_def): Ugh. Switch off - internal-type-checking for autoBeamSettings. + * lily/translator-def.cc (Translator_def): make a GC proof copy + constructor. -2002-08-18 janneke +2002-09-14 Han-Wen Nienhuys - * music.cc (internal_set_mus_property): [!NDEBUG] Remove, use - abort instead of assert. + * lily/percent-repeat-iterator.cc (process): quit iter. -2002-08-19 Jan Nieuwenhuizen + * lily/simultaneous-music-iterator.cc + (Simultaneous_music_iterator): protection bugfix. + (get_pending_events): bugfix: don't use s twice. - * scm/grob-property-description.scm: Remove regular-distance-to. - - * input/test/spacing-regular.ly: - * lily/regular-spacing-engraver.cc: Remove. + * debian/: debian patches by Anthony Fok. -2002-08-19 Han-Wen Nienhuys - - * input/mutopia/J.S.Bach/wtk1-fugue2.ly: staff switch fixes. - - * Documentation/user/lilypond-book.itely: small cleanups - - * Documentation/user/*.itely: fix overfull hboxes. - -2002-08-19 Jan Nieuwenhuizen - - * Documentation/user/tutorial.itely (A piano excerpt): - * Documentation/user/introduction.itely (Introduction): Typo fix. - - * input/test/header-ifelse.ly: Bugfix: call numbers->string only - on first three elements of ly-version list. - - * input/test/trills.ly: Comment out \comma. - - * lily/tab-note-heads-engraver.cc: - * scm/translator-property-description.scm: Add tablatureFormat. - - * input/test/staff-bracket.ly: Update. - - * lily/regular-spacing-engraver.cc: Add regular-distance-to. - - * input/test/orchestscore.ly: - * input/test/part-combine-moments.ly: - * input/test/part-combine-staff.ly: markScriptPadding -> - RehearsalMark #'padding. - -2002-08-19 Han-Wen Nienhuys - - * Documentation/user/introduction.itely: small corrections. + * lily/clef-engraver.cc (create_clef): bugfix for octavate clef + (thanks Rune!) - * scm/translator-property-description.scm (tablatureFormat): - describe property. + * Documentation/user/tutorial.itely: replace grob by + object. Explain \once. - * lily/parser.yy (property_def): Ugh. Switch off - internal-type-checking for autoBeamSettings. + * scm/music-property-description.scm (once): add 'once -2002-08-19 Jan Nieuwenhuizen +2002-09-13 Han-Wen Nienhuys - * lily/mensural-ligature-engraver.cc: - * scm/grob-property-description.scm: Add head-width, join-left, - primitive. - - * lily/mensural-ligature.cc: - * lily/ligature-bracket.cc: - * scm/grob-property-description.scm: - - * lily/ligature-head.cc: Add ligature-primitive-callback. - - * input/test/beam-control.ly: - * input/test/bar-script-visibility.ly: Update. - - * lily/music.cc (internal_set_mus_property): [!NDEBUG] Remove, use - abort instead of assert. + * lily/simultaneous-music-iterator.cc (skip): call quit() + when an iterator exits early. -2002-08-18 Jan Nieuwenhuizen +2002-09-13 Juergen Reuter - * input/test/ambitus.ly: Comment out ambitus until anal-proof. + * lily/rests.ly: added comment on bogus warnings about missing flags - * buildscripts/mf-to-table.py (write_fontlist): change - extra-extent-X extra-X-extent. + * lily/clef.cc, lily/rests.cc: added warning when font character + lookup fails. - * scm/music-property-description.scm (label): Typecheck markup? - (was string?). + * lily/rests.cc: workaround: consider missing ledgered rests in + ancient font. - * Documentation/user/refman.itely (Tablatures basic): Change - TabStaff @lilypond snippets to @example until TabStaff is - anal-proof. + * lily/rests.cc: bugfix: cleaned up font lookup code that handles + special cases of styles 'default' and 'classical'. This should + also fix the behaviour of lily/multi-measure-rest.cc, which so far + did not consider styles 'default' and 'classical'. -2002-08-18 Rune Zedeler +2002-09-13 Rune Zedeler - * mf/feta-klef.mf: (another) white pixels bug in g-clef fixed. + * scm/drums.scm: "set" the automatic properties instead of + "override", (whoops!) -2002-08-18 Jan Nieuwenhuizen +2002-09-13 Mats Bengtsson - * lily/include/lily-guile.hh (LY_DEFINE_NOARGS): Remove. + * ly/a3-init.ly, scripts/ly2dvi.py (ly_paper_to_latexpaper): + Add support for A3 paper. - * lily/grob-property.cc (internal_set_grob_property): Revert oops. +2002-09-13 Han-Wen Nienhuys - * lily/input.cc (message): - * flower/warn.cc (message): Flush output. + * lily/tuplet-bracket.cc (brew_molecule): don't crash on broken + tuplet brackets. - * po/lilypond.pot: Run make po-replace. + * lily/property-iterator.cc (do_quit): add finalization functions + to undo property settings. - * Documentation/user/GNUmakefile (LILYPOND_BOOK_FLAGS): be anal - with type checks. + * lily/parser.yy (property_def): syntax for \once \property .... - * Documentation/GNUmakefile (LILYPOND_BOOK_FLAGS): - * input/regression/GNUmakefile (LILYPOND_BOOK_FLAGS): - * input/test/GNUmakefile (LILYPOND_BOOK_FLAGS): - * Documentation/user/invoking.itexi: - * lily/scm-option.cc: - * lily/main.cc: Debugging options: ly-set-option (was: - set-lily-option). + * lily/note-spacing.cc (get_spacing): don't get crazy when there + is no (live) stem. - * lily/scm-option.cc (ly_option_usage): New function. + * lily/my-lily-lexer.cc: new keyword \once -2002-08-18 Han-Wen Nienhuys + * lily/global-translator.cc (apply_finalizations): new function + (add_finalization): new function - * lily/parser.yy (script_abbreviation): accept -_ script. + * input/regression/property-once.ly: new file - * ly/script-init.ly (dashUnderscore): add NOTE-_ == portato (dash - and dot) +2002-09-10 Juergen Reuter - * scripts/lilypond-book.py (re_dict): add spaces after command sequences - (LatexPaper.find_latex_dims): run latex in nonstopmode + * lily/stem.cc: added warning when font symbol not found; + small cleanups - * input/font-body.ly: remove. +2002-09-11 Han-Wen Nienhuys - * input/test/harmonic.ly: new file. + * mf/GNUmakefile: make PFA for sauter CM fonts. - * lily/side-position-interface.cc (aligned_side): don't add - padding again. +2002-09-10 Han-Wen Nienhuys -2002-08-18 Werner Lemberg + * mf/GNUmakefile: make map file for pfa target as well. - * ly/engraver-init.ly: - s/extraverticalExtent/extraVerticalExtent/. - -2002-08-18 Jan Nieuwenhuizen - - * lily/parser.yy (assignment, Simple_music): Warning message fix. - Junk ARRAY_SIZE definition. + * scm/tex.scm (end-output): add newline to output - * lily/score-engraver.cc: Uniformise error message. + * lily/include/sequential-iterator.hh (class Sequential_iterator): + don't use Protected_scm for music-iterator members. - * lily/grob-property.cc (internal_set_grob_property, - internal_get_grob_property): [!NDEBUG] Remove, use abort instead - of assert; we always want this functionality. Uniformise warning - message. + * lily/music-iterator.cc (Music_iterator): initialize music_ - * lily/main.cc (main, main_prog): Bugfix: move exit-upon-files - back, until after evaluating init_scheme_code. - - * scm/translator-property-description.scm (breakAlignOrder): Doco fix. - - * Documentation/user/lilypond-book.itely: Remove @cindex - without argument. - - * Documentation/user/internals.itely: Remove stray comma after - @cindex entry. - -2002-08-18 Han-Wen Nienhuys - - * VERSION: 1.5.74 released - - * lily/break-substitution.cc (fast_fubstitute_grob_list): use - realloc() - - * lily/dynamic-engraver.cc (process_music): don't use SCM_UNDEFINED - - * Documentation/user/tutorial.itely: fixes by Graham Percival. - -2002-08-17 Han-Wen Nienhuys - * lily/lily-guile.cc (type_check_assignment): if - internal-type-checking set, abort if we find an unknown property. +2002-09-09 Juergen Reuter - * input/regression/GNUmakefile,input/test/GNUmakefile: be anal - with typechecks + * input/test/accid.ly: updated test file to show all available + accidentals styles - * lily/beam.cc: add 'knee to interface + * lily/accidental.cc, lily/key-signature-interface.cc, + lily/include/accidental-interface.hh: added method + get_fontcharname() to provide proper fall-back cases for missing + accidentals; print warning if font char lookup fails - * input/test/*.ly: remove or update files using deprecated - properties + * lily/time-signature.cc: fixed documentation bug - * lily/system.cc (spanner_count): new function +2002-09-09 Han-Wen Nienhuys - * lily/break-substitution.cc (fast_fubstitute_grob_list): special - function for break substitutions on groblists in spanners. By - reordering the elements of the list, we can skip large parts of - the list in the break substitution. This brings the complexity of - Lily back to more-or-less linear in the length of the score. + * lily/music-iterator.cc (quit, do_quit): new function: break link + to translator group explicitly. This used to be done from the + destructor of music-iterator. Now that iterators are GC'd, this is + no longer possible. Add new function do_quit() to all applicable + derived classes. - Measured speed increase: 20 % (coriolan, without -O2) + * lily/lyric-combine-music-iterator.cc (construct_children): don't + unprotect objects. + (Lyric_combine_music_iterator): small typo bugfix. - * lily/parse-scm.cc (parse_handler): don't construct a new strport - for every parsing. This saves a lot of garbage on large files that - have many # constructs. + * lily/musical-request.cc: do ADD_MUSIC for String_number_req. - * lily/source-file.cc (init_port): add an SCM port to the - sourcefile as well. + * lily/include/lily-guile.hh (scm_remember_upto_here_1): add glue - * lily/include/input-file-results.hh: move from - file-results. Rename Input_file_settings to Input_file_results. - - * flower/ : remove simple-file-storage, mapped-file-storage, - string-storage. Move source-file, binary-source-file to lily/ - - * Documentation/header.html.in: remove FAQ - - * Documentation/index.texi (Top): reorganise - - * Documentation/topdocs/INSTALL.texi (Top): add note about fonts. - - * Documentation/topdocs/FAQ.texi: remove. - - * stepmake/stepmake/documentation-targets.make (footify): must - depend on all .html files, otherwise rebuilds are broken due to - the time stamps - - * ly/declarations-init.ly (noBreak): set penalty to 10001 (> - 10000). - -2002-08-16 Han-Wen Nienhuys - - * ly/engraver-init.ly (ChordNamesContext): minimumverticalExtent - -> minimumVerticalExtent - -2002-08-16 Stephen Peters - - * scm/pdf.scm, pdftex.scm: pdftex updates - - * scripts/ly2dvi.py: pdflatex support + * lily/sequential-iterator.cc (get_pending_events): don't delete + music-iterator. -2002-08-16 Jan Nieuwenhuizen - - * Documentation/windows/installing.texi: Include info from Wiki. - -2002-08-16 Mats Bengtsson - - * scripts/lilypond-book.py (output_dict): Replace - \includegraphics{xxx.eps} -> \includegraphics{xxx} to - simplify for pdflatex users (makes no difference to latex users). - -2002-08-16 Jan Nieuwenhuizen +2002-09-08 Rune Zedeler - * Documentation/index.texi: - * Documentation/windows/compiling.texi: - * Documentation/windows/installing.texi: Update to reflect - LilyPond's inclusion into Cygwin. + * scm/music-property-description.scm: describe string-number (whoops) -2002-08-15 Jan Nieuwenhuizen - - * input/test/phrasing-slur-height.ly: New file. - - * scm/grob-property-description.scm (height-limit, ratio): Add. - - * lily/slur.cc: - * scm/grob-description.scm (Slur, PhrasingSlur): Move height-limit - and ratio out of details. - - * lily/scores.cc (Input_file_settings): Initalize global_header_. - - * lily/include/file-results.hh (class Input_file_settings): Add - private constructor. - - * cygwin/GNUmakefile: [CYGWIN] Install bug-lilypond-cygwin. Typo - fix. Add kpsewhich commands (Thanks Mats). - - * cygwin/bug-lilypond-cygwin.sh: New file. - - * stepmake/stepmake/help2man-rules.make: Better way of showing - help2man command. - - * Documentation/topdocs/FAQ.texi: Add more possible stale font - paths. - - * stepmake/bin/package-diff.py: Prepend ./ to cut-and-pastable - commands. - - * Documentation/topdocs/INSTALL.texi: Mention the need to and how - to create configure for CVS source trees. Mention libkpathsea-dev - as alternative possible name for tetex-devel (or should that be - the other way around?). - -2002-08-15 Han-Wen Nienhuys - - * lily/include/file-results.hh (class Input_file_settings): - encapsulate file settings in a class, Input_file_settings. - - * lily/scores.cc: new function ly_set_point_and_click_x - - * Documentation/topdocs/README.texi (Top): add note about xdelta - - * Documentation/topdocs/INSTALL.texi (Top): move kpathsea to problems - section. + * Documentation/user/refman.itely: Tablature and bar number updates -2002-08-14 Jan Nieuwenhuizen - - * scripts/ly2dvi.py: Remove debug printing. - -2002-08-14 Han-Wen Nienhuys - - * scripts/convert-ly.py (FatalConversionError.conv): bug in - verticalExtent replacement. - - * VERSION: 1.73 released. - -2002-08-14 - - * scm/output-lib.scm: Support of hammers and pulls in tablature - -- Hammers and pulls are inserted exactly like slurs, and a "H" or - a "P" is added over the slur as needed. - - * ./input/test/tablature-hammer.ly: example of hammer, pull and - legato in a tablature. +2002-09-08 Han-Wen Nienhuys - * ly/engraver-init.ly: Stem.up-to-staff is now disabled by - default, since it appears that most of the published tablatures - are not like that. + * lily/lyric-combine-music-iterator.cc + (Lyric_combine_music_iterator): small bugfix -2002-08-13 Han-Wen Nienhuys - - * lily/beam.cc (brew_molecule): use - Staff_symbol_referencer::staff_space for thickness. - -2002-08-14 Jan Nieuwenhuizen - - * Documentation/user/lilypond.tely: Add dir entries for - executables. - - * Documentation/user/converters.itely: - * Documentation/user/invoking.itexi: Fix `invocation' node names, - in line with standard dir entries. - - * Documentation/user/convert-ly.itexi - * Documentation/user/ly2dvi.itexi: Remove. + * lily/include/simultaneous-music-iterator.hh (class + Simultaneous_music_iterator): use SCM list for list of iterators. - * scripts/ly2dvi.py: Add pseudo-filter (and stdout output) - support. - - * lily/main.c: - * lily/paper-score.cc : - * lily/gourlay-breaking.cc: Write info to stderr. - - * buildscripts/help2man.pl: Update to latest version from Debian. - Fixes generation of man pages with perl 5.6.1. - - * GNUmakefile.in: Add python link to build-datadir. Fixes - generation of midi2ly man page. + * lily/cxx-function-smob.cc: remove file. -2002-08-14 Mats Bengtsson + * lily/include/cxx-function-smob.hh: remove file. - * Documentation/user/{tutorial.itely, introduction.itely}: - Small fixes. + * lily/include/music-iterator.hh (class Music_iterator): smobify + music-iterator; many changes throughout. They are now constructed + through procedures that return to the smobbed iterator. -2002-08-13 Jan Nieuwenhuizen + * lily/include/*.hh: all derived_mark() functions are now const. - * lily/beam.cc (least_squares): Add comment. - - * input/regression/beam-center-slope.ly: Update. - - * lily/beam-quanting.cc (score_stem_lengths): Revert oops. - - * input/template/melody-chords.ly: New file. - - * lily/stem.cc (calc_stem_info): Move, document, clean up and fix - up-to-stem feature. - - * ly/grace-init.ly (startGraceMusic): - * scm/grob-description.scm (beamed-lengths): Subtract half a beam - thickness, to fix most ugly beams. See input/test/stem.ly and - baerenreiter-sarabande.ly. - - * input/test/stem.ly: - * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Play with - beamed-lengths. - - * input/test/spacing.ly: Give enough room to test spacing. - - * cygwin/post-lilypond.sh: Fix and update. - - * cygwin/zlily-profile.sh: Remove. - -2002-08-12 Jan Nieuwenhuizen - - * GNUmakefile.in (EXTRA_DIST_FILES): Add server.el.patch. - - * scm/grob-property-description.scm - (beamed-extreme-minimum-free-lengths): New property, now correctly - named. - - * ly/grace-init.ly: New beam property updates. - - * input/les-nereides.ly: Updates. - - * cygwin/README.in: New file. - - * input/sondag-morgen/GNUmakefile: - * input/mutopia/R.Schumann/GNUmakefile: New file. - - * scm/grob-property-description.scm (beamed-minimum-free-lengths): - (beamed-extreme-free-lengths): New property. - - * lily/beam.cc (forced_stem_count): Count boundary cases too. - (set_stem_shorten): Integer divide bug fix. - - * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Really expect - six systems, change warning into error. - - * scm/grob-description.scm (beamed-stem-shorten): Shorten 8th - beams same as normal stem (one staffspace), high order beams less - (arbitrary guess). - (beamed-lengths): Standard length for all beams. - (beamed-minimum-free-lengths): - (beamed-extreme-minimum-free-lengths): New property. - - * input/regression/beam-default-lengths.ly: - * input/regression/beam-shortened-lengths.ly: New file. - - * lily/stem.cc (get_stem_info): New function. - (calc_stem_info): Partial rewrite. - - * scm/grob-description.scm (Beam): same beamed-stem-shorten for - all beam counts. + * lily/syllable-group.cc (set_lyric_align): remove conditional + again. -2002-08-12 Han-Wen Nienhuys + * Documentation/bibliography/computer-notation.bib (note): add + Beyond MIDI and The Virtual Score. - * VERSION: 1.5.72 released +2002-09-07 Rune Zedeler - * input/sondag-morgen/GNUmakefile (examples): add file + * input/sondag-morgen/*.ly: Tablature fixes - * input/mutopia/R.Schumann/GNUmakefile (examples): add file + * ly/performer-init.ly: BUGFIX: add alias Timing to Score context - * lily/lily-guile.cc (to_dir): return CENTER if not a direction. - - * lily/include/grob.hh: remove remove_grob_property() - - * lily/stem-engraver.cc (stop_translation_timestep): remove - dir-forced grob property - - * Documentation/user/refman.itely (Grace notes): explain grace - after main note. - - * input/test/ : small convert-ly mishaps. - - * Documentation/user/preface.itely: small bits - - * Documentation/user/introduction.itely: add sectioning - -2002-08-11 Jan Nieuwenhuizen - - * lily/stem.cc (get_default_stem_end_position): use beam_count - 1 - as index; this fixes too short forced stem directions. - (calc_stem_info): various minute bugfixes. - - * lily/gourlay-breaking.cc (combine_demerits): set uniform - tightness constraint back to one. This fixes Baerenreiter - sarabande layout. - - * input: some fixes. Add \version to all files. + * lily/parser.yy and lily/lexer.ll: Use E_UNSIGNED instead of E_DIGIT - * lily/stem.cc (calc_stem_info): Use get_direction_beam_count. - - * lily/beam.cc (get_direction_beam_count): New function. - - * GNUmakefile.in: Fix config.h dependency. - - * input/test/beam-dir-function.ly: Fix for new default - neutral-direction = -1 (down). - - * input/regression/tuplet-properties.ly: - * input/regression/tuplet-nest.ly: Fix. - - * lilypond-font-lock.el (LilyPond-font-lock-keywords): - * input/test/improv.ly: - * input/test/cautionaries.ly: Accidentals -> Accidental. - - * input/test/add-text-script.ly: Bugfix. How did this ever work? - - * Documentation/windows/installing.texi: - * Documentation/windows/compiling.texi: - * cygwin/README: Update to reflect new binary release setup and - build instructions. - -2002-08-10 Jan Nieuwenhuizen - - * server.el.patch: Update. - -2002-08-10 Han-Wen Nienhuys - - * stepmake/stepmake/metafont-rules.make: pktrace -> mftrace name - change. - * configure.in: idem - -2002-08-10 Juergen Reuter - - * mf/parmesan-timesig.mf, scm/output-lib.scm, - lily/include/time-signature.hh, lily/time-signature.cc, - input/test/time.ly: fixed broken time-signature by setting grob - property font-family automatically. - -2002-08-10 Jan Nieuwenhuizen + * lily/musical-request.cc (String_number_req): Added - * Documentation/user/tutorial.itely (Running LilyPond): Mention - xdvi and XFree86 option for Windows users. - - * Documentation/user/invoking.itexi: Add ly2dvi's -p alias. - - * scripts/ly2dvi.py: Bugfix for `ly2dvi -I ./foo foo.ly'. Also - append directory of first file to search path, allowing - `ly2dvi foo/foo.ly' when foo.ly includes other files from - directory foo. Add short option alias '-p' for --pdf. - - * input/test/trills.ly: - * input/test/preset-extent.ly: - * scm/grob-property-description.scm: more extent renaming. - -2002-08-09 Han-Wen Nienhuys - - * lily/parse-scm.cc (protected_ly_parse_scm): compatibility with - CVS GUILE - - * input/test/preset-extent.ly (texidoc): added file. - - * scripts/convert-ly.py: add extent rule. - - * lily/grob.cc: change extent-[XY] to [XY]-extent globally. - -2002-08-09 Jan Nieuwenhuizen - - * lily/main.cc (main): Remove stale #ifdef for windows. - - * stepmake/stepmake/python-module-rules.make: - * stepmake/stepmake/python-module-vars.make: - * stepmake/stepmake/shared-library-vars.make: Add Cygwin support. - - * stepmake/stepmake/generic-vars.make: - * cygwin/GNUmakefile: Fix Cygwin build detection. + * lily/tab-note-heads-engraver.cc: Use String_number_req instead + of Text_script_req; read properties stringOneTopmost and + highStringOne. - * stepmake/stepmake/shared-library-rules.make: Remove version juggling. - - * stepmake/stepmake/shared-library-targets.make: Default target - includes version, add target libFOO. - - * lily/main.cc: Temporary fix for access to scm_read_opts array - from shared Cygwin library. - -2002-08-08 Rune Zedeler + * ly/engraver-init.ly (tabStaffContext): Bugfix: remove Key_engraver; + set stringOneTopmost and highStringOne to #t - * ly/property-init.ly: Added phrasingSlurUp, phrasingSlurDown and - phrasingSlurBoth. - - * input/mutopia/R.Schumann/romanze-op28-2.ly: Added. + * scm/output-lib.scm (tablature-stem-attachment-function): Changed + (guitar-tunings): List added + ((every-nth-bar-number-visible n) barnum): Instead of + default-bar-number-visibility + ((every-nth-bar-number-visible n) barnum): added - * input/sondag-morgen/*: renamed files from input/SondagMorgen/* + * scm/grob-description.scm (TabNoteHead): Extra-offset added (UGH!) -2002-08-08 Han-Wen Nienhuys + * scm/translator-property-description.scm: Added new functions - * lily/beam.cc (struct Int_set): typo. + * input/test/tablature.ly: Changed to better demonstrate possibilities. - * mf/feta-beugel.mf (code): braces should start at 0, not 1. - - * lily/include/lily-guile.hh (scm_int2num): guile 1.4 compatibility. - - * scm/grob-description.scm (all-grob-descriptions): set - X-offset-callbacks for TextScript - - * lily/stem.cc (invisible_b): don't use support_head(), since it - sets stem direction. - - * lily/beam.cc (struct Int_set): don't get stuck inserting - interval segments of length 0.0. - - * scripts/convert-ly.py: break-align conversion. - -2002-08-06 Han-Wen Nienhuys - - * lily/*.cc (process_music): gh_int2scm -> scm_int2num - -2002-08-06 Heikki Junes - - * lilypond-mode.el: Also "C-xC-s" sets default command to LilyPond. - -2002-08-05 Rune Zedeler - - * mf/feta-eindelijk.mf: Fix silly typo in 16th and shorter rests. - -2002-08-05 Han-Wen Nienhuys - - * stepmake/bin/make-version.py: robustify. - - * input/test/rhythm-excercise.ly: new file - - * input/test/blank-notes.ly: new file - - * lily/note-head.cc (head_extent): robustness fix. + * input/test/bar-number-every-fifth: Use new function - * Documentation/user/preface.itely: add some more. +2002-09-07 Han-Wen Nienhuys -2002-08-04 Rune Zedeler + * scripts/lilypond-book.py: revert pre use for python + 2.2. Document why. - * Documentation/user/refman.itely - * Documentation/user/internals.itely: Documented "Current" property. - -2002-08-04 Han-Wen +2002-09-07 Jeremie Lumbroso - * lily/lily-guile.cc: change gh_str02scm to scm_makfrom0str. + * Documentation/user/refman.itely: very minor corrections and + rephrasing of the reference manual -- revision up to line #400. -2002-08-04 Werner Lemberg + * Documentation/user/refman.itely: replaced all occurrence "staffs" + with "staves". - * tex/lilyponddefs.tex: s/filllastpage/lastpagefill/. - - * Documentation/user/refman.itely: Document it. +2002-09-07 Han-Wen Nienhuys -2002-08-04 Han-Wen + * lily/lexer.ll: scan E_DIGIT - * lily/main.cc (sane_putenv): Oops. Should supply a private copy - to putenv. (this was actually caught by valgrind, but I didn't - think the error was mine... ) + * lily/parser.yy (string_request): use E_DIGIT for string requests -2002-08-03 Han-Wen + * lily/beam.cc (get_thickness): new function - * tex/lilyponddefs.tex: add filllastpage support. + * ly/performer-init.ly (ScoreContext): add Timing alias - * GNUmakefile.in: barf if config.h is older than configure. + * lily/translator-def.cc (Translator_def): copy alias list too. - * VERSION: released 1.5.71 + * lily/stem.cc (height): add half beam thickness for beamed stems. + This fixes tuplet bracket vertical offsets on beams. - * lily/beam.cc (consider_auto_knees): rewrite function; now only - consider horizontal knees. Fixes input/bugs/bizzarre-beam.ly - - * lily/syllable-group.cc (set_lyric_align): fix centering on note - head for `normal' lyrics. This fixes input/bugs/lyrics-spacing.ly. - -2002-08-02 Han-Wen - - * lily/beam.cc (connect_beams): fix quarter note beams. - - * input/regression/beam-quarter.ly: new file. - -2002-08-02 Mats Bengtsson - - * buildscripts/mf-to-table.py (postfixes): Reduce the line spacing - in the font list. - -2002-08-02 Han-Wen Nienhuys - - * lily/scm-option.cc: excorcise iostream. - - * lily/main.cc: remove iostream usage. - -2002-08-02 Han-Wen - - * scripts/lilypond-book.py: make URL for printfilename option. - - * lily/beam.cc (position_with_maximal_common_beams): fix kneed - beamlets. This fixes input/bugs/knee - - * ly/engraver-init.ly (HaraKiriStaffContext): switch off auto knee - for hara kiri staffs. - - * lily/slur-engraver.cc (try_music): remove nested slur - functionality. This fixes spurious warnings with the partcombiner. + * lily/text-spanner-engraver.cc (stop_translation_timestep): small + cleanups; only hang spanner on paper-columns if there are no + note-columns to hang on. Also hang finished spanner on the last + note. -2002-08-01 Han-Wen Nienhuys + * lily/tuplet-bracket.cc (calc_position_and_height): only quantize + inside staff. - * lily/parse-scm.cc (protected_ly_parse_scm): guile 1.4 compatibility. +2002-09-07 Rune Zedeler -2002-08-01 Rune Zedeler + * scm/output-lib.scm: (default-bar-number-visibility) added - * lily/tab-note-heads-engraver.cc: add algorithm for automatically - selecting frets when none given by user. Read property - "minimumFret". - - * scm/translator-property-description.scm: Add "minimumFret" - - * mf/feta-eindelijk.mf: Changed layout of 16th and shorter rests - to match the 8th rest. slanted 8th rest a bit more. - WARNING: 8th rest and classical quarter rest exchanged. + * ly/engraver-init.ly (ScoreContext) set barNumberVisibility to + #default-bar-number-visibility -2002-08-01 Mats Bengtsson - - * scm/grob-description.scm (RehearsalMark): Add baseline-skip to - handle multiline marks correctly. - -2002-07-31 Mats Bengtsson - - * scripts/ly2dvi.py (ly_paper_to_latexpaper): Fix dvips flags - -2002-07-31 Rune Zedeler - - * input/SondagMorgen/*.ly: Added. TODO: Lots of cleanups but now - it's there. - -2002-07-31 Han-Wen Nienhuys +2002-09-06 Han-Wen Nienhuys - * lily/parser.yy (chord_notes): typo. + * input/test/poly-metric.ly: update to use Timing. - * scm/music-functions.scm (unfold-repeats): bugfix + * lily/bar-number-engraver.cc (process_music): only run + barNumberVisibility if currentBarNumber is a number. -2002-07-31 Rune Zedeler + * lily/parser.yy (chord_inversion): use CHORD_SLASH for '/' + (command_element): use Timing as alias for Score. - * ly/engraver-init.ly: remove alias "Current" from all contexts. +2002-09-06 Jeremie Lumbroso - * lily/translator-group (find_existing_translator): If - n=="Current", return this context. - - * lily/rest.cc: - * lily/time-signature.cc: spacing for even number of staff lines. - -2002-07-31 Han-Wen - - * input/bugs/: remove various files. + * Documentation/user/refman.itely: minor corrections (replacing + `grob' by `object'), addition of an example in the tablature + section. - * Documentation/user/refman.itely: doco updates. +2002-09-06 Han-Wen Nienhuys - * scripts/ly2dvi.py (find_pfa_fonts): add and document --pdf - option. + * VERSION: 1.6.2 released -2002-07-30 Rune Zedeler + * input/test/empty-staffs.ly: new file. - * ly/engraver-init.ly: add alias "Current" to all contexts. + * Documentation/topdocs/INSTALL.texi: adds a bit of information + about compiling in OpenBSD. (Graham Percival) - * ly/property-init.ly: Use "Current" context in the accidental - macros. TODO: Do the same in some of the other macros? +2002-09-05 Han-Wen Nienhuys - * scm/output-lib.scm (tablature-stem-attachment-function): add - duration argument. Now the function can be called again :-) - -2002-07-30 Han-Wen - - * lily/parse-scm.cc (parse_handler): add better error message, - return a sensible number of nchars - -2002-07-29 Han-Wen Nienhuys - - * lily/parse-scm.cc (protected_ly_parse_scm): catch GUILE errors - when parsing, and emit useful warning message. + * scm/documentation-lib.scm (scm->string): don't crash if a + procedure doesn't have a name. - * lily/lily-guile.cc (ly_parse_scm): add line/col/file locations - to SCM port for parser. +2002-09-05 Juergen Reuter -2002-07-28 Rune Zedeler - - * lily/note-spacing.cc (stem_dir_correction) Add property - knee_spacing_correction controlling the amount of optical spacing - added to knees. - -2002-07-28 Glen Prideaux - - * lily/syllable-group.cc (set_lyric_align): Only fiddle with - alignment if a note has more than a single lyric so single stanza - songs are aligned correctly. + * input/test/custos.ly: updated test file to show all available + custos styles -2002-07-28 Han-Wen + * lily/custos.cc: small code clean-ups - * input/test/broken-spanner-adjustment.ly: new file. + * input/test/rests.ly: updated test file to show all available + rest styles -2002-07-27 Mats Bengtsson + * mf/feta-eindelijk.mf: bugfix: added missing maxima rest - * scripts/lilypond-book.py: Handle printfilename also together - with {small,}verbatim +2002-09-05 Rune Zedeler -2002-07-27 Juergen Reuter + * scm/output-lib.scm (make-molecule-boxer): Fixed and moved from + input/test/boxed-molecule.ly - * scm/output-lib.scm, lily/note-head.cc: fixed broken baroque - note-head style by setting grob property font-family - automatically. + * input/test/boxed-molecule.ly: Fixed to use default + make-molecule-boxer -2002-07-26 Jan Nieuwenhuizen - - * VERSION: 1.5.70 released. + * input/test/bar-number-every-fifth.ly: Added - * Documentation/user/lilypond-book.itely (Insert music snippets - into your texts using lilypond-book): Briefly mention HTML - documents. Started rewrite, but lost inspiration. - - * lily/grob-scheme.cc (get_original, get_system, get_broken_into): - Move scheme funcs from grob.cc and spanner.cc. - - * lily, flower: Ran buildscripts/ontgaar.py. See also - http://lilypond.org/wiki/?CodingStandards. + * lily/bar-number-engraver.cc: Add property barNumberVisibility + and use it to decide which BarNumbers to suicide. - * Documentation/GNUmakefile: Remove regression-test stuff. - (deep-WWW-clean): Remove wiki-dump. Fixes web-clean target. +2002-09-05 Han-Wen Nienhuys - * Documentation/regression-test.tely: Remove. + * input/test/poly-metric.ly: new file. - * Documentation/user/refman.itely (Text scripts): Comment out ref - to PostScript output. + * scripts/lilypond-book.py (output_verbatim): python 2.2 workaround. - * lily/beam.cc (knee_b): Fix to also work if some dirs are not - set. + * scm/documentation-lib.scm (scm->string): print procedure name in + stead of # - * lily/beam.cc (set_stem_directions): For knees, set stems to - their natural direction. + * scripts/ly2dvi.py (run_lilypond): exit with error if lily exited + any file with an error. -2002-07-25 Jan Nieuwenhuizen + * input/regression/molecule-hacking.ly: also restore Y + extent. Fixes bugs with stem attachment of parenthesized note + heads. - * lily/stem.cc (calc_stem_info): Don't force stems of kneed beams - to reach middle staff line. +2002-09-04 Han-Wen Nienhuys - * lily/beam.cc (consider_auto_knees): Recalculate beam position - after deciding for a knee. + * input/test/clef-end-of-line.ly: new file. -2002-07-26 Han-Wen + * lily/stem-engraver.cc (acknowledge_grob): warn about too long + tremolos. Thanks to Erik Sandberg - * Documentation/user/internals.itely: move output-formats doco to - WikiWiki. - -2002-07-25 Han-Wen - - * po/fr.po: update from TP + * input/trip.ly (fugaIIPedal): small cleanups. - * input/template/GNUmakefile (TITLE): add lysdoc target for the - templates + * lily/grob-pq-engraver.cc: more helpful message. + (stop_translation_timestep): use scm_merge_x for merging the lists. - * Documentation/user/introduction.itely (Introduction): finish - introduction + * Documentation/user/appendices.itely: switch off parmesan listing -2002-07-25 Han-Wen Nienhuys +2002-09-01 Juergen Reuter - * lily/include/music-iterator.hh (class Music_iterator): change - get_music() to get_pending_events(). + * input/test/ancient-font.ly, input/test/ancient-time.ly, + input/test/mensural-ligatures.ly, lily/ligature-head.cc, + lily/mensural-ligature-engraver.cc, lily/note-head.cc, + lily/time-signature.cc, scm/output-lib.scm: removed obsolete + code that sets grob property font-family; also small updates to + various input/test files. -2002-07-25 Jan Nieuwenhuizen +2002-09-01 Han-Wen Nienhuys - * buildscripts/ontgaar.py: get_music () -> get_pending_events (). + * input/test/tab-staff.ly: removed. - * buildscripts/ontgaar.py: New file. - - * scm/grob-property-description.scm (conditional-elements): Add - extent-X. - - * lily/grob.cc: Add extent-X and extent-Y to interface. - - * lily/grob-scheme.cc (ly_get_parent): Don't dereference null - parent. (Han-Wen) - - * input/test/move-accidentals.ly: New file. (Han-Wen) - -2002-07-25 Han-Wen - - * lily/grob-scheme.cc (ly_get_parent): don't crash if no parent. - - * lily/slur.cc (get_first_notecolumn_y): robustness: don't crash - if no note-columns. - - * server.el.patch: new file. - - * Documentation/user/refman.itely (Point and click): updates. - (Graphical interfaces): add node - (Vertical spacing): add node + * lily/paper-def.cc (find_font): load virtual font for a list of + font names. -2002-07-24 Jan Nieuwenhuizen + * scm/font.scm (paper20-style-sheet-alist): equate ancient and + music font-families. - * lily, lily/include: Rename line to system. Junk _l suffix. + * lily/virtual-font-metric.cc (get_char_molecule): new function -2002-07-24 Han-Wen Nienhuys + * lily/system-start-delimiter.cc (staff_brace): use virtual fonts + for the list of braces - * po/fr.po: update from TP. + * lily/font-metric.cc (get_char_molecule): new function. - * buildscripts/lilypond-profile.sh: update support for - LILYPONDPREFIX +2002-08-31 Han-Wen Nienhuys -2002-07-24 Jan Nieuwenhuizen + * lily/virtual-font-metric.cc: new file - * Documentation/user/refman.itely (Point and click): Add info - about GVim, NEdit. + * lily/include/virtual-font-metric.hh (class Virtual_font_metric): + new file -2002-07-24 Han-Wen Nienhuys + * scripts/lilypond-book.py: use old re's for python 2.2 as well - * lily/accidental-placement.cc (extent_callback): remove function - (position_accidentals): do nothing if not live. - Use accidental-grobs property i.s.o. accidentals, to maintain - proper typing. + * debian/control: Debian patches by Anthony Fok -2002-07-24 Jan Nieuwenhuizen + * input/regression/lyric-combine-polyphonic.ly: new file. - * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: * - input/test/count-systems.ly: Update to new system-count function - names. + * ly/engraver-init.ly (VoiceContext): add Grob_pq_engraver to + Voice context. - * lily/grob.cc (get_line, get_original): Use LY_DEFINE. +2002-08-31 Graham Percival - * lily/spanner.cc (get_broken_into): Use LY_DEFINE. + * Documentation/user/tutorial.itely: editorial changes + (spelling, grammar, etc) of the orchestral score, integrating text + + music, and the end of tutorial. - * lily/include/spanner.hh: - * lily/include/grob.hh: Remove DECLARE_SCHEME_CALLBACKs. +2002-08-31 Rune Zedeler - * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Add - forcedBreak options and fix measure count comments. + * input/test/sondag-morgen/*.ly: 1.6 compatibility knee fixes - * GNUmakefile.in: Junk intl. - - * config.make.in (prefix): Prepend $(DESTDIR) to allow install - without overriding prefix. - - * aclocal.m4: Regenerate. - - * stepmake/aclocal.m4: Don't expand $prefix: fixes install with - other $prefix. - - * cygwin/GNUmakefile: - * ly/GNUmakefile: - * python/GNUmakefile: - * make/GNUmakefile: - * mf/GNUmakefile: - * scm/GNUmakefile: - * tex/GNUmakefile: use local_package_datadir iso datadir. - - * make/substitute.make (ATVARIABLES): Add local_lilypond_datadir. - - * aclocal.m4: Regenerate. - - * config.hh.in: - * config.make.in: - * stepmake/aclocal.m4: Cleanups and more conventional naming for - datadir ($prefix/share), package_datadir ($prefix/$package), and - local_package_datadir ($prefix/$package/$version). - - * make/lilypond-vars.make: - * scripts/ly2dvi.py: - * scripts/lilypond-book.py: - * scripts/mup2ly.py: - * scripts/midi2ly.py: use local_package_datadir iso datadir. + * lily/tab-note-heads-engraver.cc: Bugfix for instruments not + having 6 strings. - * GNUmakefile.in: build_datadir without version. - - * lily/main.cc: Datadir cleanup. - - * lily/text-item.cc (lookup_text): - * lily/music-output-def.cc (print_smob): - * lily/mensural-ligature.cc (brew_molecule): - * lily/beam-quanting.cc (score_slopes_dy, score_forbidden_quants): - Fix warnings. - -2002-07-23 Jan Nieuwenhuizen - - * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Warn when not - using 6 systems, like the original. - - * input/test/count-systems.ly: New file. - - * lily/spanner.cc (get_broken_into): - * lily/grob.cc (original_scm, line_scm): New function. - - * lily/include/grob.hh (ly_scm2grob_array): Moved from - group-interface.hh and renamed. - (ly_grob_array2scm): New function. - -2002-07-23 Juergen Reuter +2002-08-31 Han-Wen Nienhuys - * lily/ambitus-engraver.cc: bugfix: create ambitus grob during - process_music phase - -2002-07-23 Han-Wen - - * lily/separation-item.cc (width): cache extent in extent-X - - * lily/spacing-spanner.cc (standard_breakable_column_spacing): - only add extent for non-musical column. - - * lily/accidental-placement.cc (split_accidentals): new function - (get_relevant_accidental_extent): new function - - * lily/staff-spacing.cc (next_note_correction): idem - - * lily/separating-group-spanner.cc (find_rods): use - conditional_width(). + * VERSION: 1.6.1 released - * scm/sketch.scm: fix roundfilledbox definition + * lily/kpath.cc: + * lily/lily-guile.cc: macosx fixes. - * lily/lily-guile.cc (robust_list_ref): be sensible with negative - argument. This fixes too-long stems on half and quarter notes. + * lily/script-column.cc (before_line_breaking): use stable sorting + algorithm to preserve script ordering. + (grob_script_priority_less): new function -2002-07-23 Jan Nieuwenhuizen - - * Documentation/index.texi: Add, fix, change some links and names, - including dump of wiki wiki. + * lily/script-engraver.cc (process_music): + * lily/text-engraver.cc (process_acknowledged_grobs): + * lily/fingering-engraver.cc (make_script): don't use direction + for script-priority. This fixes orderings for multiple down + script/fingering. - * Documentation/GNUmakefile (local-WWW): Slurp wiki. + * scripts/ly2dvi.py (run_lilypond): don't exit if LilyPond fails, + but try to assemble the files anyway. - * buildscripts/wiki-slurp.py: New file. Accept multiple pattern. - (unwiki): Replace local urls with too. + * input/regression/prefatory-empty-spacing.ly: new file. - * Documentation/GNUmakefile (wiki-dump): New target. + * lily/break-align-interface.cc (do_alignment): translate last + break-align-group if it is invisible/empty. - * Documentation/header.html.in: Link to Documentation/index - renamed to Index (was other...). + * scm/grob-description.scm (all-grob-descriptions): LeftEdge is + not a BreakAlignGroup. Do not use + Break_align_interface::alignment_callback - * Documentation/regression-test.tely: Remove. +2002-08-30 Han-Wen Nienhuys - * make/lysdoc-targets.make (local-WWW): Add default targets .ps.gz - and .pdf. + * scripts/lilypond-book.py (LatexPaper.find_latex_dims): give more + meaningful error if running latex fails -2002-07-22 Han-Wen + * Documentation/user/refman.itely (Tablatures): small + corrections. Thanks to Karl Berry - * VERSION: 1.5.69 released - - * lily/accidental-placement.cc (position_accidentals): document - two bugcases. +2000-08-30 Heikki Junes - * lily/skyline.cc (skyline_meshing_distance): bugfixes. + * make/lilypond.mandrake.spec.in: Mandrake adaptations from + redhat spec and rpm-skeleton found in Mandrake's home page. -2002-07-22 Jan Nieuwenhuizen +2002-08-29 Graham Percival - * input/regression/abe.ly: - * input/test/transposing.ly: Remove mention of mudela. + * Documentation/user/tutorial.itely: editorial changes (spelling, + grammar, etc) of the "Fine tuning" section. - * scripts/lilypond-book.py (make_pixmap): Don't use quiet_system, - ie, don't redirect PNG output to /dev/null. Fixes lys-to-tely - documents. +2002-08-29 Juergen Reuter - * input/test/mark.ly: - * Documentation/user/refman.itely: Re-enable \mark #'() example. + * input/test/ancient-font.ly, mf/parmesan-heads.mf, + scm/output-lib.scm, lily/note-head.cc: bugfix: make neume note + heads accessible + +2002-08-29 Mats Bengtsson - * lily/parser.yy: Revert to MARK scalar. + * scm/music-functions.scm (unfold-repeats): Call new + shift-duration-log correctly also for unfolded repeats. -2002-07-21 Han-Wen +2002-08-27 Mats Bengtsson - * lily/accidental.cc (accurate_boxes): add function to represent - flat with 2 boxes. Improves flat-flat accidental spacing. + * tex/titledefs.tex: Define \fetafont for use in titles. - * lily/accidental-placement.cc (stagger_apes): try to arrange accs - in a C form, with the top accidental closet to the chord. + * scm/music-functions.scm (shift-duration-log), lily/parser.yy + (Repeated_music): Handle dots correctly for \repeat tremolo. - * lily/stem.cc (get_default_stem_end_position): don't crash if - lengths not set. - (get_default_stem_end_position): idem for stem-shorten. +2002-08-26 Han-Wen Nienhuys - * mf/feta-toevallig.mf: enlarge flat bbox. + * lily/score.cc: remove paranoia code. - * input/regression/lyrics-extender.ly: new file. + * lily/parser.yy: don't include malloc.h - * lily/lyric-extender.cc (brew_molecule): don't add - right-trim-amount if extender is broken. +2002-08-25 Han-Wen Nienhuys - * scripts/ly2dvi.py (global_latex_preamble): bugfix (thanks Werner). + * flower/polynomial.cc (operator +): optimize += operator. No + copying. -2002-07-21 Jan Nieuwenhuizen + * lily/source-file.cc (get_line): use binary search to determine + line number. This kills another quadratic time-complexity term. - * Documentation/index.texi: Add pointers to new regression and - test documents. + * lily/include/source-file.hh (class Source_file): add newline_locations - * Documentation/user/converters.itely: - Documentation/user/invoking.itexi: Some small fixes for uniform - usage example. + * flower/include/array.icc (binary_search_bounds): new function. - * input/allfontsize.ly, size*.ly: New files, moved from - input/regression. - - * input/font20.ly, font-body.ly: New files, moved from input/test. - - * input/font*.ly: New files, moved from input/test. +2002-08-22 Han-Wen Nienhuys - * input/test/*.ly: Remove empty files, fix broken ones. + * input/regression/tuplet-properties.ly (texidoc): bugfix - * input/test/different-time-signatures.ly: Add FIXME marker; - comment-out broken code. + * input/regression/beam-shortened-lengths.ly: add \stemUp - * Documentation/regression-test.tely: Comment-out, add - obsolete-marker and url to regression-test-dir. + * Documentation/user/refman.itely: - * input/test/GNUmakefile: - * input/regression/GNUmakefile: Add rule for lys-to-tely.py. +2002-08-22 Tom Cato - * input/regression/+.ly: - * input/test/+.ly: New file. + * Documentation/user/refman.itely: spelling fix. - * input/test/cue-notes.ly: better example +2002-08-21 Jan Nieuwenhuizen - * Documentation/user/refman.itely (Font selection): font size doco + * lily/main.cc (setup_paths): Prepend dirs to search path, instead + of appending. Fixes build when typical LilyPond 1.4 leftovers clutter + the system. - * input/mutopia/F.Schubert/standchen.ly: note bugfix + * flower/include/file-path.hh (prepend): New function. - * lily/stem.cc: rewrite of scoring to give sane results on knee - beams. +2002-08-20 Han-Wen Nienhuys - * lily/beam.cc (set_stem_lengths): extend stems for gapped tremolo - beams. - (connect_beams): chop off beaming outside the beam. Fixes problem - with tremolo beams. + * Documentation/misc/ChangeLog-1.5: move 1.5 ChangeLog to misc/ - * lily/score-engraver.cc (initialize): error if feta20.afm + * lily/completion-note-heads-engraver.cc (class + Completion_heads_engraver): don't be confused by polyphonic rhythms. -2002-07-19 Han-Wen + * input/regression/completion-heads-polyphony.ly: new file. - * scm/engraver-documentation-lib.scm - (document-property-operation): add properties to context - documentation. +2002-08-19 Han-Wen Nienhuys - * scm/documentation-lib.scm (pad-string-to): align info menus. + * GNUmakefile.in (web-ext): distribute .ly with web tarball too. + This means that the 1.6 binaries must be rebuilt. -2002-07-18 Jan Nieuwenhuizen + * make/lilypond-vars.make: banish ps-to-X scripts - * debian/GNUmakefile: Remove lilypond.links. - - * debian/: Debian patch (Anthony Fok). - - * debian/lilypond.links: Remove, as per Anthony's request. + * make/generic-rules.make: remove blurb rule. - * aclocal.m4: Regenerate. - - * stepmake/aclocal.m4: Add --with-kpathsea-include, - --with-kpathsea-lib options. - - * scripts/mup2ly.py: Cut-n-paste include missing lilylib. - - * stepmake/stepmake/compile-vars.make: - * stepmake/stepmake/executable-rules.make: - * stepmake/stepmake/python-module-rules.make: - * stepmake/stepmake/shared-library-rules.make: Use ALL_LDFLAGS, to - guard agains user override of LDFLAGS. - - * Documentation/user/refman.itely: Compile fix for \mark #'(music ...). - - * Documentation/user/internals.itely: Use ly-set-mus-property!. - - * cygwin/mknetrel: New file. - - * cygwin: New directory. Moved Cygwin stuff from - Documentation/windows. - - * Documentation/windows/fix-suffixes.sh: - * buildscripts/walk.sh: Junk. - - * aclocal.m4: Regenerate. - - * buildscripts/walk.sh: Remove. - - * stepmake/stepmake/topdocs-targets.make: - * stepmake/stepmake/help2man-rules.make: - * stepmake/stepmake/generic-vars.make: - * stepmake/make/stepmake.make: - * Documentation/user/GNUmakefile: - * make/stepmake.make: - * make/lilypond-vars.make: - * GNUmakefile.in: - * stepmake/aclocal.m4: Remove builddir cruftyness. - - * stepmake/stepmake/c++-rules.make: Use ALL_CXXFLAGS, to guard - agains user override of CXXFLAGS. - - * stepmake/stepmake/c++-vars.make (ALL_CXXFLAGS): Include CXXFLAGS. - - * stepmake/stepmake/c-rules.make: Use ALL_CFLAGS, to guard - against user override of CFLAGS. - - * stepmake/stepmake/c-vars.make (ALL_CFLAGS): Include CFLAGS. - -2002-07-17 Han-Wen - - * GNUmakefile.in: distribute lexer-gcc-3.1.sh as well - - * lily/music.cc (LY_DEFINE): change ly-set-mus-property to - ly-set-mus-property! - - * lily/grob.cc (LY_DEFINE): change ly-set-grob-property to ly-set-grob-property! - - * lily/parser.yy (Repeated_music): shift duration log for tremolo - repeats, instead of klutzing around. - - * lily/chord-tremolo-engraver.cc (acknowledge_grob): set X parent - of stem tremolo grobs. - - * scm/music-functions.scm (shift-duration-log): new function, add - to duration log of all notes. - - * lily/duration.cc: add compression factor arguments to - make-duration. - compression-factor, dot-count, duration-log: add scheme functions. - - * lily/mark-engraver.cc (process_music): allow \mark to take a - number as argument as well. - -2002-07-16 Han-Wen - - * lily/rest.cc (after_line_breaking): only translate the whole - rest if we have more than 1 staff line - -2002-07-16 Han-Wen Nienhuys - - * VERSION: release 1.5.68 - - * scripts/lilypond-book.py: fixes by Tom Cato Amundsen. - -2002-07-15 Han-Wen Nienhuys - - * lily/beam-quanting.cc (score_forbidden_quants): split beam - quanting functionality. - (quanting): argh. Forgot how linear interpolation works. Bugfix. - - * Documentation/index.texi (Top): add whole-big-page documentation. - - * lily/side-position-interface.cc (general_side_position): - Subtract parent offset iso. adding it. (Huh? How could this have - worked?) - - * lily/clef-engraver.cc (stop_translation_timestep): add staff to - OctavateEight support. - - * scripts/lilypond-book.py: add smallverbatim option. - - * lily/beam.cc (quanting): bugfix. Behave sanely when no visible - stems. - - * lily/accidental-placement.cc (position_accidentals): add padding - property. Increase default setting to 0.2. - -2002-07-15 Han-Wen - - * lily/paper-column.cc (before_line_breaking): urg. bugfix. - - * lily/separating-line-group-engraver.cc (finalize): don't replace - right-items, but add to list. This fixes a bug when a staff ends - with cross-staff voice switching away. - -2002-07-14 Han-Wen - - * input/mutopia/GNUmakefile: move mutopia/ to input/mutopia/ - - * lily/beam.cc (quanting): add explicit support for cross-staff - beaming: make slope penalty larger. - - * lily/beam.cc: use common refpoints throughout. This fixes many - cross staff issues. - - * lily/paper-column.cc (before_line_breaking): bug fix. - - * lily/volta-engraver.cc (process_music): do something sensible if - no staffs found. - - * scripts/lilypond-book.py (make_pixmap): opps. Do png conversion - only once. - - * Documentation/user/refman.itely (Global layout): made section on - global layout, added spacing documentation. - - * lily/staff-symbol.cc (brew_molecule): change ragged right for - staff symbols. See comments. - -2002-07-14 Jan Nieuwenhuizen - - * lily/voice-devnull-engraver.cc (acknowledge_grob): Use proper - spelling for always. In solo a due mode, kill spanners when the - other thread has solo. - - * lily/thread-devnull-engraver.cc (acknowledge_grob): In solo a - due mode, kill everything when the other thread has solo. - - * lily/a2-engraver.cc (acknowledge_grob): In solo a due mode, do - not set directions when we have solo. - - * lily/part-combine-music-iterator.cc (process): Set property - "othersolo" if the other thread has solo. - -2002-07-13 Han-Wen - - * VERSION: 1.5.67 released. - - * lily/beam.cc (calc_stem_y): fix beams on quarter notes. - - * lily/stem-tremolo.cc (brew_molecule): add code for stem tremolos. - - * lily/auto-beam-engraver.cc (create_beam_p): remember Beam - settings at the start of a potential auto beam. - - * lily/include/sequential-iterator.hh (class Sequential_iterator): - bugfix: protect music list from GC. - - * Documentation/user/introduction.itely: misc fixes. - - * scripts/ly2dvi.py (run_latex): show latex error log. Ask for - bugreport if lilypond is killed by a signal. - - * input/regression/beam-funky.ly: new file - - * lily/input-smob.cc (make_input): GUILE 1.7 compatibility fixes. - - * lily/beam.cc: complete rewrite of multiplicity. This fixes 16th - knees code. - (quanting): add french beaming support (property french-beaming) - (stem_beams): removed. - -i2002-07-12 Mats Bengtsson - - * lily/beam.cc (after_line_breaking): Set correct stem lengths - also when beam positions are set manually. - (consider_auto_knees): Do not use automatic knees if the directions - are set manually by the user. - -2002-07-12 Han-Wen - - * input/regression/grace-auto-beam.ly: new file - - * input/regression/grace-unfold-repeat.ly: new file - - * lily/auto-beam-engraver.cc (test_moment): never start on grace moments. - - * lily/forbid-break-engraver.cc (start_translation_timestep): skip - grace notes for break-forbidding. Breaks during grace notes are - handled by Bar_engraver. - - * lily/unfolded-repeat-iterator.cc: Reimplement - Unfolded_repeat_iterator, Volta_repeat_iterator using - Sequential_iterator. All grace functionality from {} carries over - to repeats as well. - - * lily/sequential-iterator.cc: new file: form baseclass for - sequential music iterator and unfolded/volta repeat iterator. - -2002-07-11 Han-Wen Nienhuys - - * lily/include/debug.hh: deprecate. - - * lily/spacing-spanner.cc (set_springs): add support for - common-shortest-duration field. - - * lily/parser.yy (translator_spec_body): allow \set in \translator - {} block. This is the same as \override, here. - - * lily/score-engraver.cc (one_time_step): don't warn about columns - when skipTypesetting == #t. - - * lily/spacing-spanner.cc (musical_column_spacing): change - ragged right function to produce natural spacing. - -2002-07-10 Han-Wen Nienhuys - - * lily/paper-column.cc (before_line_breaking): update - #'bounded-by-me field for suicided items. This fixes crazy - spacing in \partcombine scores. - -2002-07-10 Jan Nieuwenhuizen - - * config.hh.in: Add HAVE_SSTREAM. - - * configure.in: Add check for sstream header. - -2002-07-09 Mats Bengtsson - - * flower/source-file.cc: Fix compatibility with older g++. - -2002-07-09 Jan Nieuwenhuizen - - * input/twinkle.ly: Bugfix: no automaticMelismata. - -2002-07-08 Han-Wen - - * mutopia/J.S.Bach/Cembalo-Partitas/: remove - - * ly/engraver-init.ly (ScoreContext): turn on automaticMelismata - by default. - - * lily/voice-devnull-engraver.cc (try_music): - lily/thread-devnull-engraver.cc: use proper spelling for #'always. - - * lily/unfolded-repeat-iterator.cc (Unfolded_repeat_iterator): - copy here_mom_ too. This fixes an obscure bug with combining - partcombine and repeat - - * lily/chord-tremolo-iterator.cc (Chord_tremolo_iterator): copy - factor too. - -2002-07-07 Han-Wen - - * mutopia/J.S.Bach/pa.ly: remove - * mutopia/J.S.Bach/Duette/: remove - - * scm/font.scm (change-rhs-size): add support for "paper19.ly" - - * VERSION: 1.5.66 released - - * scm/grob-description.scm (all-grob-descriptions): add - item-interface where necessary - - * lily/score-engraver.cc (one_time_step): warn for grobs created - during stop_translation_timestep(). - - * lily/a2-engraver.cc: restrict acknowledged grob types. - - * lily/chord-name-engraver.cc: remove acknowledge_grob(). - - * Documentation/user/tutorial.itely: doc carnage. - -2002-07-06 Rune Zedeler - - * Documentation/user/refman.itely: Documented accidentals - (incl. bugs), subdivideBeams and drum/percussion notation. - - * lily/translator-group.cc, lily/include/translator-group.hh - (Translator_group::set_children_property): removed. - - * lily/accidental-engraver.cc: don't use - Translator_group::set_children_property. - - * lily/new-accidental-engraver.cc: Added. More correct - accidentals, but wrong spacing. - - * lily/beam-enagraver.cc, lily/auto-beam-engraver.cc: Small - subdivideBeams-fixes. - - * scm/drums.scm: Small changes/fixes in instruments and maps - -2002-07-05 Jan Nieuwenhuizen - - * lexer-gcc-3.1.sh: Fixes and more comments. - - * Documentation/topdocs/INSTALL.texi: Add comment about gcc-3.0.4 - problems. - - * lily/include/stream.hh: - * lily/include/moment.hh: - * lily/include/midi-stream.hh: - * lily/streams.cc: - * lily/scm-option.cc: - * lily/parser.yy: - * lily/my-lily-lexer.cc: - * lily/moment.cc: - * lily/midi-stream.cc: - * lily/main.cc: - * lily/lexer.ll: - * lily/includable-lexer.cc: - * flower/include/source-file.hh: - * flower/include/parray.hh: - * flower/include/dictionary.hh: - * flower/include/array.icc: - * flower/string.cc: - * flower/source-file.cc: - * flower/getopt-long.cc: gcc-3.1 fixes. - - * stepmake/stepmake/generic-targets.make: Add comment about warning. - - * lexer-gcc-3.0.patch: Add comment, and a fix for installations - that have an unpatched flex and gcc-3.1.x. - - * Documentation/topdocs/INSTALL.texi: Add comments and - instructions on gcc-3.1.x. - - * lexer-gcc-3.1.sh: New file. - - * aclocal.m4: regenerate. - - * stepmake/aclocal.m4: Version compare fix. - -2002-07-05 Han-Wen - - * ly/engraver-init.ly (RhythmicStaffContext): stems up by default. - - * lily-guile.hh: remove guile 1.3 compatibility, add 1.4 - compatibility functions. - -2002-07-05 Jan Nieuwenhuizen - - * Documentation/windows/lilypond.hint (requires): Add libintl2. - -2002-07-04 Han-Wen Nienhuys - - * VERSION: 1.5.65 released. - - * scripts/lilypond-book.py: patches by Tom Cato Amundsen. Adds - support for the columnsep when using the geometry package. - -2002-07-04 Jan Nieuwenhuizen - - * scm/grob-property-description.scm (minimum-space-pair): Remove. - - * Documentation/windows/README: - * Documentation/windows/guile-1.5.6-1.5.6.jcn2.patch: - * Documentation/windows/changelog: New file. - - * Documentation/windows/lilypond.hint (requires): libguile14 (was: - guile). - -2002-07-03 Han-Wen - - * lily/grob-property.cc (HASHING_FOR_MUTABLE_PROPS): experiment: - try hash tables for mutable properties. - - * lily/align-interface.cc: remove aligned-interface and props - minimum-space-pair extra-space - - * lily/grob-property.cc: new file move grob prop handling here. - - * lily/lily-guile.cc (ly_deep_copy): add vector support - - * lily/break-substitution.cc (do_break_substitution): add vector - support. - - * lily/spanner.cc: remove extend_spanner_over_* funcs. - -2002-07-02 Jan Nieuwenhuizen - - * stepmake/aclocal.m4 (STEPMAKE_GET_VERSION): Workaround for - broken Debian gcc version string: 'gcc (GCC) 3.1.1 20020606 - (Debian prerelease)' - -2002-07-02 Han-Wen Nienhuys - - * lily/bar-check-iterator.cc (process): change - barbarCheckNoSynchronize to barCheckSynchronize - - * Documentation/user/bugs.itexi: move to introduction, remove. - - * Documentation/user/*.itexi: general carnage/cleanage. - - * Documentation/user/internals.itely: split most of file into - internal documentation (.scm and .cc) - - * buildscripts/make-font-dir.py: put designsize in to X font - sWidth field - - * make/lilypond.redhat.spec.in: postinstall bugfix - -2002-07-02 Juergen Reuter - - * lily/ambitus-engraver.cc, lily/ambitus.cc: Various bugfixes: - avoid segfault on undefined ambitus pitch; avoid wasteful creation - of pitch smobs; defer computation of centralCPosition beyond first - timestep to catch also clefs outside of the current voice context. - -2002-07-02 Han-Wen - - * input/template/satb.ly: new file - -2002-07-01 Jan Nieuwenhuizen - - * Documentation/user/glossary.tely: Precautions for lilypond-book: - don't use spaces after @lilypond options. - - * Documentation/topdocs/INSTALL.texi (Top): Remove generic Guile - threads warning. - -2002-07-01 Han-Wen Nienhuys - - * VERSION (MAJOR_VERSION): 1.5.64 - -2002-06-30 Jan Nieuwenhuizen - - * lily/grob.cc (mark_smob): don't mark parents, explain why. - - * tex/lilyponddefs.tex: Define outputscale only once. - -2002-06-29 Jan Nieuwenhuizen - - * configure.in: Require guile 1.4 or newer (was 1.3.4?). - -2002-06-29 Han-Wen - - * lily/(phrasing-)slur-engraver.cc: remove slur{Begin|End}Attachment. - - * lily/separating-line-group-engraver.cc (acknowledge_grob): - ignore grobs with no-spacing-rods set. - - * Documentation/user/tutorial.itely (Fine tuning a piece): more tut. - - * scm/grob-description.scm (all-grob-descriptions): sort list - -2002-06-27 Jan Nieuwenhuizen - - * Documentation/user/tutorial.itely (A piano excerpt): Bugfix: - remove stray brace. - - * Documentation/topdocs/FAQ.texi (Installation): Add - lilypond-devel list. Add faq about font removal. Fix faq about - generating and running ./configure. - -2002-06-26 Jan Nieuwenhuizen - - * scm/chord-name.scm (chord::name->text): Workaround: clean markup - text. - - * lily/text-item.cc (markup_text2molecule): Bugfix: raise only once. - - * input/test/ambitus.ly: - * lily/ambitus-engraver.cc: - * lily/ambitus.cc: - * lily/include/ambitus.hh: New file. - - * GNUmakefile.in (local-clean): Also remove builddir-setup's symlinks. - -2002-06-25 Juergen Reuter - - * input/test/ambitus.ly, lily/ambitus-engraver.cc, - lily/ambitus.cc, lily/include/ambitus.hh, ly/engraver-init.ly, - scm/basic-properties.scm, scm/grob-description.scm, - scm/grob-property-description.scm: Add support for ambitus. - -2002-06-24 Han-Wen Nienhuys - - * lily/text-spanner.cc: add some props to interface (patch - courtesy Chris J). - -2002-06-24 Jan Nieuwenhuizen - - * lily/text-spanner.cc (setup_pedal_bracket): Bugfix: only - dereference valid Grob. - - * configure.in: Quoting fixes. - -2002-06-24 Han-Wen - - * VERSION: 1.5.63 released - - * lily/grob-scheme.cc: new file - - * lily/break-substitution.cc: split up break substitution - functionality, and make a special constant stack-space version for - lists of grobs. This should fix the problems of lily in - combination with pthreads/qthreads. - - * lily/grob.cc (mark_smob): bugfix: mark other parent too. - -2002-06-23 Chris Jackson - - * lily/text-spanner.cc (setup_pedal_bracket): - * lily/piano-pedal-engraver.cc (create_bracket_grobs): - Fix the lengths of mixed-style piano pedal brackets. - -2002-06-23 Jan Nieuwenhuizen - - * Documentation/user/tutorial.itely (First steps): Add missing - quotation. - - * Documentation/topdocs/INSTALL.texi (Top): Add some warnings - about guile --with-threads. Hopefully this issue can be resolved - rsn, but maybe we should even add warnings for the standard Debian - and Red Hat packages? - - * configure.in: Warn if guile is configured to use threads. Maybe - we should make this an error (ie, add to REQUIRED list?) - - * config.make.in (PACKAGE_NAME): - (PACKAGE, package): Don't hardcode. - - * VERSION (PACKAGE_NAME): Typo fix. - -2002-06-23 Han-Wen - - * input/tutorial/brahms-*.ly: new tutorial files. - - * Documentation/user/tutorial.itely: fixes. Extend cheat sheet. - - * scm/script.scm (default-script-alist): fermata is up. - - * lily/dynamic-engraver.cc (stop_translation_timestep): stop - dynamic line spanner when there is no crescendo to connect. - - * lily/tie.cc (get_control_points): add test to avoid flat ties. - -2002-06-22 Han-Wen - - * lily/note-collision.cc (check_meshing_chords): don't crash if no - stems. - - * scm/music-functions.scm (toplevel-music-functions): new - definition. Functions to apply automatically. Removes the need for - explicitly doing \apply #voicify-music - - * lily/grob.cc (do_break_substitution): rename function, use - global var for criterion argument. Reduces stack usage a little. - - * ly/engraver-init.ly (StaffContext): add Instrument_engraver - - * scripts/convert-ly.py, lily/*.cc, scm/*.scm: change - visibility-lambda to break-visibility - -2002-06-21 Jan Nieuwenhuizen - - * input/bugs/part-combiner.ly: New file. - - * lily/include/spacing-interface.hh: New file. - - * lily/include/spaceable-element.hh: Remove. - - * input/test/script-priority.ly: New file. - -2002-06-20 Han-Wen - - * lily/system.cc (output_lines): kill grobs that are only for spacing. - -2002-06-20 Jan Nieuwenhuizen - - * lily/fingering-engraver.cc (make_script): - * lily/script-engraver.cc (process_music): - * lily/text-engraver.cc: - (process_acknowledged_grobs): Remove hard coded script-priority. - - * flower/warn.cc: Cleanup. - - * lily/voice-devnull-engraver.cc: Also eat multi-measure rest, a - spanner now. - - * aclocal.m4: Regenerate. - - * stepmake/aclocal.m4: Also set GUILE_PATCH_LEVEL. - - * config.hh.in: Only set GUILE_MAJOR_VERSION if necessary. - * lily/include/lily-guile.hh: Only include config.h if necessary. - - * Changelog: cvs changes ml archive test #8. - - * lily/slur-engraver.cc: Layout fix. - -2002-06-19 Han-Wen Nienhuys - - * ly/engraver-init.ly (RhythmicStaffContext): add - Dot_column_engraver, resurrect barlines - - * VERSION: 1.5.62 released. - - * lily/engraver-group-engraver.cc (do_announces): rename - create_grobs () to process_acknowledged_grobs(). - - * lily/grob.cc (programming_error): add programming_error with - origin location. - - * lily/tuplet-bracket.cc (parallel_beam): robustness check, don't - fail if a beam doesn't have stems. - - * lily/engraver-group-engraver.cc (do_announces): scary change in - calling convention of create_grobs(): no create_grobs() call - before acknowledge_grobs(). - - * lily/sequential-music-iterator.cc (skip): add support for grace - notes. - - * lily/music.cc (Music): fix very subtle and nasty memory - corruption bug. Typical symptom: "programming_error: Rhythmic_req - has no duration" - - * mutopia/claop.py: new file: CLA(O)P II by Peter Wallin. - -2002-06-19 Han-Wen - - * ly/engraver-init.ly (RhythmicStaffContext): add - Dot_column_engraver - - - * lily/parser.yy: various protection fixes. Less objects are now - overprotected. - -2002-06-18 Jan Nieuwenhuizen - - * stepmake/bin/release.py (prev_ver): Bugfix: assume new diff - naming scheme. - - * Documentation/windows/zlily-profile.sh: - * Documentation/windows/post-lilypond.sh: Assume normal - prefix=/usr for lilypond. - - * lily/musical-request.cc (length_mom): Display origin with error. - - * input/test/duration-check.ly: New file. - - * lily/lily-guile.cc (ly_pair_p): [PARANOID]: Check for freed - cells. - - * lily/part-combine-music-iterator.cc (get_state): Bugfix: use - ly_symbol2scm to get a scm symbol (rather than ly_str02scm). - - * aclocal.m4: - * autogen.sh: Regenerate. - - * Documentation/topdocs/INSTALL.texi: - * configure.in: - * stepmake/configure.in: - * stepmake/aclocal.m4: Revert autoconf upgrade. Autoconf 2.53 has - a serious bug wrt AC_CONFIG_AUX_DIR (reported). Creating - ./configure once again requires autoconf == 2.13. - - * stepmake/autogen.sh: Check for autoconf == 2.13. - -2002-06-18 Han-Wen Nienhuys - - * lily/parser.yy (open_request_parens): add input locations to - open and close parens. - -2002-06-17 Chris Jackson - - * lily/tuplet-bracket.cc: - * lily/text-spanner.cc: - * lily/piano-pedal-engraver.cc: - * scm/grob-description.scm: - * scm/grob-property-description.scm: Changed the - edge-width property of brackets to edge-widen. Changed the sign of - the left element of edge-widen so a pair of equal numbers produces - a symmetrical bracket. - -2002-06-17 Han-Wen Nienhuys - - * ly/espanol.ly: added. - - * lily/simple-spacer.cc (solve): remove assert. - -2002-06-17 Han-Wen - - * lily/forbid-break-engraver.cc (class - Forbid_line_break_engraver): new engraver: forbid linebreaks - during playing notes - - * lily/spacing-spanner.cc (loose_column): add another check: don't - move around bar lines as loose columns. - - * scm/basic-properties.scm (default-break-barline): add pre-break - for .| barline - -2002-06-16 Jan Nieuwenhuizen - - * GNUmakefile.in (builddir-setup): Bugfix: include srcdir/tex as - well as mf/out as subdirs of tex, for kpathsea to find through TEXMF. - - * scripts/lilypond-book.py (environment): Bugfix: update to new - TEXMF scheme, from ly2dvi. - - * lily/lookup.cc (slur): Invoke bezier-bow. - - * scm/tex.scm (bezier-bow): - * scm/ps.scm (bezier-bow): Bezier sandwich with rounded endings - (Previously named bezier-sandwich). - - * scm/tex.scm (bezier-sandwich): - * scm/ps.scm (bezier-sandwich): Plain bezier sandwich. - - * make/lilypond.mandrake.spec.in (post): - * make/lilypond.suse.spec.in (post): - * make/lilypond.redhat.spec.in (post): Also remove parmesan fonts. - - * tex/lilyponddefs.tex: Uncomment feta character support. - - * Documentation/user/refman.itely (Pitches): Add espanol.ly - description. - - * ly/catalan.ly: Add comment about (spanish) -s suffix. - - * ly/espanol.ly: Spanish note names by Carlos Garc'ia Su'arez - . - -2002-06-14 Jan Nieuwenhuizen - - * GNUmakefile.in (short-examples): - (long-examples): Bugfix for --srcdir build. - (top-web): Rewrite weblist find command. - - * stepmake/bin/config.sub: - * stepmake/bin/config.guess: Update from latest autotools. - - * aclocal.m4: - * autogen.sh: Regenerate. - - * configure.in: - * stepmake/configure.in: - * stepmake/aclocal.m4: Run autoupdate. Creating ./configure now - requires autoconf >= 2.50. - - * stepmake/autogen.sh: Check for autoconf >= 2.50. - - * Documentation/user/refman.itely: Bugfix for tablature example. - - * Documentation/windows/compiling.texi: Update for new and - improved setup. - -2002-06-14 Han-Wen Nienhuys - - * lily/spacing-spanner.cc (find_shortest): make 1/8 configurable: - introduce base-shortest-duration - - * lily/parser.yy (music_output_def_body): don't crash when \tempo - in unexpected \midi{} is found. - -2002-06-13 Jan Nieuwenhuizen - - * stepmake/GNUmakefile.in: Don't install stepmake. This breaks - the use of make/ly.make for use as an external makefile. Probably - noone except for myself ever used this anyway. - - * stepmake/stepmake/GNUmakefile (INSTALLATION_DIR): Bugfix: Adapt - to new $datadir convention (/). - -2002-06-13 Han-Wen - - * VERSION: 1.5.61 released - - * Document/user/refman.itely: tablature doc and code updates by - Jean-Baptiste Lamy - - * input/template/piano-dynamics.ly: bugfixes. - - * lily/key-engraver.cc (try_music): read request only once. Don't - overwrite lastKeySignature. Call create_key() only once. This - fixes a bug with multiple equal key changes on polyphonic staffs. - -2002-06-12 Mats Bengtsson - - * scm/grob-description.scm: Add side-position-interface to TextSpanner - - * scm/grob-property-description.scm: Document the trill line type. - -2002-06-12 Jan Nieuwenhuizen - - * stepmake/stepmake/generic-vars.make: - * make/lilypond-vars.make: - * GNUmakefile.in (builddir-setup): New setup for builddir run. - Fixes LilyPond run from builddir for --srcdir builds. - - * Documentation/windows/GNUmakefile (OUT_PROFILES): Bugfix for - --srcdir build. - -2002-06-12 Han-Wen - - * scm/grob-description.scm (all-grob-descriptions): add - font-family to RehearsalMark - - * scm/drums.scm: move over definitions from drum-pitch-init.ly - - * lily/volta-bracket.cc (brew_molecule): bugfix, don't do anything - if glyph not set. - -2002-06-12 Heikki Junes - - * lilypond-mode.el: Propose saving before applying a command: - for saved buffer set default command to LilyPond. - -2002-06-11 Jan Nieuwenhuizen - - * buildscripts/mutopia-index.py (headertext_nopics): Add missing - variable. - - * Documentation/windows/lilypond.hint: Renamed (previously setup.hint). - - * Documentation/windows/lilypond-doc.hint: New file. - - * GNUmakefile.in: Forward port: Add toplevel target install-html-doc. - Bugfixes for --srcdir html-doc build. - - * make/lilypond-vars.make (LILYPOND_BOOK_INCLUDES): Forward port: - Bugfix: Include $(builddir)/mf/out (was $(srcdir)/mf/out. - -2002-06-10 Han-Wen - - * ly/script-init.ly (pralldown): add some scripts. - - * Documentation/user/refman.itely: many edits. - -2002-06-09 Han-Wen - - * lily/tuplet-bracket.cc (brew_molecule): don't translate in Y - direction, this breaks staffline avoidance of the bracket when - they're horizontal. - -2002-06-08 Mats Bengtsson - - * scripts/midi2ly.py: Fix handling of -o - -2002-06-08 Han-Wen - - * lily/molecule.cc (translate): set max distance to 100 cm. - -2002-06-07 Han-Wen Nienhuys - - * VERSION: 1.5.60 released - - * lily/beam.cc: tremolo fix. - - * scripts/convert-ly.py: add tuplet-X-visibility rules. - add VerticalExtent -> verticalExtent rules. - - * lily/axis-group-engraver.cc: consistent case for - XxxxVerticalExtent properties. - - * Documentation/user/refman.itely (Tuplets): update - tuplet-X-visibility properties. - - * input/test/defaultbars.ly: Corrected (thanks Mats) - -2002-06-05 Han-Wen Nienhuys - - * lily/beam.cc (shift_region_to_valid): fix stupido bug. - - * buildscripts/lilypond-profile.sh: override settings if - LILYPONDPREFIX is set. - -2002-06-04 Mats Bengtsson - - * scripts/ly2dvi.py (non_path_environment): Fix typo - -2002-06-03 Heikki Junes - - * lilypond-mode.el: Extend "Quick notes" containing note tuples. - - * lilypond-font-lock.el: Add fixes and comments to syntax-table. - -2002-06-03 Han-Wen - - * lily/beam-engraver.cc (class Grace_beam_engraver): derive from - beam-engraver: use different engraver so we can mix normal and - grace beams. - -2002-06-01 Han-Wen - - * lily/beam.cc (shift_region_to_valid): Try to shift positions - after slope-damping and concaveness check, so that short-stems are - not violated. - -2002-05-31 Jan Nieuwenhuizen - - * stepmake/aclocal.m4: Fix for ash as /bin/sh. - -2002-05-31 Han-Wen - - * VERSION: 1.5.59 released - - * scripts/musedata2ly.py (Parser.parse_note_line): add dots. Add - notice that missing features are exercise for user. - -2002-05-30 Jan Nieuwenhuizen - - * lily/beam.cc (score_stem_lengths): Bugfix for knees: use correct - (but alas, not partly precomputed) value for current_y when - calculating stem length demerits. - (calc_stem_y): Temporary precomputed factors fix. - - * lily/stem.cc (calc_stem_info): Take multiplicity into account - for shortest_y too. - - * input/bugs/melisma-tie-rest.ly: New file. - -2002-05-30 Han-Wen - - * lily/stem.cc (calc_stem_info): remove min_y member, rename - stuff. Remove kneeing stuff. - - * lily/beam.cc (brew_molecule): remove beam direction. Lots of - twiddling - -2002-05-29 Jan Nieuwenhuizen - - * scm/sketch.scm: - * scm/ps.scm: - * scm/pdftex.scm: - * scm/pdf.scm: - * scm/tex.scm: Add check for Guile-1.4.1. Guile includes - patch-level of version in minor-version string. Arg. - -2002-05-29 Han-Wen - - * ly/engraver-init.ly (TabStaffContext): - enable TabStaff by default. - - * Tablature support by Jean-Baptiste Lamy - -2002-05-28 Jan Nieuwenhuizen - - * config.hh.in: Remove duplicate DIR_DATADIR entry. - - * aclocal.m4: Regenerate. - - * stepmake/aclocal.m4: Append $FULL_VERSION to datadir. - -2002-05-25 Heikki Junes - - * lilypond-mode.el: Added Deutsch notes and fixed "Quick notes". - - * lilypond-mode.el: Write notes with fewer keystrokes trough a - "Quick notes"-interface. - -2002-05-26 Jan Nieuwenhuizen - - * input/regression/non-empty-text.ly: Update example with outdated - comment. - -2002-05-25 Han-Wen - - * scripts/convert-ly.py: add textNonEmpty rule - - * lily/text-engraver.cc (create_grobs): remove textNonEmpty - -2002-05-24 Jan Nieuwenhuizen - - * lily/text-item.cc (markup_text2molecule): Junk ugly lookahead by - using translate-robust add_molecule instead of add_at_edge. - Bugfix for #(lines (finger "" "1")). - -2002-05-24 Han-Wen - - * lily/stem-tremolo.cc (brew_molecule): clean up and fix stem - tremolo placement. - -2002-05-22 Han-Wen - - * VERSION: 1.5.58 - - * Documentation/user/refman.itely: Bugfix: add node Repeats and - MIDI. Regenerate menu. Fix @end example. - - * lily/accidental.cc: Add cautionary-style to interface. - - * mf/feta-beugel.mf (code): use autometric macros for braces. - This fixes input/bugs/braces. - - * lily/afm.cc (count): return numOfChars, not size of array - (always equals 256.) - - * lily/script.cc (before_line_breaking): postpone setting the - X-parent of vertical scripts. This fixes the case of scripts on - chords with seconds - -2002-05-21 Han-Wen - - * scm/grob-description.scm: fix alignment of barnumber: make sure - it doesn't hit the G-clef. - - * input/mozart-hrn3-defs.ly (startGraceMusic): typo (it's - startGraceMusic not startGraceContext). - -2002-05-20 Jan Nieuwenhuizen - - * stepmake/autogen.sh: Check for autoconf2.13, and abort if not - found. - -2002-05-20 Han-Wen - - * lily/accidental-engraver.cc: remove old accidental engraver, - move new one to accidental-engraver.cc. - - * lily/local-key-item.cc: remove file - - * lily/include/local-key-item.hh: remove file - - * scripts/ly2dvi.py (make_preview): add --preview-resolution - option. - - * lily/accidental.cc (brew_molecule): support for cautionary - accidentals. - - * lily/note-head.cc (internal_brew_molecule): warn if note head - not found. - - * lily/time-signature.cc (special_time_signature): remove warning - about time signature. - - * lily/spacing-spanner.cc (musical_column_spacing): Prevent - reverse springs by limiting fixed-note space. - -2002-05-19 Jan Nieuwenhuizen - - * stepmake/aclocal.m4: Bugfix: complain if program not found. - - * scripts/update-lily.py (next_version, prev_version, diff_name): - New function. Patches now named name-prev-latest.diff.gz. - Bugfix: import shutil. - -2002-05-19 Han-Wen - - * input/tutorial/sammartini.ly: fix and document autochange - weirdness. - - * scm/pdftex.scm: resurrect PDFTeX output. Still doesn't work, but - does produce .pdftex files. - - * lily/note-collision.cc (check_meshing_chords): move file from - collision.cc, implement merged note heads (there you go, Drarn :-) - - * input/regression/collision-heads.ly: new file - - * VERSION: 1.5.57 released. - -2002-05-18 Juergen Reuter - - * mf/parmesan-heads.mf, scm/grob-description.scm, - scm/grob-property-description.scm, scm/interface-description, - lily/include/my-lily-parser.hh, lily/include/ligature-head.hh, - lily/include/mensural-ligature.hh, lily/include/lily-proto.hh, - lily/include/ligature-engraver.hh, - lily/include/ligature-bracket.hh, lily/parser.yy, - lily/ligature-bracket-engraver.cc, lily/mensural-ligature.cc, - lily/mensural-ligature-engraver.cc, lily/note-heads-engraver.cc, - lily/ligature-head.cc, lily/ligature-engraver.cc, - lily/ligature-bracket.cc, input/test/mensural-ligatures.ly: - implemented white mensural ligatures (still with a big list of - TODOs) - - -2002-05-19 Han-Wen - - * lily/*.cc: use LY_DEFINE everywhere. Move doc strings from - Documentation/user/internals.itely. - - * lily/function-documentation.cc: new file. Infrastructure for - self documenting Scheme functions. - -2002-05-18 Han-Wen - - * lily/stem.cc (calc_stem_info): bugfix for less ugly knees. - -2002-05-17 Han-Wen - - * scripts/lilypond-book.py (re_dict): fix regexps; don't combine ? - and * (as in "([^>]*)?") - -2002-05-17 Jan Nieuwenhuizen - - * Documentation/topdocs/INSTALL.texi: Update GCC, Flex and GUILE info. - Add info about CVS. Stable/development are currently 1.4/1.5, - both at lilypond.org. - - * autogen.sh: Generate. - - * stepmake/configure: - * configure: Regenerate. - - * stepmake/stepmake/automatically-generated.sub.make: Keep - original first line. - - * stepmake/stepmake/toplevel-targets.make (autogen.sh): Add rule. - - * stepmake/stepmake/generic-targets.make (configure): Generate - using autogen.sh. - - * GNUmakefile.in (SCRIPTS): - * stepmake/GNUmakefile.in (SCRIPTS): Add autogen.sh - - * stepmake/autogen.sh: New file. - - * configure: Check for g++ >= 2.95. - - * stepmake/aclocal.m4: Fixes for FlexLexer.h, Python headers. GNU - c/c++ version checking. - - * flower/include/string.hh: Typo fix. - - * lily/include/midi-item.hh: Remove stray i. - - * Documentation/windows/GNUmakefile: Avoid collapsed directory - constructs '//'. - - * stepmake/bin/install-dot-exe.sh: Filter collapsed directory - constructs '//' from arguments. - -2002-05-17 Han-Wen - - * scm/lily.scm (ly-load): show SCM filenames if verbose. - - * lily/lily-guile.cc (init_functions): add ly-verbose function. - - * lily/main.cc (setup_paths): remove LILYINCLUDE support. - - * flower/include/{pointer,tuple}*: removed. - - * VERSION: released 1.5.56 - - * scm/music-functions.scm (check-start-chords): function to check - for chords without \context. Apply automatically from parser. - -2002-05-16 Han-Wen - - * lily/bar-line.cc: remove index entries. Texinfo can't handle : - in index entries. - - * scm/output-lib.scm: fix ez notation stems. - - * lily/paper-outputter.cc: various fixes to speed up compilation. - -2002-05-16 Mats Bengtsson - - * scripts/lilypond-book.py: Don't import pre for Python >= 2.2 - -2002-05-16 Jan Nieuwenhuizen - - * scripts/lilypond-book.py (determine_format): Bugfix: correctly - determine latex input. - - * stepmake/bin/install-sh: Include latest from libtool. - - * stepmake/configure: - * configure: Regenerate. - - * config.make.in: Remove dead variables. Add OPTIONAL/REQUIRED lists. - (USER_CFLAGS): Bugfix, include CPPFLAGS. - - * configure.in: Use new OPTIONAL/REQUIRED mechanism. - - * stepmake/aclocal.m4: Add mechanism for checking OPTIONAL or - REQUIRED programs and version. Try to continue configuring, list - missing programs at the end, but don't generate a GNUmakefile if - REQUIRED programs are missing. Cleanups, junk obsolete stuff. - Fix Cygwin detection, drop '32' suffix. Hoping this is not too - fancy for some older systems. - -2002-05-16 Han-Wen - - * lily/score-engraver.cc (typeset_all): sanity check for items - that are Y parent to spanner. - - * lily/piano-pedal-engraver.cc (create_bracket_grobs): fix broken - pedal spanners. - -2002-05-15 Han-Wen Nienhuys - - * lily/*.cc: remove as many iostream use as possible. - - * flower/ : remove text-db, text-stream, data-file. - -2002-05-15 Han-Wen - - * scripts/lilypond-book.py: add --no-music option: strip all blocks. - (completize_preamble): don't barf if no preamble present. - (do_file): allow extensions on --output - - * scripts/ly2dvi.py (make_preview): make automatic preview of - first system. Small cleanups. - -2002-05-13 Han-Wen Nienhuys - - * scripts/lilypond-book.py (make_pixmap): output png directly. - - * mf/GNUmakefile (INSTALLATION_OUT_FILES4): create and install - fonts.dir file. - - * lily/parser.yy (My_lily_parser): comment out code. (Causes - problems with recent bison releases). - - * make/lilypond.redhat.spec.in: add pfa fonts to X. - -2002-05-07 Heikki Junes - - * lilypond-font-lock.el: Fixes the order of the note name list. - -2002-05-06 Jan Nieuwenhuizen - - * scripts/lilypond-book.py: Add html/dtml output, pseudo-filter - capability, --verbose option, rlimit hack. - -2002-05-05 Han-Wen Nienhuys - - * lily/piano-pedal-engraver.cc: cleanups. - - * lily/accidental.cc (after_line_breaking): add break tie - reminders. - - * lily/text-engraver.cc (try_music): don't typeset fingerings - -2002-05-05 Heikki Junes - - * lilypond-font-lock.el: Handle \breve as a note (rest) duration. - -2002-05-04 Han-Wen - - * lily/*.cc: change gh_str02scm() to ly_str02scm(). - - * lily/spacing-spanner.cc (note_spacing): Bound - shortest-playing-length by the distance to next note. This should - fix chord tremolo spacing. - - * VERSION: 1.5.55 released - - * lily/stem.cc (off_callback): invisible stem over whole note is - centered on note now. - - * lily/stem-engraver.cc (acknowledge_grob): X_AXIS Parent of - stem-tremolo is stem now. - - * input/mozart-hrn*.ly: many corrections. - - * lily/dynamic-engraver.cc (acknowledge_grob): add Scripts to - support for dynamic scripts. - - * lily/accidental-placement.cc (position_accidentals): check for - collisions as well: should avoid those heads too. - - * lily/beam.cc (check_concave): allow undefined gap and - threshold. Change the meaning of threshold/gap == 0.0. - (check_concave): skip Stolba concaveness check if we have a knee - on outer stems. - -2002-05-03 Mats Bengtsson - - * lily/chord-tremolo-engraver.cc (try_music): Handle chord - tremolos of dotted duration. - -2002-05-03 Han-Wen - - * mf/feta-klef.mf: more twiddling with G clef. Almost straight - downstroke again. Sigh. - - * lily/dynamic-engraver.cc (acknowledge_grob): center dynamic - script on note head. - -2002-05-02 Han-Wen - - * lily/slur.cc (add_column): allow slur over rest. - -2002-04-27 Han-Wen - - * lily/beam.cc: move scoring constants out of code - -2002-04-25 Han-Wen - - * mf/feta-nummer.mf: scalability fixes. - - * mf/feta-nummer-code.mf: fixes for 5, 8. - - * mf/feta-klef.mf: G clef fixes. - -2002-04-25 Jan Nieuwenhuizen - - * scripts/ly2dvi.py: Mats' fix. Try to import pre if available. - - * scripts/lilypond-book.py: %Newline, rather than glue macros - after \end{verbatim}. - -2002-04-24 Jan Nieuwenhuizen - - * Documentation/user/lilypond-book.itely: - * scripts/lilypond-book.py: Add options [no]indent, linewidth and - noinline. - - * input/mozart-hrn3-defs.ly (startGraceContext): Customize grace init. - - * scm/grob-property-description.scm (beam-space): Junk. - - * lily/beam.cc (space_function): New method. - (get_interbeam): Call space-function. - - * scm/grob-description.scm (Beam): Initialize space-function with - Beam::space_function. - - * ly/grace-init.ly (startGraceMusic, stopGraceMusic): Set/revert - Beam.space-function. Don't quantise grace beams. - -2002-04-23 Han-Wen Nienhuys - - * VERSION: 1.5.54 released - - * mf/feta-nummer-code.mf (code): tweaks for three, fixes for 6 - bulb. - - * Documentation/index.texi: add PDF links. - - * Documentation/user/GNUmakefile (PDF_FILES): add PDF files to website. - - * lily/system-start-delimiter-engraver.cc (acknowledge_grob): - compare #'glyph as strings. - - * scripts/lilypond-book.py: fix by Mats. Try to import pre if available. - - * scripts/ly2dvi.py (setup_environment): fix by Mats. - - * lily/stem.cc (head_count): Change function name. Change property - to #'note-heads i.s.o. #'heads. - (position_noteheads): Kern noteheads for invisible stems. - (before_line_breaking): Do position_noteheads() for whole note - heads too. - - * lily/accidental-placement.cc (position_accidentals): First - determine refpoints, only then determine extents. - -2002-04-22 Han-Wen Nienhuys - - * lily/accidental-placement.cc (position_accidentals): use all - note heads for note head-skyline. - - * scripts/lilypond-book.py (re_dict): remove all *? regexps. - -2002-04-22 Jan Nieuwenhuizen - - * Documentation/windows/setup.hint (requires): Add gsview dependency. - - * scripts/lilypond-book.py (re_dict): Fix for python 2.x. - - * lilypond-mode.el (LilyPond-xdvi-command): Default to plain xdvi. - - * input/mozart-hrn3-allegro.ly: Bugfix: include defs. - -2002-04-22 Han-Wen Nienhuys - - * mf/feta-schrift.mf: lighter staccato. - -2002-04-22 Han-Wen - - * mf/feta-nummer-code.mf (code): fixes for 3 glyph. - -2002-04-21 Han-Wen - - * VERSION: 1.5.53 released - - * scm/lily.scm (ly-load): use primitive-load for loading. - - * lily/misc.cc: remove quantise_iv() - - * lily/*.cc: pass read-only arrays by reference. - - * lily/grob.cc (common_refpoint_of_array): new function. Try to - use common_refpoint_of_{array, list} when possible. - - * lily/include/accidental-placement.hh: new file. - - * lily/accidental-placement.cc (alignment_callback): position - accidentals in a better way. - - * lily/skyline.cc: new file. Compute distances for collections of - boxes. - - * lily/include/skyline.hh: new file - -2002-04-20 Han-Wen - - * lily/accidental.cc (class Accidental_interface): grob for a - single accidental. - - * lily/accidental-engraver.cc (number_accidentals): Cleanups. Lots - of reformatting - - * lily/new-accidental-engraver.cc (acknowledge_grob): Work - together with new accidental-interface. - - * lily/include/*.hh: remove spurious set_interface() decls. - - * lily/key-signature-interface.cc (brew_molecule): add padding for - natural signs. Make natural typesetting like the sharp. - - - * mf/feta-klef.mf: rewrote portion of the G-clef code. Downstroke - is now slightly curved, not straight. - - -2002-04-18 Heikki Junes - - * lilypond-mode.el: Toggles font-lock-multiline (Emacs 21.1 or newer). - - * lilypond-font-lock.el: Handles multiline-strings. Fontifies notes - more strictly. Use more clever regular expressions. Commented regexps. - -2002-04-16 Heikki Junes - - * lilypond-mode.el: "C-c f" does font-lock-fontify-buffer. - -2002-04-15 Juergen Reuter - - * scm/grob-description.scm, lily/staff-symbol.cc: added properties - to control width of staff symbol in ragged-right mode (by request - of Han-Wen) - - * ly/engraver-init.ly, lily/include/my-lily-parser.hh, - lily/include/ligature-bracket.hh, lily/lexer.ll, lily/parser.yy, - lily/ligature-bracket.cc, lily/ligature-bracket-engraver.cc: - added support for ligature brackets (needed when transcribing - mensural music) - -2002-04-15 Heikki Junes - - * lilypond-font-lock.el: Handle scheme-slurs up to seventh level. - Fontify notes more strictly. - -2002-04-15 Han-Wen - - * mf/feta-din-code.mf: dynamic z sign. - -2002-04-13 Heikki Junes - - * lilypond-mode.el: Prevent recoloring strings and comments. - - * lilypond-font-lock.el: Handle block comments: block comments - can have also ordinary comments inside. - -2002-04-13 Han-Wen - - * lily/stem.cc (get_default_dir): set direction to CENTER if - invisible. Various other fixes to deal with invisible stems and - stem-direction == CENTER. - - * lily/rest-collision.cc (do_shift): take direction from note if - not set. - - * input/regression/tie-grace.ly: new file. - - * lily/tie-engraver.cc (create_grobs): fix tied graces. - - * lily/note-spacing.cc (stem_dir_correction): set fixed space for - knee correction. Fixes tight spacing for knees. - -2002-04-12 Han-Wen Nienhuys - - * VERSION: 1.5.52 released - - * lily/*.cc: add some undocced properties. - scm/grob-description.scm: idem. - -2002-04-12 Heikki Junes - - * lilypond-font-lock.el: Handle slurs \( and \), numbers, - multi-measure rests like "R1 *4" and scheme (typically has '#' - in the beginning). Small fixes. Add few reserved words. - -2002-04-12 Jan Nieuwenhuizen - - * Documentation/topdocs/INSTALL.texi: Updates for MacOS X and - emacs mode. - - * Documentation/windows/installing.texi: Suggest gswin32c (console - program) for getting the version. Layout fixes. - -2002-04-11 Jan Nieuwenhuizen - - * Documentation/user/tutorial.itely (Running LilyPond): Separate - windows viewing commands, remove silly comment about Yap. - -2002-04-10 Mats Bengtsson - - * Documentation/topdocs/INSTALL.texi: Describe how to learn - configure to find kpathsea on for example Slackware 8.0. - - * scripts/ly2dvi.py (non_path_environment): Set $TEXMF correctly. - - * scm/grob-description.scm (MultiMeasureRest): number-threshold=1 - by default: avoid "1" over single bar rests. - - * scripts/lilypond-book.py (LatexPaper.set_geo_option): Simplify - and correct the handling of geometry options. - -2002-04-10 Han-Wen Nienhuys - - * lily/include/grob-interface.hh (ADD_INTERFACE): make - implementation for Class::has_interface automatically. Junk all - other implementations. - - * lily/grob.cc (internal_get_grob_property): also typecheck - property reads. Catches even more undocced properties. Bugfixing - left for the uninspired masses. - - * lily/beam.cc: remove end_after_line_breaking(). - - * lily/grob.cc (calculate_dependencies): remove list support for - callbacks. - - * lily/font-size-engraver.cc: only do font-interface. - -2002-04-10 Heikki Junes - - * lilypond-font-lock.el: Handle notes with cautionary accidentals. - Add few keywords. - -2002-04-09 Chris Jackson - - * lily/arpeggio.cc: New function brew_chord_bracket to draw chord - brackets using arpeggio requests. - - * ly/property-init.ly: Shorthand \arpeggioBracket defined as the - molecule-callback to use for drawing the brackets. - - * Documentation/user/refman.itely: - * input/test/chord-bracket.ly: Chord brackets documented - -2002-04-10 Han-Wen - - * mf/feta-din-code.mf: tweaks for p, s. New dynamic r sign. - - * mf/feta-eindelijk.mf: tweak for eighth rest: move bulb up. - -2002-04-09 Han-Wen Nienhuys - - * lily/tuplet-bracket.cc (after_line_breaking): bugfix for forced - direction tuplets on beams. - -2002-04-08 Chris Jackson - - * lilypond-indent.el: Bugfix of indentation of final point in buffer - -2002-04-09 Heikki Junes - - * lilypond-mode.el: new command: LilyPond-un-comment-region. - Added 2Midi to "Command"-menu. Inspired by latex.el and tex.el: - separate "Command"-menu and "LilyPond"-menu. Added "Miscellanous"- - submenu to "LilyPond"-menu. - - * lilypond-mode.el: Added "Midi all" to "Command"-menu, i.e., - an interface to play midi. - -2002-04-08 Han-Wen Nienhuys - - * input/regression/script-stack-order.ly: new file. - -2002-04-08 Han-Wen - - * VERSION (MY_PATCH_LEVEL): Release 1.5.51. - - * mf/feta-din-code.mf: kerning for dynamics. - -2002-04-07 Han-Wen - - * input/regression/dynamics-glyphs.ly: new file - - * mf/feta-din-code.mf: dynamic tweaks. New dynamic s. - - * mf/feta-nummer-code.mf: another bulb routine: mimic the bulb of - forte f for the 2 number. Some fixes for the other bulbed glyphs. - - * Documentation/windows/gs-profile.sh: - * Documentation/windows/gsview-profile.sh: Remove. Functionality - moved to gs/gsview windows packages. - -2002-04-06 Mats Bengtsson - - * lily/stem-engraver.cc (acknowledge_grob): Revert to old way of - finding out the duration. Fixes chord tremolo bug. - - * lily/completion-note-heads-engraver.cc (process_music): Set - correct duration for all requests of the broken notes. - - * input/regression/completion-heads.ly: Added example of - Completion_heads_engraver. - - * lilypond-mode.el: Added "2Midi" command - -2002-04-06 Chris Jackson - - * lily/tuplet-bracket.cc, scm/grob-description.scm: New - edge-width, edge-height and shorten-pair properties for tuplet - brackets. - - * lilypond-indent.el: Support for blinking of matching parentheses - - * lilypond-font-lock.el: Fix fontification of closing > on its own line - - * lily/piano-pedal-engraver.cc, lily/text-spanner.cc: Fixes and - cleanups of piano pedal brackets. - -2002-04-05 Han-Wen - - * mf/cmbase.mf: remove file. -- do without s, r and z signs for now. - -2002-04-04 Han-Wen - - * mf/feta-new-code.mf: new dynamic f sign. - new dynamic m sign. - -2002-04-03 Han-Wen - - * mf/feta-new-code.mf: new dynamic p sign. - -2002-04-02 Han-Wen Nienhuys - - * lily/note-spacing.cc (stem_dir_correction): only do - beam-correction if a beam is there. - - * lily/stem.cc (duration_log): change from flag_i (); better - naming. - (get_default_stem_end_position): fix dot/flag collision code. - -2002-04-02 Han-Wen - - * VERSION: release 1.5.50 - - * lily/spaceable-grob.cc (add_spring): change incorrect spring to - unit spring here. Reduces number of warning messages. - - * lily/auto-beam-engraver.cc: change noAutoBeaming to autoBeaming. - -2002-04-01 Han-Wen - - * scm/generic-property.scm: remove generic-property, property-engraver - - * lily/volta-bracket.cc (brew_molecule): use Lookup::line() for bracket - - * lily/hairpin.cc (brew_molecule): use Lookup::line() for hairpins. - - * ps/music-drawing-routines.ps: remove volta, tuplet, hairpin routines. - - * scm/*.scm: remove volta, hairpin and tuplet functions. - - * lily/rhythmic-column-engraver.cc (acknowledge_grob): don't make - note column for notes/stems/dots that already have parents. Fixes - nested grace contexts. - -2002-04-01 Jan Nieuwenhuizen - - * input/mozart-hrn-3.ly: Tweak Slur.beautiful, so that we don't - get too curved slurs. - - * scm/slur.scm (default-slur-extremity-offset-alist) - (default-phrasing-slur-extremity-offset-alist): Move slur - attachments further away from note-head, vertically. Also, leave - a horizontal gap between slur and stem end. - - * lily/beam.cc (get_interbeam): Bugfix: don't look in empty list. - -2002-04-01 Han-Wen - - * input/regression/spacing-grace-duration.ly: new file - - * lily/spacing-engraver.cc (acknowledge_grob): ignore grace notes - for shortest durations. - - * lily/multi-measure-rest.cc (set_spacing_rods): tune rods to the - extent of the mm rest. - - * lily/spacing-spanner.cc (get_duration_space): better spacing for - really short notes. - - * lily/tuplet-bracket.cc (make_bracket): new function - (get_x_offset): new function; make tuplet brackets align on stems - if stem has same direction. - (parallel_beam): be anal about matching bracket to tuplet. - - * lily/lookup.cc (line): new function Lookup::line(). - - * scm/tex.scm (dashed-line): change -line to -system in names. - - * lily/box.cc (add_point): new function. - - * flower/include/interval.hh: new function add_point (). - new function widen() - -2002-04-01 Jan Nieuwenhuizen - - * input/mozart-hrn-3.ly: Mimic Breitkopf fonts and padding. - - * scm/grob-property-description.scm (number-threshold): Add - description. - - * lily/multi-measure-rest.cc (brew_molecule): Only put number over - rest if #measures > number-threshold. Use padding (well, fake - using it, anyway). - - * scm/font.scm (make-style-sheet): New styles: mark-number, - mark-letter. - (paper20-style-sheet-alist): Add bigger bold fonts. - - * lily/mark-engraver.cc (process_music): Use style mark-number or - mark-letter. - - * .cvsignore: Ignore all kinds of lilypond input and output. - - * lily/beam.cc (ADD_INTERFACE): Add concaveness-gap. - -2002-04-01 Han-Wen - - * lily/staff-symbol.cc (brew_molecule): make line thickness - adjustable. - - * lily/*.cc: replace stafflinethickness by linethickness. - -2002-04-01 Jan Nieuwenhuizen - - * input/regression/beam-concave.ly: Add to-be-considered-concave - beam. - - * lily/beam.cc (check_concave): Add check for large gap between an - inner notehead and the line through outer noteheads. - - * scm/grob-description.scm (Beam): Add concaveness-gap, default - value 2.0 staff-space. - - * scm/grob-property-description.scm (concaveness-gap): Add - description. - - * input/mozart-hrn3-allegro.ly: Fix typo. - -2002-03-31 Juergen Reuter - - * scm/ps.scm, ps/music-drawing-routines.ps, lily/lookup.cc, - lily/note-head-engraver: improved implementation of roundfilledbox - (according to Han-Wen's request) - - * lily/include/spacing-spanner.hh, lily/spacing-spanner.cc, - lily/gourlay-breaking.cc, lily/staff-symbol.cc, - lily/simple-spacer.cc: ragged-right alignment - -2002-03-29 Han-Wen - - * input/regression/spacing-note-flags.ly: new file - - * input/regression/spacing-rest.ly: new file - - * mf/feta-eindelijk.mf: make bbox of quarter rest tighter. - - * lily/spacing-spanner.cc (note_spacing): make note spacing after - all grace notes tight (not only the column directly following a - grace note). - - * scm/grob-description.scm (all-grob-descriptions): don't make - mm-rests larger than normal. - - * mf/feta-banier.mf: make upflag narrower. Make end of flag more - curved. Remove white space at the right of flags. - -2002-03-28 Jan Nieuwenhuizen - - * ports/ports.make: Bugfix: ignore CVS directories. - - * stepmake/.cvsignore: New file. - -2002-03-28 Han-Wen - - * lily/note-spacing.cc (stem_dir_correction): don't correct when - there is a flag on the stem. - - * lily/multi-measure-rest.cc (brew_molecule): variable width molecule. - - * scm/grob-property-description.scm (measure-length): - measure-length grob property. - - * lily/spacing-spanner.cc (standard_breakable_column_spacing): - better spacing for breakable columns when they're juxtaposed: use - measure length if applicable - - * lily/timing-engraver.cc (start_translation_timestep): store - measure length in breakable column at start of measure. - -2002-03-28 Jan Nieuwenhuizen - - * ROADMAP: Add description for ports dir, to check email upon - commit. - -2002-03-27 Han-Wen - - * VERSION: 1.5.48 released - - * lily/multi-measure-rest.cc (symbol_molecule): split off from - brew_molecule() - (set_spacing_rods): Use symbol_molecule() to determine minimum - width - (church_rest): split off from brew_molecule() - (big_rest): split off from brew_molecule(). Construct using - variable shape. - - * mf/feta-eindelijk.mf: junk multi measure rest. - -2002-03-26 Han-Wen - - * lily/multi-measure-rest.cc (add_column): remove columns property. - - * lily/dynamic-engraver.cc (process_music): add more verbose warning - - * input/mozart-hrn3-romanze.ly (romanze): add mozart horn concerto - 3 as test piece. - -2002-03-26 Heikki Junes - - * lilypond-font-lock.el (LilyPond-font-lock-keywords): most new - keywords covered, dropped some non-keywords, include R- and 128-notes - -2002-03-25 Juergen Reuter - - * Code clean-up: Junk multiple implementations of ledger line - creation in note_head, custos, and porrectus. This is important - since there soon will be some more applications of ledger lines to - come (e.g. ambitus engraver). - - * Make thickness of ledger lines adjustable. This is essential - for mensural notation. - - * Fix some bugs in the current ledger_line implementation, most - notably that of the horizontal extent of ledger lines which equals - at least the extent of the metafont ledger_line character, and - which grows(!) if the desired extent shrinks below this limit. - - * roundfilledbox: variable blotdiameter - -2002-03-24 Han-Wen - - * VERSION: 1.5.47 released - - * lily/line-spanner.cc (line_atom): change line-thickness to thickness - - * lily/porrectus.cc: change line-thickness to thickness, change - stem-direction to direction. - - * scm/backend-documentation-lib.scm (check-dangling-properties): - Automatically detect doc'ed properties that are not in an interface - - * scm/grob-property-description.scm: property cleanup. Remove many - paper-column props that are non-existent. - - * lily/grob.cc (Grob): only use molecule_extent_proc as default if - the grob has a molecule-callback. - - * lily/*.cc: remove many set_interface() calls, and their - implementations. - - * input/regression/spacing-knee.ly: new file - - * input/regression/spacing-clef-first-note.ly: new file - - * lily/staff-spacing.cc (get_spacing_params): different spacing - for pref matter to note at start of line, halfway during line. - - * lily/note-spacing.cc (stem_dir_correction): apply 2nd stem direction - correction only if stems have same direction (i.e. not for - stem-clef combination). - (stem_dir_correction): maximal correction for knees. - - * lily/*.cc: many updates to interface descriptions. - - * lily/grob.cc (internal_set_grob_property): add interface check - for every set_grob_property call - - * lily/*.cc: document interface stuff in C++ - - * lily/grob-interface.cc: new file. Add grob interfaces from C++. - - * lily/volta-bracket.cc: naming: change volta spanner to - volta-bracket. - - * input/bugs/*.ly: cleanup, remove lots of files. - - * buildscripts/mf-to-table.py (write_ps_encoding): generate - .encoding file. WARNING: upgrade to pktrace 1.0.3 - - * mf/feta-toevallig.mf: change PS name for parentheses. - -2002-03-23 Mats Bengtsson - - * scripts/ly2dvi.py (ly_paper_to_latexpaper): Use the correct unit - also for textheight - -2002-03-23 Han-Wen - - * lily/scope.cc: remove file . - - * lily/include/scope.hh: remove file. Remove Scope class - - * VERSION: 1.5.46 - - * lily/beam.cc (score_slopes_dy, score_stem_lengths, - score_forbidden_quants): ): take out of SCM, pass parameters so - grob props are read only once. (wtk1-fugue2 from 31 sec to 14 - secs). - (calc_stem_y): robustness: take care of last_visible_stem == 0. - - - * lily/lily-guile.cc (ly_unit): return internal unit. - - * scm/tex.scm (header-end): insert scaling factor, using ly-unit - - * lily/paper-outputter.cc (output_version): output internal unit - from Paper_outputter - - * scripts/ly2dvi.py: Read unit from paper vars (43.jcn3). - -2002-03-22 Mats Bengtsson - - * scripts/ly2dvi.py: clean up old .*pk font caching code. - - * scm/ps.scm: Use uppercase postscript font names for the standard - TeX fonts. - - * scripts/ly2dvi.py, buildscripts/lilypond-{login,profile}.sh, : - Add all available TeX Type1 fonts, including Feta, to the - Ghostscript font path. - - * Documentation/topdocs/INSTALL.texi (Top): Add required pktrace - version (affects the FontName) in lilypond.map. - - * mf/GNUmakefile, Documentation/user/appendices.itely: Rename font - documentation file to fetaNNlist.ly to avoid name collisions between - lilypond generated .tex file and font .tex macros file. - - -2002-03-22 Juergen Reuter - - * mf/feta-eindelijk.mf, mf/parmesan-rests.mf: added maxima rests; - made mensural longa and (semi-)brevis leaner - - * mf/parmesan-clefs.mf, scm/clef.scm: enhanced petrucci c clef - - * lily/{{lookup,porrectus}.cc,include/{lookup,porrectus}.hh}: code - clean-up: moved bezier shape and slope from porrectus to lookup - - * buildscripts/clean-fonts.sh: added search paths /var/cache/fonts - and /usr/share/texmf/fonts - - * scripts/ly2dvi.py: Read unit from paper vars (43.jcn3). - -2002-03-22 Han-Wen - - * lily/text-spanner.cc (brew_molecule): add #'thickness - (brew_molecule): add corrections for thickness in molecule padding. - - * lily/line-spanner.cc (line_atom): make function private - - * scripts/lilypond-book.py (get_bbox): Use GS -sDEVICE=bbox to - discover bounding box. This solves the cropping problem. - - * lily/bar-check-iterator.cc (process): Only resynchronize bar - check when it fails. This fixes the combination of grace notes - and bar checks. - -2002-03-21 Han-Wen - - * lily/repeated-music.cc (minimum_start): new Scheme callable function - (first_start): new Scheme callable. This will fix repeated music - starting with grace notes. - - * lily/music.cc (start_mom): check start-moment-function grob property. - - * VERSION: 1.5.45 released - - * input/regression/system-extents.ly: new regression test. Test - System extents. - - * lily/system.cc: rename LineOfScore into System - - * lily/molecule.cc (ly_add_molecule): new Scheme ly-add-molecule. - - * lily/grob.cc (ly_get_parent): new Scheme function ly-get-parent. - (ly_get_extent): new Scheme function ly-get-extent - - * ps/lilyponddefs.ps: use output-scale for line-x - definition. - - * scm/ps.scm (font-load-command): - use output-scale - -2002-03-20 Rune Zedeler - - * lily/beaming-info.cc: Stupid typo fixed - - * lily/accidental-engraver.cc: rewrote accidental-routines to get - support for cross-context auto-accidentals. - Now the engraver can stay in Staff-context and see other contexts - from there. - Changed properties: autoAccidentals, autoCautionaries - - * lily/translator-group.cc (set_children_property): - Function added recursively setting the same property (deep_copied) - for all children of a Translator_group. - - * ly/property-init.ly: added commands - \pianoAccidentals \voiceAccidentals - \modernVoiceAccidentals \modernVoiceCautionaries - - * ly/engraver-init.ly: Correct initialization of new accidentals. - - * scm/translator-property-description.scm: Updated - - * input/regression/accidental-voice.ly: Added - - * Documentation/regression-test.tely: Added new test - -2002-03-19 Han-Wen Nienhuys - - * VERSION: 1.5.44 released - - * lily/slur.cc (set_extremities): robustness fixes for #'attachment. - - * scripts/lilypond-book.py (bounding_box_dimensions): bugfix. - - * ly/params-init.ly (blotdiameter): use unit for blotdiameter, set - at 0.4 pt. - - * tex/feta*.tex: remove. - - * stepmake/aclocal.m4: remove stepmake symlink. It confuses almost - all software dealing with it. - -2002-03-20 Jan Nieuwenhuizen - - * mf/GNUmakefile (lilypond.map): Don't prepend TeX to font name - (this fixes pdf output). Drop awk dependency. - - * scripts/ly2dvi.py (ly_paper_to_latexpaper): Assume LilyPond's - dimensions (linewidth) are in mm. - - * mf/GNUmakefile (depth): Always allow manual access to pfa target. - - * tex/lily-ps-defs.tex: scaletounit using PT/IN==72. - - * lily/slur.cc (get_attachment): Bugfix: correct for stem thickness. - -2002-03-19 Han-Wen - - * VERSION: 1.5.43 released - - * scm/beam.scm (beam-dir-majority-median): if majority is - undecided, use median. Removes a forced dir in sarabande. - - * mf/feta-schrift.mf: Trill fixes, Vee fixes (upbow, ltoe, rtoe) - -2002-03-18 Chris Jackson - - * lily/text-spanner.cc, lily/piano-pedal-engraver.cc: Cleanups. Edge - widths, heights and shortens are now customisable properties. - - * scm/grob-description.scm, scm/grob-property-description.scm: New - properties added to PianoPedalBracket, unnecessary - Y-offset-callbacks removed from *Pedal, undocumented properties - fixed. - - * Documentation/user/refman.itely: Piano pedal updates. - -2002-03-18 Jan Nieuwenhuizen - - * scm/grob-property-description.scm: - * scm/interface-description.scm: Remove old stuff. - - * scm/grob-description.scm (StemTremolo): Change beam-thickness to - 0.48 (previously 0.42). - (Beam): Remove old stuff. - - * lily/stem.cc: - * lily/stem-tremolo.cc: - * lily/beam.cc: - * scm/beam.scm: Remove old stuff. Use Beam::get_interbeam () - (previously space-function). - - * stepmake/bin/add-html-footer.py: Website title fix. - -2002-03-18 Han-Wen Nienhuys - - * scripts/ly2dvi.py (environment): use new font searching setup. - - * lily/afm.cc (afm_bbox_to_box): make code dimension independent - - * lily/tfm.cc (dimensions): make code dimension independent - - * ps/lilyponddefs.ps: add constant for MM and true/ps-point - scaling - - * tex/lily-ps-defs.tex: scaling for PS points and MM. - - * lily/include/dimensions.hh: try MM as internal unit. - - * scm/*.scm: remove invoke-dim1 - -2002-03-17 Han-Wen - - * GNUmakefile.in (fontpaths): add fontpaths target, - - * make/mutopia-targets.make: add PDF rules. - - * make/mutopia-rules.make: add pdf rule. - - * buildscripts/mutopia-index.py (list_item): add PDF. - - * buildscripts/lilypond-profile.sh (TEXMF): typo. - - * make/lilypond-vars.make: set TEXMF for the new font setup. - -2002-03-17 Han-Wen - - * VERSION: 1.5.42 released - - * mf/feta-schrift.mf: endless twiddling of Tr. - - * mf/feta-eindelijk.mf: 8th rest: make darker, top of brush lower, and - endless twiddling with the bulb shape. - - * lily/note-head.cc (internal_brew_molecule): make ledger lines a - little smaller if there is an accidental. - -2002-03-15 Mats Bengtsson - - * buildscripts/lilypond-profile.sh: - - * mf/GNUmakefile (INSTALLATION_OUT_DIR*), - buildscripts/lilypond-login.sh, buildscripts/lilypond-profile.sh: - Implement new font installation strategy - - * Documentation/misc/fontinstallation (TEXMF): Documentation of - the new font installation strategy. - - * lilypond-mode.el (LilyPond-mode-map): Add shortcut "CTRL-c ;" - for comment-region. - - * input/test/staff-size.ly: Simplified using StaffContainer - - * mf/GNUmakefile (ALL_GEN_FILES): Actually generate the - lilypond.map file - -2002-03-17 Jan Nieuwenhuizen - - * scm/ps.scm (bezier-sandwich): Draw circles at slur ends. - - * lily/beam.cc (score_stem_lengths): new quanting stuff - (score_forbidden_quants): Second and third beam quant stuff. - -2002-03-16 Jan Nieuwenhuizen - - * lily/beam.cc (least_squares): Remember least-squares-dy for - later use. - (quantise_interval): Don't quant to dy steeper that - least-squares-dy. Return empty interval if no sane quants found. - (quantise_position): Try quantise_interval until we have - acceptable solution. - -2002-03-15 Jan Nieuwenhuizen - - * scm/interface-description.scm (beam-interface): Update. - -2002-03-15 Han-Wen Nienhuys - - * VERSION: 1.5.41 released - - * mf/feta-schrift.mf: make Tr. smaller, smoother and closer. Use - optima serifs on top of t, bottom of r. - - * mf/feta-bolletjes.mf: make ledger line rounder. - - * mf/feta-toevallig.mf: some smallish fixes for flat sign. - - * mf/feta-eindelijk.mf: make 8th rest a little darker, some more - parametrization. - -2002-03-15 Chris Jackson - - * lily/piano-pedal-engraver.cc: Rewritten to support bracketed as - well as text pedal indications and a combination of both. All - pedal indications are horizontally aligned on a line spanner. - - * lily/text-spanner.cc: Edge-width property added to use in - bracketed piano pedals. Function setup_sustain_pedal added to set - the dimensions of the brackets. - - * scm/grob-description.scm: New *PedalLineSpanner grobs added, and - some of the *Pedal properties tweaked. - - * scm/grob-property-description.scm: New pedal-type (*Pedal) and - edge-width (TextSpanner) properties. - - * ly/engraver-init.ly: Default strings added for SostenutoPedal. - - * lilypond-font-lock.el: sostenuto, unaCorda and treCorde added to - fontified identifiers list. - - * input/test/pedal.ly: New pedal features added. - - * Documentation/user/refman.itely: New pedal features documented. - - -2002-03-15 Jan Nieuwenhuizen - - * lily/include/new-beam.hh: Previously new-beam.hh - * lily/beam.cc: Previously new-beam.cc - (least_squares): Bugfix: don't barf on beams with less than two - visible stems (tremolos). - - * scm/beam.scm: - * scm/grob-description.scm (Beam): Junk old beam stuff. - - -2002-03-14 Han-Wen Nienhuys - - * VERSION: 1.5.40 - - * mf/feta-eindelijk.mf: new 8th rest. - - * mf/feta-toevallig.mf: small fixes for the sharp symbol. Don't - stick out of staffline - - * scripts/lilypond-book.py: fixes for texi regular expressions. - -2002-03-14 Jan Nieuwenhuizen - - * lily/include/new-beam.hh: - * lily/new-beam.cc: New file. - - * flower/include/interval.hh: - * flower/include/interval.tcc (delta): New method. - (swap): Now public (previously private). - - * scm/beam.scm (default-beam-y-quants): Bugfix: lower beam-sit by - 1 staff-line-thickness. Sadly, this makes dy quanting problems - (dy quants allowed should depend on actual left y) more visible. - -2002-03-13 Jan Nieuwenhuizen - - * lily/beam.cc (quantise_dy): Bugfix: sign (0) = 0. Hmm. - - * scm/grob-property-description.scm (concaveness-threshold): Add - typecheck and description. - - * scm/grob-description.scm (Beam): Remove obsolete properties, add - concaveness-threshold (previously concaveness). - - * lily/beam.cc (check_concave): Remove choices and debugging - stuff: use best concaveness calculation. - (quantise_dy): Remove choice. Try to never make a slope steeper - by quantising, but certainly never quantise a slope away. - (check_stem_length_f): Remove choice. In case of lengthening - alowed, always lengthen to ideal length. - - * Documentation/index.texi: Fix FAQ url. - - * Documentation/topdocs/INSTALL.texi: Add information about fink, - compile fix and 1.4 specific fix that doesn't hurt 1.5. - -2002-03-13 Han-Wen - - * VERSION: 1.5.39 released - - * lily/simple-spacer.cc (add_rod): rods take precedence over - infinitely stiff springs. This fixes bugs with arpeggios and bar-lines. - - * lily/arpeggio-engraver.cc (acknowledge_grob): clean up. - - * lily/note-spacing.cc (get_spacing): only insert space for - accidentals if necessary. - - * input/regression/spacing-accidental-staffs.ly (texidoc): update example - - * lily/spacing-spanner.cc (musical_column_spacing): new - function. Have correct spacing from note to end-of-line as well. - -2002-03-12 Jan Nieuwenhuizen - - * Documentation/topdocs/INSTALL.texi: Add section for MacOS X. - - * darwin.patch: New file. - - * lily/beam.cc (set_stem_shorten): Revive deceased stem shorten - code. Shorten stems by fraction of stems to be shortened. - - * lily/stem.cc (get_default_stem_end_position): Shorten only half - of shorten value for boundary cases. - - * scm/grob-description.scm (Stem): Set stem-shorten to (1.0 0.5). - (Beam): Set beamed-stem-shorten to (1.0 0.5). - -2002-03-11 Jan Nieuwenhuizen - - * lily/beam.cc (check_stem_length_f): Try to lenthen more. - - * scm/grob-description.scm (Beam): Add concaveness. Replace - Beam::cancel_suspect_slope with Beam::check_concave. - - * lily/beam.cc (check_concave): Calculate concaveness of beam, and - set slope to horizontal if concaveness > Beam.concaveness. This - handles cases that kludgy cancel_suspect_slope was meant to catch - very well. - (cancel_suspect_slope): Remove. - -2002-03-12 Rune Zedeler - - * lily/beam.cc lily/stem.cc lily/beam-engraver.cc: allow for - stemLeftBeamCount and stemRightBeamCount to equal 0. - Fixes [c8 c4 c8] - -2002-03-12 Han-Wen - - * lily/spacing-spanner.cc (breakable_column_spacing): Only do - fixed spacing for pref matter, if the next column is musical, and - at the same moment. - - * lily/note-spacing.cc (stem_dir_correction): Use correct - discretionary for stem-bar spacing. - -2002-03-11 Han-Wen - - * VERSION: 1.5.38 released - - * lily/grob.cc (warning): Use cause tracking to give more - meaningful errors from the backend. - - * lily/property-iterator.cc (check_grob): Warn if setting grob - property in unknown grob. - - * mf/feta-toevallig.mf: brushed stems for natural sign. - - * lily/molecule.cc (align_to): don't translate empty molecule. - (this triggers a very subtle bug in time-signature.) - -2002-03-10 Han-Wen - - * lily/spring.cc: remove file. - - * input/regression/spacing-stem-bar.ly: new file - - * lily/score.cc (run_translator): resurrect point-and-click - - * input/baerenreiter-sarabande.ly: Copy Barenreiter beaming for - sarabande layout - - * lily/spacing-spanner.cc (find_shortest): Shortest note for - spacing is now globally determined, using the most common shortest - note. Notes that are shorter are spaced geometrically, and with - expand hints. This makes spacing more even, and measures that have - very short notes won't be that stretched out. - - * mf/feta-klef.mf: F-clef fixes, documentation on the - shape. (WARNING: font changed.) - -2002-03-09 Han-Wen - - * lily/simple-spacer.cc (add_columns): support for infinitely - stiff springs. - - * lily/staff-spacing.cc (get_spacing_params): space after - prefatory matter is fixed. - -2002-03-08 Han-Wen - - * lily/note-spacing.cc (stem_dir_correction): Correct spacing for - barline following an upstem. - - * lily/staff-spacing.cc (extremal_break_aligned_grob): destill - function from next_notes_correction(). - (bar_y_positions): idem. - -2002-03-04 Han-Wen Nienhuys - - * input/regression/break.ly (texidoc): bugfix: escape \ in - strings. - - * lily/staff-spacing.cc (next_notes_correction): Correct the - spacing of a note following a barline. - - -2002-03-04 Glen Prideaux - - * mf/feta-solfa.mf: Shaped note heads - -2002-03-03 Han-Wen - - * VERSION: 1.5.37 released - - * lily/key-signature-interface.cc (brew_molecule): rename from key_item - left-align molecule. - - * lily/break-align-interface.cc (do_alignment): completely - rewritten. Now it does not use Align_interface anymore, but a - separate routine. Like StaffSpacing, it reads space-alist from the - breakable grobs. This allows you to set spacing using - - \property Staff.Clef \override #'space-alist = '(....stuff....) - - * lily/bar-line.cc, lily/include/bar-line.hh: change name from Bar - to Bar_line. Move files around as well. - - * lily/time-signature.cc (time_signature): left align time signatures. - - * mf/feta-timesig.mf: Remove padding from C-style time signatures. - Corrections of the glyph shape C. Comments added. - -2002-03-02 Han-Wen - - * lily/spacing-spanner.cc: move from third-try.cc; rename - Third_spacing_spanner to Spacing_spanner. - - * lily/staff-spacing.cc (get_spacing_params): redo prefatory - spacing stuff. Much cleaner now, and we prepare for neat spacing - tricks around bar lines and such. - - * lily/third-try.cc (prune_loose_colunms): bugfix. Don't init - variables with themselves. (Ouch.) - - * lily/span-bar.cc (brew_molecule): don't try to span bars that - overlap. - -2002-03-02 Han-Wen - - * VERSION: 1.5.36 - - * lily/lily-guile.cc: isdir_b and isaxis_b changed to ly_axis_p, - ly_dir_p - - * lily/music.cc (ly_get_mus_property): typechecking - (ly_set_mus_property): idem - (ly_make_music): idem - (ly_music_name): idem - - * lily/chord.cc: use scm_reverse_x iso. gh_reverse() - - * lily/note-spacing.cc (stem_dir_correction): correction for - same stem notes as well. - - * lily/pitch.cc (pitch_transpose): stricter typechecking - - * mf/parmesan*mf: magnification fixes. - - * Documentation/topdocs/INSTALL.texi: update RedHat reqs - -2002-03-01 Mats Bengtsson - - * buildscripts/mf-to-table.py (postfixes): Output also .ly file - documenting the font. (Doesn't work for parmesan at the moment) - - * Documentation/user/appendices.itely (The Feta font): Add list of - Feta font symbols with names. - - * mf/GNUmakefile ($(outdir)/lilypond.map): Generate lilypond.map - automatically - -2002-03-01 Han-Wen - - * lily/translator-group.cc (ly_set_trans_property): typechecking - (ly_get_trans_property): typechecking. - - * lily/font-metric.cc (ly_text_dimension): typechecking - (ly_find_glyph_by_name): idem. - - * scm/bass-figure.scm (brew-complete-figure): support for - bracketed numbers. - - * lily/grob.cc (ly_get_paper_var): new function - -2002-02-28 Han-Wen Nienhuys - - * VERSION (PATCH_LEVEL): 1.5.35 released. - - * lily/lookup.cc (ly_bracket): Scheme function ly-bracket - (bracket): New function. - - * lily/stem-engraver.cc (stop_translation_timestep): bugfix, unset - stemLeftBeamCount, stemRightBeamCount in stead of using # - - * lily/third-try.cc (set_implicit_neighbor_columns): type checking - bugfix. - - * lily/span-arpeggio-engraver.cc (stop_translation_timestep): - typecheck bugfix. - - * lily/grob.cc (ly_get_grob_property): be anal about types. - (ly_set_grob_property): idem - - * lily/figured-bass-engraver.cc (process_music): move molecule - building completely to Scheme - - * lily/include/musical-request.hh (class Bass_figure_req): Add - class. - - * lily/parser.yy (bass_figure): add support for space figure. - - * lily/molecule.cc (ly_molecule_combined_at_edge): be anal about types - - * lily/font-metric.cc (ly_text_dimension): Scheme function ly-text-dimension - - * lily/molecule.cc (ly_fontify_atom): new function ly-fontify-atom - (ly_align_to_x): new function ly-align-to! - - * lily/font-interface.cc (ly_font_interface_get_font): new Scheme - function ly-get-font - - * mf/feta-nummer.mf: include normal-space dimension. - - * lily/collision.cc (check_meshing_chords): don't merge collisions - with whole notes. - - * lily/system-start-delimiter.cc (after_line_breaking): Bugfix: - glyph is string. - -2002-02-28 Mats Bengtsson - - * scm/tex.scm, scm/ps.scm (or): Bugfix, ps output with Guile 3.4 - -2002-02-28 Juergen Reuter - - * mf/parmesan-heads.mf: bugfix: mensural note heads (WARNING: - font changed) - - * scm/output-lib.scm: bugfix: resort to neo_mensural chars rather - than mensural chars - - * mf/parmesan-scripts.mf, mf/parmesan-generic.mf, - scm/grob-description.scm: added mensural fermata symbol - -2002-02-27 Han-Wen Nienhuys - - * VERSION: 1.5.34 released. - - * lily/rest-engraver.cc (create_grobs): rests can have pitches. - - * lily/staff-symbol-referencer.cc (callback): assume that - staff-position is unset in general. - - * input/regression/rest-pitch.ly: new file. - - * lily/parser.yy (simple_element): rests can have pitch. Syntax: - a4\rest - -2002-02-26 Han-Wen Nienhuys - - * lily/scm-option.cc (set_lily_option): add internal-type-checks - as Scheme option. Run regression test by default with - internal-type-checking. - - * lily/separating-group-spanner.cc (find_musical_sequences): removed. - - * lily/lily-guile.cc (type_check_assignment): changed functions. - - * scm/*description*.scm: be anal about typechecks. Some changes - for internal variable names. - -2002-02-25 Han-Wen Nienhuys - - * scm/ps.scm: -f ps output for GUILE 1.4 and 1.3.4 - -2002-02-25 Han-Wen - - * VERSION: 1.5.33 released. - - * mf/feta-macros.mf (flare_path): removed draw_flare, replace by - flare_path everywhere (c-clef, numbers). - - * lily/bar-number-engraver.cc (process_music): also print bar - number if measure starts with grace note. - - * input/regression/grace-bar-number.ly: new test. - -2002-02-24 Han-Wen - - * lily/figured-bass-engraver.cc (stop_translation_timestep): reset - rest as well. - - * scm/music-functions.scm (voicify-music): split chords into - different voices automatically. - - * lily/music.cc (ly_music_list_p): new function - - * lily/music-sequence.cc (do_relative_octave): robustification - - * scm/music-functions.scm: many utility functions - - * lily/music.cc (ly_set_mus_property): add type checks to the - Scheme property assignment. - - * buildscripts/lilypond-profile,lilypond-login.sh (TEXCONFIG): - dvips fixes - - * mf/lilypond.map: .map file from Mats' page. - -2002-02-21 Juergen Reuter - - * Some more parmesan related fixes; - - * Custos: varying shape (in particular, stem length), depending on the - vertical position of the custos (on staffline / between stafflines); - - * Custos: added grob property "neutral-direction" (same semantics as - with stem); introduced new grob property "neutral-position"; - - * Time-signature: print a warning when resorting to default layout. - -2002-02-22 Han-Wen Nienhuys - - * lily/translator-group.cc (add_fresh_simple_translator): remove - function; initialize() is called through - Translator_group::initialize(). - - * lily/third-try.cc (prune_loose_colunms): add constraints (rods) - for the neighbors of a loose column. - - * lily/line-of-score.cc (set_loose_columns): be more intelligent: - position loose columns so that they don't collide. - -2002-02-21 Han-Wen Nienhuys - - * VERSION: 1.5.32 released. - - * scm/font.scm: remove font-name symbol. - - * mf/GNUmakefile: use pktrace for making PFAs - - * make/lilypond.redhat.spec.in: use pktrace when making RPMs - - * lily/rest-collision.cc (do_shift): read direction field from - rest-column in case of note-rest collision. This should fix some - problems with rest collisions. - -2002-02-19 Han-Wen Nienhuys - - * lily/note-heads-engraver.cc (process_music): Removed easyPlay - property. - - * lily/note-head.cc (brew_ez_molecule): Remove note-character - property. Read pitch directly from #'cause. - - * mf/feta-puntje.mf: bugfix - -2002-02-19 Juergen Reuter - - * mf/*.mf: tried to fix ancient-font.ly. WARNING: Font changed. - -2002-02-18 Jan Nieuwenhuizen - - * Documentation/windows/compiling.texi: Update. - - * Documentation/index.texi: Add link to orphaned compiling for - windows page. - - * Documentation/footer.html.in: Comment fix. - - * stepmake/bin/add-html-footer.py: Python2.[12] re workarounds. - -2002-02-18 Han-Wen - - * VERSION: 1.5.31 released - - * lily/new-spacing-spanner.cc: remove file. - - * lily/third-try.cc (do_measure): only take spacings into account - if they pertain to the column pair under consideration. This fixes - spacing bug when mixing eighths triplets and normal eighths. - - * lily/note-head.cc (brew_molecule): revert ledger change: ledger - lines don't take up space anymore. Document why in note-head.cc - comment. - -2002-02-17 Han-Wen - - * lily/font-interface.cc (get_font): reinstate - #'font-magnification. See input/regression/font-magnification.ly - (get_font): Change the definition of #'font-name grob property. - - * lily/grob.cc (get_uncached_molecule): output origin for grobs - that have a #'cause field. - -2002-02-12 Han-Wen Nienhuys - - * Documentation/topdocs/INSTALL.texi: remove type3 stuff. - - * mf/GNUmakefile: remove metapost stuff - - * stepmake/aclocal.m4: remove metapost detection stuff. - -2002-02-11 Jan Nieuwenhuizen - - * mf/GNUmakefile (FET_FILES): - (FONT_FILES): Include parmesan. - - * stepmake/bin/packagepython.py (make_assign_re): Bugfix. Use re - iso regex, regsub - - * buildscripts/clean-fonts.sh (FILES): Clean parmesan too. - - * Documentation/user/refman.itely (Paper size): Quote braces. - -2002-02-07 Han-Wen Nienhuys - - * stepmake/aclocal.m4: fixed bison version check to be more - robust. - - * lily/stem.cc (position_noteheads): fix for cluster chords. - - * mf/*.mf: many blotting/pixel rounding fixes by Rune Zedeler - - * python 2.2 support. - -2002-02-04 Han-Wen - - * VERSION: 1.5.30 released - - * lily/dynamic-engraver.cc: add doco about DynamicLineSpanner - - * Documentation/user/refman.itely (Dynamics): add a note about - DynamicLineSpanner. - - * scm/grob-description.scm: add a 'translator-type? object - property, so that \property Foo.Bar =\turnOff doesn't cause - type check warning. - - * lily/translator-group.cc (add_fresh_group_translator): make - new add-translator functions to make distinction between fresh and - used group-translators. Fixes problem with scripts on auto-changing voice - - * lily/timing-engraver.cc: make Timing_engraver instantiatable, - add to Score_performer. Fixes bar checks in MIDI - - * lily/tie-engraver.cc (create_grobs): Use pitches to compare note - heads. Fixes many quirks with ties. - - * lily/engraver.cc (announce_grob): Use SCM argument. Store cause - in the grob property #'cause, instead of using Grob_info. - - * ly/engraver-init.ly (StaffContext): move Dot_column_engraver to - staff context, fixing dot alignment on collisions. - - * lily/beam-engraver.cc (try_music): remove can't find beam start - warning, so that skipTypesetting won't complain. - -2002-02-01 Mats Bengtsson - - * Documentation/user/refman.itely (Paper size): Documentation fix, - papersize - - * lily/text-engraver.cc: Bugfix: textNonEmpty works again - - * scm/grob-description.scm: \breathe: Use feta font comma by default - -2002-01-23 Mats Bengtsson - - * input/template/piano-dynamics.ly (pedal): Simplified - -2002-01-18 Mats Bengtsson - - * ly/engraver-init.ly: avoid warnings on \skip in lyrics - -2002-01-10 Mats Bengtsson - - * lilypond-mode.el (LilyPond-command-query): ignore case. - -2002-02-01 Han-Wen Nienhuys - - * VERSION: 1.5.29 released - - * all files: change 2001 to 2002 in headers globally - - * mf/parmesan20.mf: split out ancient notation into parmesan ("old - cheese") font. WARNING: fonts changed. - -2002-02-01 Juergen Reuter - - * mf/*.mf: Fixed some blot_diameter related flaws in some feta symbols - - * mf/*.mf: Added some more vaticana/solesmes style font symbols - - * mf/*.mf: Bugfix: renamed subbipunctum -> inclinatum - - * mf/*.mf: Fixed a few typos in various .mf files - -2002-01-17 Rune Zedeler - - * mf/: added macro soft_penstroke - - softened some glyphs - redrawn triangular noteheads - redrawn tab-clef - added classical quarter rest - - * lily/stem.cc: Bugfix: Stem-attachment when staff_space!=1 - - * lily/bar.cc: Bugfix: repeat dots when even number of staff - lines and staff_space>=2 - - * lily/rest.cc: Use default rests when current style glyphs not - found - this allows - \property Staff.Rest \override #'style = #'classical - -2002-01-30 Jan Nieuwenhuizen - - * input/bugs/first-tie.ly: New file. - - * input/bugs/spacing-clash.ly: New file. - -2002-01-29 Jan Nieuwenhuizen - - * po: regenerate. - -2002-1-24 Chris Jackson - - * lilypond-indent.el: New file providing indentation for - parenthesised blocks of lilypond code in Emacs - - * lilypond-font-lock.el: Changes to the syntax table to facilitate - indentation and handle block comments properly. Distinguish - accents from close-brackets in fontification. - - * lilypond-mode.el: LilyPond-indent-command set appropriately. - -2002-01-22 Jan Nieuwenhuizen - - * Documentation/windows/installing.texi: - * Documentation/windows/compiling.texi: Include from 1.4.10. - - * Documentation/windows/gs-profile.sh: previously lily-gs.sh - - * input/bugs/first-midi-tie.ly: New file. - -2001-12-29 Han-Wen - - * VERSION: 1.5.28 released - - * lily/parser.yy (My_lily_parser): Slightly kludgy warning for - illicit beams on [c4 c4] etc. - - * lily/bar-check-iterator.cc (Bar_check_iterator): new - file. Make separate iterator for Bar_checks. Bar_check now happen - outside engravers, meaning that you can use them with - skipTypesetting. Associated changes in other files. - - * lily/new-spacing-spanner.cc (stem_dir_correction): removed - function - - * lily/spacing-spanner.cc (stem_dir_correction): removed function - - * lily/include/grob.hh (unsmob_item, unsmob_spanner): Add functions - - * lily/bar.cc (before_line_breaking): remove bar-line spacing code. - - * lily/stem.cc (set_spacing_hints): removed function - - * lily/note-spacing.cc (stem_dir_correction): new stem-direction - correction for spacing; now take vertical extents of the stem into - account. - - * lily/third-try.cc: More hacking to get spacing working. - - * lily/note-spacing-engraver.cc: new file, Note_spacing_engraver - sits at staff level and creates note spacing objects. Scrap it - again, and document why. - - * lily/include/group-interface.hh: rename functions. - -2001-12-27 Jan Nieuwenhuizen - - * stepmake/stepmake/c++-rules.make: - * stepmake/stepmake/c-rules.make: Fixes for bison-1.28. - -2001-12-25 Jan Nieuwenhuizen - - * make/lilypond-vars.make: - * scripts/ly2dvi.py (setup_environment): - * scripts/lilypond-book.py (setup_environment): Also set tex - memory options. - -2001-12-24 Han-Wen Nienhuys - - * VERSION: 1.5.27 released. - - * Documentation/user/refman.itely (Bar numbers): added bar number - documentation. - - * scm/font.scm (make-style-sheet): Fixes to make staff-sizes work - again. - -2001-12-22 Mats Bengtsson - - * tex/lilyponddefs.tex: Make sure interscorelinefill=1 doesn't - spread the last few lines all over the last page of a score. - -2001-12-24 Han-Wen - - * lily/third-try.cc: 3rd try at revising spacing - engine. Not yet finished. - - * lily/paper-column.cc (brew_molecule): print debugging marks on a - paper-column. - - * lily/tie-engraver.cc (class Tie_engraver): Use busyGrobs for - collecting past note heads. - - * lily/note-heads-engraver.cc (try_music): Remove end_mom_ - stuff. - - * lily/grob-pq-engraver.cc (class Grob_pq_engraver): New file, new - class. Keep a queue of grobs that are still playing in busyGrobs. - - * lily/lyric-combine-music-iterator.cc (get_busy_status): New - function. Use busyGrobs to detect playing notes. - -2001-12-16 Jan Nieuwenhuizen + * GNUmakefile.in: make lilypond-fource file, so PK fonts are not + removed every make-run. - * Documentation/topdocs/INSTALL.texi: Added note about broken - python-2.1. Updated note for Debian's broken (well, broken for - our use anyway) tex configuration. - - * scripts/lilypond-book.py (re_dict): python2.2 fix. - - * stepmake/stepmake/c++-rules.make ($(outdir)/%.hh): - ($(outdir)/%.cc): Adapted to bison-1.30; added bison < 1.30 fix. - - * scripts/lilypond-book.py (bounding_box_dimensions): Bugfix. - (But left margin of png's still misses a few pixels. Arg.) - -2001-12-16 Heikki Junes - - * lilypond-mode.el (LilyPond-command-next-midi): Make - possible to kill midi-process (using "C-c C-m"). - -2001-12-14 Han-Wen - - * scripts/lilypond-book.py (LatexPaper.set_geo_option): - Convert strings with dimensions to numbers. - - * lily/volta-engraver.cc: only make a bracket for the top staff, - as found in stavesFound. - - * lily/bar-number-engraver.cc: remove staff administration. - - * lily/mark-engraver.cc (acknowledge_grob): remove staff - administration. This breaks support for invisible-staff. - - * lily/staff-collecting-engraver.cc: new engraver. Collects staff - symbols into stavesFound. - - * lily/score-engraver.cc (acknowledge_grob): Acknowledge spacing - grobs, and put them into columns. - - * lily/engraver-group-engraver.cc (acknowledge_grobs): Include the - Engraver_group_engraver as a potential candidate for ack'ing grobs. - -2001-12-13 Heikki Junes - - * lilypond-mode.el (LilyPond-command-next-midi): Play next (or last) - midi section in the Emacs-mode, so it is possible to play certain - score in a multiscore lilypond-file. - -2001-12-09 Rune Zedeler - * lily/lily-guile.cc: Added ly_assoc_front_x() and ly_assoc_cdr() - (FIXME: not accessible from guile) - - * lily/accidental-engraver.cc: rewrote accidental-routines to get - better support for Kurt Stone's suggestions. - Removed properties: noResetKey, forgetAccidentals, autoReminders, - lazyKeySignature. - Changed property: localKeySignature. - Added properties: extraNatural, autoAccidentals, - autoCautionaries. - - (BUGFIX: broken-tie-support destroyed in 1.5.16) - - * ly/property-init.ly: added commands - \defaultAccidentals \modernAccidentals \modernCautionaries - \noResetKey \forgetAccidentals - - * ly/engraver-init.ly: Correct initialization of new accidentals. - - * scm/translator-property-description.scm: The new properties - added. - - * input/: Some examples added, some changed. - - * Documentation/regression-test.tely: Added quick test of new - accidentals. - -2001-12-13 Han-Wen Nienhuys - - * scripts/lilypond-book.py (scan_latex_preamble): don't crash if - header not found - -2001-12-07 Han-Wen Nienhuys - - * lily/beam.cc (before_line_breaking): Make beams without stems - or with only one stem disappear. - -2001-12-05 Han-Wen Nienhuys - - * bibtools/bib2html.py: Add simple bib2html convertor, and .bst - files to have standardised HTML bibliography output. Update build - docs to reflect this. - - * lily/include/simple-spacer.hh (struct Simple_spacer): add - active_count_, so that we don't have to look for active springs - anymore. - - * scm/interface-description.scm,scm/grob-property-description.scm: - Add 'penalty - - * lily/simple-spacer.cc (solve): Handle forced line breaks - here. Fixes problems when combining linebreaks with non-fitting - line configurations - -2001-12-05 Jan Nieuwenhuizen - - * 1.4.9.jcn3 forward ports. - - * Really included .cvsignore. - - * Included Han-Wen's uu1 windows fixes. - - * Bugfix: lilypond-profile.sh: append to GS_FONTPATH, GS_LIB. - - * Added Cygwin setup.hint - - * Removed tex, python wrappers and postinstalls to go with Cywgin's - tetex/texmf, python installations. - - * Updated cygwin installer. - - * ly2dvi: Don't accept filenames with spaces (+ fix). - -2001-12-03 Han-Wen - - * ly/engraver-init.ly (VoiceContext): fix text engraver ordering. - - * lily/translator-def.cc: Remove manual symbol caching. - - * lily/script-column.cc (before_line_breaking): robustness check: - don't crash if no direction set. - - * scripts/pmx2ly.py: Key and clef change support (Laura Conrad) - - * scripts/pmx2ly.py (Parser.parse_header): more generic header - parsing. - - -2001-12-01 Han-Wen - - * lily/note-head.cc (head_extent): added to compute width without - ledger lines. By default, ledger lines take up width now. - - * input/regression/fingering.ly: demonstrate auto fingering. - Horizontal placement is still buggy. - - * lily/fingering-engraver.cc (class Fingering_engraver): - added. Provides support for horizontal fingering scripts - - * lily/include/grob.hh: Naming: change parent_l() into get_parent() - - * lily/side-position-interface.cc (add_staff_support): add staff - only for Y-axis side positions. - - * lily/parser.yy (request_chord): Fix mem leak. - - * lily/musical-request.cc (transpose): moved to Music::transpose() - - * lily/include/grob-info.hh: Change music pointer to SCM, so we - can store grobs as grob-creation cause as well. - - * lily/group-interface.cc (add_thing): efficiency tweak: reuse - handle when adding. Use precomputed symbols throughout lily. - - * lily/rhythmic-column-engraver.cc: make NoteSpacing grobs to keep - track of spacing issues. - - * lily/separating-line-group-engraver.cc: make StaffSpacing grobs - to keep track of staff spacing - -2001-11-30 Jan Nieuwenhuizen - - * Rewrote new conditional guile >= 1.5 compilation switches, to keep - code clean from conditionals and have a concentrated sets of - compatibility fixes for old guile versions. - - * Fixes for guile 1.4, including embedded ps. - -2001-11-30 Han-Wen Nienhuys - - * lily/stanza-number-engraver.cc (process_music): allow pairs as - well for markup texts. - - * lily/musical-request.cc (length_mom): kludge for null pointer. - - * scm/sketch.scm (sketch-output-expression): guile 1.4 compatibility - - * scm/lily.scm (sign): bugfix - - * CHANGES: Change log instated. + * make/ly-rules.make: don't remove .tely file. - * stepmake/add-html-footer.py: @BRANCH@ tag insertion. + * input/test/chords.ly (scales): whole notes only. Prevents + weird breaks. diff --git a/Documentation/bibliography/computer-notation.bib b/Documentation/bibliography/computer-notation.bib index b368d6fc30..7f60599f76 100644 --- a/Documentation/bibliography/computer-notation.bib +++ b/Documentation/bibliography/computer-notation.bib @@ -219,6 +219,33 @@ note = {A no-science-here review of Encore. HWN} } +@Book{selfridge-field97:_beyon_midi, + editor = {Eleanor Selfridge-Field}, + title = {Beyond MIDI}, + publisher = {MIT Press}, + year = 1997, + note = {Description of various music interchange formats.} +} + + +@Book{hewlett01:_virtual_score, + editor = {Walter B. Hewlett and Eleanor Selfridge-Field}, + title = {The Virtual Score; representation, retrieval and restoration}, + publisher = {MIT Press}, +series = {Computing in Musicology}, + year = 2001 +} + + + +@InProceedings{hoos98:_guido_music_notat_format, +title={The {GUIDO} Music Notation Format---A Novel Approach +for Adequately Representing Score-level Music}, +author = {H. H. Hoos and K. A. Hamel and K. Renz and J. Kilian}, +booktitle = {Proceedings of International Computer Music Conference}, +year = 1998, +pages = {451--454}, +} % LIME @Article {haken93, diff --git a/CHANGES b/Documentation/misc/CHANGES-1.5 similarity index 100% rename from CHANGES rename to Documentation/misc/CHANGES-1.5 diff --git a/Documentation/misc/ChangeLog-1.5 b/Documentation/misc/ChangeLog-1.5 new file mode 100644 index 0000000000..6c889e0eb2 --- /dev/null +++ b/Documentation/misc/ChangeLog-1.5 @@ -0,0 +1,4289 @@ +2002-08-19 Han-Wen Nienhuys + + * VERSION: release 1.6.0 + + * make/lilypond.redhat.spec.in: don't dist input/ separately + anymore + + * Documentation/user/latex-example.latex: restore from old version + + * Documentation/topdocs/index.tely: remove @settitle + + * Documentation/topdocs/README.texi: small fixes. + + * lily/self-aligment-interface.cc (centered_on_parent): only + return center if extents not empty. + + * scm/music-functions.scm (unfold-repeats): typo, + + * mf/feta-bolletjes.mf: use resolution independent variables. + +2002-08-19 janneke ; + + * lily/stem.cc (calc_stem_info): Fix [a8 a32]. + + * Documentation/index.texi (Top): Templates url fix, small url + name changes. + + * regular-spacing-engraver.cc: + * scm/grob-property-description.scm: Remove regular-distance-to. + + * input/test/spacing-regular.ly: + * lily/regular-spacing-engraver.cc: Remove. + +2002-08-18 janneke + + * mensural-ligature.cc: *** empty log message *** + + * tab-note-heads-engraver.cc: * lily/tab-note-heads-engraver.cc: + * scm/translator-property-description.scm: Add tablatureFormat. + + * input/test/staff-bracket.ly: Update. + + * regular-spacing-engraver.cc: + * lily/regular-spacing-engraver.cc: Add regular-distance-to. + + * ligature-bracket.cc, ligature-engraver.cc, ligature-head.cc, + mensural-ligature-engraver.cc, mensural-ligature.cc: + + * lily/mensural-ligature-engraver.cc: + * scm/grob-property-description.scm: Add head-width, join-left, + primitive. + +2002-08-18 Han-Wen Nienhuys + + * ambitus.cc, parser.yy: + * Documentation/user/introduction.itely: small corrections. + + * lily/parser.yy (property_def): Ugh. Switch off + internal-type-checking for autoBeamSettings. + +2002-08-18 janneke + + * music.cc (internal_set_mus_property): [!NDEBUG] Remove, use + abort instead of assert. + +2002-08-19 Jan Nieuwenhuizen + + * scm/grob-property-description.scm: Remove regular-distance-to. + + * input/test/spacing-regular.ly: + * lily/regular-spacing-engraver.cc: Remove. + +2002-08-19 Han-Wen Nienhuys + + * input/mutopia/J.S.Bach/wtk1-fugue2.ly: staff switch fixes. + + * Documentation/user/lilypond-book.itely: small cleanups + + * Documentation/user/*.itely: fix overfull hboxes. + +2002-08-19 Jan Nieuwenhuizen + + * Documentation/user/tutorial.itely (A piano excerpt): + * Documentation/user/introduction.itely (Introduction): Typo fix. + + * input/test/header-ifelse.ly: Bugfix: call numbers->string only + on first three elements of ly-version list. + + * input/test/trills.ly: Comment out \comma. + + * lily/tab-note-heads-engraver.cc: + * scm/translator-property-description.scm: Add tablatureFormat. + + * input/test/staff-bracket.ly: Update. + + * lily/regular-spacing-engraver.cc: Add regular-distance-to. + + * input/test/orchestscore.ly: + * input/test/part-combine-moments.ly: + * input/test/part-combine-staff.ly: markScriptPadding -> + RehearsalMark #'padding. + +2002-08-19 Han-Wen Nienhuys + + * Documentation/user/introduction.itely: small corrections. + + * scm/translator-property-description.scm (tablatureFormat): + describe property. + + * lily/parser.yy (property_def): Ugh. Switch off + internal-type-checking for autoBeamSettings. + +2002-08-19 Jan Nieuwenhuizen + + * lily/mensural-ligature-engraver.cc: + * scm/grob-property-description.scm: Add head-width, join-left, + primitive. + + * lily/mensural-ligature.cc: + * lily/ligature-bracket.cc: + * scm/grob-property-description.scm: + + * lily/ligature-head.cc: Add ligature-primitive-callback. + + * input/test/beam-control.ly: + * input/test/bar-script-visibility.ly: Update. + + * lily/music.cc (internal_set_mus_property): [!NDEBUG] Remove, use + abort instead of assert. + +2002-08-18 Jan Nieuwenhuizen + + * input/test/ambitus.ly: Comment out ambitus until anal-proof. + + * buildscripts/mf-to-table.py (write_fontlist): change + extra-extent-X extra-X-extent. + + * scm/music-property-description.scm (label): Typecheck markup? + (was string?). + + * Documentation/user/refman.itely (Tablatures basic): Change + TabStaff @lilypond snippets to @example until TabStaff is + anal-proof. + +2002-08-18 Rune Zedeler + + * mf/feta-klef.mf: (another) white pixels bug in g-clef fixed. + +2002-08-18 Jan Nieuwenhuizen + + * lily/include/lily-guile.hh (LY_DEFINE_NOARGS): Remove. + + * lily/grob-property.cc (internal_set_grob_property): Revert oops. + + * lily/input.cc (message): + * flower/warn.cc (message): Flush output. + + * po/lilypond.pot: Run make po-replace. + + * Documentation/user/GNUmakefile (LILYPOND_BOOK_FLAGS): be anal + with type checks. + + * Documentation/GNUmakefile (LILYPOND_BOOK_FLAGS): + * input/regression/GNUmakefile (LILYPOND_BOOK_FLAGS): + * input/test/GNUmakefile (LILYPOND_BOOK_FLAGS): + * Documentation/user/invoking.itexi: + * lily/scm-option.cc: + * lily/main.cc: Debugging options: ly-set-option (was: + set-lily-option). + + * lily/scm-option.cc (ly_option_usage): New function. + +2002-08-18 Han-Wen Nienhuys + + * lily/parser.yy (script_abbreviation): accept -_ script. + + * ly/script-init.ly (dashUnderscore): add NOTE-_ == portato (dash + and dot) + + * scripts/lilypond-book.py (re_dict): add spaces after command sequences + (LatexPaper.find_latex_dims): run latex in nonstopmode + + * input/font-body.ly: remove. + + * input/test/harmonic.ly: new file. + + * lily/side-position-interface.cc (aligned_side): don't add + padding again. + +2002-08-18 Werner Lemberg + + * ly/engraver-init.ly: + s/extraverticalExtent/extraVerticalExtent/. + +2002-08-18 Jan Nieuwenhuizen + + * lily/parser.yy (assignment, Simple_music): Warning message fix. + Junk ARRAY_SIZE definition. + + * lily/score-engraver.cc: Uniformise error message. + + * lily/grob-property.cc (internal_set_grob_property, + internal_get_grob_property): [!NDEBUG] Remove, use abort instead + of assert; we always want this functionality. Uniformise warning + message. + + * lily/main.cc (main, main_prog): Bugfix: move exit-upon-files + back, until after evaluating init_scheme_code. + + * scm/translator-property-description.scm (breakAlignOrder): Doco fix. + + * Documentation/user/lilypond-book.itely: Remove @cindex + without argument. + + * Documentation/user/internals.itely: Remove stray comma after + @cindex entry. + +2002-08-18 Han-Wen Nienhuys + + * VERSION: 1.5.74 released + + * lily/break-substitution.cc (fast_fubstitute_grob_list): use + realloc() + + * lily/dynamic-engraver.cc (process_music): don't use SCM_UNDEFINED + + * Documentation/user/tutorial.itely: fixes by Graham Percival. + +2002-08-17 Han-Wen Nienhuys + + * lily/lily-guile.cc (type_check_assignment): if + internal-type-checking set, abort if we find an unknown property. + + * input/regression/GNUmakefile,input/test/GNUmakefile: be anal + with typechecks + + * lily/beam.cc: add 'knee to interface + + * input/test/*.ly: remove or update files using deprecated + properties + + * lily/system.cc (spanner_count): new function + + * lily/break-substitution.cc (fast_fubstitute_grob_list): special + function for break substitutions on groblists in spanners. By + reordering the elements of the list, we can skip large parts of + the list in the break substitution. This brings the complexity of + Lily back to more-or-less linear in the length of the score. + + Measured speed increase: 20 % (coriolan, without -O2) + + * lily/parse-scm.cc (parse_handler): don't construct a new strport + for every parsing. This saves a lot of garbage on large files that + have many # constructs. + + * lily/source-file.cc (init_port): add an SCM port to the + sourcefile as well. + + * lily/include/input-file-results.hh: move from + file-results. Rename Input_file_settings to Input_file_results. + + * flower/ : remove simple-file-storage, mapped-file-storage, + string-storage. Move source-file, binary-source-file to lily/ + + * Documentation/header.html.in: remove FAQ + + * Documentation/index.texi (Top): reorganise + + * Documentation/topdocs/INSTALL.texi (Top): add note about fonts. + + * Documentation/topdocs/FAQ.texi: remove. + + * stepmake/stepmake/documentation-targets.make (footify): must + depend on all .html files, otherwise rebuilds are broken due to + the time stamps + + * ly/declarations-init.ly (noBreak): set penalty to 10001 (> + 10000). + +2002-08-16 Han-Wen Nienhuys + + * ly/engraver-init.ly (ChordNamesContext): minimumverticalExtent + -> minimumVerticalExtent + +2002-08-16 Stephen Peters + + * scm/pdf.scm, pdftex.scm: pdftex updates + + * scripts/ly2dvi.py: pdflatex support + +2002-08-16 Jan Nieuwenhuizen + + * Documentation/windows/installing.texi: Include info from Wiki. + +2002-08-16 Mats Bengtsson + + * scripts/lilypond-book.py (output_dict): Replace + \includegraphics{xxx.eps} -> \includegraphics{xxx} to + simplify for pdflatex users (makes no difference to latex users). + +2002-08-16 Jan Nieuwenhuizen + + * Documentation/index.texi: + * Documentation/windows/compiling.texi: + * Documentation/windows/installing.texi: Update to reflect + LilyPond's inclusion into Cygwin. + +2002-08-15 Jan Nieuwenhuizen + + * input/test/phrasing-slur-height.ly: New file. + + * scm/grob-property-description.scm (height-limit, ratio): Add. + + * lily/slur.cc: + * scm/grob-description.scm (Slur, PhrasingSlur): Move height-limit + and ratio out of details. + + * lily/scores.cc (Input_file_settings): Initalize global_header_. + + * lily/include/file-results.hh (class Input_file_settings): Add + private constructor. + + * cygwin/GNUmakefile: [CYGWIN] Install bug-lilypond-cygwin. Typo + fix. Add kpsewhich commands (Thanks Mats). + + * cygwin/bug-lilypond-cygwin.sh: New file. + + * stepmake/stepmake/help2man-rules.make: Better way of showing + help2man command. + + * Documentation/topdocs/FAQ.texi: Add more possible stale font + paths. + + * stepmake/bin/package-diff.py: Prepend ./ to cut-and-pastable + commands. + + * Documentation/topdocs/INSTALL.texi: Mention the need to and how + to create configure for CVS source trees. Mention libkpathsea-dev + as alternative possible name for tetex-devel (or should that be + the other way around?). + +2002-08-15 Han-Wen Nienhuys + + * lily/include/file-results.hh (class Input_file_settings): + encapsulate file settings in a class, Input_file_settings. + + * lily/scores.cc: new function ly_set_point_and_click_x + + * Documentation/topdocs/README.texi (Top): add note about xdelta + + * Documentation/topdocs/INSTALL.texi (Top): move kpathsea to problems + section. + +2002-08-14 Jan Nieuwenhuizen + + * scripts/ly2dvi.py: Remove debug printing. + +2002-08-14 Han-Wen Nienhuys + + * scripts/convert-ly.py (FatalConversionError.conv): bug in + verticalExtent replacement. + + * VERSION: 1.73 released. + +2002-08-14 + + * scm/output-lib.scm: Support of hammers and pulls in tablature + -- Hammers and pulls are inserted exactly like slurs, and a "H" or + a "P" is added over the slur as needed. + + * ./input/test/tablature-hammer.ly: example of hammer, pull and + legato in a tablature. + + * ly/engraver-init.ly: Stem.up-to-staff is now disabled by + default, since it appears that most of the published tablatures + are not like that. + +2002-08-13 Han-Wen Nienhuys + + * lily/beam.cc (brew_molecule): use + Staff_symbol_referencer::staff_space for thickness. + +2002-08-14 Jan Nieuwenhuizen + + * Documentation/user/lilypond.tely: Add dir entries for + executables. + + * Documentation/user/converters.itely: + * Documentation/user/invoking.itexi: Fix `invocation' node names, + in line with standard dir entries. + + * Documentation/user/convert-ly.itexi + * Documentation/user/ly2dvi.itexi: Remove. + + * scripts/ly2dvi.py: Add pseudo-filter (and stdout output) + support. + + * lily/main.c: + * lily/paper-score.cc : + * lily/gourlay-breaking.cc: Write info to stderr. + + * buildscripts/help2man.pl: Update to latest version from Debian. + Fixes generation of man pages with perl 5.6.1. + + * GNUmakefile.in: Add python link to build-datadir. Fixes + generation of midi2ly man page. + +2002-08-14 Mats Bengtsson + + * Documentation/user/{tutorial.itely, introduction.itely}: + Small fixes. + +2002-08-13 Jan Nieuwenhuizen + + * lily/beam.cc (least_squares): Add comment. + + * input/regression/beam-center-slope.ly: Update. + + * lily/beam-quanting.cc (score_stem_lengths): Revert oops. + + * input/template/melody-chords.ly: New file. + + * lily/stem.cc (calc_stem_info): Move, document, clean up and fix + up-to-stem feature. + + * ly/grace-init.ly (startGraceMusic): + * scm/grob-description.scm (beamed-lengths): Subtract half a beam + thickness, to fix most ugly beams. See input/test/stem.ly and + baerenreiter-sarabande.ly. + + * input/test/stem.ly: + * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Play with + beamed-lengths. + + * input/test/spacing.ly: Give enough room to test spacing. + + * cygwin/post-lilypond.sh: Fix and update. + + * cygwin/zlily-profile.sh: Remove. + +2002-08-12 Jan Nieuwenhuizen + + * GNUmakefile.in (EXTRA_DIST_FILES): Add server.el.patch. + + * scm/grob-property-description.scm + (beamed-extreme-minimum-free-lengths): New property, now correctly + named. + + * ly/grace-init.ly: New beam property updates. + + * input/les-nereides.ly: Updates. + + * cygwin/README.in: New file. + + * input/sondag-morgen/GNUmakefile: + * input/mutopia/R.Schumann/GNUmakefile: New file. + + * scm/grob-property-description.scm (beamed-minimum-free-lengths): + (beamed-extreme-free-lengths): New property. + + * lily/beam.cc (forced_stem_count): Count boundary cases too. + (set_stem_shorten): Integer divide bug fix. + + * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Really expect + six systems, change warning into error. + + * scm/grob-description.scm (beamed-stem-shorten): Shorten 8th + beams same as normal stem (one staffspace), high order beams less + (arbitrary guess). + (beamed-lengths): Standard length for all beams. + (beamed-minimum-free-lengths): + (beamed-extreme-minimum-free-lengths): New property. + + * input/regression/beam-default-lengths.ly: + * input/regression/beam-shortened-lengths.ly: New file. + + * lily/stem.cc (get_stem_info): New function. + (calc_stem_info): Partial rewrite. + + * scm/grob-description.scm (Beam): same beamed-stem-shorten for + all beam counts. + +2002-08-12 Han-Wen Nienhuys + + * VERSION: 1.5.72 released + + * input/sondag-morgen/GNUmakefile (examples): add file + + * input/mutopia/R.Schumann/GNUmakefile (examples): add file + + * lily/lily-guile.cc (to_dir): return CENTER if not a direction. + + * lily/include/grob.hh: remove remove_grob_property() + + * lily/stem-engraver.cc (stop_translation_timestep): remove + dir-forced grob property + + * Documentation/user/refman.itely (Grace notes): explain grace + after main note. + + * input/test/ : small convert-ly mishaps. + + * Documentation/user/preface.itely: small bits + + * Documentation/user/introduction.itely: add sectioning + +2002-08-11 Jan Nieuwenhuizen + + * lily/stem.cc (get_default_stem_end_position): use beam_count - 1 + as index; this fixes too short forced stem directions. + (calc_stem_info): various minute bugfixes. + + * lily/gourlay-breaking.cc (combine_demerits): set uniform + tightness constraint back to one. This fixes Baerenreiter + sarabande layout. + + * input: some fixes. Add \version to all files. + + * lily/stem.cc (calc_stem_info): Use get_direction_beam_count. + + * lily/beam.cc (get_direction_beam_count): New function. + + * GNUmakefile.in: Fix config.h dependency. + + * input/test/beam-dir-function.ly: Fix for new default + neutral-direction = -1 (down). + + * input/regression/tuplet-properties.ly: + * input/regression/tuplet-nest.ly: Fix. + + * lilypond-font-lock.el (LilyPond-font-lock-keywords): + * input/test/improv.ly: + * input/test/cautionaries.ly: Accidentals -> Accidental. + + * input/test/add-text-script.ly: Bugfix. How did this ever work? + + * Documentation/windows/installing.texi: + * Documentation/windows/compiling.texi: + * cygwin/README: Update to reflect new binary release setup and + build instructions. + +2002-08-10 Jan Nieuwenhuizen + + * server.el.patch: Update. + +2002-08-10 Han-Wen Nienhuys + + * stepmake/stepmake/metafont-rules.make: pktrace -> mftrace name + change. + * configure.in: idem + +2002-08-10 Juergen Reuter + + * mf/parmesan-timesig.mf, scm/output-lib.scm, + lily/include/time-signature.hh, lily/time-signature.cc, + input/test/time.ly: fixed broken time-signature by setting grob + property font-family automatically. + +2002-08-10 Jan Nieuwenhuizen + + * Documentation/user/tutorial.itely (Running LilyPond): Mention + xdvi and XFree86 option for Windows users. + + * Documentation/user/invoking.itexi: Add ly2dvi's -p alias. + + * scripts/ly2dvi.py: Bugfix for `ly2dvi -I ./foo foo.ly'. Also + append directory of first file to search path, allowing + `ly2dvi foo/foo.ly' when foo.ly includes other files from + directory foo. Add short option alias '-p' for --pdf. + + * input/test/trills.ly: + * input/test/preset-extent.ly: + * scm/grob-property-description.scm: more extent renaming. + +2002-08-09 Han-Wen Nienhuys + + * lily/parse-scm.cc (protected_ly_parse_scm): compatibility with + CVS GUILE + + * input/test/preset-extent.ly (texidoc): added file. + + * scripts/convert-ly.py: add extent rule. + + * lily/grob.cc: change extent-[XY] to [XY]-extent globally. + +2002-08-09 Jan Nieuwenhuizen + + * lily/main.cc (main): Remove stale #ifdef for windows. + + * stepmake/stepmake/python-module-rules.make: + * stepmake/stepmake/python-module-vars.make: + * stepmake/stepmake/shared-library-vars.make: Add Cygwin support. + + * stepmake/stepmake/generic-vars.make: + * cygwin/GNUmakefile: Fix Cygwin build detection. + + * stepmake/stepmake/shared-library-rules.make: Remove version juggling. + + * stepmake/stepmake/shared-library-targets.make: Default target + includes version, add target libFOO. + + * lily/main.cc: Temporary fix for access to scm_read_opts array + from shared Cygwin library. + +2002-08-08 Rune Zedeler + + * ly/property-init.ly: Added phrasingSlurUp, phrasingSlurDown and + phrasingSlurBoth. + + * input/mutopia/R.Schumann/romanze-op28-2.ly: Added. + + * input/sondag-morgen/*: renamed files from input/SondagMorgen/* + +2002-08-08 Han-Wen Nienhuys + + * lily/beam.cc (struct Int_set): typo. + + * mf/feta-beugel.mf (code): braces should start at 0, not 1. + + * lily/include/lily-guile.hh (scm_int2num): guile 1.4 compatibility. + + * scm/grob-description.scm (all-grob-descriptions): set + X-offset-callbacks for TextScript + + * lily/stem.cc (invisible_b): don't use support_head(), since it + sets stem direction. + + * lily/beam.cc (struct Int_set): don't get stuck inserting + interval segments of length 0.0. + + * scripts/convert-ly.py: break-align conversion. + +2002-08-06 Han-Wen Nienhuys + + * lily/*.cc (process_music): gh_int2scm -> scm_int2num + +2002-08-06 Heikki Junes + + * lilypond-mode.el: Also "C-xC-s" sets default command to LilyPond. + +2002-08-05 Rune Zedeler + + * mf/feta-eindelijk.mf: Fix silly typo in 16th and shorter rests. + +2002-08-05 Han-Wen Nienhuys + + * stepmake/bin/make-version.py: robustify. + + * input/test/rhythm-excercise.ly: new file + + * input/test/blank-notes.ly: new file + + * lily/note-head.cc (head_extent): robustness fix. + + * Documentation/user/preface.itely: add some more. + +2002-08-04 Rune Zedeler + + * Documentation/user/refman.itely + * Documentation/user/internals.itely: Documented "Current" property. + +2002-08-04 Han-Wen + + * lily/lily-guile.cc: change gh_str02scm to scm_makfrom0str. + +2002-08-04 Werner Lemberg + + * tex/lilyponddefs.tex: s/filllastpage/lastpagefill/. + + * Documentation/user/refman.itely: Document it. + +2002-08-04 Han-Wen + + * lily/main.cc (sane_putenv): Oops. Should supply a private copy + to putenv. (this was actually caught by valgrind, but I didn't + think the error was mine... ) + +2002-08-03 Han-Wen + + * tex/lilyponddefs.tex: add filllastpage support. + + * GNUmakefile.in: barf if config.h is older than configure. + + * VERSION: released 1.5.71 + + * lily/beam.cc (consider_auto_knees): rewrite function; now only + consider horizontal knees. Fixes input/bugs/bizzarre-beam.ly + + * lily/syllable-group.cc (set_lyric_align): fix centering on note + head for `normal' lyrics. This fixes input/bugs/lyrics-spacing.ly. + +2002-08-02 Han-Wen + + * lily/beam.cc (connect_beams): fix quarter note beams. + + * input/regression/beam-quarter.ly: new file. + +2002-08-02 Mats Bengtsson + + * buildscripts/mf-to-table.py (postfixes): Reduce the line spacing + in the font list. + +2002-08-02 Han-Wen Nienhuys + + * lily/scm-option.cc: excorcise iostream. + + * lily/main.cc: remove iostream usage. + +2002-08-02 Han-Wen + + * scripts/lilypond-book.py: make URL for printfilename option. + + * lily/beam.cc (position_with_maximal_common_beams): fix kneed + beamlets. This fixes input/bugs/knee + + * ly/engraver-init.ly (HaraKiriStaffContext): switch off auto knee + for hara kiri staffs. + + * lily/slur-engraver.cc (try_music): remove nested slur + functionality. This fixes spurious warnings with the partcombiner. + +2002-08-01 Han-Wen Nienhuys + + * lily/parse-scm.cc (protected_ly_parse_scm): guile 1.4 compatibility. + +2002-08-01 Rune Zedeler + + * lily/tab-note-heads-engraver.cc: add algorithm for automatically + selecting frets when none given by user. Read property + "minimumFret". + + * scm/translator-property-description.scm: Add "minimumFret" + + * mf/feta-eindelijk.mf: Changed layout of 16th and shorter rests + to match the 8th rest. slanted 8th rest a bit more. + WARNING: 8th rest and classical quarter rest exchanged. + +2002-08-01 Mats Bengtsson + + * scm/grob-description.scm (RehearsalMark): Add baseline-skip to + handle multiline marks correctly. + +2002-07-31 Mats Bengtsson + + * scripts/ly2dvi.py (ly_paper_to_latexpaper): Fix dvips flags + +2002-07-31 Rune Zedeler + + * input/SondagMorgen/*.ly: Added. TODO: Lots of cleanups but now + it's there. + +2002-07-31 Han-Wen Nienhuys + + * lily/parser.yy (chord_notes): typo. + + * scm/music-functions.scm (unfold-repeats): bugfix + +2002-07-31 Rune Zedeler + + * ly/engraver-init.ly: remove alias "Current" from all contexts. + + * lily/translator-group (find_existing_translator): If + n=="Current", return this context. + + * lily/rest.cc: + * lily/time-signature.cc: spacing for even number of staff lines. + +2002-07-31 Han-Wen + + * input/bugs/: remove various files. + + * Documentation/user/refman.itely: doco updates. + + * scripts/ly2dvi.py (find_pfa_fonts): add and document --pdf + option. + +2002-07-30 Rune Zedeler + + * ly/engraver-init.ly: add alias "Current" to all contexts. + + * ly/property-init.ly: Use "Current" context in the accidental + macros. TODO: Do the same in some of the other macros? + + * scm/output-lib.scm (tablature-stem-attachment-function): add + duration argument. Now the function can be called again :-) + +2002-07-30 Han-Wen + + * lily/parse-scm.cc (parse_handler): add better error message, + return a sensible number of nchars + +2002-07-29 Han-Wen Nienhuys + + * lily/parse-scm.cc (protected_ly_parse_scm): catch GUILE errors + when parsing, and emit useful warning message. + + * lily/lily-guile.cc (ly_parse_scm): add line/col/file locations + to SCM port for parser. + +2002-07-28 Rune Zedeler + + * lily/note-spacing.cc (stem_dir_correction) Add property + knee_spacing_correction controlling the amount of optical spacing + added to knees. + +2002-07-28 Glen Prideaux + + * lily/syllable-group.cc (set_lyric_align): Only fiddle with + alignment if a note has more than a single lyric so single stanza + songs are aligned correctly. + +2002-07-28 Han-Wen + + * input/test/broken-spanner-adjustment.ly: new file. + +2002-07-27 Mats Bengtsson + + * scripts/lilypond-book.py: Handle printfilename also together + with {small,}verbatim + +2002-07-27 Juergen Reuter + + * scm/output-lib.scm, lily/note-head.cc: fixed broken baroque + note-head style by setting grob property font-family + automatically. + +2002-07-26 Jan Nieuwenhuizen + + * VERSION: 1.5.70 released. + + * Documentation/user/lilypond-book.itely (Insert music snippets + into your texts using lilypond-book): Briefly mention HTML + documents. Started rewrite, but lost inspiration. + + * lily/grob-scheme.cc (get_original, get_system, get_broken_into): + Move scheme funcs from grob.cc and spanner.cc. + + * lily, flower: Ran buildscripts/ontgaar.py. See also + http://lilypond.org/wiki/?CodingStandards. + + * Documentation/GNUmakefile: Remove regression-test stuff. + (deep-WWW-clean): Remove wiki-dump. Fixes web-clean target. + + * Documentation/regression-test.tely: Remove. + + * Documentation/user/refman.itely (Text scripts): Comment out ref + to PostScript output. + + * lily/beam.cc (knee_b): Fix to also work if some dirs are not + set. + + * lily/beam.cc (set_stem_directions): For knees, set stems to + their natural direction. + +2002-07-25 Jan Nieuwenhuizen + + * lily/stem.cc (calc_stem_info): Don't force stems of kneed beams + to reach middle staff line. + + * lily/beam.cc (consider_auto_knees): Recalculate beam position + after deciding for a knee. + +2002-07-26 Han-Wen + + * Documentation/user/internals.itely: move output-formats doco to + WikiWiki. + +2002-07-25 Han-Wen + + * po/fr.po: update from TP + + * input/template/GNUmakefile (TITLE): add lysdoc target for the + templates + + * Documentation/user/introduction.itely (Introduction): finish + introduction + +2002-07-25 Han-Wen Nienhuys + + * lily/include/music-iterator.hh (class Music_iterator): change + get_music() to get_pending_events(). + +2002-07-25 Jan Nieuwenhuizen + + * buildscripts/ontgaar.py: get_music () -> get_pending_events (). + + * buildscripts/ontgaar.py: New file. + + * scm/grob-property-description.scm (conditional-elements): Add + extent-X. + + * lily/grob.cc: Add extent-X and extent-Y to interface. + + * lily/grob-scheme.cc (ly_get_parent): Don't dereference null + parent. (Han-Wen) + + * input/test/move-accidentals.ly: New file. (Han-Wen) + +2002-07-25 Han-Wen + + * lily/grob-scheme.cc (ly_get_parent): don't crash if no parent. + + * lily/slur.cc (get_first_notecolumn_y): robustness: don't crash + if no note-columns. + + * server.el.patch: new file. + + * Documentation/user/refman.itely (Point and click): updates. + (Graphical interfaces): add node + (Vertical spacing): add node + +2002-07-24 Jan Nieuwenhuizen + + * lily, lily/include: Rename line to system. Junk _l suffix. + +2002-07-24 Han-Wen Nienhuys + + * po/fr.po: update from TP. + + * buildscripts/lilypond-profile.sh: update support for + LILYPONDPREFIX + +2002-07-24 Jan Nieuwenhuizen + + * Documentation/user/refman.itely (Point and click): Add info + about GVim, NEdit. + +2002-07-24 Han-Wen Nienhuys + + * lily/accidental-placement.cc (extent_callback): remove function + (position_accidentals): do nothing if not live. + Use accidental-grobs property i.s.o. accidentals, to maintain + proper typing. + +2002-07-24 Jan Nieuwenhuizen + + * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: * + input/test/count-systems.ly: Update to new system-count function + names. + + * lily/grob.cc (get_line, get_original): Use LY_DEFINE. + + * lily/spanner.cc (get_broken_into): Use LY_DEFINE. + + * lily/include/spanner.hh: + * lily/include/grob.hh: Remove DECLARE_SCHEME_CALLBACKs. + + * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Add + forcedBreak options and fix measure count comments. + + * GNUmakefile.in: Junk intl. + + * config.make.in (prefix): Prepend $(DESTDIR) to allow install + without overriding prefix. + + * aclocal.m4: Regenerate. + + * stepmake/aclocal.m4: Don't expand $prefix: fixes install with + other $prefix. + + * cygwin/GNUmakefile: + * ly/GNUmakefile: + * python/GNUmakefile: + * make/GNUmakefile: + * mf/GNUmakefile: + * scm/GNUmakefile: + * tex/GNUmakefile: use local_package_datadir iso datadir. + + * make/substitute.make (ATVARIABLES): Add local_lilypond_datadir. + + * aclocal.m4: Regenerate. + + * config.hh.in: + * config.make.in: + * stepmake/aclocal.m4: Cleanups and more conventional naming for + datadir ($prefix/share), package_datadir ($prefix/$package), and + local_package_datadir ($prefix/$package/$version). + + * make/lilypond-vars.make: + * scripts/ly2dvi.py: + * scripts/lilypond-book.py: + * scripts/mup2ly.py: + * scripts/midi2ly.py: use local_package_datadir iso datadir. + + * GNUmakefile.in: build_datadir without version. + + * lily/main.cc: Datadir cleanup. + + * lily/text-item.cc (lookup_text): + * lily/music-output-def.cc (print_smob): + * lily/mensural-ligature.cc (brew_molecule): + * lily/beam-quanting.cc (score_slopes_dy, score_forbidden_quants): + Fix warnings. + +2002-07-23 Jan Nieuwenhuizen + + * input/mutopia/J.S.Bach/baerenreiter-sarabande.ly: Warn when not + using 6 systems, like the original. + + * input/test/count-systems.ly: New file. + + * lily/spanner.cc (get_broken_into): + * lily/grob.cc (original_scm, line_scm): New function. + + * lily/include/grob.hh (ly_scm2grob_array): Moved from + group-interface.hh and renamed. + (ly_grob_array2scm): New function. + +2002-07-23 Juergen Reuter + + * lily/ambitus-engraver.cc: bugfix: create ambitus grob during + process_music phase + +2002-07-23 Han-Wen + + * lily/separation-item.cc (width): cache extent in extent-X + + * lily/spacing-spanner.cc (standard_breakable_column_spacing): + only add extent for non-musical column. + + * lily/accidental-placement.cc (split_accidentals): new function + (get_relevant_accidental_extent): new function + + * lily/staff-spacing.cc (next_note_correction): idem + + * lily/separating-group-spanner.cc (find_rods): use + conditional_width(). + + * scm/sketch.scm: fix roundfilledbox definition + + * lily/lily-guile.cc (robust_list_ref): be sensible with negative + argument. This fixes too-long stems on half and quarter notes. + +2002-07-23 Jan Nieuwenhuizen + + * Documentation/index.texi: Add, fix, change some links and names, + including dump of wiki wiki. + + * Documentation/GNUmakefile (local-WWW): Slurp wiki. + + * buildscripts/wiki-slurp.py: New file. Accept multiple pattern. + (unwiki): Replace local urls with too. + + * Documentation/GNUmakefile (wiki-dump): New target. + + * Documentation/header.html.in: Link to Documentation/index + renamed to Index (was other...). + + * Documentation/regression-test.tely: Remove. + + * make/lysdoc-targets.make (local-WWW): Add default targets .ps.gz + and .pdf. + +2002-07-22 Han-Wen + + * VERSION: 1.5.69 released + + * lily/accidental-placement.cc (position_accidentals): document + two bugcases. + + * lily/skyline.cc (skyline_meshing_distance): bugfixes. + +2002-07-22 Jan Nieuwenhuizen + + * input/regression/abe.ly: + * input/test/transposing.ly: Remove mention of mudela. + + * scripts/lilypond-book.py (make_pixmap): Don't use quiet_system, + ie, don't redirect PNG output to /dev/null. Fixes lys-to-tely + documents. + + * input/test/mark.ly: + * Documentation/user/refman.itely: Re-enable \mark #'() example. + + * lily/parser.yy: Revert to MARK scalar. + +2002-07-21 Han-Wen + + * lily/accidental.cc (accurate_boxes): add function to represent + flat with 2 boxes. Improves flat-flat accidental spacing. + + * lily/accidental-placement.cc (stagger_apes): try to arrange accs + in a C form, with the top accidental closet to the chord. + + * lily/stem.cc (get_default_stem_end_position): don't crash if + lengths not set. + (get_default_stem_end_position): idem for stem-shorten. + + * mf/feta-toevallig.mf: enlarge flat bbox. + + * input/regression/lyrics-extender.ly: new file. + + * lily/lyric-extender.cc (brew_molecule): don't add + right-trim-amount if extender is broken. + + * scripts/ly2dvi.py (global_latex_preamble): bugfix (thanks Werner). + +2002-07-21 Jan Nieuwenhuizen + + * Documentation/index.texi: Add pointers to new regression and + test documents. + + * Documentation/user/converters.itely: + Documentation/user/invoking.itexi: Some small fixes for uniform + usage example. + + * input/allfontsize.ly, size*.ly: New files, moved from + input/regression. + + * input/font20.ly, font-body.ly: New files, moved from input/test. + + * input/font*.ly: New files, moved from input/test. + + * input/test/*.ly: Remove empty files, fix broken ones. + + * input/test/different-time-signatures.ly: Add FIXME marker; + comment-out broken code. + + * Documentation/regression-test.tely: Comment-out, add + obsolete-marker and url to regression-test-dir. + + * input/test/GNUmakefile: + * input/regression/GNUmakefile: Add rule for lys-to-tely.py. + + * input/regression/+.ly: + * input/test/+.ly: New file. + + * input/test/cue-notes.ly: better example + + * Documentation/user/refman.itely (Font selection): font size doco + + * input/mutopia/F.Schubert/standchen.ly: note bugfix + + * lily/stem.cc: rewrite of scoring to give sane results on knee + beams. + + * lily/beam.cc (set_stem_lengths): extend stems for gapped tremolo + beams. + (connect_beams): chop off beaming outside the beam. Fixes problem + with tremolo beams. + + * lily/score-engraver.cc (initialize): error if feta20.afm + +2002-07-19 Han-Wen + + * scm/engraver-documentation-lib.scm + (document-property-operation): add properties to context + documentation. + + * scm/documentation-lib.scm (pad-string-to): align info menus. + +2002-07-18 Jan Nieuwenhuizen + + * debian/GNUmakefile: Remove lilypond.links. + + * debian/: Debian patch (Anthony Fok). + + * debian/lilypond.links: Remove, as per Anthony's request. + + * aclocal.m4: Regenerate. + + * stepmake/aclocal.m4: Add --with-kpathsea-include, + --with-kpathsea-lib options. + + * scripts/mup2ly.py: Cut-n-paste include missing lilylib. + + * stepmake/stepmake/compile-vars.make: + * stepmake/stepmake/executable-rules.make: + * stepmake/stepmake/python-module-rules.make: + * stepmake/stepmake/shared-library-rules.make: Use ALL_LDFLAGS, to + guard agains user override of LDFLAGS. + + * Documentation/user/refman.itely: Compile fix for \mark #'(music ...). + + * Documentation/user/internals.itely: Use ly-set-mus-property!. + + * cygwin/mknetrel: New file. + + * cygwin: New directory. Moved Cygwin stuff from + Documentation/windows. + + * Documentation/windows/fix-suffixes.sh: + * buildscripts/walk.sh: Junk. + + * aclocal.m4: Regenerate. + + * buildscripts/walk.sh: Remove. + + * stepmake/stepmake/topdocs-targets.make: + * stepmake/stepmake/help2man-rules.make: + * stepmake/stepmake/generic-vars.make: + * stepmake/make/stepmake.make: + * Documentation/user/GNUmakefile: + * make/stepmake.make: + * make/lilypond-vars.make: + * GNUmakefile.in: + * stepmake/aclocal.m4: Remove builddir cruftyness. + + * stepmake/stepmake/c++-rules.make: Use ALL_CXXFLAGS, to guard + agains user override of CXXFLAGS. + + * stepmake/stepmake/c++-vars.make (ALL_CXXFLAGS): Include CXXFLAGS. + + * stepmake/stepmake/c-rules.make: Use ALL_CFLAGS, to guard + against user override of CFLAGS. + + * stepmake/stepmake/c-vars.make (ALL_CFLAGS): Include CFLAGS. + +2002-07-17 Han-Wen + + * GNUmakefile.in: distribute lexer-gcc-3.1.sh as well + + * lily/music.cc (LY_DEFINE): change ly-set-mus-property to + ly-set-mus-property! + + * lily/grob.cc (LY_DEFINE): change ly-set-grob-property to ly-set-grob-property! + + * lily/parser.yy (Repeated_music): shift duration log for tremolo + repeats, instead of klutzing around. + + * lily/chord-tremolo-engraver.cc (acknowledge_grob): set X parent + of stem tremolo grobs. + + * scm/music-functions.scm (shift-duration-log): new function, add + to duration log of all notes. + + * lily/duration.cc: add compression factor arguments to + make-duration. + compression-factor, dot-count, duration-log: add scheme functions. + + * lily/mark-engraver.cc (process_music): allow \mark to take a + number as argument as well. + +2002-07-16 Han-Wen + + * lily/rest.cc (after_line_breaking): only translate the whole + rest if we have more than 1 staff line + +2002-07-16 Han-Wen Nienhuys + + * VERSION: release 1.5.68 + + * scripts/lilypond-book.py: fixes by Tom Cato Amundsen. + +2002-07-15 Han-Wen Nienhuys + + * lily/beam-quanting.cc (score_forbidden_quants): split beam + quanting functionality. + (quanting): argh. Forgot how linear interpolation works. Bugfix. + + * Documentation/index.texi (Top): add whole-big-page documentation. + + * lily/side-position-interface.cc (general_side_position): + Subtract parent offset iso. adding it. (Huh? How could this have + worked?) + + * lily/clef-engraver.cc (stop_translation_timestep): add staff to + OctavateEight support. + + * scripts/lilypond-book.py: add smallverbatim option. + + * lily/beam.cc (quanting): bugfix. Behave sanely when no visible + stems. + + * lily/accidental-placement.cc (position_accidentals): add padding + property. Increase default setting to 0.2. + +2002-07-15 Han-Wen + + * lily/paper-column.cc (before_line_breaking): urg. bugfix. + + * lily/separating-line-group-engraver.cc (finalize): don't replace + right-items, but add to list. This fixes a bug when a staff ends + with cross-staff voice switching away. + +2002-07-14 Han-Wen + + * input/mutopia/GNUmakefile: move mutopia/ to input/mutopia/ + + * lily/beam.cc (quanting): add explicit support for cross-staff + beaming: make slope penalty larger. + + * lily/beam.cc: use common refpoints throughout. This fixes many + cross staff issues. + + * lily/paper-column.cc (before_line_breaking): bug fix. + + * lily/volta-engraver.cc (process_music): do something sensible if + no staffs found. + + * scripts/lilypond-book.py (make_pixmap): opps. Do png conversion + only once. + + * Documentation/user/refman.itely (Global layout): made section on + global layout, added spacing documentation. + + * lily/staff-symbol.cc (brew_molecule): change ragged right for + staff symbols. See comments. + +2002-07-14 Jan Nieuwenhuizen + + * lily/voice-devnull-engraver.cc (acknowledge_grob): Use proper + spelling for always. In solo a due mode, kill spanners when the + other thread has solo. + + * lily/thread-devnull-engraver.cc (acknowledge_grob): In solo a + due mode, kill everything when the other thread has solo. + + * lily/a2-engraver.cc (acknowledge_grob): In solo a due mode, do + not set directions when we have solo. + + * lily/part-combine-music-iterator.cc (process): Set property + "othersolo" if the other thread has solo. + +2002-07-13 Han-Wen + + * VERSION: 1.5.67 released. + + * lily/beam.cc (calc_stem_y): fix beams on quarter notes. + + * lily/stem-tremolo.cc (brew_molecule): add code for stem tremolos. + + * lily/auto-beam-engraver.cc (create_beam_p): remember Beam + settings at the start of a potential auto beam. + + * lily/include/sequential-iterator.hh (class Sequential_iterator): + bugfix: protect music list from GC. + + * Documentation/user/introduction.itely: misc fixes. + + * scripts/ly2dvi.py (run_latex): show latex error log. Ask for + bugreport if lilypond is killed by a signal. + + * input/regression/beam-funky.ly: new file + + * lily/input-smob.cc (make_input): GUILE 1.7 compatibility fixes. + + * lily/beam.cc: complete rewrite of multiplicity. This fixes 16th + knees code. + (quanting): add french beaming support (property french-beaming) + (stem_beams): removed. + +i2002-07-12 Mats Bengtsson + + * lily/beam.cc (after_line_breaking): Set correct stem lengths + also when beam positions are set manually. + (consider_auto_knees): Do not use automatic knees if the directions + are set manually by the user. + +2002-07-12 Han-Wen + + * input/regression/grace-auto-beam.ly: new file + + * input/regression/grace-unfold-repeat.ly: new file + + * lily/auto-beam-engraver.cc (test_moment): never start on grace moments. + + * lily/forbid-break-engraver.cc (start_translation_timestep): skip + grace notes for break-forbidding. Breaks during grace notes are + handled by Bar_engraver. + + * lily/unfolded-repeat-iterator.cc: Reimplement + Unfolded_repeat_iterator, Volta_repeat_iterator using + Sequential_iterator. All grace functionality from {} carries over + to repeats as well. + + * lily/sequential-iterator.cc: new file: form baseclass for + sequential music iterator and unfolded/volta repeat iterator. + +2002-07-11 Han-Wen Nienhuys + + * lily/include/debug.hh: deprecate. + + * lily/spacing-spanner.cc (set_springs): add support for + common-shortest-duration field. + + * lily/parser.yy (translator_spec_body): allow \set in \translator + {} block. This is the same as \override, here. + + * lily/score-engraver.cc (one_time_step): don't warn about columns + when skipTypesetting == #t. + + * lily/spacing-spanner.cc (musical_column_spacing): change + ragged right function to produce natural spacing. + +2002-07-10 Han-Wen Nienhuys + + * lily/paper-column.cc (before_line_breaking): update + #'bounded-by-me field for suicided items. This fixes crazy + spacing in \partcombine scores. + +2002-07-10 Jan Nieuwenhuizen + + * config.hh.in: Add HAVE_SSTREAM. + + * configure.in: Add check for sstream header. + +2002-07-09 Mats Bengtsson + + * flower/source-file.cc: Fix compatibility with older g++. + +2002-07-09 Jan Nieuwenhuizen + + * input/twinkle.ly: Bugfix: no automaticMelismata. + +2002-07-08 Han-Wen + + * mutopia/J.S.Bach/Cembalo-Partitas/: remove + + * ly/engraver-init.ly (ScoreContext): turn on automaticMelismata + by default. + + * lily/voice-devnull-engraver.cc (try_music): + lily/thread-devnull-engraver.cc: use proper spelling for #'always. + + * lily/unfolded-repeat-iterator.cc (Unfolded_repeat_iterator): + copy here_mom_ too. This fixes an obscure bug with combining + partcombine and repeat + + * lily/chord-tremolo-iterator.cc (Chord_tremolo_iterator): copy + factor too. + +2002-07-07 Han-Wen + + * mutopia/J.S.Bach/pa.ly: remove + * mutopia/J.S.Bach/Duette/: remove + + * scm/font.scm (change-rhs-size): add support for "paper19.ly" + + * VERSION: 1.5.66 released + + * scm/grob-description.scm (all-grob-descriptions): add + item-interface where necessary + + * lily/score-engraver.cc (one_time_step): warn for grobs created + during stop_translation_timestep(). + + * lily/a2-engraver.cc: restrict acknowledged grob types. + + * lily/chord-name-engraver.cc: remove acknowledge_grob(). + + * Documentation/user/tutorial.itely: doc carnage. + +2002-07-06 Rune Zedeler + + * Documentation/user/refman.itely: Documented accidentals + (incl. bugs), subdivideBeams and drum/percussion notation. + + * lily/translator-group.cc, lily/include/translator-group.hh + (Translator_group::set_children_property): removed. + + * lily/accidental-engraver.cc: don't use + Translator_group::set_children_property. + + * lily/new-accidental-engraver.cc: Added. More correct + accidentals, but wrong spacing. + + * lily/beam-enagraver.cc, lily/auto-beam-engraver.cc: Small + subdivideBeams-fixes. + + * scm/drums.scm: Small changes/fixes in instruments and maps + +2002-07-05 Jan Nieuwenhuizen + + * lexer-gcc-3.1.sh: Fixes and more comments. + + * Documentation/topdocs/INSTALL.texi: Add comment about gcc-3.0.4 + problems. + + * lily/include/stream.hh: + * lily/include/moment.hh: + * lily/include/midi-stream.hh: + * lily/streams.cc: + * lily/scm-option.cc: + * lily/parser.yy: + * lily/my-lily-lexer.cc: + * lily/moment.cc: + * lily/midi-stream.cc: + * lily/main.cc: + * lily/lexer.ll: + * lily/includable-lexer.cc: + * flower/include/source-file.hh: + * flower/include/parray.hh: + * flower/include/dictionary.hh: + * flower/include/array.icc: + * flower/string.cc: + * flower/source-file.cc: + * flower/getopt-long.cc: gcc-3.1 fixes. + + * stepmake/stepmake/generic-targets.make: Add comment about warning. + + * lexer-gcc-3.0.patch: Add comment, and a fix for installations + that have an unpatched flex and gcc-3.1.x. + + * Documentation/topdocs/INSTALL.texi: Add comments and + instructions on gcc-3.1.x. + + * lexer-gcc-3.1.sh: New file. + + * aclocal.m4: regenerate. + + * stepmake/aclocal.m4: Version compare fix. + +2002-07-05 Han-Wen + + * ly/engraver-init.ly (RhythmicStaffContext): stems up by default. + + * lily-guile.hh: remove guile 1.3 compatibility, add 1.4 + compatibility functions. + +2002-07-05 Jan Nieuwenhuizen + + * Documentation/windows/lilypond.hint (requires): Add libintl2. + +2002-07-04 Han-Wen Nienhuys + + * VERSION: 1.5.65 released. + + * scripts/lilypond-book.py: patches by Tom Cato Amundsen. Adds + support for the columnsep when using the geometry package. + +2002-07-04 Jan Nieuwenhuizen + + * scm/grob-property-description.scm (minimum-space-pair): Remove. + + * Documentation/windows/README: + * Documentation/windows/guile-1.5.6-1.5.6.jcn2.patch: + * Documentation/windows/changelog: New file. + + * Documentation/windows/lilypond.hint (requires): libguile14 (was: + guile). + +2002-07-03 Han-Wen + + * lily/grob-property.cc (HASHING_FOR_MUTABLE_PROPS): experiment: + try hash tables for mutable properties. + + * lily/align-interface.cc: remove aligned-interface and props + minimum-space-pair extra-space + + * lily/grob-property.cc: new file move grob prop handling here. + + * lily/lily-guile.cc (ly_deep_copy): add vector support + + * lily/break-substitution.cc (do_break_substitution): add vector + support. + + * lily/spanner.cc: remove extend_spanner_over_* funcs. + +2002-07-02 Jan Nieuwenhuizen + + * stepmake/aclocal.m4 (STEPMAKE_GET_VERSION): Workaround for + broken Debian gcc version string: 'gcc (GCC) 3.1.1 20020606 + (Debian prerelease)' + +2002-07-02 Han-Wen Nienhuys + + * lily/bar-check-iterator.cc (process): change + barbarCheckNoSynchronize to barCheckSynchronize + + * Documentation/user/bugs.itexi: move to introduction, remove. + + * Documentation/user/*.itexi: general carnage/cleanage. + + * Documentation/user/internals.itely: split most of file into + internal documentation (.scm and .cc) + + * buildscripts/make-font-dir.py: put designsize in to X font + sWidth field + + * make/lilypond.redhat.spec.in: postinstall bugfix + +2002-07-02 Juergen Reuter + + * lily/ambitus-engraver.cc, lily/ambitus.cc: Various bugfixes: + avoid segfault on undefined ambitus pitch; avoid wasteful creation + of pitch smobs; defer computation of centralCPosition beyond first + timestep to catch also clefs outside of the current voice context. + +2002-07-02 Han-Wen + + * input/template/satb.ly: new file + +2002-07-01 Jan Nieuwenhuizen + + * Documentation/user/glossary.tely: Precautions for lilypond-book: + don't use spaces after @lilypond options. + + * Documentation/topdocs/INSTALL.texi (Top): Remove generic Guile + threads warning. + +2002-07-01 Han-Wen Nienhuys + + * VERSION (MAJOR_VERSION): 1.5.64 + +2002-06-30 Jan Nieuwenhuizen + + * lily/grob.cc (mark_smob): don't mark parents, explain why. + + * tex/lilyponddefs.tex: Define outputscale only once. + +2002-06-29 Jan Nieuwenhuizen + + * configure.in: Require guile 1.4 or newer (was 1.3.4?). + +2002-06-29 Han-Wen + + * lily/(phrasing-)slur-engraver.cc: remove slur{Begin|End}Attachment. + + * lily/separating-line-group-engraver.cc (acknowledge_grob): + ignore grobs with no-spacing-rods set. + + * Documentation/user/tutorial.itely (Fine tuning a piece): more tut. + + * scm/grob-description.scm (all-grob-descriptions): sort list + +2002-06-27 Jan Nieuwenhuizen + + * Documentation/user/tutorial.itely (A piano excerpt): Bugfix: + remove stray brace. + + * Documentation/topdocs/FAQ.texi (Installation): Add + lilypond-devel list. Add faq about font removal. Fix faq about + generating and running ./configure. + +2002-06-26 Jan Nieuwenhuizen + + * scm/chord-name.scm (chord::name->text): Workaround: clean markup + text. + + * lily/text-item.cc (markup_text2molecule): Bugfix: raise only once. + + * input/test/ambitus.ly: + * lily/ambitus-engraver.cc: + * lily/ambitus.cc: + * lily/include/ambitus.hh: New file. + + * GNUmakefile.in (local-clean): Also remove builddir-setup's symlinks. + +2002-06-25 Juergen Reuter + + * input/test/ambitus.ly, lily/ambitus-engraver.cc, + lily/ambitus.cc, lily/include/ambitus.hh, ly/engraver-init.ly, + scm/basic-properties.scm, scm/grob-description.scm, + scm/grob-property-description.scm: Add support for ambitus. + +2002-06-24 Han-Wen Nienhuys + + * lily/text-spanner.cc: add some props to interface (patch + courtesy Chris J). + +2002-06-24 Jan Nieuwenhuizen + + * lily/text-spanner.cc (setup_pedal_bracket): Bugfix: only + dereference valid Grob. + + * configure.in: Quoting fixes. + +2002-06-24 Han-Wen + + * VERSION: 1.5.63 released + + * lily/grob-scheme.cc: new file + + * lily/break-substitution.cc: split up break substitution + functionality, and make a special constant stack-space version for + lists of grobs. This should fix the problems of lily in + combination with pthreads/qthreads. + + * lily/grob.cc (mark_smob): bugfix: mark other parent too. + +2002-06-23 Chris Jackson + + * lily/text-spanner.cc (setup_pedal_bracket): + * lily/piano-pedal-engraver.cc (create_bracket_grobs): + Fix the lengths of mixed-style piano pedal brackets. + +2002-06-23 Jan Nieuwenhuizen + + * Documentation/user/tutorial.itely (First steps): Add missing + quotation. + + * Documentation/topdocs/INSTALL.texi (Top): Add some warnings + about guile --with-threads. Hopefully this issue can be resolved + rsn, but maybe we should even add warnings for the standard Debian + and Red Hat packages? + + * configure.in: Warn if guile is configured to use threads. Maybe + we should make this an error (ie, add to REQUIRED list?) + + * config.make.in (PACKAGE_NAME): + (PACKAGE, package): Don't hardcode. + + * VERSION (PACKAGE_NAME): Typo fix. + +2002-06-23 Han-Wen + + * input/tutorial/brahms-*.ly: new tutorial files. + + * Documentation/user/tutorial.itely: fixes. Extend cheat sheet. + + * scm/script.scm (default-script-alist): fermata is up. + + * lily/dynamic-engraver.cc (stop_translation_timestep): stop + dynamic line spanner when there is no crescendo to connect. + + * lily/tie.cc (get_control_points): add test to avoid flat ties. + +2002-06-22 Han-Wen + + * lily/note-collision.cc (check_meshing_chords): don't crash if no + stems. + + * scm/music-functions.scm (toplevel-music-functions): new + definition. Functions to apply automatically. Removes the need for + explicitly doing \apply #voicify-music + + * lily/grob.cc (do_break_substitution): rename function, use + global var for criterion argument. Reduces stack usage a little. + + * ly/engraver-init.ly (StaffContext): add Instrument_engraver + + * scripts/convert-ly.py, lily/*.cc, scm/*.scm: change + visibility-lambda to break-visibility + +2002-06-21 Jan Nieuwenhuizen + + * input/bugs/part-combiner.ly: New file. + + * lily/include/spacing-interface.hh: New file. + + * lily/include/spaceable-element.hh: Remove. + + * input/test/script-priority.ly: New file. + +2002-06-20 Han-Wen + + * lily/system.cc (output_lines): kill grobs that are only for spacing. + +2002-06-20 Jan Nieuwenhuizen + + * lily/fingering-engraver.cc (make_script): + * lily/script-engraver.cc (process_music): + * lily/text-engraver.cc: + (process_acknowledged_grobs): Remove hard coded script-priority. + + * flower/warn.cc: Cleanup. + + * lily/voice-devnull-engraver.cc: Also eat multi-measure rest, a + spanner now. + + * aclocal.m4: Regenerate. + + * stepmake/aclocal.m4: Also set GUILE_PATCH_LEVEL. + + * config.hh.in: Only set GUILE_MAJOR_VERSION if necessary. + * lily/include/lily-guile.hh: Only include config.h if necessary. + + * Changelog: cvs changes ml archive test #8. + + * lily/slur-engraver.cc: Layout fix. + +2002-06-19 Han-Wen Nienhuys + + * ly/engraver-init.ly (RhythmicStaffContext): add + Dot_column_engraver, resurrect barlines + + * VERSION: 1.5.62 released. + + * lily/engraver-group-engraver.cc (do_announces): rename + create_grobs () to process_acknowledged_grobs(). + + * lily/grob.cc (programming_error): add programming_error with + origin location. + + * lily/tuplet-bracket.cc (parallel_beam): robustness check, don't + fail if a beam doesn't have stems. + + * lily/engraver-group-engraver.cc (do_announces): scary change in + calling convention of create_grobs(): no create_grobs() call + before acknowledge_grobs(). + + * lily/sequential-music-iterator.cc (skip): add support for grace + notes. + + * lily/music.cc (Music): fix very subtle and nasty memory + corruption bug. Typical symptom: "programming_error: Rhythmic_req + has no duration" + + * mutopia/claop.py: new file: CLA(O)P II by Peter Wallin. + +2002-06-19 Han-Wen + + * ly/engraver-init.ly (RhythmicStaffContext): add + Dot_column_engraver + + + * lily/parser.yy: various protection fixes. Less objects are now + overprotected. + +2002-06-18 Jan Nieuwenhuizen + + * stepmake/bin/release.py (prev_ver): Bugfix: assume new diff + naming scheme. + + * Documentation/windows/zlily-profile.sh: + * Documentation/windows/post-lilypond.sh: Assume normal + prefix=/usr for lilypond. + + * lily/musical-request.cc (length_mom): Display origin with error. + + * input/test/duration-check.ly: New file. + + * lily/lily-guile.cc (ly_pair_p): [PARANOID]: Check for freed + cells. + + * lily/part-combine-music-iterator.cc (get_state): Bugfix: use + ly_symbol2scm to get a scm symbol (rather than ly_str02scm). + + * aclocal.m4: + * autogen.sh: Regenerate. + + * Documentation/topdocs/INSTALL.texi: + * configure.in: + * stepmake/configure.in: + * stepmake/aclocal.m4: Revert autoconf upgrade. Autoconf 2.53 has + a serious bug wrt AC_CONFIG_AUX_DIR (reported). Creating + ./configure once again requires autoconf == 2.13. + + * stepmake/autogen.sh: Check for autoconf == 2.13. + +2002-06-18 Han-Wen Nienhuys + + * lily/parser.yy (open_request_parens): add input locations to + open and close parens. + +2002-06-17 Chris Jackson + + * lily/tuplet-bracket.cc: + * lily/text-spanner.cc: + * lily/piano-pedal-engraver.cc: + * scm/grob-description.scm: + * scm/grob-property-description.scm: Changed the + edge-width property of brackets to edge-widen. Changed the sign of + the left element of edge-widen so a pair of equal numbers produces + a symmetrical bracket. + +2002-06-17 Han-Wen Nienhuys + + * ly/espanol.ly: added. + + * lily/simple-spacer.cc (solve): remove assert. + +2002-06-17 Han-Wen + + * lily/forbid-break-engraver.cc (class + Forbid_line_break_engraver): new engraver: forbid linebreaks + during playing notes + + * lily/spacing-spanner.cc (loose_column): add another check: don't + move around bar lines as loose columns. + + * scm/basic-properties.scm (default-break-barline): add pre-break + for .| barline + +2002-06-16 Jan Nieuwenhuizen + + * GNUmakefile.in (builddir-setup): Bugfix: include srcdir/tex as + well as mf/out as subdirs of tex, for kpathsea to find through TEXMF. + + * scripts/lilypond-book.py (environment): Bugfix: update to new + TEXMF scheme, from ly2dvi. + + * lily/lookup.cc (slur): Invoke bezier-bow. + + * scm/tex.scm (bezier-bow): + * scm/ps.scm (bezier-bow): Bezier sandwich with rounded endings + (Previously named bezier-sandwich). + + * scm/tex.scm (bezier-sandwich): + * scm/ps.scm (bezier-sandwich): Plain bezier sandwich. + + * make/lilypond.mandrake.spec.in (post): + * make/lilypond.suse.spec.in (post): + * make/lilypond.redhat.spec.in (post): Also remove parmesan fonts. + + * tex/lilyponddefs.tex: Uncomment feta character support. + + * Documentation/user/refman.itely (Pitches): Add espanol.ly + description. + + * ly/catalan.ly: Add comment about (spanish) -s suffix. + + * ly/espanol.ly: Spanish note names by Carlos Garc'ia Su'arez + . + +2002-06-14 Jan Nieuwenhuizen + + * GNUmakefile.in (short-examples): + (long-examples): Bugfix for --srcdir build. + (top-web): Rewrite weblist find command. + + * stepmake/bin/config.sub: + * stepmake/bin/config.guess: Update from latest autotools. + + * aclocal.m4: + * autogen.sh: Regenerate. + + * configure.in: + * stepmake/configure.in: + * stepmake/aclocal.m4: Run autoupdate. Creating ./configure now + requires autoconf >= 2.50. + + * stepmake/autogen.sh: Check for autoconf >= 2.50. + + * Documentation/user/refman.itely: Bugfix for tablature example. + + * Documentation/windows/compiling.texi: Update for new and + improved setup. + +2002-06-14 Han-Wen Nienhuys + + * lily/spacing-spanner.cc (find_shortest): make 1/8 configurable: + introduce base-shortest-duration + + * lily/parser.yy (music_output_def_body): don't crash when \tempo + in unexpected \midi{} is found. + +2002-06-13 Jan Nieuwenhuizen + + * stepmake/GNUmakefile.in: Don't install stepmake. This breaks + the use of make/ly.make for use as an external makefile. Probably + noone except for myself ever used this anyway. + + * stepmake/stepmake/GNUmakefile (INSTALLATION_DIR): Bugfix: Adapt + to new $datadir convention (/). + +2002-06-13 Han-Wen + + * VERSION: 1.5.61 released + + * Document/user/refman.itely: tablature doc and code updates by + Jean-Baptiste Lamy + + * input/template/piano-dynamics.ly: bugfixes. + + * lily/key-engraver.cc (try_music): read request only once. Don't + overwrite lastKeySignature. Call create_key() only once. This + fixes a bug with multiple equal key changes on polyphonic staffs. + +2002-06-12 Mats Bengtsson + + * scm/grob-description.scm: Add side-position-interface to TextSpanner + + * scm/grob-property-description.scm: Document the trill line type. + +2002-06-12 Jan Nieuwenhuizen + + * stepmake/stepmake/generic-vars.make: + * make/lilypond-vars.make: + * GNUmakefile.in (builddir-setup): New setup for builddir run. + Fixes LilyPond run from builddir for --srcdir builds. + + * Documentation/windows/GNUmakefile (OUT_PROFILES): Bugfix for + --srcdir build. + +2002-06-12 Han-Wen + + * scm/grob-description.scm (all-grob-descriptions): add + font-family to RehearsalMark + + * scm/drums.scm: move over definitions from drum-pitch-init.ly + + * lily/volta-bracket.cc (brew_molecule): bugfix, don't do anything + if glyph not set. + +2002-06-12 Heikki Junes + + * lilypond-mode.el: Propose saving before applying a command: + for saved buffer set default command to LilyPond. + +2002-06-11 Jan Nieuwenhuizen + + * buildscripts/mutopia-index.py (headertext_nopics): Add missing + variable. + + * Documentation/windows/lilypond.hint: Renamed (previously setup.hint). + + * Documentation/windows/lilypond-doc.hint: New file. + + * GNUmakefile.in: Forward port: Add toplevel target install-html-doc. + Bugfixes for --srcdir html-doc build. + + * make/lilypond-vars.make (LILYPOND_BOOK_INCLUDES): Forward port: + Bugfix: Include $(builddir)/mf/out (was $(srcdir)/mf/out. + +2002-06-10 Han-Wen + + * ly/script-init.ly (pralldown): add some scripts. + + * Documentation/user/refman.itely: many edits. + +2002-06-09 Han-Wen + + * lily/tuplet-bracket.cc (brew_molecule): don't translate in Y + direction, this breaks staffline avoidance of the bracket when + they're horizontal. + +2002-06-08 Mats Bengtsson + + * scripts/midi2ly.py: Fix handling of -o + +2002-06-08 Han-Wen + + * lily/molecule.cc (translate): set max distance to 100 cm. + +2002-06-07 Han-Wen Nienhuys + + * VERSION: 1.5.60 released + + * lily/beam.cc: tremolo fix. + + * scripts/convert-ly.py: add tuplet-X-visibility rules. + add VerticalExtent -> verticalExtent rules. + + * lily/axis-group-engraver.cc: consistent case for + XxxxVerticalExtent properties. + + * Documentation/user/refman.itely (Tuplets): update + tuplet-X-visibility properties. + + * input/test/defaultbars.ly: Corrected (thanks Mats) + +2002-06-05 Han-Wen Nienhuys + + * lily/beam.cc (shift_region_to_valid): fix stupido bug. + + * buildscripts/lilypond-profile.sh: override settings if + LILYPONDPREFIX is set. + +2002-06-04 Mats Bengtsson + + * scripts/ly2dvi.py (non_path_environment): Fix typo + +2002-06-03 Heikki Junes + + * lilypond-mode.el: Extend "Quick notes" containing note tuples. + + * lilypond-font-lock.el: Add fixes and comments to syntax-table. + +2002-06-03 Han-Wen + + * lily/beam-engraver.cc (class Grace_beam_engraver): derive from + beam-engraver: use different engraver so we can mix normal and + grace beams. + +2002-06-01 Han-Wen + + * lily/beam.cc (shift_region_to_valid): Try to shift positions + after slope-damping and concaveness check, so that short-stems are + not violated. + +2002-05-31 Jan Nieuwenhuizen + + * stepmake/aclocal.m4: Fix for ash as /bin/sh. + +2002-05-31 Han-Wen + + * VERSION: 1.5.59 released + + * scripts/musedata2ly.py (Parser.parse_note_line): add dots. Add + notice that missing features are exercise for user. + +2002-05-30 Jan Nieuwenhuizen + + * lily/beam.cc (score_stem_lengths): Bugfix for knees: use correct + (but alas, not partly precomputed) value for current_y when + calculating stem length demerits. + (calc_stem_y): Temporary precomputed factors fix. + + * lily/stem.cc (calc_stem_info): Take multiplicity into account + for shortest_y too. + + * input/bugs/melisma-tie-rest.ly: New file. + +2002-05-30 Han-Wen + + * lily/stem.cc (calc_stem_info): remove min_y member, rename + stuff. Remove kneeing stuff. + + * lily/beam.cc (brew_molecule): remove beam direction. Lots of + twiddling + +2002-05-29 Jan Nieuwenhuizen + + * scm/sketch.scm: + * scm/ps.scm: + * scm/pdftex.scm: + * scm/pdf.scm: + * scm/tex.scm: Add check for Guile-1.4.1. Guile includes + patch-level of version in minor-version string. Arg. + +2002-05-29 Han-Wen + + * ly/engraver-init.ly (TabStaffContext): + enable TabStaff by default. + + * Tablature support by Jean-Baptiste Lamy + +2002-05-28 Jan Nieuwenhuizen + + * config.hh.in: Remove duplicate DIR_DATADIR entry. + + * aclocal.m4: Regenerate. + + * stepmake/aclocal.m4: Append $FULL_VERSION to datadir. + +2002-05-25 Heikki Junes + + * lilypond-mode.el: Added Deutsch notes and fixed "Quick notes". + + * lilypond-mode.el: Write notes with fewer keystrokes trough a + "Quick notes"-interface. + +2002-05-26 Jan Nieuwenhuizen + + * input/regression/non-empty-text.ly: Update example with outdated + comment. + +2002-05-25 Han-Wen + + * scripts/convert-ly.py: add textNonEmpty rule + + * lily/text-engraver.cc (create_grobs): remove textNonEmpty + +2002-05-24 Jan Nieuwenhuizen + + * lily/text-item.cc (markup_text2molecule): Junk ugly lookahead by + using translate-robust add_molecule instead of add_at_edge. + Bugfix for #(lines (finger "" "1")). + +2002-05-24 Han-Wen + + * lily/stem-tremolo.cc (brew_molecule): clean up and fix stem + tremolo placement. + +2002-05-22 Han-Wen + + * VERSION: 1.5.58 + + * Documentation/user/refman.itely: Bugfix: add node Repeats and + MIDI. Regenerate menu. Fix @end example. + + * lily/accidental.cc: Add cautionary-style to interface. + + * mf/feta-beugel.mf (code): use autometric macros for braces. + This fixes input/bugs/braces. + + * lily/afm.cc (count): return numOfChars, not size of array + (always equals 256.) + + * lily/script.cc (before_line_breaking): postpone setting the + X-parent of vertical scripts. This fixes the case of scripts on + chords with seconds + +2002-05-21 Han-Wen + + * scm/grob-description.scm: fix alignment of barnumber: make sure + it doesn't hit the G-clef. + + * input/mozart-hrn3-defs.ly (startGraceMusic): typo (it's + startGraceMusic not startGraceContext). + +2002-05-20 Jan Nieuwenhuizen + + * stepmake/autogen.sh: Check for autoconf2.13, and abort if not + found. + +2002-05-20 Han-Wen + + * lily/accidental-engraver.cc: remove old accidental engraver, + move new one to accidental-engraver.cc. + + * lily/local-key-item.cc: remove file + + * lily/include/local-key-item.hh: remove file + + * scripts/ly2dvi.py (make_preview): add --preview-resolution + option. + + * lily/accidental.cc (brew_molecule): support for cautionary + accidentals. + + * lily/note-head.cc (internal_brew_molecule): warn if note head + not found. + + * lily/time-signature.cc (special_time_signature): remove warning + about time signature. + + * lily/spacing-spanner.cc (musical_column_spacing): Prevent + reverse springs by limiting fixed-note space. + +2002-05-19 Jan Nieuwenhuizen + + * stepmake/aclocal.m4: Bugfix: complain if program not found. + + * scripts/update-lily.py (next_version, prev_version, diff_name): + New function. Patches now named name-prev-latest.diff.gz. + Bugfix: import shutil. + +2002-05-19 Han-Wen + + * input/tutorial/sammartini.ly: fix and document autochange + weirdness. + + * scm/pdftex.scm: resurrect PDFTeX output. Still doesn't work, but + does produce .pdftex files. + + * lily/note-collision.cc (check_meshing_chords): move file from + collision.cc, implement merged note heads (there you go, Drarn :-) + + * input/regression/collision-heads.ly: new file + + * VERSION: 1.5.57 released. + +2002-05-18 Juergen Reuter + + * mf/parmesan-heads.mf, scm/grob-description.scm, + scm/grob-property-description.scm, scm/interface-description, + lily/include/my-lily-parser.hh, lily/include/ligature-head.hh, + lily/include/mensural-ligature.hh, lily/include/lily-proto.hh, + lily/include/ligature-engraver.hh, + lily/include/ligature-bracket.hh, lily/parser.yy, + lily/ligature-bracket-engraver.cc, lily/mensural-ligature.cc, + lily/mensural-ligature-engraver.cc, lily/note-heads-engraver.cc, + lily/ligature-head.cc, lily/ligature-engraver.cc, + lily/ligature-bracket.cc, input/test/mensural-ligatures.ly: + implemented white mensural ligatures (still with a big list of + TODOs) + + +2002-05-19 Han-Wen + + * lily/*.cc: use LY_DEFINE everywhere. Move doc strings from + Documentation/user/internals.itely. + + * lily/function-documentation.cc: new file. Infrastructure for + self documenting Scheme functions. + +2002-05-18 Han-Wen + + * lily/stem.cc (calc_stem_info): bugfix for less ugly knees. + +2002-05-17 Han-Wen + + * scripts/lilypond-book.py (re_dict): fix regexps; don't combine ? + and * (as in "([^>]*)?") + +2002-05-17 Jan Nieuwenhuizen + + * Documentation/topdocs/INSTALL.texi: Update GCC, Flex and GUILE info. + Add info about CVS. Stable/development are currently 1.4/1.5, + both at lilypond.org. + + * autogen.sh: Generate. + + * stepmake/configure: + * configure: Regenerate. + + * stepmake/stepmake/automatically-generated.sub.make: Keep + original first line. + + * stepmake/stepmake/toplevel-targets.make (autogen.sh): Add rule. + + * stepmake/stepmake/generic-targets.make (configure): Generate + using autogen.sh. + + * GNUmakefile.in (SCRIPTS): + * stepmake/GNUmakefile.in (SCRIPTS): Add autogen.sh + + * stepmake/autogen.sh: New file. + + * configure: Check for g++ >= 2.95. + + * stepmake/aclocal.m4: Fixes for FlexLexer.h, Python headers. GNU + c/c++ version checking. + + * flower/include/string.hh: Typo fix. + + * lily/include/midi-item.hh: Remove stray i. + + * Documentation/windows/GNUmakefile: Avoid collapsed directory + constructs '//'. + + * stepmake/bin/install-dot-exe.sh: Filter collapsed directory + constructs '//' from arguments. + +2002-05-17 Han-Wen + + * scm/lily.scm (ly-load): show SCM filenames if verbose. + + * lily/lily-guile.cc (init_functions): add ly-verbose function. + + * lily/main.cc (setup_paths): remove LILYINCLUDE support. + + * flower/include/{pointer,tuple}*: removed. + + * VERSION: released 1.5.56 + + * scm/music-functions.scm (check-start-chords): function to check + for chords without \context. Apply automatically from parser. + +2002-05-16 Han-Wen + + * lily/bar-line.cc: remove index entries. Texinfo can't handle : + in index entries. + + * scm/output-lib.scm: fix ez notation stems. + + * lily/paper-outputter.cc: various fixes to speed up compilation. + +2002-05-16 Mats Bengtsson + + * scripts/lilypond-book.py: Don't import pre for Python >= 2.2 + +2002-05-16 Jan Nieuwenhuizen + + * scripts/lilypond-book.py (determine_format): Bugfix: correctly + determine latex input. + + * stepmake/bin/install-sh: Include latest from libtool. + + * stepmake/configure: + * configure: Regenerate. + + * config.make.in: Remove dead variables. Add OPTIONAL/REQUIRED lists. + (USER_CFLAGS): Bugfix, include CPPFLAGS. + + * configure.in: Use new OPTIONAL/REQUIRED mechanism. + + * stepmake/aclocal.m4: Add mechanism for checking OPTIONAL or + REQUIRED programs and version. Try to continue configuring, list + missing programs at the end, but don't generate a GNUmakefile if + REQUIRED programs are missing. Cleanups, junk obsolete stuff. + Fix Cygwin detection, drop '32' suffix. Hoping this is not too + fancy for some older systems. + +2002-05-16 Han-Wen + + * lily/score-engraver.cc (typeset_all): sanity check for items + that are Y parent to spanner. + + * lily/piano-pedal-engraver.cc (create_bracket_grobs): fix broken + pedal spanners. + +2002-05-15 Han-Wen Nienhuys + + * lily/*.cc: remove as many iostream use as possible. + + * flower/ : remove text-db, text-stream, data-file. + +2002-05-15 Han-Wen + + * scripts/lilypond-book.py: add --no-music option: strip all blocks. + (completize_preamble): don't barf if no preamble present. + (do_file): allow extensions on --output + + * scripts/ly2dvi.py (make_preview): make automatic preview of + first system. Small cleanups. + +2002-05-13 Han-Wen Nienhuys + + * scripts/lilypond-book.py (make_pixmap): output png directly. + + * mf/GNUmakefile (INSTALLATION_OUT_FILES4): create and install + fonts.dir file. + + * lily/parser.yy (My_lily_parser): comment out code. (Causes + problems with recent bison releases). + + * make/lilypond.redhat.spec.in: add pfa fonts to X. + +2002-05-07 Heikki Junes + + * lilypond-font-lock.el: Fixes the order of the note name list. + +2002-05-06 Jan Nieuwenhuizen + + * scripts/lilypond-book.py: Add html/dtml output, pseudo-filter + capability, --verbose option, rlimit hack. + +2002-05-05 Han-Wen Nienhuys + + * lily/piano-pedal-engraver.cc: cleanups. + + * lily/accidental.cc (after_line_breaking): add break tie + reminders. + + * lily/text-engraver.cc (try_music): don't typeset fingerings + +2002-05-05 Heikki Junes + + * lilypond-font-lock.el: Handle \breve as a note (rest) duration. + +2002-05-04 Han-Wen + + * lily/*.cc: change gh_str02scm() to ly_str02scm(). + + * lily/spacing-spanner.cc (note_spacing): Bound + shortest-playing-length by the distance to next note. This should + fix chord tremolo spacing. + + * VERSION: 1.5.55 released + + * lily/stem.cc (off_callback): invisible stem over whole note is + centered on note now. + + * lily/stem-engraver.cc (acknowledge_grob): X_AXIS Parent of + stem-tremolo is stem now. + + * input/mozart-hrn*.ly: many corrections. + + * lily/dynamic-engraver.cc (acknowledge_grob): add Scripts to + support for dynamic scripts. + + * lily/accidental-placement.cc (position_accidentals): check for + collisions as well: should avoid those heads too. + + * lily/beam.cc (check_concave): allow undefined gap and + threshold. Change the meaning of threshold/gap == 0.0. + (check_concave): skip Stolba concaveness check if we have a knee + on outer stems. + +2002-05-03 Mats Bengtsson + + * lily/chord-tremolo-engraver.cc (try_music): Handle chord + tremolos of dotted duration. + +2002-05-03 Han-Wen + + * mf/feta-klef.mf: more twiddling with G clef. Almost straight + downstroke again. Sigh. + + * lily/dynamic-engraver.cc (acknowledge_grob): center dynamic + script on note head. + +2002-05-02 Han-Wen + + * lily/slur.cc (add_column): allow slur over rest. + +2002-04-27 Han-Wen + + * lily/beam.cc: move scoring constants out of code + +2002-04-25 Han-Wen + + * mf/feta-nummer.mf: scalability fixes. + + * mf/feta-nummer-code.mf: fixes for 5, 8. + + * mf/feta-klef.mf: G clef fixes. + +2002-04-25 Jan Nieuwenhuizen + + * scripts/ly2dvi.py: Mats' fix. Try to import pre if available. + + * scripts/lilypond-book.py: %Newline, rather than glue macros + after \end{verbatim}. + +2002-04-24 Jan Nieuwenhuizen + + * Documentation/user/lilypond-book.itely: + * scripts/lilypond-book.py: Add options [no]indent, linewidth and + noinline. + + * input/mozart-hrn3-defs.ly (startGraceContext): Customize grace init. + + * scm/grob-property-description.scm (beam-space): Junk. + + * lily/beam.cc (space_function): New method. + (get_interbeam): Call space-function. + + * scm/grob-description.scm (Beam): Initialize space-function with + Beam::space_function. + + * ly/grace-init.ly (startGraceMusic, stopGraceMusic): Set/revert + Beam.space-function. Don't quantise grace beams. + +2002-04-23 Han-Wen Nienhuys + + * VERSION: 1.5.54 released + + * mf/feta-nummer-code.mf (code): tweaks for three, fixes for 6 + bulb. + + * Documentation/index.texi: add PDF links. + + * Documentation/user/GNUmakefile (PDF_FILES): add PDF files to website. + + * lily/system-start-delimiter-engraver.cc (acknowledge_grob): + compare #'glyph as strings. + + * scripts/lilypond-book.py: fix by Mats. Try to import pre if available. + + * scripts/ly2dvi.py (setup_environment): fix by Mats. + + * lily/stem.cc (head_count): Change function name. Change property + to #'note-heads i.s.o. #'heads. + (position_noteheads): Kern noteheads for invisible stems. + (before_line_breaking): Do position_noteheads() for whole note + heads too. + + * lily/accidental-placement.cc (position_accidentals): First + determine refpoints, only then determine extents. + +2002-04-22 Han-Wen Nienhuys + + * lily/accidental-placement.cc (position_accidentals): use all + note heads for note head-skyline. + + * scripts/lilypond-book.py (re_dict): remove all *? regexps. + +2002-04-22 Jan Nieuwenhuizen + + * Documentation/windows/setup.hint (requires): Add gsview dependency. + + * scripts/lilypond-book.py (re_dict): Fix for python 2.x. + + * lilypond-mode.el (LilyPond-xdvi-command): Default to plain xdvi. + + * input/mozart-hrn3-allegro.ly: Bugfix: include defs. + +2002-04-22 Han-Wen Nienhuys + + * mf/feta-schrift.mf: lighter staccato. + +2002-04-22 Han-Wen + + * mf/feta-nummer-code.mf (code): fixes for 3 glyph. + +2002-04-21 Han-Wen + + * VERSION: 1.5.53 released + + * scm/lily.scm (ly-load): use primitive-load for loading. + + * lily/misc.cc: remove quantise_iv() + + * lily/*.cc: pass read-only arrays by reference. + + * lily/grob.cc (common_refpoint_of_array): new function. Try to + use common_refpoint_of_{array, list} when possible. + + * lily/include/accidental-placement.hh: new file. + + * lily/accidental-placement.cc (alignment_callback): position + accidentals in a better way. + + * lily/skyline.cc: new file. Compute distances for collections of + boxes. + + * lily/include/skyline.hh: new file + +2002-04-20 Han-Wen + + * lily/accidental.cc (class Accidental_interface): grob for a + single accidental. + + * lily/accidental-engraver.cc (number_accidentals): Cleanups. Lots + of reformatting + + * lily/new-accidental-engraver.cc (acknowledge_grob): Work + together with new accidental-interface. + + * lily/include/*.hh: remove spurious set_interface() decls. + + * lily/key-signature-interface.cc (brew_molecule): add padding for + natural signs. Make natural typesetting like the sharp. + + + * mf/feta-klef.mf: rewrote portion of the G-clef code. Downstroke + is now slightly curved, not straight. + + +2002-04-18 Heikki Junes + + * lilypond-mode.el: Toggles font-lock-multiline (Emacs 21.1 or newer). + + * lilypond-font-lock.el: Handles multiline-strings. Fontifies notes + more strictly. Use more clever regular expressions. Commented regexps. + +2002-04-16 Heikki Junes + + * lilypond-mode.el: "C-c f" does font-lock-fontify-buffer. + +2002-04-15 Juergen Reuter + + * scm/grob-description.scm, lily/staff-symbol.cc: added properties + to control width of staff symbol in ragged-right mode (by request + of Han-Wen) + + * ly/engraver-init.ly, lily/include/my-lily-parser.hh, + lily/include/ligature-bracket.hh, lily/lexer.ll, lily/parser.yy, + lily/ligature-bracket.cc, lily/ligature-bracket-engraver.cc: + added support for ligature brackets (needed when transcribing + mensural music) + +2002-04-15 Heikki Junes + + * lilypond-font-lock.el: Handle scheme-slurs up to seventh level. + Fontify notes more strictly. + +2002-04-15 Han-Wen + + * mf/feta-din-code.mf: dynamic z sign. + +2002-04-13 Heikki Junes + + * lilypond-mode.el: Prevent recoloring strings and comments. + + * lilypond-font-lock.el: Handle block comments: block comments + can have also ordinary comments inside. + +2002-04-13 Han-Wen + + * lily/stem.cc (get_default_dir): set direction to CENTER if + invisible. Various other fixes to deal with invisible stems and + stem-direction == CENTER. + + * lily/rest-collision.cc (do_shift): take direction from note if + not set. + + * input/regression/tie-grace.ly: new file. + + * lily/tie-engraver.cc (create_grobs): fix tied graces. + + * lily/note-spacing.cc (stem_dir_correction): set fixed space for + knee correction. Fixes tight spacing for knees. + +2002-04-12 Han-Wen Nienhuys + + * VERSION: 1.5.52 released + + * lily/*.cc: add some undocced properties. + scm/grob-description.scm: idem. + +2002-04-12 Heikki Junes + + * lilypond-font-lock.el: Handle slurs \( and \), numbers, + multi-measure rests like "R1 *4" and scheme (typically has '#' + in the beginning). Small fixes. Add few reserved words. + +2002-04-12 Jan Nieuwenhuizen + + * Documentation/topdocs/INSTALL.texi: Updates for MacOS X and + emacs mode. + + * Documentation/windows/installing.texi: Suggest gswin32c (console + program) for getting the version. Layout fixes. + +2002-04-11 Jan Nieuwenhuizen + + * Documentation/user/tutorial.itely (Running LilyPond): Separate + windows viewing commands, remove silly comment about Yap. + +2002-04-10 Mats Bengtsson + + * Documentation/topdocs/INSTALL.texi: Describe how to learn + configure to find kpathsea on for example Slackware 8.0. + + * scripts/ly2dvi.py (non_path_environment): Set $TEXMF correctly. + + * scm/grob-description.scm (MultiMeasureRest): number-threshold=1 + by default: avoid "1" over single bar rests. + + * scripts/lilypond-book.py (LatexPaper.set_geo_option): Simplify + and correct the handling of geometry options. + +2002-04-10 Han-Wen Nienhuys + + * lily/include/grob-interface.hh (ADD_INTERFACE): make + implementation for Class::has_interface automatically. Junk all + other implementations. + + * lily/grob.cc (internal_get_grob_property): also typecheck + property reads. Catches even more undocced properties. Bugfixing + left for the uninspired masses. + + * lily/beam.cc: remove end_after_line_breaking(). + + * lily/grob.cc (calculate_dependencies): remove list support for + callbacks. + + * lily/font-size-engraver.cc: only do font-interface. + +2002-04-10 Heikki Junes + + * lilypond-font-lock.el: Handle notes with cautionary accidentals. + Add few keywords. + +2002-04-09 Chris Jackson + + * lily/arpeggio.cc: New function brew_chord_bracket to draw chord + brackets using arpeggio requests. + + * ly/property-init.ly: Shorthand \arpeggioBracket defined as the + molecule-callback to use for drawing the brackets. + + * Documentation/user/refman.itely: + * input/test/chord-bracket.ly: Chord brackets documented + +2002-04-10 Han-Wen + + * mf/feta-din-code.mf: tweaks for p, s. New dynamic r sign. + + * mf/feta-eindelijk.mf: tweak for eighth rest: move bulb up. + +2002-04-09 Han-Wen Nienhuys + + * lily/tuplet-bracket.cc (after_line_breaking): bugfix for forced + direction tuplets on beams. + +2002-04-08 Chris Jackson + + * lilypond-indent.el: Bugfix of indentation of final point in buffer + +2002-04-09 Heikki Junes + + * lilypond-mode.el: new command: LilyPond-un-comment-region. + Added 2Midi to "Command"-menu. Inspired by latex.el and tex.el: + separate "Command"-menu and "LilyPond"-menu. Added "Miscellanous"- + submenu to "LilyPond"-menu. + + * lilypond-mode.el: Added "Midi all" to "Command"-menu, i.e., + an interface to play midi. + +2002-04-08 Han-Wen Nienhuys + + * input/regression/script-stack-order.ly: new file. + +2002-04-08 Han-Wen + + * VERSION (MY_PATCH_LEVEL): Release 1.5.51. + + * mf/feta-din-code.mf: kerning for dynamics. + +2002-04-07 Han-Wen + + * input/regression/dynamics-glyphs.ly: new file + + * mf/feta-din-code.mf: dynamic tweaks. New dynamic s. + + * mf/feta-nummer-code.mf: another bulb routine: mimic the bulb of + forte f for the 2 number. Some fixes for the other bulbed glyphs. + + * Documentation/windows/gs-profile.sh: + * Documentation/windows/gsview-profile.sh: Remove. Functionality + moved to gs/gsview windows packages. + +2002-04-06 Mats Bengtsson + + * lily/stem-engraver.cc (acknowledge_grob): Revert to old way of + finding out the duration. Fixes chord tremolo bug. + + * lily/completion-note-heads-engraver.cc (process_music): Set + correct duration for all requests of the broken notes. + + * input/regression/completion-heads.ly: Added example of + Completion_heads_engraver. + + * lilypond-mode.el: Added "2Midi" command + +2002-04-06 Chris Jackson + + * lily/tuplet-bracket.cc, scm/grob-description.scm: New + edge-width, edge-height and shorten-pair properties for tuplet + brackets. + + * lilypond-indent.el: Support for blinking of matching parentheses + + * lilypond-font-lock.el: Fix fontification of closing > on its own line + + * lily/piano-pedal-engraver.cc, lily/text-spanner.cc: Fixes and + cleanups of piano pedal brackets. + +2002-04-05 Han-Wen + + * mf/cmbase.mf: remove file. -- do without s, r and z signs for now. + +2002-04-04 Han-Wen + + * mf/feta-new-code.mf: new dynamic f sign. + new dynamic m sign. + +2002-04-03 Han-Wen + + * mf/feta-new-code.mf: new dynamic p sign. + +2002-04-02 Han-Wen Nienhuys + + * lily/note-spacing.cc (stem_dir_correction): only do + beam-correction if a beam is there. + + * lily/stem.cc (duration_log): change from flag_i (); better + naming. + (get_default_stem_end_position): fix dot/flag collision code. + +2002-04-02 Han-Wen + + * VERSION: release 1.5.50 + + * lily/spaceable-grob.cc (add_spring): change incorrect spring to + unit spring here. Reduces number of warning messages. + + * lily/auto-beam-engraver.cc: change noAutoBeaming to autoBeaming. + +2002-04-01 Han-Wen + + * scm/generic-property.scm: remove generic-property, property-engraver + + * lily/volta-bracket.cc (brew_molecule): use Lookup::line() for bracket + + * lily/hairpin.cc (brew_molecule): use Lookup::line() for hairpins. + + * ps/music-drawing-routines.ps: remove volta, tuplet, hairpin routines. + + * scm/*.scm: remove volta, hairpin and tuplet functions. + + * lily/rhythmic-column-engraver.cc (acknowledge_grob): don't make + note column for notes/stems/dots that already have parents. Fixes + nested grace contexts. + +2002-04-01 Jan Nieuwenhuizen + + * input/mozart-hrn-3.ly: Tweak Slur.beautiful, so that we don't + get too curved slurs. + + * scm/slur.scm (default-slur-extremity-offset-alist) + (default-phrasing-slur-extremity-offset-alist): Move slur + attachments further away from note-head, vertically. Also, leave + a horizontal gap between slur and stem end. + + * lily/beam.cc (get_interbeam): Bugfix: don't look in empty list. + +2002-04-01 Han-Wen + + * input/regression/spacing-grace-duration.ly: new file + + * lily/spacing-engraver.cc (acknowledge_grob): ignore grace notes + for shortest durations. + + * lily/multi-measure-rest.cc (set_spacing_rods): tune rods to the + extent of the mm rest. + + * lily/spacing-spanner.cc (get_duration_space): better spacing for + really short notes. + + * lily/tuplet-bracket.cc (make_bracket): new function + (get_x_offset): new function; make tuplet brackets align on stems + if stem has same direction. + (parallel_beam): be anal about matching bracket to tuplet. + + * lily/lookup.cc (line): new function Lookup::line(). + + * scm/tex.scm (dashed-line): change -line to -system in names. + + * lily/box.cc (add_point): new function. + + * flower/include/interval.hh: new function add_point (). + new function widen() + +2002-04-01 Jan Nieuwenhuizen + + * input/mozart-hrn-3.ly: Mimic Breitkopf fonts and padding. + + * scm/grob-property-description.scm (number-threshold): Add + description. + + * lily/multi-measure-rest.cc (brew_molecule): Only put number over + rest if #measures > number-threshold. Use padding (well, fake + using it, anyway). + + * scm/font.scm (make-style-sheet): New styles: mark-number, + mark-letter. + (paper20-style-sheet-alist): Add bigger bold fonts. + + * lily/mark-engraver.cc (process_music): Use style mark-number or + mark-letter. + + * .cvsignore: Ignore all kinds of lilypond input and output. + + * lily/beam.cc (ADD_INTERFACE): Add concaveness-gap. + +2002-04-01 Han-Wen + + * lily/staff-symbol.cc (brew_molecule): make line thickness + adjustable. + + * lily/*.cc: replace stafflinethickness by linethickness. + +2002-04-01 Jan Nieuwenhuizen + + * input/regression/beam-concave.ly: Add to-be-considered-concave + beam. + + * lily/beam.cc (check_concave): Add check for large gap between an + inner notehead and the line through outer noteheads. + + * scm/grob-description.scm (Beam): Add concaveness-gap, default + value 2.0 staff-space. + + * scm/grob-property-description.scm (concaveness-gap): Add + description. + + * input/mozart-hrn3-allegro.ly: Fix typo. + +2002-03-31 Juergen Reuter + + * scm/ps.scm, ps/music-drawing-routines.ps, lily/lookup.cc, + lily/note-head-engraver: improved implementation of roundfilledbox + (according to Han-Wen's request) + + * lily/include/spacing-spanner.hh, lily/spacing-spanner.cc, + lily/gourlay-breaking.cc, lily/staff-symbol.cc, + lily/simple-spacer.cc: ragged-right alignment + +2002-03-29 Han-Wen + + * input/regression/spacing-note-flags.ly: new file + + * input/regression/spacing-rest.ly: new file + + * mf/feta-eindelijk.mf: make bbox of quarter rest tighter. + + * lily/spacing-spanner.cc (note_spacing): make note spacing after + all grace notes tight (not only the column directly following a + grace note). + + * scm/grob-description.scm (all-grob-descriptions): don't make + mm-rests larger than normal. + + * mf/feta-banier.mf: make upflag narrower. Make end of flag more + curved. Remove white space at the right of flags. + +2002-03-28 Jan Nieuwenhuizen + + * ports/ports.make: Bugfix: ignore CVS directories. + + * stepmake/.cvsignore: New file. + +2002-03-28 Han-Wen + + * lily/note-spacing.cc (stem_dir_correction): don't correct when + there is a flag on the stem. + + * lily/multi-measure-rest.cc (brew_molecule): variable width molecule. + + * scm/grob-property-description.scm (measure-length): + measure-length grob property. + + * lily/spacing-spanner.cc (standard_breakable_column_spacing): + better spacing for breakable columns when they're juxtaposed: use + measure length if applicable + + * lily/timing-engraver.cc (start_translation_timestep): store + measure length in breakable column at start of measure. + +2002-03-28 Jan Nieuwenhuizen + + * ROADMAP: Add description for ports dir, to check email upon + commit. + +2002-03-27 Han-Wen + + * VERSION: 1.5.48 released + + * lily/multi-measure-rest.cc (symbol_molecule): split off from + brew_molecule() + (set_spacing_rods): Use symbol_molecule() to determine minimum + width + (church_rest): split off from brew_molecule() + (big_rest): split off from brew_molecule(). Construct using + variable shape. + + * mf/feta-eindelijk.mf: junk multi measure rest. + +2002-03-26 Han-Wen + + * lily/multi-measure-rest.cc (add_column): remove columns property. + + * lily/dynamic-engraver.cc (process_music): add more verbose warning + + * input/mozart-hrn3-romanze.ly (romanze): add mozart horn concerto + 3 as test piece. + +2002-03-26 Heikki Junes + + * lilypond-font-lock.el (LilyPond-font-lock-keywords): most new + keywords covered, dropped some non-keywords, include R- and 128-notes + +2002-03-25 Juergen Reuter + + * Code clean-up: Junk multiple implementations of ledger line + creation in note_head, custos, and porrectus. This is important + since there soon will be some more applications of ledger lines to + come (e.g. ambitus engraver). + + * Make thickness of ledger lines adjustable. This is essential + for mensural notation. + + * Fix some bugs in the current ledger_line implementation, most + notably that of the horizontal extent of ledger lines which equals + at least the extent of the metafont ledger_line character, and + which grows(!) if the desired extent shrinks below this limit. + + * roundfilledbox: variable blotdiameter + +2002-03-24 Han-Wen + + * VERSION: 1.5.47 released + + * lily/line-spanner.cc (line_atom): change line-thickness to thickness + + * lily/porrectus.cc: change line-thickness to thickness, change + stem-direction to direction. + + * scm/backend-documentation-lib.scm (check-dangling-properties): + Automatically detect doc'ed properties that are not in an interface + + * scm/grob-property-description.scm: property cleanup. Remove many + paper-column props that are non-existent. + + * lily/grob.cc (Grob): only use molecule_extent_proc as default if + the grob has a molecule-callback. + + * lily/*.cc: remove many set_interface() calls, and their + implementations. + + * input/regression/spacing-knee.ly: new file + + * input/regression/spacing-clef-first-note.ly: new file + + * lily/staff-spacing.cc (get_spacing_params): different spacing + for pref matter to note at start of line, halfway during line. + + * lily/note-spacing.cc (stem_dir_correction): apply 2nd stem direction + correction only if stems have same direction (i.e. not for + stem-clef combination). + (stem_dir_correction): maximal correction for knees. + + * lily/*.cc: many updates to interface descriptions. + + * lily/grob.cc (internal_set_grob_property): add interface check + for every set_grob_property call + + * lily/*.cc: document interface stuff in C++ + + * lily/grob-interface.cc: new file. Add grob interfaces from C++. + + * lily/volta-bracket.cc: naming: change volta spanner to + volta-bracket. + + * input/bugs/*.ly: cleanup, remove lots of files. + + * buildscripts/mf-to-table.py (write_ps_encoding): generate + .encoding file. WARNING: upgrade to pktrace 1.0.3 + + * mf/feta-toevallig.mf: change PS name for parentheses. + +2002-03-23 Mats Bengtsson + + * scripts/ly2dvi.py (ly_paper_to_latexpaper): Use the correct unit + also for textheight + +2002-03-23 Han-Wen + + * lily/scope.cc: remove file . + + * lily/include/scope.hh: remove file. Remove Scope class + + * VERSION: 1.5.46 + + * lily/beam.cc (score_slopes_dy, score_stem_lengths, + score_forbidden_quants): ): take out of SCM, pass parameters so + grob props are read only once. (wtk1-fugue2 from 31 sec to 14 + secs). + (calc_stem_y): robustness: take care of last_visible_stem == 0. + + + * lily/lily-guile.cc (ly_unit): return internal unit. + + * scm/tex.scm (header-end): insert scaling factor, using ly-unit + + * lily/paper-outputter.cc (output_version): output internal unit + from Paper_outputter + + * scripts/ly2dvi.py: Read unit from paper vars (43.jcn3). + +2002-03-22 Mats Bengtsson + + * scripts/ly2dvi.py: clean up old .*pk font caching code. + + * scm/ps.scm: Use uppercase postscript font names for the standard + TeX fonts. + + * scripts/ly2dvi.py, buildscripts/lilypond-{login,profile}.sh, : + Add all available TeX Type1 fonts, including Feta, to the + Ghostscript font path. + + * Documentation/topdocs/INSTALL.texi (Top): Add required pktrace + version (affects the FontName) in lilypond.map. + + * mf/GNUmakefile, Documentation/user/appendices.itely: Rename font + documentation file to fetaNNlist.ly to avoid name collisions between + lilypond generated .tex file and font .tex macros file. + + +2002-03-22 Juergen Reuter + + * mf/feta-eindelijk.mf, mf/parmesan-rests.mf: added maxima rests; + made mensural longa and (semi-)brevis leaner + + * mf/parmesan-clefs.mf, scm/clef.scm: enhanced petrucci c clef + + * lily/{{lookup,porrectus}.cc,include/{lookup,porrectus}.hh}: code + clean-up: moved bezier shape and slope from porrectus to lookup + + * buildscripts/clean-fonts.sh: added search paths /var/cache/fonts + and /usr/share/texmf/fonts + + * scripts/ly2dvi.py: Read unit from paper vars (43.jcn3). + +2002-03-22 Han-Wen + + * lily/text-spanner.cc (brew_molecule): add #'thickness + (brew_molecule): add corrections for thickness in molecule padding. + + * lily/line-spanner.cc (line_atom): make function private + + * scripts/lilypond-book.py (get_bbox): Use GS -sDEVICE=bbox to + discover bounding box. This solves the cropping problem. + + * lily/bar-check-iterator.cc (process): Only resynchronize bar + check when it fails. This fixes the combination of grace notes + and bar checks. + +2002-03-21 Han-Wen + + * lily/repeated-music.cc (minimum_start): new Scheme callable function + (first_start): new Scheme callable. This will fix repeated music + starting with grace notes. + + * lily/music.cc (start_mom): check start-moment-function grob property. + + * VERSION: 1.5.45 released + + * input/regression/system-extents.ly: new regression test. Test + System extents. + + * lily/system.cc: rename LineOfScore into System + + * lily/molecule.cc (ly_add_molecule): new Scheme ly-add-molecule. + + * lily/grob.cc (ly_get_parent): new Scheme function ly-get-parent. + (ly_get_extent): new Scheme function ly-get-extent + + * ps/lilyponddefs.ps: use output-scale for line-x + definition. + + * scm/ps.scm (font-load-command): + use output-scale + +2002-03-20 Rune Zedeler + + * lily/beaming-info.cc: Stupid typo fixed + + * lily/accidental-engraver.cc: rewrote accidental-routines to get + support for cross-context auto-accidentals. + Now the engraver can stay in Staff-context and see other contexts + from there. + Changed properties: autoAccidentals, autoCautionaries + + * lily/translator-group.cc (set_children_property): + Function added recursively setting the same property (deep_copied) + for all children of a Translator_group. + + * ly/property-init.ly: added commands + \pianoAccidentals \voiceAccidentals + \modernVoiceAccidentals \modernVoiceCautionaries + + * ly/engraver-init.ly: Correct initialization of new accidentals. + + * scm/translator-property-description.scm: Updated + + * input/regression/accidental-voice.ly: Added + + * Documentation/regression-test.tely: Added new test + +2002-03-19 Han-Wen Nienhuys + + * VERSION: 1.5.44 released + + * lily/slur.cc (set_extremities): robustness fixes for #'attachment. + + * scripts/lilypond-book.py (bounding_box_dimensions): bugfix. + + * ly/params-init.ly (blotdiameter): use unit for blotdiameter, set + at 0.4 pt. + + * tex/feta*.tex: remove. + + * stepmake/aclocal.m4: remove stepmake symlink. It confuses almost + all software dealing with it. + +2002-03-20 Jan Nieuwenhuizen + + * mf/GNUmakefile (lilypond.map): Don't prepend TeX to font name + (this fixes pdf output). Drop awk dependency. + + * scripts/ly2dvi.py (ly_paper_to_latexpaper): Assume LilyPond's + dimensions (linewidth) are in mm. + + * mf/GNUmakefile (depth): Always allow manual access to pfa target. + + * tex/lily-ps-defs.tex: scaletounit using PT/IN==72. + + * lily/slur.cc (get_attachment): Bugfix: correct for stem thickness. + +2002-03-19 Han-Wen + + * VERSION: 1.5.43 released + + * scm/beam.scm (beam-dir-majority-median): if majority is + undecided, use median. Removes a forced dir in sarabande. + + * mf/feta-schrift.mf: Trill fixes, Vee fixes (upbow, ltoe, rtoe) + +2002-03-18 Chris Jackson + + * lily/text-spanner.cc, lily/piano-pedal-engraver.cc: Cleanups. Edge + widths, heights and shortens are now customisable properties. + + * scm/grob-description.scm, scm/grob-property-description.scm: New + properties added to PianoPedalBracket, unnecessary + Y-offset-callbacks removed from *Pedal, undocumented properties + fixed. + + * Documentation/user/refman.itely: Piano pedal updates. + +2002-03-18 Jan Nieuwenhuizen + + * scm/grob-property-description.scm: + * scm/interface-description.scm: Remove old stuff. + + * scm/grob-description.scm (StemTremolo): Change beam-thickness to + 0.48 (previously 0.42). + (Beam): Remove old stuff. + + * lily/stem.cc: + * lily/stem-tremolo.cc: + * lily/beam.cc: + * scm/beam.scm: Remove old stuff. Use Beam::get_interbeam () + (previously space-function). + + * stepmake/bin/add-html-footer.py: Website title fix. + +2002-03-18 Han-Wen Nienhuys + + * scripts/ly2dvi.py (environment): use new font searching setup. + + * lily/afm.cc (afm_bbox_to_box): make code dimension independent + + * lily/tfm.cc (dimensions): make code dimension independent + + * ps/lilyponddefs.ps: add constant for MM and true/ps-point + scaling + + * tex/lily-ps-defs.tex: scaling for PS points and MM. + + * lily/include/dimensions.hh: try MM as internal unit. + + * scm/*.scm: remove invoke-dim1 + +2002-03-17 Han-Wen + + * GNUmakefile.in (fontpaths): add fontpaths target, + + * make/mutopia-targets.make: add PDF rules. + + * make/mutopia-rules.make: add pdf rule. + + * buildscripts/mutopia-index.py (list_item): add PDF. + + * buildscripts/lilypond-profile.sh (TEXMF): typo. + + * make/lilypond-vars.make: set TEXMF for the new font setup. + +2002-03-17 Han-Wen + + * VERSION: 1.5.42 released + + * mf/feta-schrift.mf: endless twiddling of Tr. + + * mf/feta-eindelijk.mf: 8th rest: make darker, top of brush lower, and + endless twiddling with the bulb shape. + + * lily/note-head.cc (internal_brew_molecule): make ledger lines a + little smaller if there is an accidental. + +2002-03-15 Mats Bengtsson + + * buildscripts/lilypond-profile.sh: + + * mf/GNUmakefile (INSTALLATION_OUT_DIR*), + buildscripts/lilypond-login.sh, buildscripts/lilypond-profile.sh: + Implement new font installation strategy + + * Documentation/misc/fontinstallation (TEXMF): Documentation of + the new font installation strategy. + + * lilypond-mode.el (LilyPond-mode-map): Add shortcut "CTRL-c ;" + for comment-region. + + * input/test/staff-size.ly: Simplified using StaffContainer + + * mf/GNUmakefile (ALL_GEN_FILES): Actually generate the + lilypond.map file + +2002-03-17 Jan Nieuwenhuizen + + * scm/ps.scm (bezier-sandwich): Draw circles at slur ends. + + * lily/beam.cc (score_stem_lengths): new quanting stuff + (score_forbidden_quants): Second and third beam quant stuff. + +2002-03-16 Jan Nieuwenhuizen + + * lily/beam.cc (least_squares): Remember least-squares-dy for + later use. + (quantise_interval): Don't quant to dy steeper that + least-squares-dy. Return empty interval if no sane quants found. + (quantise_position): Try quantise_interval until we have + acceptable solution. + +2002-03-15 Jan Nieuwenhuizen + + * scm/interface-description.scm (beam-interface): Update. + +2002-03-15 Han-Wen Nienhuys + + * VERSION: 1.5.41 released + + * mf/feta-schrift.mf: make Tr. smaller, smoother and closer. Use + optima serifs on top of t, bottom of r. + + * mf/feta-bolletjes.mf: make ledger line rounder. + + * mf/feta-toevallig.mf: some smallish fixes for flat sign. + + * mf/feta-eindelijk.mf: make 8th rest a little darker, some more + parametrization. + +2002-03-15 Chris Jackson + + * lily/piano-pedal-engraver.cc: Rewritten to support bracketed as + well as text pedal indications and a combination of both. All + pedal indications are horizontally aligned on a line spanner. + + * lily/text-spanner.cc: Edge-width property added to use in + bracketed piano pedals. Function setup_sustain_pedal added to set + the dimensions of the brackets. + + * scm/grob-description.scm: New *PedalLineSpanner grobs added, and + some of the *Pedal properties tweaked. + + * scm/grob-property-description.scm: New pedal-type (*Pedal) and + edge-width (TextSpanner) properties. + + * ly/engraver-init.ly: Default strings added for SostenutoPedal. + + * lilypond-font-lock.el: sostenuto, unaCorda and treCorde added to + fontified identifiers list. + + * input/test/pedal.ly: New pedal features added. + + * Documentation/user/refman.itely: New pedal features documented. + + +2002-03-15 Jan Nieuwenhuizen + + * lily/include/new-beam.hh: Previously new-beam.hh + * lily/beam.cc: Previously new-beam.cc + (least_squares): Bugfix: don't barf on beams with less than two + visible stems (tremolos). + + * scm/beam.scm: + * scm/grob-description.scm (Beam): Junk old beam stuff. + + +2002-03-14 Han-Wen Nienhuys + + * VERSION: 1.5.40 + + * mf/feta-eindelijk.mf: new 8th rest. + + * mf/feta-toevallig.mf: small fixes for the sharp symbol. Don't + stick out of staffline + + * scripts/lilypond-book.py: fixes for texi regular expressions. + +2002-03-14 Jan Nieuwenhuizen + + * lily/include/new-beam.hh: + * lily/new-beam.cc: New file. + + * flower/include/interval.hh: + * flower/include/interval.tcc (delta): New method. + (swap): Now public (previously private). + + * scm/beam.scm (default-beam-y-quants): Bugfix: lower beam-sit by + 1 staff-line-thickness. Sadly, this makes dy quanting problems + (dy quants allowed should depend on actual left y) more visible. + +2002-03-13 Jan Nieuwenhuizen + + * lily/beam.cc (quantise_dy): Bugfix: sign (0) = 0. Hmm. + + * scm/grob-property-description.scm (concaveness-threshold): Add + typecheck and description. + + * scm/grob-description.scm (Beam): Remove obsolete properties, add + concaveness-threshold (previously concaveness). + + * lily/beam.cc (check_concave): Remove choices and debugging + stuff: use best concaveness calculation. + (quantise_dy): Remove choice. Try to never make a slope steeper + by quantising, but certainly never quantise a slope away. + (check_stem_length_f): Remove choice. In case of lengthening + alowed, always lengthen to ideal length. + + * Documentation/index.texi: Fix FAQ url. + + * Documentation/topdocs/INSTALL.texi: Add information about fink, + compile fix and 1.4 specific fix that doesn't hurt 1.5. + +2002-03-13 Han-Wen + + * VERSION: 1.5.39 released + + * lily/simple-spacer.cc (add_rod): rods take precedence over + infinitely stiff springs. This fixes bugs with arpeggios and bar-lines. + + * lily/arpeggio-engraver.cc (acknowledge_grob): clean up. + + * lily/note-spacing.cc (get_spacing): only insert space for + accidentals if necessary. + + * input/regression/spacing-accidental-staffs.ly (texidoc): update example + + * lily/spacing-spanner.cc (musical_column_spacing): new + function. Have correct spacing from note to end-of-line as well. + +2002-03-12 Jan Nieuwenhuizen + + * Documentation/topdocs/INSTALL.texi: Add section for MacOS X. + + * darwin.patch: New file. + + * lily/beam.cc (set_stem_shorten): Revive deceased stem shorten + code. Shorten stems by fraction of stems to be shortened. + + * lily/stem.cc (get_default_stem_end_position): Shorten only half + of shorten value for boundary cases. + + * scm/grob-description.scm (Stem): Set stem-shorten to (1.0 0.5). + (Beam): Set beamed-stem-shorten to (1.0 0.5). + +2002-03-11 Jan Nieuwenhuizen + + * lily/beam.cc (check_stem_length_f): Try to lenthen more. + + * scm/grob-description.scm (Beam): Add concaveness. Replace + Beam::cancel_suspect_slope with Beam::check_concave. + + * lily/beam.cc (check_concave): Calculate concaveness of beam, and + set slope to horizontal if concaveness > Beam.concaveness. This + handles cases that kludgy cancel_suspect_slope was meant to catch + very well. + (cancel_suspect_slope): Remove. + +2002-03-12 Rune Zedeler + + * lily/beam.cc lily/stem.cc lily/beam-engraver.cc: allow for + stemLeftBeamCount and stemRightBeamCount to equal 0. + Fixes [c8 c4 c8] + +2002-03-12 Han-Wen + + * lily/spacing-spanner.cc (breakable_column_spacing): Only do + fixed spacing for pref matter, if the next column is musical, and + at the same moment. + + * lily/note-spacing.cc (stem_dir_correction): Use correct + discretionary for stem-bar spacing. + +2002-03-11 Han-Wen + + * VERSION: 1.5.38 released + + * lily/grob.cc (warning): Use cause tracking to give more + meaningful errors from the backend. + + * lily/property-iterator.cc (check_grob): Warn if setting grob + property in unknown grob. + + * mf/feta-toevallig.mf: brushed stems for natural sign. + + * lily/molecule.cc (align_to): don't translate empty molecule. + (this triggers a very subtle bug in time-signature.) + +2002-03-10 Han-Wen + + * lily/spring.cc: remove file. + + * input/regression/spacing-stem-bar.ly: new file + + * lily/score.cc (run_translator): resurrect point-and-click + + * input/baerenreiter-sarabande.ly: Copy Barenreiter beaming for + sarabande layout + + * lily/spacing-spanner.cc (find_shortest): Shortest note for + spacing is now globally determined, using the most common shortest + note. Notes that are shorter are spaced geometrically, and with + expand hints. This makes spacing more even, and measures that have + very short notes won't be that stretched out. + + * mf/feta-klef.mf: F-clef fixes, documentation on the + shape. (WARNING: font changed.) + +2002-03-09 Han-Wen + + * lily/simple-spacer.cc (add_columns): support for infinitely + stiff springs. + + * lily/staff-spacing.cc (get_spacing_params): space after + prefatory matter is fixed. + +2002-03-08 Han-Wen + + * lily/note-spacing.cc (stem_dir_correction): Correct spacing for + barline following an upstem. + + * lily/staff-spacing.cc (extremal_break_aligned_grob): destill + function from next_notes_correction(). + (bar_y_positions): idem. + +2002-03-04 Han-Wen Nienhuys + + * input/regression/break.ly (texidoc): bugfix: escape \ in + strings. + + * lily/staff-spacing.cc (next_notes_correction): Correct the + spacing of a note following a barline. + + +2002-03-04 Glen Prideaux + + * mf/feta-solfa.mf: Shaped note heads + +2002-03-03 Han-Wen + + * VERSION: 1.5.37 released + + * lily/key-signature-interface.cc (brew_molecule): rename from key_item + left-align molecule. + + * lily/break-align-interface.cc (do_alignment): completely + rewritten. Now it does not use Align_interface anymore, but a + separate routine. Like StaffSpacing, it reads space-alist from the + breakable grobs. This allows you to set spacing using + + \property Staff.Clef \override #'space-alist = '(....stuff....) + + * lily/bar-line.cc, lily/include/bar-line.hh: change name from Bar + to Bar_line. Move files around as well. + + * lily/time-signature.cc (time_signature): left align time signatures. + + * mf/feta-timesig.mf: Remove padding from C-style time signatures. + Corrections of the glyph shape C. Comments added. + +2002-03-02 Han-Wen + + * lily/spacing-spanner.cc: move from third-try.cc; rename + Third_spacing_spanner to Spacing_spanner. + + * lily/staff-spacing.cc (get_spacing_params): redo prefatory + spacing stuff. Much cleaner now, and we prepare for neat spacing + tricks around bar lines and such. + + * lily/third-try.cc (prune_loose_colunms): bugfix. Don't init + variables with themselves. (Ouch.) + + * lily/span-bar.cc (brew_molecule): don't try to span bars that + overlap. + +2002-03-02 Han-Wen + + * VERSION: 1.5.36 + + * lily/lily-guile.cc: isdir_b and isaxis_b changed to ly_axis_p, + ly_dir_p + + * lily/music.cc (ly_get_mus_property): typechecking + (ly_set_mus_property): idem + (ly_make_music): idem + (ly_music_name): idem + + * lily/chord.cc: use scm_reverse_x iso. gh_reverse() + + * lily/note-spacing.cc (stem_dir_correction): correction for + same stem notes as well. + + * lily/pitch.cc (pitch_transpose): stricter typechecking + + * mf/parmesan*mf: magnification fixes. + + * Documentation/topdocs/INSTALL.texi: update RedHat reqs + +2002-03-01 Mats Bengtsson + + * buildscripts/mf-to-table.py (postfixes): Output also .ly file + documenting the font. (Doesn't work for parmesan at the moment) + + * Documentation/user/appendices.itely (The Feta font): Add list of + Feta font symbols with names. + + * mf/GNUmakefile ($(outdir)/lilypond.map): Generate lilypond.map + automatically + +2002-03-01 Han-Wen + + * lily/translator-group.cc (ly_set_trans_property): typechecking + (ly_get_trans_property): typechecking. + + * lily/font-metric.cc (ly_text_dimension): typechecking + (ly_find_glyph_by_name): idem. + + * scm/bass-figure.scm (brew-complete-figure): support for + bracketed numbers. + + * lily/grob.cc (ly_get_paper_var): new function + +2002-02-28 Han-Wen Nienhuys + + * VERSION (PATCH_LEVEL): 1.5.35 released. + + * lily/lookup.cc (ly_bracket): Scheme function ly-bracket + (bracket): New function. + + * lily/stem-engraver.cc (stop_translation_timestep): bugfix, unset + stemLeftBeamCount, stemRightBeamCount in stead of using # + + * lily/third-try.cc (set_implicit_neighbor_columns): type checking + bugfix. + + * lily/span-arpeggio-engraver.cc (stop_translation_timestep): + typecheck bugfix. + + * lily/grob.cc (ly_get_grob_property): be anal about types. + (ly_set_grob_property): idem + + * lily/figured-bass-engraver.cc (process_music): move molecule + building completely to Scheme + + * lily/include/musical-request.hh (class Bass_figure_req): Add + class. + + * lily/parser.yy (bass_figure): add support for space figure. + + * lily/molecule.cc (ly_molecule_combined_at_edge): be anal about types + + * lily/font-metric.cc (ly_text_dimension): Scheme function ly-text-dimension + + * lily/molecule.cc (ly_fontify_atom): new function ly-fontify-atom + (ly_align_to_x): new function ly-align-to! + + * lily/font-interface.cc (ly_font_interface_get_font): new Scheme + function ly-get-font + + * mf/feta-nummer.mf: include normal-space dimension. + + * lily/collision.cc (check_meshing_chords): don't merge collisions + with whole notes. + + * lily/system-start-delimiter.cc (after_line_breaking): Bugfix: + glyph is string. + +2002-02-28 Mats Bengtsson + + * scm/tex.scm, scm/ps.scm (or): Bugfix, ps output with Guile 3.4 + +2002-02-28 Juergen Reuter + + * mf/parmesan-heads.mf: bugfix: mensural note heads (WARNING: + font changed) + + * scm/output-lib.scm: bugfix: resort to neo_mensural chars rather + than mensural chars + + * mf/parmesan-scripts.mf, mf/parmesan-generic.mf, + scm/grob-description.scm: added mensural fermata symbol + +2002-02-27 Han-Wen Nienhuys + + * VERSION: 1.5.34 released. + + * lily/rest-engraver.cc (create_grobs): rests can have pitches. + + * lily/staff-symbol-referencer.cc (callback): assume that + staff-position is unset in general. + + * input/regression/rest-pitch.ly: new file. + + * lily/parser.yy (simple_element): rests can have pitch. Syntax: + a4\rest + +2002-02-26 Han-Wen Nienhuys + + * lily/scm-option.cc (set_lily_option): add internal-type-checks + as Scheme option. Run regression test by default with + internal-type-checking. + + * lily/separating-group-spanner.cc (find_musical_sequences): removed. + + * lily/lily-guile.cc (type_check_assignment): changed functions. + + * scm/*description*.scm: be anal about typechecks. Some changes + for internal variable names. + +2002-02-25 Han-Wen Nienhuys + + * scm/ps.scm: -f ps output for GUILE 1.4 and 1.3.4 + +2002-02-25 Han-Wen + + * VERSION: 1.5.33 released. + + * mf/feta-macros.mf (flare_path): removed draw_flare, replace by + flare_path everywhere (c-clef, numbers). + + * lily/bar-number-engraver.cc (process_music): also print bar + number if measure starts with grace note. + + * input/regression/grace-bar-number.ly: new test. + +2002-02-24 Han-Wen + + * lily/figured-bass-engraver.cc (stop_translation_timestep): reset + rest as well. + + * scm/music-functions.scm (voicify-music): split chords into + different voices automatically. + + * lily/music.cc (ly_music_list_p): new function + + * lily/music-sequence.cc (do_relative_octave): robustification + + * scm/music-functions.scm: many utility functions + + * lily/music.cc (ly_set_mus_property): add type checks to the + Scheme property assignment. + + * buildscripts/lilypond-profile,lilypond-login.sh (TEXCONFIG): + dvips fixes + + * mf/lilypond.map: .map file from Mats' page. + +2002-02-21 Juergen Reuter + + * Some more parmesan related fixes; + + * Custos: varying shape (in particular, stem length), depending on the + vertical position of the custos (on staffline / between stafflines); + + * Custos: added grob property "neutral-direction" (same semantics as + with stem); introduced new grob property "neutral-position"; + + * Time-signature: print a warning when resorting to default layout. + +2002-02-22 Han-Wen Nienhuys + + * lily/translator-group.cc (add_fresh_simple_translator): remove + function; initialize() is called through + Translator_group::initialize(). + + * lily/third-try.cc (prune_loose_colunms): add constraints (rods) + for the neighbors of a loose column. + + * lily/line-of-score.cc (set_loose_columns): be more intelligent: + position loose columns so that they don't collide. + +2002-02-21 Han-Wen Nienhuys + + * VERSION: 1.5.32 released. + + * scm/font.scm: remove font-name symbol. + + * mf/GNUmakefile: use pktrace for making PFAs + + * make/lilypond.redhat.spec.in: use pktrace when making RPMs + + * lily/rest-collision.cc (do_shift): read direction field from + rest-column in case of note-rest collision. This should fix some + problems with rest collisions. + +2002-02-19 Han-Wen Nienhuys + + * lily/note-heads-engraver.cc (process_music): Removed easyPlay + property. + + * lily/note-head.cc (brew_ez_molecule): Remove note-character + property. Read pitch directly from #'cause. + + * mf/feta-puntje.mf: bugfix + +2002-02-19 Juergen Reuter + + * mf/*.mf: tried to fix ancient-font.ly. WARNING: Font changed. + +2002-02-18 Jan Nieuwenhuizen + + * Documentation/windows/compiling.texi: Update. + + * Documentation/index.texi: Add link to orphaned compiling for + windows page. + + * Documentation/footer.html.in: Comment fix. + + * stepmake/bin/add-html-footer.py: Python2.[12] re workarounds. + +2002-02-18 Han-Wen + + * VERSION: 1.5.31 released + + * lily/new-spacing-spanner.cc: remove file. + + * lily/third-try.cc (do_measure): only take spacings into account + if they pertain to the column pair under consideration. This fixes + spacing bug when mixing eighths triplets and normal eighths. + + * lily/note-head.cc (brew_molecule): revert ledger change: ledger + lines don't take up space anymore. Document why in note-head.cc + comment. + +2002-02-17 Han-Wen + + * lily/font-interface.cc (get_font): reinstate + #'font-magnification. See input/regression/font-magnification.ly + (get_font): Change the definition of #'font-name grob property. + + * lily/grob.cc (get_uncached_molecule): output origin for grobs + that have a #'cause field. + +2002-02-12 Han-Wen Nienhuys + + * Documentation/topdocs/INSTALL.texi: remove type3 stuff. + + * mf/GNUmakefile: remove metapost stuff + + * stepmake/aclocal.m4: remove metapost detection stuff. + +2002-02-11 Jan Nieuwenhuizen + + * mf/GNUmakefile (FET_FILES): + (FONT_FILES): Include parmesan. + + * stepmake/bin/packagepython.py (make_assign_re): Bugfix. Use re + iso regex, regsub + + * buildscripts/clean-fonts.sh (FILES): Clean parmesan too. + + * Documentation/user/refman.itely (Paper size): Quote braces. + +2002-02-07 Han-Wen Nienhuys + + * stepmake/aclocal.m4: fixed bison version check to be more + robust. + + * lily/stem.cc (position_noteheads): fix for cluster chords. + + * mf/*.mf: many blotting/pixel rounding fixes by Rune Zedeler + + * python 2.2 support. + +2002-02-04 Han-Wen + + * VERSION: 1.5.30 released + + * lily/dynamic-engraver.cc: add doco about DynamicLineSpanner + + * Documentation/user/refman.itely (Dynamics): add a note about + DynamicLineSpanner. + + * scm/grob-description.scm: add a 'translator-type? object + property, so that \property Foo.Bar =\turnOff doesn't cause + type check warning. + + * lily/translator-group.cc (add_fresh_group_translator): make + new add-translator functions to make distinction between fresh and + used group-translators. Fixes problem with scripts on auto-changing voice + + * lily/timing-engraver.cc: make Timing_engraver instantiatable, + add to Score_performer. Fixes bar checks in MIDI + + * lily/tie-engraver.cc (create_grobs): Use pitches to compare note + heads. Fixes many quirks with ties. + + * lily/engraver.cc (announce_grob): Use SCM argument. Store cause + in the grob property #'cause, instead of using Grob_info. + + * ly/engraver-init.ly (StaffContext): move Dot_column_engraver to + staff context, fixing dot alignment on collisions. + + * lily/beam-engraver.cc (try_music): remove can't find beam start + warning, so that skipTypesetting won't complain. + +2002-02-01 Mats Bengtsson + + * Documentation/user/refman.itely (Paper size): Documentation fix, + papersize + + * lily/text-engraver.cc: Bugfix: textNonEmpty works again + + * scm/grob-description.scm: \breathe: Use feta font comma by default + +2002-01-23 Mats Bengtsson + + * input/template/piano-dynamics.ly (pedal): Simplified + +2002-01-18 Mats Bengtsson + + * ly/engraver-init.ly: avoid warnings on \skip in lyrics + +2002-01-10 Mats Bengtsson + + * lilypond-mode.el (LilyPond-command-query): ignore case. + +2002-02-01 Han-Wen Nienhuys + + * VERSION: 1.5.29 released + + * all files: change 2001 to 2002 in headers globally + + * mf/parmesan20.mf: split out ancient notation into parmesan ("old + cheese") font. WARNING: fonts changed. + +2002-02-01 Juergen Reuter + + * mf/*.mf: Fixed some blot_diameter related flaws in some feta symbols + + * mf/*.mf: Added some more vaticana/solesmes style font symbols + + * mf/*.mf: Bugfix: renamed subbipunctum -> inclinatum + + * mf/*.mf: Fixed a few typos in various .mf files + +2002-01-17 Rune Zedeler + + * mf/: added macro soft_penstroke + + softened some glyphs + redrawn triangular noteheads + redrawn tab-clef + added classical quarter rest + + * lily/stem.cc: Bugfix: Stem-attachment when staff_space!=1 + + * lily/bar.cc: Bugfix: repeat dots when even number of staff + lines and staff_space>=2 + + * lily/rest.cc: Use default rests when current style glyphs not + found - this allows + \property Staff.Rest \override #'style = #'classical + +2002-01-30 Jan Nieuwenhuizen + + * input/bugs/first-tie.ly: New file. + + * input/bugs/spacing-clash.ly: New file. + +2002-01-29 Jan Nieuwenhuizen + + * po: regenerate. + +2002-1-24 Chris Jackson + + * lilypond-indent.el: New file providing indentation for + parenthesised blocks of lilypond code in Emacs + + * lilypond-font-lock.el: Changes to the syntax table to facilitate + indentation and handle block comments properly. Distinguish + accents from close-brackets in fontification. + + * lilypond-mode.el: LilyPond-indent-command set appropriately. + +2002-01-22 Jan Nieuwenhuizen + + * Documentation/windows/installing.texi: + * Documentation/windows/compiling.texi: Include from 1.4.10. + + * Documentation/windows/gs-profile.sh: previously lily-gs.sh + + * input/bugs/first-midi-tie.ly: New file. + +2001-12-29 Han-Wen + + * VERSION: 1.5.28 released + + * lily/parser.yy (My_lily_parser): Slightly kludgy warning for + illicit beams on [c4 c4] etc. + + * lily/bar-check-iterator.cc (Bar_check_iterator): new + file. Make separate iterator for Bar_checks. Bar_check now happen + outside engravers, meaning that you can use them with + skipTypesetting. Associated changes in other files. + + * lily/new-spacing-spanner.cc (stem_dir_correction): removed + function + + * lily/spacing-spanner.cc (stem_dir_correction): removed function + + * lily/include/grob.hh (unsmob_item, unsmob_spanner): Add functions + + * lily/bar.cc (before_line_breaking): remove bar-line spacing code. + + * lily/stem.cc (set_spacing_hints): removed function + + * lily/note-spacing.cc (stem_dir_correction): new stem-direction + correction for spacing; now take vertical extents of the stem into + account. + + * lily/third-try.cc: More hacking to get spacing working. + + * lily/note-spacing-engraver.cc: new file, Note_spacing_engraver + sits at staff level and creates note spacing objects. Scrap it + again, and document why. + + * lily/include/group-interface.hh: rename functions. + +2001-12-27 Jan Nieuwenhuizen + + * stepmake/stepmake/c++-rules.make: + * stepmake/stepmake/c-rules.make: Fixes for bison-1.28. + +2001-12-25 Jan Nieuwenhuizen + + * make/lilypond-vars.make: + * scripts/ly2dvi.py (setup_environment): + * scripts/lilypond-book.py (setup_environment): Also set tex + memory options. + +2001-12-24 Han-Wen Nienhuys + + * VERSION: 1.5.27 released. + + * Documentation/user/refman.itely (Bar numbers): added bar number + documentation. + + * scm/font.scm (make-style-sheet): Fixes to make staff-sizes work + again. + +2001-12-22 Mats Bengtsson + + * tex/lilyponddefs.tex: Make sure interscorelinefill=1 doesn't + spread the last few lines all over the last page of a score. + +2001-12-24 Han-Wen + + * lily/third-try.cc: 3rd try at revising spacing + engine. Not yet finished. + + * lily/paper-column.cc (brew_molecule): print debugging marks on a + paper-column. + + * lily/tie-engraver.cc (class Tie_engraver): Use busyGrobs for + collecting past note heads. + + * lily/note-heads-engraver.cc (try_music): Remove end_mom_ + stuff. + + * lily/grob-pq-engraver.cc (class Grob_pq_engraver): New file, new + class. Keep a queue of grobs that are still playing in busyGrobs. + + * lily/lyric-combine-music-iterator.cc (get_busy_status): New + function. Use busyGrobs to detect playing notes. + +2001-12-16 Jan Nieuwenhuizen + + * Documentation/topdocs/INSTALL.texi: Added note about broken + python-2.1. Updated note for Debian's broken (well, broken for + our use anyway) tex configuration. + + * scripts/lilypond-book.py (re_dict): python2.2 fix. + + * stepmake/stepmake/c++-rules.make ($(outdir)/%.hh): + ($(outdir)/%.cc): Adapted to bison-1.30; added bison < 1.30 fix. + + * scripts/lilypond-book.py (bounding_box_dimensions): Bugfix. + (But left margin of png's still misses a few pixels. Arg.) + +2001-12-16 Heikki Junes + + * lilypond-mode.el (LilyPond-command-next-midi): Make + possible to kill midi-process (using "C-c C-m"). + +2001-12-14 Han-Wen + + * scripts/lilypond-book.py (LatexPaper.set_geo_option): + Convert strings with dimensions to numbers. + + * lily/volta-engraver.cc: only make a bracket for the top staff, + as found in stavesFound. + + * lily/bar-number-engraver.cc: remove staff administration. + + * lily/mark-engraver.cc (acknowledge_grob): remove staff + administration. This breaks support for invisible-staff. + + * lily/staff-collecting-engraver.cc: new engraver. Collects staff + symbols into stavesFound. + + * lily/score-engraver.cc (acknowledge_grob): Acknowledge spacing + grobs, and put them into columns. + + * lily/engraver-group-engraver.cc (acknowledge_grobs): Include the + Engraver_group_engraver as a potential candidate for ack'ing grobs. + +2001-12-13 Heikki Junes + + * lilypond-mode.el (LilyPond-command-next-midi): Play next (or last) + midi section in the Emacs-mode, so it is possible to play certain + score in a multiscore lilypond-file. + +2001-12-09 Rune Zedeler + * lily/lily-guile.cc: Added ly_assoc_front_x() and ly_assoc_cdr() + (FIXME: not accessible from guile) + + * lily/accidental-engraver.cc: rewrote accidental-routines to get + better support for Kurt Stone's suggestions. + Removed properties: noResetKey, forgetAccidentals, autoReminders, + lazyKeySignature. + Changed property: localKeySignature. + Added properties: extraNatural, autoAccidentals, + autoCautionaries. + + (BUGFIX: broken-tie-support destroyed in 1.5.16) + + * ly/property-init.ly: added commands + \defaultAccidentals \modernAccidentals \modernCautionaries + \noResetKey \forgetAccidentals + + * ly/engraver-init.ly: Correct initialization of new accidentals. + + * scm/translator-property-description.scm: The new properties + added. + + * input/: Some examples added, some changed. + + * Documentation/regression-test.tely: Added quick test of new + accidentals. + +2001-12-13 Han-Wen Nienhuys + + * scripts/lilypond-book.py (scan_latex_preamble): don't crash if + header not found + +2001-12-07 Han-Wen Nienhuys + + * lily/beam.cc (before_line_breaking): Make beams without stems + or with only one stem disappear. + +2001-12-05 Han-Wen Nienhuys + + * bibtools/bib2html.py: Add simple bib2html convertor, and .bst + files to have standardised HTML bibliography output. Update build + docs to reflect this. + + * lily/include/simple-spacer.hh (struct Simple_spacer): add + active_count_, so that we don't have to look for active springs + anymore. + + * scm/interface-description.scm,scm/grob-property-description.scm: + Add 'penalty + + * lily/simple-spacer.cc (solve): Handle forced line breaks + here. Fixes problems when combining linebreaks with non-fitting + line configurations + +2001-12-05 Jan Nieuwenhuizen + + * 1.4.9.jcn3 forward ports. + + * Really included .cvsignore. + + * Included Han-Wen's uu1 windows fixes. + + * Bugfix: lilypond-profile.sh: append to GS_FONTPATH, GS_LIB. + + * Added Cygwin setup.hint + + * Removed tex, python wrappers and postinstalls to go with Cywgin's + tetex/texmf, python installations. + + * Updated cygwin installer. + + * ly2dvi: Don't accept filenames with spaces (+ fix). + +2001-12-03 Han-Wen + + * ly/engraver-init.ly (VoiceContext): fix text engraver ordering. + + * lily/translator-def.cc: Remove manual symbol caching. + + * lily/script-column.cc (before_line_breaking): robustness check: + don't crash if no direction set. + + * scripts/pmx2ly.py: Key and clef change support (Laura Conrad) + + * scripts/pmx2ly.py (Parser.parse_header): more generic header + parsing. + + +2001-12-01 Han-Wen + + * lily/note-head.cc (head_extent): added to compute width without + ledger lines. By default, ledger lines take up width now. + + * input/regression/fingering.ly: demonstrate auto fingering. + Horizontal placement is still buggy. + + * lily/fingering-engraver.cc (class Fingering_engraver): + added. Provides support for horizontal fingering scripts + + * lily/include/grob.hh: Naming: change parent_l() into get_parent() + + * lily/side-position-interface.cc (add_staff_support): add staff + only for Y-axis side positions. + + * lily/parser.yy (request_chord): Fix mem leak. + + * lily/musical-request.cc (transpose): moved to Music::transpose() + + * lily/include/grob-info.hh: Change music pointer to SCM, so we + can store grobs as grob-creation cause as well. + + * lily/group-interface.cc (add_thing): efficiency tweak: reuse + handle when adding. Use precomputed symbols throughout lily. + + * lily/rhythmic-column-engraver.cc: make NoteSpacing grobs to keep + track of spacing issues. + + * lily/separating-line-group-engraver.cc: make StaffSpacing grobs + to keep track of staff spacing + +2001-11-30 Jan Nieuwenhuizen + + * Rewrote new conditional guile >= 1.5 compilation switches, to keep + code clean from conditionals and have a concentrated sets of + compatibility fixes for old guile versions. + + * Fixes for guile 1.4, including embedded ps. + +2001-11-30 Han-Wen Nienhuys + + * lily/stanza-number-engraver.cc (process_music): allow pairs as + well for markup texts. + + * lily/musical-request.cc (length_mom): kludge for null pointer. + + * scm/sketch.scm (sketch-output-expression): guile 1.4 compatibility + + * scm/lily.scm (sign): bugfix + + * CHANGES: Change log instated. + + * stepmake/add-html-footer.py: @BRANCH@ tag insertion. + diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile index a15216cd98..2c6c702be9 100644 --- a/Documentation/misc/GNUmakefile +++ b/Documentation/misc/GNUmakefile @@ -4,7 +4,7 @@ NAME = documentation STEPMAKE_TEMPLATES=documentation texinfo -TEXTS =AIMS $(wildcard CHANGES-*[0-9]) $(wildcard ANNOUNCE-*[0-9]) $(wildcard NEWS-*[0-9]) interview fontinstallation +TEXTS =AIMS $(wildcard CHANGES-*[0-9]) $(wildcard ANNOUNCE-*[0-9]) $(wildcard NEWS-*[0-9]) interview fontinstallation $(wildcard ChangeLog*[0-9]) EXTRA_DIST_FILES = $(TEXTS) include $(depth)/make/stepmake.make diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index 087116b392..e28586bdc0 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -1,4 +1,5 @@ -@node +@node Top, , , (dir) +@top @comment node-name, next, previous, up\input texinfo @c -*-texinfo-*- @setfilename INSTALL.info @settitle INSTALL - compiling and installing GNU LilyPond @@ -7,9 +8,6 @@ @end html -@node Top, , , (dir) -@top - @contents @chapter INSTALL - compiling and installing GNU LilyPond @@ -672,12 +670,13 @@ LilyPond with gcc-3.1.1 you may do: @example CONF=gcc-3.1 ./lexer-gcc-3.1.sh - CPPFLAGS=$(pwd)/lily/out-gcc-3.1 CC=gcc-3.1 CXX=g++-3.1 \ + CPPFLAGS=-I$(pwd)/lily/out-gcc-3.1 CC=gcc-3.1 CXX=g++-3.1 \ ./configure --enable-config=gcc-3.1 CONF=gcc-3.1 ./lexer-gcc-3.1.sh make conf=gcc-3.1 @end example +This assumes that the GCC 3.1 binaries are called gcc-3.1 and g++-3.1. Note that this is @strong{not} fixed in Debian/unstable for flex <= 2.5.4a-26. @@ -693,6 +692,16 @@ Guile without threads (YMMV): guile-1.4$ ./configure --without-threads; make all install @end example +@unnumberedsubsec OpenBSD + +@itemize @bullet +@item By default, gcc on OpenBSD doesn't include +@file{/usr/local/include} and @file{/usr/local/lib} in the system +paths. Depending upon where/how you installed kpathsea and other +libraries, you may need to refer to the section ``Linking to +kpathsea''. + +@end itemize @unnumberedsubsec NetBSD diff --git a/Documentation/user/appendices.itely b/Documentation/user/appendices.itely index f09c9738e1..fc1e7726f5 100644 --- a/Documentation/user/appendices.itely +++ b/Documentation/user/appendices.itely @@ -210,3 +210,7 @@ accessed directly using text markup such as @lilypondfile{feta16list.ly} +@c parmesan is too big. Apparently pythons re's choke on this. +@c @lil ypondfile{parmesan16list.ly} + + diff --git a/Documentation/user/invoking.itexi b/Documentation/user/invoking.itexi index 67bafae06f..eeba2e1737 100644 --- a/Documentation/user/invoking.itexi +++ b/Documentation/user/invoking.itexi @@ -316,6 +316,8 @@ generate titling: Name of the arranger, right flushed below the opus. @item instrument Name of the instrument, centered below the arranger +@item dedication + [docme] @item piece Name of the piece, left flushed below the instrument @item head diff --git a/Documentation/user/preface.itely b/Documentation/user/preface.itely index 37a950263d..d57d5b8ec5 100644 --- a/Documentation/user/preface.itely +++ b/Documentation/user/preface.itely @@ -46,7 +46,7 @@ the incountable number of questions he answered on the mailing list, and Rune Zedeler for his energy in finding and fixing bugs. Nicola Bernardini for inviting us to his workshop on music publishing, which was truly a masterclass, and Heinz Stolba and James Ingram for -teaching us there. [wie nog meer?] +teaching us there. Playing and printing music is more than nice analogy: programming together is a lot of fun, and helping people is deeply satisfying, but diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index d1f716f14d..5a3c9b057c 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -9,7 +9,6 @@ @macro refbugs @strong{BUGS} - @end macro @@ -55,9 +54,9 @@ encouraged to study the tutorial first. @section Note entry @cindex Note entry -The most basic forms of music are notes. Notes on their own don't -form valid input, but for the sake of brevity we omit @code{\score} -blocks and @code{\paper} declarations. +Notes constitute the most basic form of music, but they do not form +valid input on their own. Yet for the sake of brevity and simplicity, +we'll generally omit @code{\score} blocks and @code{\paper} declarations. @menu @@ -118,7 +117,7 @@ both forms are accepted. LilyPond has predefined sets of note names for various other languages. To use them, simply include the language specific init file. For example: @code{\include "english.ly"}. The available language files and -the names they define are: +the note names they define are: @example Note Names sharp flat @@ -150,8 +149,8 @@ octave; each @code{,} lowers the pitch by an octave. @node Chromatic alterations @subsection Chromatic alterations -Normally, accidentals are printed automatically, but you may force -accidentals in the following ways: A reminder accidental +Normally, accidentals are automatically printed, but you may force +them in the following ways: a reminder accidental @cindex reminder accidental @cindex @code{?} can be forced by adding an exclamation mark @code{!} after the pitch. A @@ -162,25 +161,25 @@ i.e., an accidental within parentheses can be obtained by adding the question mark `@code{?}' after the pitch. The automatic production of accidentals can be tuned in many -ways. Refer to @ref{Accidentals} for more information. +ways. For more information, refer to @ref{Accidentals}. @c . {Rests} @node Rests @subsection Rests @cindex Rests -A rest is entered like a note, with note name `@code{r}': +Rests are entered like notes, with an `@code{r}' note name: @lilypond[singleline,verbatim] r1 r2 r4 r8 @end lilypond -Whole bar rests centered in the bar are specified using @code{R}, see +Whole bar rests, centered in the bar, are specified using @code{R}, see @ref{Multi measure rests}. See also @seeinternals{Rest}. -For polyphonic music, it can be convenient to specify the rest position -directly. You can do that by entering a note, with the keyword -@code{\rest} appended, e.g. Rest collisions will leave these rests alone. +For polyphonic music, it can be convenient to explicitly specify the rest's +vertical position. This can be achieved by entering a note, with the @code{\rest} +keyword appended. Rest collision testing will leave these rests alone. @lilypond[singleline,verbatim] a'4\rest d'4\rest @@ -202,13 +201,10 @@ An invisible rest, or skip, can be entered like a note with note name a2 s4 a4 \skip 1 a4 @end lilypond -The @code{s} syntax is only available in Note mode and Chord mode. -In other situations, you should use the @code{\skip} command, and it is -only available in Note mode and Chord mode. - -@c FIXME: in lyrics mode, we have " " and _ +@c FIXME: in Lyrics mode, we have " " and _ -In Lyrics mode, you can use `@code{" "}' and `@code{_}': +In Lyrics mode, invisible rests are entered using either `@code{" "}' +or `@code{_}': @lilypond[singleline,verbatim] < \context Lyrics \lyrics { lah2 di4 " " dah2 _4 di } @@ -216,8 +212,9 @@ In Lyrics mode, you can use `@code{" "}' and `@code{_}': > @end lilypond -The unabbreviated `@code{\skip} @var{duration}' also works outside of -note mode: +Note that the @code{s} syntax is only available in Note mode and Chord +mode. In other situations, you should use the @code{\skip} command, which +also works outside of those two modes: @lilypond[singleline,verbatim] \score { @@ -228,10 +225,11 @@ note mode: } @end lilypond -The skip command is merely a empty musical placeholder. It does not +The skip command is merely an empty musical placeholder. It doesn't produce any output, not even transparent output. + @c . {Durations} @node Durations @subsection Durations @@ -241,7 +239,7 @@ produce any output, not even transparent output. @cindex @code{\duration} -In Note, Chord, and Lyrics mode, durations may be designated by numbers +In Note, Chord, and Lyrics mode, durations are designated by numbers and dots: durations are entered as their reciprocal values. For notes longer than a whole you must use identifiers. @@ -274,10 +272,10 @@ r1 r2 r4 r8 r16 r32 r64 r64 @end lilypond -If the duration is omitted then it is set to the previous duration -entered. At the start of parsing a quarter note is assumed. The -duration can be followed by dots (`@code{.}') to obtain dotted note -lengths. +If the duration is omitted then it is set to the previously entered +duration. At the start of parsing, a quarter note is assumed. The +duration can be followed by dots (`@code{.}') in order to obtain dotted +note lengths: @cindex @code{.} @lilypond[fragment,verbatim,center] @@ -286,9 +284,9 @@ lengths. @cindex @code{r} @cindex @code{s} -You can alter the length of duration by a fraction @var{N/M} by +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 -will not affect the appearance of the notes or rests produced. +won't affect the appearance of the notes or rests produced. Durations can also be produced through GUILE extension mechanism. @lilypond[verbatim,fragment] @@ -312,19 +310,20 @@ Dot placement for chords is not perfect. In some cases, dots overlap: @cindex @code{~} A tie connects two adjacent note heads of the same pitch. The tie in -effect extends the length of a note. A tie is entered with @code{~}. +effect extends the length of a note. Ties should not be confused with +slurs, which indicate articulation, and phrasing slurs, which indicate +musical phrasing. A tie is entered using the tilde symbol `@code{~}'. @lilypond[fragment,verbatim,center] e' ~ e' ~ @end lilypond -When ties are used with chords, all note heads whose pitches match are -connected. Ties are indicated using the tilde symbol `@code{~}'. If -you try to tie together chords which have no common pitches then no -ties will be created. +When a tie is applied to a chord, all note heads, whose pitches match, are +connected. If you try to tie together chords that have no common pitches, +no ties will be created. -If you want less ties created for a chord, you can set -@code{Voice.sparseTies} to true. In this case, a single tie is used +If you want less ties created for a chord, you can set +@code{Voice.sparseTies} to true. In this case, a single tie is used for every tied chord. @lilypond[fragment,verbatim,center] \property Voice.sparseTies = ##t @@ -338,8 +337,8 @@ exactly the same concept. @lilypond[fragment, singleline] \time 3/4 c'2. c'2 ~ c'4 @end lilypond -Ties should not be confused with slurs, which indicate articulation, -and phrasing slurs, which indicate musical phrasing. +And if you need to tie notes over bars, it may be easier to use +@ref{Automatic note splitting}. See also @seeinternals{Tie}. @@ -347,18 +346,18 @@ See also @seeinternals{Tie}. @refbugs At present, the tie is represented as a separate event, temporally -located in between the notes. Tieing only a subset of the note heads +located in between the notes. Tying only a subset of the note heads of a chord is not supported in a simple way. It can be achieved by moving the tie-engraver into the Thread context and turning on and off ties per Thread. -Switching staffs when a tie is active will not work. +Switching staves when a tie is active will not work. @node Automatic note splitting @subsection Automatic note splitting @c FIXME: This subsection doesn't belong in @ref{Note entry}. -There is a facility for automatically converting long notes to tied +There is a facility for automatically converting long notes to tied notes. This is done by replacing the @code{Note_heads_engraver} by the @code{Completion_heads_engraver}. @@ -391,7 +390,7 @@ represented exactly; the engraver will not insert tuplets. @cindex triplets @cindex @code{\times} -Tuplets are made out of a music expression by multiplying all duration +Tuplets are made out of a music expression by multiplying all durations with a fraction. @cindex @code{\times} @@ -797,7 +796,7 @@ such as keys, clefs and time signatures. The lines of the staff symbol are formed by the -@internalsref{StaffSymbol} grob. This grob is created at the moment +@internalsref{StaffSymbol} object. This object is created at the moment that their context is created. You can not change the appearance of the staff symbol by using @code{\override} or @code{\set}. At the moment that @code{\property Staff} is interpreted, a Staff context is @@ -846,7 +845,7 @@ This command sets the context property @code{Staff.keySignature}. Non-standard key signatures can be specified by setting this property directly. -The printed signature is a @internalsref{KeySignature} grob, typically +The printed signature is a @internalsref{KeySignature} object, typically created in @internalsref{Staff} context. @cindex @code{keySignature} @@ -896,7 +895,7 @@ name. For example, \clef "G_8" @end example -The grob for this symbol is @internalsref{Clef}. +The object for this symbol is @internalsref{Clef}. This command is equivalent to setting @code{clefGlyph}, @@ -923,13 +922,14 @@ property. Setting it to @code{#'()} uses fraction style for 4/4 and 2/2 time. -The grob for this symbol is @internalsref{TimeSignature}. There are +The object for this symbol is @internalsref{TimeSignature}. There are many more options for its layout. They are selected through the -@code{style} grob property. See @file{input/test/time.ly} for more +@code{style} object property. See @file{input/test/time.ly} for more examples. This command sets the property @code{timeSignatureFraction}, -@code{beatLength} and @code{measureLength}. The property +@code{beatLength} and @code{measureLength} in the @code{Timing} +context, which is normally aliased to @internalsref{Score}. The property @code{timeSignatureFraction} determine where bar lines should be inserted, and how automatic beams should be generated. Changing the value of @code{timeSignatureFraction} also causes a time signature @@ -957,7 +957,7 @@ The syntax for this command is @end example This is internally translated into @example - \property Score.measurePosition = -@var{length of duration} + \property Timing.measurePosition = -@var{length of duration} @end example @cindex @code{|} The property @code{measurePosition} contains a rational number @@ -1013,8 +1013,8 @@ c4 You are encouraged to use @code{\repeat} for repetitions. See @ref{Repeats}. -In scores with many staffs, the barlines are automatically placed at -top level, and they are connected between different staffs of a +In scores with many staves, the barlines are automatically placed at +top level, and they are connected between different staves of a @internalsref{StaffGroup}: @lilypond[fragment, verbatim] < \context StaffGroup < @@ -1025,7 +1025,7 @@ top level, and they are connected between different staffs of a \context Staff = pedal { \clef bass c2 c2 } > @end lilypond -The grobs that are created at @internalsref{Staff} level. The name is +The objects that are created at @internalsref{Staff} level. The name is @internalsref{BarLine}. The command @code{\bar @var{bartype}} is a short cut for @@ -1103,7 +1103,7 @@ horizontal shifts and stem directions, as is shown in the following example: Normally, note heads with a different number of dots are not merged, but -if you set the grob property @code{merge-differently-dotted}, they are: +if you set the object property @code{merge-differently-dotted}, they are: @lilypond[verbatim,fragment,singleline] \context Voice < { g'8 g'8 @@ -1136,7 +1136,7 @@ See also @internalsref{NoteCollision} and @internalsref{RestCollision} Resolving collisions is a very intricate subject, and LilyPond only handles a few situations. When it can not cope, you are advised to use -@code{force-hshift} of the @internalsref{NoteColumn} grob and pitched +@code{force-hshift} of the @internalsref{NoteColumn} object and pitched rests to override typesetting decisions. @node Beaming @@ -1221,7 +1221,7 @@ same effect as twiddling with @code{stemLeftBeamCount} and Kneed beams are inserted automatically, when a large gap between two adjacent beamed notes is detected. This behavior can be tuned through -the grob property @code{auto-knee-gap}. +the object property @code{auto-knee-gap}. @cindex beams, kneed @cindex kneed beams @@ -1234,7 +1234,7 @@ the grob property @code{auto-knee-gap}. @refbugs -Auto knee beams can not be used together with hara kiri staffs. +Auto knee beams can not be used together with hara kiri staves. [TODO from bugs] @@ -1615,7 +1615,7 @@ See also @seeinternals{Slur}. Slurs avoid crossing stems, and are generally attached to note heads. However, in some situations with beams, slurs may be attached to stem ends. If you want to override this layout you can do this through the -grob-property @code{attachment} of @internalsref{Slur} in +object property @code{attachment} of @internalsref{Slur} in @internalsref{Voice} context It's value is a pair of symbols, specifying the attachment type of the left and right end points. @@ -1642,7 +1642,7 @@ stems might look better: Similarly, the curvature of a slur is adjusted to stay clear of note heads and stems. When that would increase the curvature too much, the slur is reverted to its default shape. The threshold for this -decision is in @internalsref{Slur}'s grob-property @code{beautiful}. +decision is in @internalsref{Slur}'s object property @code{beautiful}. It is loosely related to the enclosed area between the slur and the notes. Usually, the default setting works well, but in some cases you may prefer a curved slur when LilyPond decides for a vertically moved @@ -1688,8 +1688,15 @@ respectively. @end lilypond Typographically, the phrasing slur behaves almost exactly like a normal -slur. See also @seeinternals{PhrasingSlur}. +slur. See also @seeinternals{PhrasingSlur}. But although they behave +similarily to normal slurs, phrasing slurs count as different objects. +A @code{\slurUp} will have no effect on a phrasing slur; instead, you +should use @code{\phrasingSlurUp}, @code{\phrasingSlurDown}, and +@code{\phrasingSlurBoth}. +Note that the commands +@code{\slurUp}, @code{\slurDown}, and @code{\slurBoth} will only affect +normal slurs and not phrasing slurs. @node Breath marks @subsection Breath marks @@ -1739,9 +1746,9 @@ is as follows: \spanrequest \start "text" \spanrequest \stop "text" @end example -LilyPond will respond by creating a @internalsref{TextSpanner} grob (typically +LilyPond will respond by creating a @internalsref{TextSpanner} object (typically in @internalsref{Voice} context). The string to be printed, as well as the -style is set through grob properties. +style is set through object properties. An application---or rather, a hack---is to fake octavation indications. @lilypond[fragment,relative,verbatim] @@ -1922,7 +1929,7 @@ exact length of the string, which may lead to collisions. Also, @TeX{} commands won't work with direct PostScript output. @c (see @ref{PostScript output}). -Text scripts are created in form of @internalsref{TextScript} grobs, in +Text scripts are created in form of @internalsref{TextScript} objects, in @internalsref{Voice} context. @ref{Text markup} describes how to change the font or access @@ -1939,9 +1946,9 @@ special symbols in text scripts. @cindex ornaments @cindex grace notes -Grace notes are ornaments are written out ornaments -@lilypond[relative=2,verbatim,ifragment] - c4 \grace c16 c4 \grace { [c16 d16] } c4 +Grace notes are ornaments that are written out +@lilypond[relative=2,verbatim,ifragment] c4 \grace c16 c4 \grace { +[c16 d16] } c4 @end lilypond In normal notation, grace notes are supposed to take up no logical @@ -1972,7 +1979,7 @@ changes may appear halfway in between grace notes: @end lilypond The placement of these grace notes is synchronized between different -staffs, using this grace timing. +staves, using this grace timing. @lilypond[relative=2,verbatim,fragment] < \context Staff = SA { e4 \grace { c16 d e f } e4 } @@ -1981,13 +1988,17 @@ staffs, using this grace timing. Unbeamed eighth notes and shorter by default have a slash through the -stem. This can be controlled with grob property @code{flag-style} of +stem. This can be controlled with object property @code{flag-style} of @internalsref{Stem}. The change in formatting is accomplished by inserting @code{\startGraceMusic} before handling the grace notes, and @code{\stopGraceMusic} after finishing the grace notes. You can add to these definitions to globally change grace note formatting. The standard definitions are in @file{ly/grace-init.ly}. +Notice how the @code{\override} is carefully matched with a @code{\revert}. + +@cindex slash +@cindex grace slash @lilypond[fragment,verbatim] \relative c'' \context Voice { @@ -2000,6 +2011,8 @@ standard definitions are in @file{ly/grace-init.ly}. } @end lilypond + + If you want to end a note with a grace note, then the standard trick is to put the grace notes before a phantom ``space note'', e.g. @lilypond[fragment,verbatim, relative=2] @@ -2010,12 +2023,39 @@ is to put the grace notes before a phantom ``space note'', e.g. } @end lilypond +A @code{\grace} section has some default values, and LilyPond will +use those default values unless you specify otherwise inside the +@code{\grace} section. For example, if you specify \slurUp +@emph{before} your @code{\grace} section, a slur which starts inside +the @code{\grace} won't be forced up, even if the slur ends outside +of the @code{\grace}. Note the difference between the first and +second bars in this example: + +@lilypond[fragment,verbatim] +\relative c'' \context Voice { + \slurUp + \grace { + a4 ( } + ) a4 a4 () a2 + \slurBoth + + \grace { + \slurUp + a4 ( } + ) a4 a4 () a2 + \slurBoth + +} +@end lilypond + @refbugs +Grace notes can not be used in the smallest size (@file{paper11.ly}). + Grace note synchronization can also lead to surprises. Staff notation, such as key signatures, barlines, etc. are also synchronized. Take -care when you mix staffs with grace notes and staffs without. +care when you mix staves with grace notes and staves without. @lilypond[relative=2,verbatim,fragment] < \context Staff = SA { e4 \bar "|:" \grace c16 d4 } @@ -2027,14 +2067,7 @@ expressions. Nesting, juxtaposing, or ending sequential music with a grace section is not supported, and might produce crashes or other errors. -@menu -* Glissando :: -* Dynamics:: -@end menu - - -@c . {Glissando} @node Glissando @subsection Glissando @cindex Glissando @@ -2137,11 +2170,11 @@ You can also supply your own texts: @cindex diminuendo -Dynamics are grobs of @internalsref{DynamicText} and +Dynamics are objects of @internalsref{DynamicText} and @internalsref{Hairpin}. Vertical positioning of these symbols is -handled by the @internalsref{DynamicLineSpanner} grob. If you want to +handled by the @internalsref{DynamicLineSpanner} object. If you want to adjust padding or vertical direction of the dynamics, you must set -properties for the @internalsref{DynamicLineSpanner} grob. Predefined +properties for the @internalsref{DynamicLineSpanner} object. Predefined identifiers to set the vertical direction are \dynamicUp and \dynamicDown. @@ -2285,9 +2318,9 @@ command can be @item 'end-repeat Print a :| bar line @item (volta . @var{text}) - Print a volta bracket saying @var{text}. + Print a volta bracket saying @var{text}. @item (volta . #f) - Stop a running volta bracket + Stop a running volta bracket @end table @lilypond[verbatim, fragment] @@ -2299,7 +2332,7 @@ command can be @end lilypond -Repeats brackets are @internalsref{VoltaBracket} grobs. +Repeats brackets are @internalsref{VoltaBracket} objects. @node Tremolo repeats @subsection Tremolo repeats @@ -2318,7 +2351,7 @@ style. } @end lilypond -Tremolo beams are @internalsref{Beam} grobs. Single stem tremolos are +Tremolo beams are @internalsref{Beam} objects. Single stem tremolos are @internalsref{StemTremolo}. The single stem tremolo @emph{must} be entered without @code{@{} and @code{@}}. @@ -2364,7 +2397,7 @@ patterns that divide the measure length are replaced by slashes. } @end lilypond -The signs are represented by these grobs: @internalsref{RepeatSlash} and +The signs are represented by these objects: @internalsref{RepeatSlash} and @internalsref{PercentRepeat} and @internalsref{DoublePercentRepeat}. @refbugs @@ -2769,7 +2802,7 @@ Sustain, Sostenuto or UnaCorda. Refer to the generated documentation of @rgrob{SustainPedal}, for example, for more information. Pedals can also be indicated by a sequence of brackets, by setting the -@code{pedal-type} property of SustainPedal grobs: +@code{pedal-type} property of SustainPedal objects: @lilypond[fragment,verbatim] \property Staff.SustainPedal \override #'pedal-type = #'bracket @@ -2798,7 +2831,7 @@ c''4 \sostenutoDown d''4 e''4 c'4 f'4 g'4 a'4 \sostenutoUp For fine-tuning of the appearance of a pedal bracket, the properties @code{edge-width}, @code{edge-height}, and @code{shorten-pair} of -@code{PianoPedalBracket} grobs (see the detailed documentation of +@code{PianoPedalBracket} objects (see the detailed documentation of @rgrob{PianoPedalBracket}) can be modified. For example, the bracket may be extended to the end of the note head. @@ -2839,11 +2872,11 @@ to the chords in both staves, and set > @end lilypond -This command creates @internalsref{Arpeggio} grobs. Cross staff arpeggios +This command creates @internalsref{Arpeggio} objects. Cross staff arpeggios are @code{PianoStaff.Arpeggio}. To add an arrow head to explicitly specify the direction of the -arpeggio, you should set the arpeggio grob property +arpeggio, you should set the arpeggio object property @code{arpeggio-direction}. @lilypond[fragment,relative,verbatim] @@ -2858,7 +2891,7 @@ arpeggio, you should set the arpeggio grob property A square bracket on the left indicates that the player should not arpeggiate the chord. To draw these brackets, set the @code{molecule-callback} property of @code{Arpeggio} or -@code{PianoStaff.Arpeggio} grobs to @code{\arpeggioBracket}, and use +@code{PianoStaff.Arpeggio} objects to @code{\arpeggioBracket}, and use @code{\arpeggio} statements within the chords as before. @lilypond[fragment,relative,verbatim] @@ -2904,16 +2937,16 @@ can be printed automatically. This is enabled if the property > @end lilypond -The associated grob is @internalsref{VoiceFollower}. +The associated object is @internalsref{VoiceFollower}. @node Tablatures @section Tablatures -Tablature notation is used music for plucked string instruments. It -notates pitches not by using note heads, but by indicating on which -string and fret a note must be played. LilyPond offers limited -support for tablature, by abusing the fingering system. +Tablature notation is used for notating music for plucked string +instruments. It notates pitches not by using note heads, but by +indicating on which string and fret a note must be played. LilyPond +offers limited support for tablature. @menu * Tablatures basic:: @@ -2928,24 +2961,50 @@ support for tablature, by abusing the fingering system. Tablature can be typeset with Lilypond by using the @internalsref{TabStaff} and @internalsref{TabVoice} contexts. As tablature is a recent feature in Lilypond, most of the guitar special -effects such as hammer, pull, bend are not yet supported. +effects such as bend are not yet supported. With the @internalsref{TabStaff}, the string number associated to a note -is given though the fingering mechanism, e.g. @code{c4-3} for a C -quarter on the third string. The string 1 is the lowest one, and the +is given as a backslash followed by the string number, e.g. @code{c4\3} for a C +quarter on the third string. By default, string 1 is the highest one, and the tuning defaults to the standard guitar tuning (with 6 strings). @lilypond[fragment,verbatim] \context TabStaff < \notes { - \property Staff.Stem \override #'direction = #1 - - a,4-2 c'-5 a-4 e'-6 - e-3 c'-5 a-4 e'-6 + a,4\5 c'\2 a\3 e'\1 + e\4 c'\2 a\3 e'\1 } > @end lilypond +If you do not specify a string number then lilypond automatically selects one. +The selection is controlled by the translator property @code{minimumFret}. -- LilyPond +simply selects the first string that does not give a fret number less than +@code{minimumFret}. Default is 0. + +Notice that LilyPond does not handle chords in any special way, and hence +the automatic string selector may easily select the same string to two notes in a chord. + +@example +e8 fis gis a b cis' dis' e' +\property TabStaff.minimumFret = #8 +e8 fis gis a b cis' dis' e' +@end example +@lilypond +frag = \notes { + \key e \major + e8 fis gis a b cis' dis' e' + \property TabStaff.minimumFret = #8 + e8 fis gis a b cis' dis' e' +} +\score { + \context StaffGroup < + \context Staff { \clef "G_8" \frag } + \context TabStaff { \frag } + > +} +@end lilypond + @node Non-guitar tablatures @subsection Non-guitar tablatures @cindex Non-guitar tablatures @@ -2953,10 +3012,30 @@ tuning defaults to the standard guitar tuning (with 6 strings). There are many ways to customize Lilypond tablatures. First you can change the number of strings, by setting the number of -lines in the @internalsref{TabStaff}. You can change the strings +lines in the @internalsref{TabStaff} (the @code{line-count} property +of TabStaff can only be changed using @code{\outputproperty}, for more +information, see @ref{Tuning per object}. You can change the strings tuning. A string tuning is given as a Scheme list with one integer number for each string, the number being the pitch of an open string. +(The numbers specified for stringTuning are the numbers of semitons +to subtract --- or add --- starting the specified pitch by default +middle C, in string order: thus the notes are e, a, d & g) + +@lilypond[fragment,verbatim] + \context TabStaff < + + \outputproperty #(make-type-checker 'staff-symbol-interface) + #'line-count = #4 + \property TabStaff.stringTunings = #'(-5 -10 -15 -20) + + \notes { + a,4 c' a e' e c' a e' + } + + > +@end lilypond + Finally, it is possible to change the Scheme function to format the tablature note text. The default is @var{fret-number-tablature-format}, which uses the fret number, but for some instruments that may not use @@ -3214,7 +3293,7 @@ scheme = \notes { By default, a chord name system proposed by Harald Banter (See @ref{Literature}) is used. The system is very regular and predictable. Typical American style chord names may be selected by setting the -@code{style} property of the @code{ChordNames.ChordName} grob to +@code{style} property of the @code{ChordNames.ChordName} object to @code{'american}. Similarly @code{'jazz} selects Jazz chordnames. Routines that determine the names to be printed are written in Scheme, @@ -3288,7 +3367,7 @@ To print a rehearsal mark, use the @code{\mark} command. As you can see, the mark is incremented automatically if you use @code{\mark \default}. The value to use is stored in the property -@code{rehearsalMark} is used and automatically incremented. The grob +@code{rehearsalMark} is used and automatically incremented. The object is @internalsref{RehearsalMark} in @internalsref{Score} context. See @code{input/test/boxed-molecule.ly} if you need boxes around the marks. @@ -3330,14 +3409,36 @@ number itself is a property that can be set by modifying the \property Score.currentBarNumber = #217 @end example -If you want boxed bar numbers, see the example file -@code{input/test/boxed-molecule.ly}. +To typeset Bar Numbers at regular intervals instead of at the beginning of each line, +you need to change the grob property @code{break-visibility} as well as the translator +property @code{barNumberVisibility}, as illustrated in the following example which also +adds a box around the bar numbers: +@example +\property Score.BarNumber \override #'break-visibility = + #end-of-line-invisible +\property Score.barNumberVisibility = #(every-nth-bar-number-visible 5) +\property Score.BarNumber \override #'molecule-callback = + #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule) +\property Score.BarNumber \override #'font-relative-size = #0 +@end example +@lilypond +\score { + \context Staff \notes \transpose c''' { + \property Score.BarNumber \override #'break-visibility = #end-of-line-invisible + \property Score.barNumberVisibility = #(every-nth-bar-number-visible 5) + \property Score.BarNumber \override #'molecule-callback = + #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule) + \property Score.BarNumber \override #'font-relative-size = #0 + + \repeat unfold 16 c1 \bar "|." + } +} +@end lilypond See also @seeinternals{BarNumber}. @refbugs -Printing bar numbers at regular intervals is not implemented. Barnumbers can collide with the StaffGroup, if there is one at the top. To solve this, You have to twiddle with the @internalsref{padding} property of @internalsref{BarNumber} if your @@ -3437,7 +3538,7 @@ measure. @cindex whole rests for a full measure -The grob for this object is @internalsref{MultiMeasureRest}. +The object for this object is @internalsref{MultiMeasureRest}. @refbugs @@ -3603,13 +3704,12 @@ output. To get a longa note head, you have to use mensural note heads. This is accomplished by setting the @code{style} property of the -NoteHead grob to @code{mensural}. There is also a note head style +NoteHead object to @code{mensural}. There is also a note head style @code{baroque} which gives mensural note heads for @code{\longa} and @code{\breve} but standard note heads for shorter notes. @lilypond[fragment,singleline,verbatim] \property Voice.NoteHead \set #'style = #'mensural - \property Voice.NoteHead \set #'font-family = #'ancient a'\longa @end lilypond @@ -3676,8 +3776,8 @@ block: @subsection Ancient clefs LilyPond supports a variety of clefs, many of them ancient. These can -be selected from the @code{ancient} font family, by setting -@code{Staff.clefGlyph}) to one of the following values +be selected by setting @code{Staff.clefGlyph}) to one of the following +values @table @code @item clefs-C @@ -3747,7 +3847,7 @@ LilyPond has limited support for figured bass: The support for figured bass consists of two parts: there is an input mode, introduced by @code{\figures}, where you can enter bass figures as numbers, and there is a context called @internalsref{FiguredBass} -that takes care of making @internalsref{BassFigure} grobs. +that takes care of making @internalsref{BassFigure} objects. In figures input mode, a group of bass figures is delimited by @code{<} and @code{>}. The duration is entered after the @code{>}. @@ -3797,34 +3897,34 @@ hands. Nevertheless, there are situations where it needs some help, or where you want to override its decisions. In this section we discuss ways to do just that. -Formatting is internally done by manipulating so called grobs (graphic -objects). Each grob carries with it a set of properties (grob -properties) specific to that object. For example, a stem grob has +Formatting is internally done by manipulating so called objects (graphic +objects). Each object carries with it a set of properties (object +properties) specific to that object. For example, a stem object has properties that specify its direction, length and thickness. The most direct way of tuning the output is by altering the values of these properties. There are two ways of doing that: first, you can -temporarily change the definition of a certain type of grob, thus +temporarily change the definition of a certain type of object, thus affecting a whole set of objects. Second, you can select one specific -object, and set a grob property in that object. +object, and set a object property in that object. @menu -* Tuning groups of grobs :: -* Tuning per grob :: +* Tuning groups of objects :: +* Tuning per object :: * Font selection:: * Text markup:: @end menu -@node Tuning groups of grobs -@subsection Tuning groups of grobs +@node Tuning groups of objects +@subsection Tuning groups of objects -@cindex grob description +@cindex object description -A grob definition is a Scheme association list, that is stored in a +A object definition is a Scheme association list, that is stored in a context property. By assigning to that property (using plain -@code{\property}), you can change the resulting grobs. +@code{\property}), you can change the resulting objects. @lilypond[verbatim, fragment] c'4 \property Voice.Stem = #'() @@ -3845,11 +3945,11 @@ find this useful: @cindex \set This mechanism is fairly crude, since you can only set, but not modify, -the definition of a grob. For this reason, there is a more advanced +the definition of a object. For this reason, there is a more advanced mechanism. -The definition of a grob is actually a list of default grob -properties. For example, the definition of the Stem grob (available in +The definition of a object is actually a list of default object +properties. For example, the definition of the Stem object (available in @file{scm/grob-description.scm}), defines the following values for @internalsref{Stem} @@ -3914,13 +4014,13 @@ default value: \set \set \set \set @var{to default value} @end example -If there is no default (i.e. by default, the grob property is unset), +If there is no default (i.e. by default, the object property is unset), then you can use @example \set \set \set \revert @end example -For the digirati, the grob description is an Scheme association +For the digirati, the object description is an Scheme association list. Since a Scheme list is a singly linked list, we can treat it as a stack, and @code{\override} and @code{\revert} are just push and pop operations. This pushing and popping is also used for overriding @@ -3929,35 +4029,53 @@ automatic beaming settings. @refbugs LilyPond will hang or crash if @var{value} contains cyclic references. -The backend is not very strict in type-checking grob properties. If you +The backend is not very strict in type-checking object properties. If you @code{\revert} properties that are expected to be set by default, LilyPond may crash. -@node Tuning per grob -@subsection Tuning per grob +@node Tuning per object +@subsection Tuning per object + +Tuning a single object is most often done with @code{\property}. The +form, +@example + \once \property @dots{} +@end example +@c +applies a setting only during one moment in the score: notice how the +original setting for stem thickness is restored automatically in the +following example +@c +@lilypond[verbatim, fragment, relative=1] + c4 + \once \property Voice.Stem \set #'thickness = #4 + c4 + c4 +@end lilypond +@cindex \once @cindex \outputproperty -A second way of tuning grobs is the more arcane @code{\outputproperty} +A second way of tuning objects is the more arcane @code{\outputproperty} feature. The syntax is as follows: @example \outputproperty @var{predicate} @var{symbol} = @var{value} @end example -Here @code{predicate} is a Scheme function taking a grob argument, and +Here @code{predicate} is a Scheme function taking a object argument, and returning a boolean. This statement is processed by the @code{Output_property_engraver}. It instructs the engraver to feed all -grobs that it sees to @var{predicate}. Whenever the predicate returns -true, the grob property @var{symbol} will be set to @var{value}. +objects that it sees to @var{predicate}. Whenever the predicate returns +true, the object property @var{symbol} will be set to @var{value}. + +This command is only single shot, in contrast to @code{\override} and +@code{\set}. You will need to combine this statement with @code{\context} to select the appropriate context to apply this to. -Here are some random examples. - - In the following example, all note heads occurring at current staff level, are shifted up and right by setting their @code{extra-offset} property. @@ -3972,7 +4090,7 @@ property. @cindex @code{extra-offset} -In this example, the predicate checks the @code{text} grob property, to +In this example, the predicate checks the @code{text} object property, to shift only the `m.d.' text, but not the fingering instruction "2". @lilypond[verbatim,singleline] #(define (make-text-checker text) @@ -4016,7 +4134,7 @@ example of those is in @file{input/test/cue-notes.ly}. @cindex font size @cindex size -The font used for printing a grob can be selected by setting +The font used for printing a object can be selected by setting @code{font-name}, e.g. @example \property Staff.TimeSignature @@ -4026,8 +4144,8 @@ You may use any font which is available to @TeX{}, such as foreign fonts or fonts that do not belong to the Computer Modern font family. Font selection for the standard fonts, @TeX{}'s Computer Modern fonts, can also be adjusted with a more fine-grained mechanism. By setting -the grob properties described below, you can select a different font. -All three mechanisms work for every grob that supports +the object properties described below, you can select a different font. +All three mechanisms work for every object that supports @code{font-interface}. @table @code @@ -4065,15 +4183,15 @@ For any of these properties, the value @code{*} (i.e. the @emph{symbol}, @code{*}, entered as @code{#'*}), acts as a wildcard. This can be used to override default setting, which are always present. For example: @example - \property Lyrics . LyricText \override #'font-series = #'bold - \property Lyrics . LyricText \override #'font-family = #'typewriter - \property Lyrics . LyricText \override #'font-shape = #'* + \property Lyrics.LyricText \override #'font-series = #'bold + \property Lyrics.LyricText \override #'font-family = #'typewriter + \property Lyrics.LyricText \override #'font-shape = #'* @end example @cindex @code{font-style} There are also pre-cooked font selection qualifiers. These are -selected through the grob property @code{font-style}. For example, +selected through the object property @code{font-style}. For example, the style @code{finger} selects family @code{number} and relative size @code{-3}. Styles available include @code{volta}, @code{finger}, @code{tuplet}, @code{timesig}, @code{mmrest}, @code{script}, @@ -4083,7 +4201,7 @@ to this file for more information. @cindex magnification -The size of the font may be scaled with the grob property +The size of the font may be scaled with the object property @code{font-magnification}. For example, @code{2.0} blows up all letters by a factor 2 in both directions. @@ -4122,7 +4240,7 @@ in the following way. @end lilypond Normally, the Scheme markup text is stored in the @code{text} property -of a grob. Formally, it is defined as follows: +of a object. Formally, it is defined as follows: @example text: string | (head? text+) @@ -4134,9 +4252,9 @@ abbrev: @code{columns lines roman music bold italic named super sub} @code{large Large dynamic} @end example -The markup is broken down and converted into a list of grob properties, +The markup is broken down and converted into a list of object properties, which are prepended to the property list. The @var{key}-@var{value} -pair is a grob property. A list of properties available is included in +pair is a object property. A list of properties available is included in the generated documentation for @internalsref{text-interface}. The following abbreviations are defined: @@ -4228,9 +4346,9 @@ slightly too wide. @section Global layout The global layout determined by three factors: the page layout, the -iline breaks and the spacing. These all influence each other: The +line breaks and the spacing. These all influence each other: The choice of spacing determines how densely each system of music is set, -whree line breaks breaks are chosen, and thus ultimately how many +where line breaks breaks are chosen, and thus ultimately how many pages a piece of music takes. In this section we will explain how the lilypond spacing engine works, and how you can tune its results. @@ -4255,13 +4373,13 @@ are chosen whenever the page gets full. @subsection Vertical spacing @cindex vertical spacing -@cindex distance between staffs +@cindex distance between staves @cindex staff distance @cindex between staves, distance The height of each system is determined automatically by lilypond, to keep systems from bumping into each other, some minimum distances are -set. By changing these, you can put staffs closer together, and thus +set. By changing these, you can put staves closer together, and thus put more systems onto one page. Normally staves are stacked vertically. To make @@ -4280,14 +4398,14 @@ could also make the staff larger at the bottom by setting it to @code{(-6 . 4)}. The default value is @code{(-6 . 6)}. Vertical aligment of staves is handled by the -@internalsref{VerticalAlignment} grob, which lives at +@internalsref{VerticalAlignment} object, which lives at @internalsref{Score} level. -The piano staffs are handled a little differently: to make cross-staff +The piano staves are handled a little differently: to make cross-staff beaming work correctly, it necessary that the distance between staves is fixed. This is also done with a @internalsref{VerticalAlignment} -grob, created in @internalsref{PianoStaff}, but a forced distance is -set. This is done with the grob property #'forced-distance. If you +object, created in @internalsref{PianoStaff}, but a forced distance is +set. This is done with the object property #'forced-distance. If you want to override this, use a @code{\translator} block as follows: @example \translator @{ @@ -4295,7 +4413,7 @@ want to override this, use a @code{\translator} block as follows: VerticalAlignment \override #'forced-distance = #9 @} @end example -This would bring the staffs together at a distance of 9 staff spaces, +This would bring the staves together at a distance of 9 staff spaces, and again this is measured from the center line of each staff. @@ -4318,7 +4436,7 @@ quarter note is followed by 2 NHW, the half by 3 NHW, etc. @end lilypond These two amounts of space are @code{shortest-duration-space} -@code{spacing-increment}, grob properties of +@code{spacing-increment}, object properties of @internalsref{SpacingSpanner}. Normally @code{spacing-increment} is set to 1.2, which is the width of a note head, and @code{shortest-duration-space} is set to 2.0, meaning that the @@ -4359,7 +4477,7 @@ through @code{base-shortest-duration}. In the introduction it was explained that stem directions influence spacing. This is controlled with @code{stem-spacing-correction} in -@internalsref{NoteSpacing}. The @code{StaffSpacing} grob contains the +@internalsref{NoteSpacing}. The @code{StaffSpacing} object contains the same property for controlling the stem/barline spacing. In the following example shows these corrections, once with default settings, and once with exaggerated corrections. diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely index 8a1b71d293..54968e2e27 100644 --- a/Documentation/user/tutorial.itely +++ b/Documentation/user/tutorial.itely @@ -246,7 +246,7 @@ LilyPond source file looks like: In the last section we explained what kind of things you could enter in a lilypond file. In this section we explain how to run LilyPond -and how view or print the output. If you have not used LilyPond +and how to view or print the output. If you have not used LilyPond before, want to test your setup of LilyPond, or want to run an example file yourself, read this section. The instructions that follow are for running LilyPond on Unix-like systems. Some additional @@ -331,10 +331,10 @@ file by executing @code{lpr test.ps}. @c volgende alinea schrappen? If your system does not support printing PostScript files, then you -can install GhostScript, a PostScript emulator. Refer to -GhostScript's website at @uref{http://www.ghostscript.com}. +can install Ghostscript, a PostScript emulator. Refer to +Ghostscript's website at @uref{http://www.ghostscript.com}. -@cindex GhostScript +@cindex Ghostscript @cindex @code{lpr} @cindex Printing output @cindex PostScript @@ -500,7 +500,8 @@ g'4 ~ g' a'2 ~ a'4 @end quotation @separate -The key signature is set with the command ``@code{\key}'': +The key signature is set with the command ``@code{\key}''. One caution: +you need to specify whether the key is @code{\major} or @code{\minor}. @quotation @example \key d \major @@ -2020,10 +2021,10 @@ to the page layout of this document. @node Fine tuning a piece @section Fine tuning a piece -In this section, we show some ways to fine tune the final output of a -piece. We do so using a single measure of a moderately complex piano -piece: a Brahms intermezzo (opus 119, no. 1). Both fragments (the -tuned and the untuned are in the @file{input/tutorial/}). +In this section we show some ways to fine tune the final output of a +piece. We do so using a single measure of a moderately complex piano +piece: a Brahms intermezzo (opus 119, no. 1). Both fragments (the +tuned and the untuned versions) are in @file{input/tutorial/}. The code for the untuned example shows us some new things. @@ -2037,99 +2038,101 @@ The code for the untuned example shows us some new things. @cindex @code{\<} @cindex @code{\!} -The crescendo is ended at the half note by the escaped exclamation -mark @code{\!}. - -Hairpin dynamics can be indicated using @code{\>} to start a -decrescendo, and @code{\!} to end one. The crescendo is started using -@code{\<} and also ended using @code{\!}. Absolute dynamics can be -entered using @code{\p}, @code{\mf}, etc. All these commands apply to -the complete chord where they are entered, but for syntactical -reasons, they must be attached to one of the notes of the chord. +Hairpin dynamics can be easily added to Lilypond scores. Beginning a +crescendo is indicated with @code{\<} and ending a crescendo is indicated +with @code{\!}. A decrescendo can be indicated with @code{\>} and +@code{\!}. Absolute dynamics (sometimes called ``Letter dynamics'') can +be entered using @code{\p}, @code{\mf}, etc. All these dynamics will +apply to the whole chord where they are entered, but for syntactical +reasons they must be attached to one of the notes of the chord. @cindex fingering instructions -Fingering indications are entered simply using @code{-@var{N}}, where +Fingering indications are entered with @code{-@var{N}}, where @var{N} is a digit. Now that we have the basic piece of music entered, we want to fine -tune it, so we get something that resembles the original printed +tune it so that we get something that resembles the original printed edition by Schott/Universal Edition: @lilypondfile{brahms-tweaked.ly} -@cindex tuning grob behavior +@cindex tuning graphical objects -The basic process that we follow is that we override defaults in the -printing system. We do this by setting variables in so-called grobs. -Printed symbols are internally represented by Graphical Objects -(Grobs). Each grob is described by a bunch of settings. Every -setting is a variable: it has a name, and you can assign a value to -the variable. These setting determine the fonts, offsets, sub-routines -to be called on the grob, etc. The initial values of these settings -are set in the Scheme file @file{scm/grob-description.scm}. +Fine tuning involves overriding the defaults of the printing system. +We do this by setting variables which control how Lilypond prints +symbols. Printed symbols are called graphical objects (often +abbreviated to @emph{grob}). Each object is described by a bunch of +settings. Every setting is a variable: it has a name and a value +which you can change. These values determine the fonts, offsets, +sub-routines to be called on the object, etc. The initial values of +these settings are set in the Scheme file +@file{scm/grob-description.scm}. @cindex slur attachments -We start with the slur: the slur in the upper part, running from the F -sharp to the A, runs from stem to stem in the printed edition, while -ours starts from the note head at the left. The following property -setting forces all slurs to run from stem to stem (and not from or to -note head) +We start with the slur in the upper part, running from F sharp to A. In +the printed edition, this slur runs from stem to stem; in our version, +the slur begins at the note head of the F sharp. The following property +setting forces all slurs to run from stem to stem (not from or to note +heads!). @example \property Voice.Slur \set #'attachment = #'(stem . stem) @end example -More precisely, this command extends the definition of the @code{Slur} +More precisely, this command modifies the definition of the @code{Slur} object in the current @code{Voice}. The variable @code{attachment} is set to the pair of symbols @code{'(stem . stem)}. -Although this is useful information, it is not very helpful: the -lilypond back-end supports approximately 240 variables like -@code{attachment}, each with their own meaning and own type -(eg. number, symbol, list, etc). Besides slur, LilyPond has 80 -different types of Grobs, that may be created in 14 different context -types besides Voice. +Although this fixes the slur, it isn't very helpful for fine tuning in +general: the lilypond back-end supports approximately 240 variables +like @code{attachment}, each with their own meaning and own type +(eg. number, symbol, list, etc). Besides slur, LilyPond has 80 +different types of graphical objects, that may be created in 14 +different context types besides Voice. @cindex internal documentation -@cindex finding grobs -@cindex grob descriptions +@cindex finding graphical objects +@cindex graphical object descriptions The interesting information is how you can figure out which properties to tune for your own scores. To discover this, you must have a copy of -the internals document. This is a set of HTML pages, which should be -included if you run a binary distribution@footnote{You can also +the internals document. This is a set of HTML pages which should be +included if you installed a binary distribution@footnote{You can also compile them by executing @code{make -C Documentation/user/ -out/lilypond-internals.html} in the source package.}. This document is -also available on the web: go to the lilypond website, click -``Documentation: other'' on the side bar, click -``lilypond-internals'', under information for users. - -You might want to bookmark either the HTML files on disk, or the one -on the web. One word of caution is in place here: the internals -documentation is generated from the definitions that lily uses. For -that reason, it is strongly tied to the version of LilyPond that you -use. Before you proceed, please make sure that you are using the -documentation that corresponds to the LilyPond version that you use. - -Suppose that you wanted to tune the behavior of the slur. The first -step is to get some general information on slurs in lilypond. Turn to +out/lilypond-internals.html} in the source package.}. These HTML pages +are also available on the web: go to the lilypond website, click +``Documentation: Index'' on the side bar, look in the ``Information for +uses'' section, and click on ``Documentation of internals''. + +You might want to bookmark either the HTML files on your disk, or the one +on the web (the HTML on your hard drive will load much faster than the +ones on the web!). One word of caution: the internals documentation is +generated from the definitions that lily uses. For that reason, it is +strongly tied to the version of LilyPond that you use. Before you +proceed, please make sure that you are using the documentation that +corresponds to the version of LilyPond that you are using. + +@c TODO: the quote is incorrect, although that shouldn't be a big +@c problem for the reader. +Suppose that you wanted to tune the behavior of the slur. The first +step is to get some general information on slurs in lilypond. Turn to the index, and look up ``slur''. The section on slurs says @quotation The grob for this object is @internalsref{Slur}, generally in @internalsref{Voice} context. @end quotation -So the grob for this object is called @code{Slur}, and slurs are -created in the @code{Voice} context. If you are reading this tutorial -in the HTML version, then you can simply click Slur, otherwise, you -must look it up the internal documentation: click ``grob overview'' , -and select ``slur'' (the list is alphabetical.) +So the graphical object for this object is called @code{Slur}, and +slurs are created in the @code{Voice} context. If you are reading +this tutorial in the HTML version, then you can simply click Slur, +otherwise, you should look it up the internal documentation: click +``grob overview'' and select ``slur'' (the list is alphabetical). Now you get a list of all the properties that the slur object -supports, along with their default values. Among the properties we -find the @code{attachment} property with its default setting. +supports, along with their default values. Among the properties we +find the @code{attachment} property with its default setting. The property documentation explains that the following setting will produce the desired effect: @example @@ -2138,30 +2141,32 @@ produce the desired effect: If you ran the previous example, you have unknowingly already used this kind of command. The @file{ly/property-init.ly} contains the -definition of @code{\stemUp} +definition of @code{\stemUp}: @example stemUp = \property Voice.Stem \set #'direction = #1 @end example +@c this is a long section, and adding an extra space here helps to +@c break it into smaller subsections and thus is easier to understand. +@separate -We also want to move around the fingering `3'. In the printed edition -it is not above the stem, but a little lower, slightly left of the -stem. From the user manual, we find that the associated grob is called -@code{Fingering}, but how do we know if we should use @code{Voice} or -@code{Staff}. In many cases, @code{Voice} is a safe bet, but you can -also deduce this information from the internals documentation: if you -visit the documentation of @code{Fingering}, you will notice +Next we want to move the fingering `3'. In the printed edition it is +not above the stem, but a little lower and slightly left of the stem. +From the user manual we find that the associated graphical object is +called @code{Fingering}, but how do we know if we should use +@code{Voice} or @code{Staff}? In many cases, @code{Voice} is a safe +bet, but you can also deduce this information from the internals +documentation: if you visit the documentation of @code{Fingering}, you +will notice @example Fingering grobs are created by: Fingering_engraver @end example - - Clicking @code{Fingering_engraver} will show you the documentation of the module responsible for interpreting the fingering instructions and -translating them to a @code{Fingering} grob. Such a module is called -an @emph{engraver}. The documentation of the @code{Fingering_engraver} -says, +translating them to a @code{Fingering} object. Such a module is called +an @emph{engraver}. The documentation of the @code{Fingering_engraver} +says @example Fingering_engraver is part of contexts: Voice and TabVoice @end example @@ -2177,25 +2182,27 @@ or Since the @code{TabVoice} is only used for tab notation, we see that the first guess @code{Voice} was indeed correct. -@cindex setting grob properties +@cindex setting object properties @cindex @code{extra-offset} -For shifting the fingering, we use the grob property -@code{extra-offset}. The following command manually adds an offset to -the object. We move it a little to the left, and 1.8 staff space -downwards. +For shifting the fingering, we use the property @code{extra-offset}. +The following command manually adds an offset to the object. We move +it a little to the left, and 1.8 staff space downwards. @example \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) @end example The @code{extra-offset} is a low-level feature: it moves around objects in the printout; the formatting engine is completely oblivious -to these offsets. The unit of these offsets are staff-spaces. +to these offsets. The unit of these offsets are staff-spaces. The +first number controls left-right movement; a positive number will move +the object to the right. The second number controls up-down movement; +a positive number will move it higher. -@cindex reverting grob properties -@cindex undoing grob properties +@cindex reverting object properties +@cindex undoing object properties -We only want to offset a single grob, so after the F-sharp, we must -undo the setting. The technical term is to revert the grob property. +We only want to offset a single object, so after the F-sharp we must +undo the setting. The technical term is to revert the property. @example \property Voice.Fingering \revert #'extra-offset @end example @@ -2204,54 +2211,54 @@ undo the setting. The technical term is to revert the grob property. @cindex translator properties @cindex grob properties @cindex music properties +@separate +There are three different types of variables in LilyPond, something +which can be confusing at first (and for some people it stays confusing +:). Variables such as @code{extra-offset} and @code{attachment} are +called grob properties. They are not the same as translator properties, +like @code{autoBeaming}. Finally, music expressions are internally +stored using properties (so-called music properties). You will encounter +music properties if you run Scheme functions on music using @code{\apply}. -There is three different types of variables in LilyPond, something -which is confusing at first (and for some, it stays like that). -Variables such as @code{extra-offset} and @code{attachment} are called -grob properties. They are something different from the translator -properties, like @code{autoBeaming}. Finally, music expressions are -internally also stored using properties, so-called music -properties. You will encounter the latter type if you run Scheme -functions on music using @code{\apply}. - -The second fingering instruction should be moved up a little, to avoid -a collision with the slur. This could be achieved with +The second fingering instruction should be moved up a little to avoid +a collision with the slur. This could be achieved with @code{extra-offset}, but in this case, a simpler mechanism also -works. We insert an empty text between the 5 and the note. The empty +works. We insert an empty text between the 5 and the note. The empty text pushes the fingering instruction away: @example a^" "^#'(finger "5") @end example -Lilypond tries to put fingering instructions closer to the notes as -text instructions. To insert an empty text (@code{^" "}) between the -finger and the note, we have disguised the fingering instruction as a -text: @code{(finger "5")}. +Lilypond tries to put fingering instructions as close to the notes as +possible. To make sure that Lilypond doesn't do that, we disguise the +fingering as text: @code{(finger "5")}. -Normally, one would specify dynamics in a single voice, and start and -end dynamics (such as @b{f} and @b{p}) will be aligned with -hairpins. In this case, we want the decrescendo to be in a different -place from the piano sign. We achieve this by putting the dynamic -markings in different voices. The crescendo should be above the upper -staff. This can be forced by the precooked command +@separate + +Normally one would specify all dynamics in the same voice, so that +dynamics (such as @b{f} and @b{p}) will be aligned with hairpins. But +in this case, we don't want the decrescendo to be aligned with the +piano sign. We achieve this by putting the dynamic markings in different +voices. The crescendo should be above the upper staff. This can be +forced by using the precooked command @example \dynamicsUp @end example -However, if you do that, the decrescendo will be too close to the -upper voice, and collide with the stems. Looking at the manual for +However, if you do that the decrescendo will be too close to the +upper voice and collide with the stems. Looking at the manual for dynamics, we notice that ``Vertical positioning of these symbols is -handled by the @internalsref{DynamicLineSpanner} grob.''. If we turn -to the documentation of @code{DynamicLineSpanner}, we find that the -@code{DynamicLineSpanner} supports several so-called -`interfaces'. This grob not only puts dynamic objects next to the -staff (@code{side-position-interface}), but it also groups dynamic -objects (@code{axis-group-interface}), is considered a dynamic sign -itself (@code{dynamic-interface}) and is a grob: it has the -@code{grob-interface}, with all the variables that come with it. - -For the moment, we are interested in the side positioning: +handled by the @internalsref{DynamicLineSpanner} grob.''. If we turn +to the documentation of @code{DynamicLineSpanner}, we find that +@code{DynamicLineSpanner} supports several so-called `interfaces'. This +object not only puts dynamic objects next to the staff +(@code{side-position-interface}), but it also groups dynamic objects +(@code{axis-group-interface}), is considered a dynamic sign +itself (@code{dynamic-interface}), and is an object. It has the standard +@code{grob-interface} with all the variables that come with it. + +For the moment we are interested in side positioning: @quotation side-position-interface @@ -2259,8 +2266,8 @@ For the moment, we are interested in the side positioning: support). In this case, the direction signifies where to put the victim object relative to the support (left or right, up or down?) @end quotation -Between the grob and its support (in this case: the notes in the voice -going down), there should be more space. This space is controlled by +Between the object and its support (in this case the notes in the voice +going down), there should be more space. This space is controlled by @code{padding}, so we increase it. @example \property Voice.DynamicLineSpanner \override #'padding = #5.0 @@ -2268,29 +2275,45 @@ going down), there should be more space. This space is controlled by This command is almost like the command for setting slur attachments, but subtly different in its details. Grob properties can be -manipulated with two commands: @code{\override} extends the grob +manipulated with two commands: @code{\override} extends the variables with a setting, and @code{\revert} releases this -setting. This has a certain theoretical appeal: the operations are -simple and symmetric. For practical use, it can be cumbersome. Both +setting. This has a certain theoretical appeal: the operations are +simple and symmetric. But for practical use, it can be cumbersome. The commands act like parentheses: you should carefully balance the use of -@code{\override} and @code{\revert}. The @code{\set} command is more +@code{\override} and @code{\revert}. The @code{\set} command is more friendly: it first does a @code{\revert} followed by @code{\override}. -Finally, Brahms uses music notation is a slightly unorthodox way. Ties -usually happen only within one voice. In this piece, the composer -gladly produces ties that jump voices. We deal with this by faking +@separate + +Brahms uses music notation is a slightly unorthodox way. Ties +usually happen only within one voice. In this piece, the composer +gladly produces ties that jump voices. We deal with this by faking these ties: whenever we need such a tie, we insert a notehead in a -different voice, and blank the stem. This is done in the following +different voice, and blank the stem. This is done in the following snippet of code. @example - \property Voice.Stem \set #'transparent = ##t + \property Voice.Stem \set #'transparent = ##t d' - \property Voice.Stem \revert #'transparent @end example +Blanking the stem should be done for only one object. One of the ways +to achieve that, is by setting the property before a note. Reverting +it afterwards is tedious, so for setting a property only once, we have +the syntax @code{\once}: it reverts the property directly before +proceeding to the next step in time. + +The @code{\once} keyword is added to @code{\property}. + Finally, the last tie is forced up using @code{\tieUp}. +@separate + +Here's the complete ``fine tuned'' version, which includes all the +modifications we discussed in this section: + +@lilypondfile[verbatim]{brahms-tweaked.ly} + @node An orchestral score @section An orchestral score @@ -2301,23 +2324,25 @@ Finally, the last tie is forced up using @code{\tieUp}. @end menu -Our last two examples show a way to setup the music for an orchestral -score. When typesetting a piece for several instruments, you'll want to -create a conductor's full score, alongside several individual parts. +Our next two examples demonstrate one way to create an orchestral score +in LilyPond. When typesetting a piece for several instruments, you'll +want to create a full score (for the conductor) along with several +individual parts (for the players). LilyPond is well suited for this task. We will declare the music for each instrument individually, giving the music of each instrument its own name. These pieces of music are then combined in different -@code{\score} blocks to produce different combinations of the score. +@code{\score} blocks to produce different combinations of instruments +(for example, one @code{\score} block may only include the cello part; +another @code{\score} block may be for all the strings, and yet another +@code{\score} block may be for all parts together). This orchestral score example consists of three input files. In the first file, @file{os-music.ly}, we define the music for all -instruments. This file will be used both for producing the score and -the separate parts. Other files reference this file by doing -@code{\include "os-music.ly"}. - -If you were to run LilyPond on this file, no printable output would be -produced. +instruments. This file will be used for producing the score and +the separate parts, but the file doesn't produce any sheet music +itself. Other files reference this file by doing @code{\include +"os-music.ly"}. @example % os-music.ly @@ -2356,36 +2381,38 @@ corno = \notes\relative c' @{ @} @end example -We will not go through the input line by line, but only indicate and -explain the new elements. +We will not examine this example line by line, since you already know +most of it. We'll examine a few lines which contain new elements. @separate @example global = @{ \time 2/4 - \skip 2*4 \bar "|."; + \skip 2*4 \bar "|." @} @end example Declare setting to be used globally. The @code{\skip} command produces no output, but moves forward in time: in this case, the duration of a half note (@code{2}), and that four times (@code{*4}). This brings us -to the end of the piece, and we can set the end bar. +to the end of the piece, and we can set the end bar. You can use @code{s} +as a shortcut for @code{\skip} (the last line of this section would +be @code{s2*4 \bar"|."}). @separate @example Key = \notes \key as \major @end example Declare the key signature of the piece and assign it to the identifier -@var{Key}. Later on, we'll use @code{\Key} for all staves except those +@var{Key}. Later on we'll use @code{\Key} for all staves except those for transposing instruments. @node The full score @subsection The full score -The second file, @file{input/tutorial/os-score.ly} reads the definitions of the first +The second file, @file{input/tutorial/os-score.ly}, reads the definitions of the first (@file{input/tutorial/os-music.ly}), and defines the @code{\score} block for the full conductor's score. @@ -2475,7 +2502,7 @@ Opus 1. @example \include "os-music.ly" @end example -First, we need to include the music definitions we made in +First we need to include the music definitions we made in @file{os-music.ly}. @separate @@ -2484,16 +2511,14 @@ First, we need to include the music definitions we made in @end example This piece of Scheme code executes the function -@code{set-point-and-click!}, with the argument @code{line-column}, a -symbol). - -Editing input files can be complicated if you're working with large -files: if you're digitizing existing music, you have to synchronize -the .ly file, the sheet music on your lap and the sheet music on the -screen. The point-and-click mechanism makes it easy to find the -origin of an error in the LY file: when you view the file with Xdvi -and click on a note, your editor will jump to the spot where that note -was entered. For more information, see @ref{Point and click}. +@code{set-point-and-click!} with the argument +@code{line-column}. Editing input files can be complicated if you're +working with large files: if you're digitizing existing music, you have +to synchronize the .ly file, the sheet music on your lap and the sheet +music on the screen. The point-and-click mechanism makes it easy to +find the origin of an error in the LY file: when you view the file with +Xdvi and click on a note, your editor will jump to the spot where that +note was entered. For more information, see @ref{Point and click}. @separate @@ -2502,8 +2527,8 @@ was entered. For more information, see @ref{Point and click}. (music "accidentals--1"))) @end example -When naming the tuning of the french horn, we'll need a piece of text -with a flat sign. LilyPond has a mechanism for font selection and +To name the transposition of the french horn, we will need a piece of +text with a flat sign. LilyPond has a mechanism for font selection and kerning called Scheme markup text (See @ref{Text markup}). The flat sign is taken from the music font, and its name is @code{accidentals--1} (The natural sign is called @code{accidentals-0}). The default font is @@ -2514,30 +2539,33 @@ too big for text, so we select a relative size of @code{-2}. < \global @end example -Of course, all staves are simultaneous and use the same global settings. +All staves are simultaneous and use the same global settings. @separate @example \property Score.BarNumber \override #'padding = #3 @end example LilyPond prints bar numbers at the start of each line, but -unfortunately, they end up a bit too close to the staff in this -example. A bar number internally is a Grob called @var{BarNumber}. -BarNumber Grobs can be manipulated through their +unfortunately they end up a bit too close to the staff in this +example. In LilyPond, a bar number is called @var{BarNumber}. +BarNumber objects can be manipulated through their @var{side-position-interface}. One of the properties of a -@var{side-position-interface} that can be tweaked is the -@var{padding}: the amount of extra space that is put between this Grob -and other Grobs. We set the padding to three staff spaces. +@var{side-position-interface} that can be tweaked is @var{padding}: +the amount of extra space that is put between this and other objects. +We set the padding to three staff spaces. You can find information on all these kind of properties in LilyPond's automatically generated documentation in @ifnottex -@ref{ (lilypond-internals)lilypond-internals, LilyPond Internals}. +@ref{ (lilypond-internals)lilypond-internals, LilyPond Internals} +or in @ref{Fine tuning a piece}. @end ifnottex @iftex -the online documentation. +the online documentation or in the previous section of the tutorial. @end iftex +@c REFERENCE MAO + @separate @example \context StaffGroup = woodwind < @@ -2545,9 +2573,9 @@ the online documentation. @end example A new notation context: the @code{StaffGroup}. @code{StaffGroup} can hold one or more @code{Staff}'s, and will print a big bracket at the -left of the score. Start a new staff group for the woodwind section -(just the flutes in this case). Immediately after that, we start the -staff for the two flutes, that also play simultaneously. +left of the score. This starts a new staff group for the woodwind +section (just the flutes in this case). Immediately after that, we +start the staff for the two flutes, who also play simultaneously. @separate @example @@ -2561,9 +2589,9 @@ names}). \property Staff.instrument = "2 Flauti" \property Staff.instr = "Fl." @end example -And define the instrument names to be printed in the margin, -@code{instrument} for the first line of the score, @code{instr} for the -rest of the score. +This defines the instrument names to be printed in the +margin. @code{instrument} specifies the name for the first line +of the score, @code{instr} is used for the rest of the score. @separate @example @@ -2578,7 +2606,7 @@ The flutes play in the default key. @end example Last come the actual flute parts. Remember that we're still in simultaneous mode. We name both voices differently, so that LilyPond -will actually create two Voice contexts. The flute parts are simple, so +will create two Voice contexts. The flute parts are simple, so we specify manually which voice is which: @code{\voiceOne} forces the direction of stems, beams, slurs and ties up, @code{\voiceTwo} sets directions down. @@ -2594,7 +2622,7 @@ Close the flutes staff and woodwind staff group. @example \property Staff.instrument = #'(lines "Timpani" "(C-G)") @end example -The timpani staff only shows a new piece of scheme markup, it sets two +The timpani staff demonstrates a new piece of scheme markup, it sets two lines of text. @separate @@ -2604,8 +2632,8 @@ lines of text. \context Thread=two \tromboII @end example You have seen the notation contexts Staff and Voice, but here's a new -one: Thread. One or more Threads can be part of a Voice. The Thread -takes care of note heads and rests, the Voice combine note heads onto a +one: Thread. One or more Threads can be part of a Voice. Thread +takes care of note heads and rests; Voice combine note heads onto a stem. For the trumpets we use the automatic part combiner (see @ref{Automatic @@ -2620,12 +2648,12 @@ when they're different. \property Staff.instrument = #`(lines "Corno" (columns "(E" ,text-flat ")")) @end example -The french horn has the most complex scheme markup name, made up of two -lines of text. The second line has three elements (columns), the @code{(E}, -the flat sign @code{text-flat} that we defined before and a final @code{")"}. -Note that we use a backquote instead of an ordinary quote at the -beginning of the Scheme expression to be able to access the -@code{text-flat} identifier, `unquoting' it with a @code{,}. +The french horn (``Corno'') has the most complex scheme markup name, made +up of two lines of text. The second line has three elements (columns) -- +the @code{(E}, the flat sign @code{text-flat} that we defined previously, +and a final @code{")"}. Note that we use a backquote instead of an +ordinary quote at the beginning of the Scheme expression to be able to +access the @code{text-flat} identifier, `unquoting' it with a ``@code{,}''. @separate @example @@ -2634,15 +2662,15 @@ beginning of the Scheme expression to be able to access the The french horn is to be tuned in E-flat, so we tell the MIDI back-end to transpose this staff by three steps. -Note how we can choose different tuning for entering, printing and -playing, using @code{\transpose} and the MIDI Staff property -@var{transposing}. +Note how we can choose different tunings for the text input, sheet music +output and, and MIDI output, using @code{\transpose} and the MIDI Staff +property @var{transposing}. @separate @example \notes \key bes \major @end example -Therefore, it has a different key. +Since the horn is transposing, it's in a different key. @separate @example @@ -2654,8 +2682,8 @@ tutorial. @separate -Usually, LilyPond's predefined setup of notation contexts (Thread, -Voice, Staff, Staffgroup, Score) is just fine. But in this case, we +Usually LilyPond's default setup of notation contexts (Thread, +Voice, Staff, Staffgroup, Score) is just fine. But in this case we want a different type of Staff context. @example @@ -2664,10 +2692,13 @@ want a different type of Staff context. @} @end example -In orchestral scores, it often happens that one instrument has only -rests during one line of the score. The @code{HaraKiriStaffContext} can +In orchestral scores it often happens that one instrument only has +rests during one line of the score. @code{HaraKiriStaffContext} can be used as a regular @code{StaffContext} drop-in and will take care of -the automatic removing of empty staves. +the automatic removing of empty staves -- so if the strings are the +only instruments playing for a line, LilyPond will only print the string +parts for that line of the score. This reduces the number of page turns +(and the number of dead trees!) required in a score. @node Extracting an individual part @subsection Extracting an individual part @@ -2716,8 +2747,9 @@ Opus 1. Because we separated the music definitions from the @code{\score} instantiations, we can easily define a second score with the music of -the second flute. This then is the part for the second flute player. -Of course, we make separate parts for all individual instruments. +the second flute. This is the part for the second flute player. Of +course, we would make separate parts for all individual instruments if +we were preparing the score for an orchestra. @separate @example @@ -2740,9 +2772,9 @@ but we need to set the instrument for this particular score. \property Score.skipBars = ##t @end example In the conductor's full score, all bars with rests are printed, but for -the individual parts, we want to contract pieces of consecutive empty -bars. LilyPond will do this if Score's @var{skipBars} property to -true. +the individual parts, we want to print one multimeasure rest instead of +many consecutive empty bars. LilyPond will do this if +@code{Score.skipBars} is set to true (@code{##t}). @node Integrating text and music @@ -2753,18 +2785,18 @@ true. @cindex HTML, music in @cindex Texinfo, music in -Sometimes, you might want to use music examples in a text that you are -writing. For example, if you are writing a musicological treatise, a -songbook, or (like us) the LilyPond manual. You can make such texts by -hand, simply by importing a PostScript figure into your word processor. -However, there is a also an automated procedure: - -If you use HTML, La@TeX{} or texinfo, you can mix text and LilyPond -code. A script called @code{lilypond-book} will extract the music -fragments, run LilyPond on them, and put back the resulting notation. -This utility program is described fully in the chapter -@ref{Integrating text and music with lilypond-book}. Here we show a -small example. Since the example also contains explanatory text, we +Sometimes you might want to use music examples in a text that you are +writing (for example a musicological treatise, a songbook, or (like us) +the LilyPond manual). You can make such texts by hand, simply by +importing a PostScript figure into your word processor. However, +there is an automated procedure to reduce the amount of work. + +If you use HTML, La@TeX{}, or texinfo, you can mix text and LilyPond +code. A script called @code{lilypond-book} will extract the music +fragments, run LilyPond on them, and put back the resulting +notation. This program is fully described in the chapter +@ref{Integrating text and music with lilypond-book}. Here we show a +small example. Since the example also contains explanatory text, we won't comment on the contents. @example @@ -2788,7 +2820,7 @@ If you have no \verb+\score+ block in the fragment, c'4 \end@{lilypond@} -In the example you see here, a number of things happened: a +In the example you see here, two things happened: a \verb+\score+ block was added, and the line width was set to natural length. You can specify many more options using \LaTeX style options in brackets: @@ -2798,14 +2830,16 @@ in brackets: c'4 f bes es \end@{lilypond@} -\texttt@{verbatim@} also shows the LilyPond code, \texttt@{11pt@} selects -the default music size, \texttt@{fragment@} adds a score block, +\texttt@{verbatim@} prints the LilyPond code in addition to the +graphical score, +\texttt@{11pt@} selects the default music size, +\texttt@{fragment@} adds a score block, \texttt@{relative@} uses relative mode for the fragment, and \texttt@{intertext@} specifies what to print between the \texttt@{verbatim@} code and the music. -If you include large examples into the text, it may be more convenient -to put the example in a separate file: +If you want to include large examples into the text, it may be more +convenient to put the example in a separate file: \lilypondfile[printfilename]@{sammartini.ly@} @@ -2817,10 +2851,9 @@ The \texttt@{printfilename@} option adds the file name to the output. Under Unix, you can view the results as follows. @example $ cd input/tutorial -$ mkdir out/ -@var{..may complain that @file{out/} already exists..} +$ mkdir -p out/ $ lilypond-book --outdir=out/ lilbook.tex -lilypond-book (GNU LilyPond) 1.3.146 +lilypond-book (GNU LilyPond) 1.6.1 Reading `input/tutorial/lilbook.tex' Reading `input/tutorial/sammartini.ly' @var{lots of stuff deleted} @@ -2836,7 +2869,7 @@ and running latex creates a lot of temporary files, and you wouldn't want those to clutter up your working directory. Hence, we have them created in a separate subdirectory. -The result more or less looks like this: +The result looks more or less like this: @separate @@ -2882,11 +2915,13 @@ The @code{printfilename} option adds the file name to the output. @node End of tutorial @section End of tutorial -This is the end of the tutorial. If you came up till here, and -have understood everything, then you're now an accomplished lilypond -hacker. From here, you can try fiddling with input -files, coming back to the reference manual for information. -Also don't forget to check out the +This is the end of the tutorial. If you read everything until this point +(and understood everything!) then you're now an accomplished lilypond +hacker. From here you should try fiddling with input files or making your +own input files. Come back to the reference manual for more information +if you get stuck! + +Don't forget to check out the @ifhtml @uref{../../templates/out-www/templates.html,templates}, @uref{../../test/out-www/test.html,example} and @@ -2896,8 +2931,7 @@ snippets. @ifnothtml templates, example and feature test snippets. @end ifnothtml -If you want to see real action lilypond, then head over to +If you want to see real action lilypond then head over to @uref{http://www.mutopiaproject.org}, which has many examples of -classical music typeset by LilyPond. - +classical music typeset with LilyPond. diff --git a/GNUmakefile.in b/GNUmakefile.in index 38851b89da..5ae750579e 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -16,7 +16,7 @@ SUBDIRS = buildscripts scripts flower lily \ # SCRIPTS = configure aclocal.m4 autogen.sh -README_FILES = ChangeLog CHANGES COPYING DEDICATION NEWS README.mandrake ROADMAP +README_FILES = ChangeLog COPYING DEDICATION NEWS README.mandrake ROADMAP THANKS README_TXT_FILES = AUTHORS.txt README.txt INSTALL.txt IN_FILES := $(wildcard *.in) EXTRA_DIST_FILES = $(wildcard *.el) vimrc VERSION $(README_FILES) $(SCRIPTS) $(IN_FILES) emacsclient.patch lexer-gcc-3.0.patch server.el.patch darwin.patch .cvsignore lexer-gcc-3.1.sh @@ -89,7 +89,7 @@ lily/$(outdir)/lilypond: local-web: web-doc $(TOP_HTMLS:%.html=%) footify do-top-doc top-web -web-ext = gz html midi pdf png txt +web-ext = gz html midi pdf png txt ly top-web: cd $(builddir) && rm -f `find . -name \*.html~ -print` cd $(builddir) && find Documentation input \ @@ -126,12 +126,11 @@ builddir-setup: $(builddir)/share/lilypond-force $(builddir)/share/lilypond-force: # Preparing LilyPond tree for builddir exec - @echo Making $(builddir)/share - @cd $(builddir) && rm -rf share - @mkdir -p $(builddir)/share/lilypond - @mkdir -p $(builddir)/share/lilypond/fonts - @mkdir -p $(builddir)/share/lilypond/tex - @cd $(builddir)/share/lilypond && \ + cd $(builddir) && rm -rf share + mkdir -p $(builddir)/share/lilypond + mkdir -p $(builddir)/share/lilypond/fonts + mkdir -p $(builddir)/share/lilypond/tex + cd $(builddir)/share/lilypond && \ ln -s $(abs-srcdir)/ly ly && \ ln -s ../../mf/$(outconfbase) dvips && \ ln -s ../../mf/$(outconfbase) afm && \ @@ -140,18 +139,19 @@ $(builddir)/share/lilypond-force: ln -s $(abs-srcdir)/ps && \ ln -s ../../python/$(outconfbase) python && \ ln -s $(abs-srcdir)/scm - @cd $(builddir)/share/lilypond/tex && \ + cd $(builddir)/share/lilypond/tex && \ ln -s $(abs-srcdir)/tex source && \ ln -s ../../../mf/$(outconfbase) generate - @cd $(builddir)/share/lilypond/fonts && \ + cd $(builddir)/share/lilypond/fonts && \ ln -s $(abs-srcdir)/mf source && \ ln -s ../../../mf/$(outconfbase) afm && \ ln -s ../../../mf/$(outconfbase) tfm && \ ln -s ../../../mf/$(outconfbase) type1 + touch $@ local-clean: builddir-setup-clean builddir-setup-clean: - @cd $(builddir) && rm -rf share + cd $(builddir) && rm -rf share $(config_h): configure.in aclocal.m4 # diff --git a/NEWS b/NEWS index 3666b32e1d..7030ee0f1f 100644 --- a/NEWS +++ b/NEWS @@ -10,8 +10,8 @@ now. * Completely rewritten MIDI import support. -* Completely rewritten grace note support. Practically speaking this means -that grace notes can be slurred to normal normal notes. +* Completely rewritten grace note support. Practically speaking this +means that grace notes can be slurred to normal normal notes. * Improved accidental handling and formatting: styles for producing cautionaries may vary, and complex collisions between accidentals of a diff --git a/THANKS b/THANKS new file mode 100644 index 0000000000..997a22bde7 --- /dev/null +++ b/THANKS @@ -0,0 +1,17 @@ + +CONTRIBUTORS + +Graham Percival +Rune Zedeler +Jeremie Lumbroso +Juergen Reuter + + +BUG HUNTERS + +Karl-Johan Karlsson +Karl Berry +Werner Lemberg +Jeremie Lumbroso +Erik Sandberg + diff --git a/VERSION b/VERSION index e0d88b4c67..fb57bcfc5b 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,3 @@ -foo: - echo "This is HEAD. Go away" - exit 1 - PACKAGE_NAME = LilyPond MAJOR_VERSION=1 MINOR_VERSION=7 diff --git a/buildscripts/lilypond-login.sh b/buildscripts/lilypond-login.sh index 21333f50ba..8279c4778d 100644 --- a/buildscripts/lilypond-login.sh +++ b/buildscripts/lilypond-login.sh @@ -12,15 +12,7 @@ # strange shell, this C set datadir="@local_lilypond_datadir@" - if ( $?GS_LIB ) then - setenv GS_LIB "$datadir/ps:$GS_LIB" - else - setenv GS_LIB "$datadir/ps" - endif - - # setenv LILYPONDPREFIX "$datadir" - # bit silly. for ly2dvi, overrules compiled-in datadir... # setenv LILYPONDPREFIX "@local_lilypond_datadir@" @@ -31,11 +23,21 @@ set noglob setenv TEXMF "{$datadir,"`kpsexpand \$TEXMF`"}" unset noglob + + +# if ( $?GS_LIB ) then +# setenv GS_LIB "$datadir/ps:$GS_LIB" +# else +# setenv GS_LIB "$datadir/ps" +# endif + + + # Add all available TeX Type1 fonts (including Feta) to Ghostscript: -if ( $?GS_FONTPATH ) then - setenv GS_FONTPATH `kpsewhich -expand-path=\$T1FONTS`:$GS_FONTPATH -else - setenv GS_FONTPATH `kpsewhich -expand-path=\$T1FONTS` -endif +#if ( $?GS_FONTPATH ) then +# setenv GS_FONTPATH `kpsewhich -expand-path=\$T1FONTS`:$GS_FONTPATH +#else +# setenv GS_FONTPATH `kpsewhich -expand-path=\$T1FONTS` +#endif diff --git a/buildscripts/lilypond-profile.sh b/buildscripts/lilypond-profile.sh index 6f88b34523..f1a941c411 100644 --- a/buildscripts/lilypond-profile.sh +++ b/buildscripts/lilypond-profile.sh @@ -23,12 +23,12 @@ TEXMF="{$datadir,"`kpsexpand \\$TEXMF`"}" export TEXMF # For direct ps output: ps/lilyponddefs.ps -GS_LIB="$datadir/ps:"${GS_LIB:=""} -export GS_LIB +## GS_LIB="$datadir/ps:"${GS_LIB:=""} +## export GS_LIB # For direct ps output fonts. Add all available TeX Type1 fonts -GS_FONTPATH=`kpsewhich -expand-path=\\$T1FONTS`:${GS_FONTPATH:=""} -export GS_FONTPATH +## GS_FONTPATH=`kpsewhich -expand-path=\\$T1FONTS`:${GS_FONTPATH:=""} +## export GS_FONTPATH diff --git a/buildscripts/ps-to-gifs.sh b/buildscripts/ps-to-gifs.sh deleted file mode 100644 index e2a3da89cb..0000000000 --- a/buildscripts/ps-to-gifs.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -# ps-to-gifs, convert PS to multiple gifs or other bitmaps - -usage() -{ - cat < $OUTFILE -PPMS=`ls $BASE*ppm` -for i in $PPMS; do - o=`dirname $i`/`basename $i .ppm`.$GIF - cat $i | $CROP | $PNMTOGIF $color > $o - rm $i -done - -if [ "x$OUTFILE" != "x" ]; then - mv $BASE-page1.$GIF $BASE.$GIF -fi - diff --git a/buildscripts/ps-to-pngs.sh b/buildscripts/ps-to-pngs.sh deleted file mode 100644 index 2a3f3636b5..0000000000 --- a/buildscripts/ps-to-pngs.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -# ps-to-pngs, convert PS to multiple pngs - -ps-to-gifs --png $* diff --git a/debian/changelog b/debian/changelog index e74ed06bf6..1057e905e0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,20 @@ +lilypond (1.6.2-1) unstable; urgency=low + + * New upstream release. + * Check g++ version and run lexer-gcc-3.1.sh if necessary. + + -- Anthony Fok Tue, 10 Sep 2002 23:37:27 +0800 + +lilypond (1.6.0-1) unstable; urgency=medium + + * New upstream release. + * binary-arch: Changed "DH_OPTIONS=-a" to "DH_OPTIONS=-s" so that + dpkg-gencontrol would not 't choke on lilypond1.3 for unlisted + architectures. Thanks to Ryan Murray for the report and suggested + fix. (Closes: Bug#157766) + + -- Anthony Fok Sun, 25 Aug 2002 11:59:01 +0800 + lilypond (1.5.68-2) unstable; urgency=low * Oops, I was missing Build-Depends on python-dev. Thanks to LaMont diff --git a/debian/control b/debian/control index cb2b51f22a..5f3571eca3 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Build-Depends-Indep: bibtex2html, gs | gs-aladdin, netpbm (>= 2:9.10-1) Section: tex Priority: optional Maintainer: Anthony Fok -Standards-Version: 3.5.6 +Standards-Version: 3.5.7 Package: lilypond Architecture: any @@ -28,18 +28,18 @@ Description: A program for printing sheet music. Package: lilypond-doc Section: doc Architecture: all -Suggests: lilypond (>= 1.5.68-1), postscript-viewer, www-browser +Suggests: lilypond (>= 1.6.2-1), postscript-viewer, www-browser Description: LilyPond Documentation in HTML, PS and DVI formats This package contains the HTML, PostScript and DVI documentation for the LilyPond music typesetting software. Package: lilypond1.3 Architecture: arm i386 m68k powerpc sparc -Depends: lilypond (>= 1.5.68-1) +Depends: lilypond (>= 1.6.2-1) Description: Dummy package for transition to new stable lilypond. This dummy package provides a transition from the previous lilypond1.3 - package back to a newer lilypond because the stable 1.4 series - (soon 1.6 series) has arrived. + package back to a newer lilypond because the stable 1.4 and now 1.6 series + have arrived. . Please feel free to remove this dummy package after you have upgraded to the latest lilypond. diff --git a/debian/control.foka b/debian/control.foka index cb2b51f22a..5f3571eca3 100644 --- a/debian/control.foka +++ b/debian/control.foka @@ -4,7 +4,7 @@ Build-Depends-Indep: bibtex2html, gs | gs-aladdin, netpbm (>= 2:9.10-1) Section: tex Priority: optional Maintainer: Anthony Fok -Standards-Version: 3.5.6 +Standards-Version: 3.5.7 Package: lilypond Architecture: any @@ -28,18 +28,18 @@ Description: A program for printing sheet music. Package: lilypond-doc Section: doc Architecture: all -Suggests: lilypond (>= 1.5.68-1), postscript-viewer, www-browser +Suggests: lilypond (>= 1.6.2-1), postscript-viewer, www-browser Description: LilyPond Documentation in HTML, PS and DVI formats This package contains the HTML, PostScript and DVI documentation for the LilyPond music typesetting software. Package: lilypond1.3 Architecture: arm i386 m68k powerpc sparc -Depends: lilypond (>= 1.5.68-1) +Depends: lilypond (>= 1.6.2-1) Description: Dummy package for transition to new stable lilypond. This dummy package provides a transition from the previous lilypond1.3 - package back to a newer lilypond because the stable 1.4 series - (soon 1.6 series) has arrived. + package back to a newer lilypond because the stable 1.4 and now 1.6 series + have arrived. . Please feel free to remove this dummy package after you have upgraded to the latest lilypond. diff --git a/debian/rules b/debian/rules index 448324c93d..2c715919c7 100644 --- a/debian/rules +++ b/debian/rules @@ -18,6 +18,11 @@ d = usr/share/doc/$(package) include VERSION VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_LEVEL) +gcc_version = $(shell g++ --version 2>&1 \ + | grep '[0-9]\.[0-9]' | head -1 \ + | sed -e 's/.*[^-.0-9]\([0-9][0-9]*\.[0-9][.0-9]*\).*/\1/' \ + -e 's/^\([0-9]\+\).*/\1/') + # "main_memory = 263000" in /etc/texmf/texmf.cnf isn't large enough # for latex to process standchen.dvi.latex, so adding extra_mem_* ... # export extra_mem_top = 100000 @@ -44,10 +49,13 @@ build: build-stamp build-stamp: dh_testdir - ./configure --enable-checking --disable-debugging \ + if [ "$(gcc_version)" = "3" ]; then ./lexer-gcc-3.1.sh; fi + CPPFLAGS=-I`pwd`/lily/out \ + ./configure --enable-checking --enable-debugging \ --prefix=/usr --enable-optimise \ --infodir='$${prefix}/share/info' \ --mandir='$${prefix}/share/man' + if [ "$(gcc_version)" = "3" ]; then ./lexer-gcc-3.1.sh; fi $(MAKE) MAKE_PFA_FILES=1 touch build-stamp @@ -114,7 +122,7 @@ binary-indep: build-doc install dh_md5sums dh_builddeb -binary-arch: DH_OPTIONS=-a +binary-arch: DH_OPTIONS=-s binary-arch: build install dh_testdir dh_testroot diff --git a/flower/include/array.icc b/flower/include/array.icc index 839da9cce1..7b94eab5fc 100644 --- a/flower/include/array.icc +++ b/flower/include/array.icc @@ -108,6 +108,32 @@ Array::slice (int lower, int upper) const } +template +void +binary_search_bounds (Array const &table, + T const &key, int (*compare) (T const&, T const &), + int *lo, + int *hi) +{ + int cmp; + int result; + + /* binary search */ + do + { + cmp = (*lo + *hi) / 2; + + result = (*compare) (key, table[cmp]); + + if (result < 0) + *hi = cmp; + else + *lo = cmp; + } + while (*hi - *lo > 1); +} + + /* lookup with binsearch, return array index. */ @@ -119,24 +145,11 @@ binary_search (Array const &table, int hi = -1 ) { - int cmp; - int result; if (hi < 0) hi = table.size (); - /* binary search */ - do - { - cmp = (lo + hi) / 2; - - result = (*compare) (key, table[cmp]); + binary_search_bounds (table, key, compare, &lo, &hi); - if (result < 0) - hi = cmp; - else - lo = cmp; - } - while (hi - lo > 1); if (! (*compare) (key, table[lo])) { return lo; @@ -144,4 +157,3 @@ binary_search (Array const &table, else return -1; /* not found */ } - diff --git a/flower/include/file-path.hh b/flower/include/file-path.hh index b3bf47d5aa..2055d08f01 100644 --- a/flower/include/file-path.hh +++ b/flower/include/file-path.hh @@ -39,6 +39,7 @@ public: String find (String nm) const; Array::push; + void prepend (String str) { Array::insert (str, 0); } String string ()const; bool try_add (String str); void add (String); diff --git a/flower/include/parray.hh b/flower/include/parray.hh index 08fe766f5d..21a40429c6 100644 --- a/flower/include/parray.hh +++ b/flower/include/parray.hh @@ -12,6 +12,8 @@ #include "array.hh" + + /** an array of pointers. @@ -21,14 +23,7 @@ template class Link_array : private Array { - static int default_compare (T *const& p1, T *const&p2) { - /* can't do p1 -p2, since T might be an incomplete type */ - if (p1 < p2) - return -1 ; - if (p2 < p1) - return 1; - return 0; - } + Link_array (Array v) :Array (v) { @@ -37,6 +32,15 @@ public: Link_array () {} + static int default_compare (T *const& p1, T *const&p2) + { + /* can't do p1 -p2, since T might be an incomplete type */ + if (p1 < p2) + return -1 ; + if (p2 < p1) + return 1; + return 0; + } Link_array (T * const *tp, int n) : Array ((void **)tp, n) { @@ -179,7 +183,6 @@ public: else return 0; } - }; template @@ -295,5 +298,30 @@ binsearch_links (Link_array const &arr, T *t, } +template +void +binary_search_bounds (Link_array const &table, + T const *key, int (*compare) (T * const& , T *const &), + int *lo, + int *hi) +{ + int cmp; + int result; + + /* binary search */ + do + { + cmp = (*lo + *hi) / 2; + + result = (*compare) ((T*) key, table[cmp]); + + if (result < 0) + *hi = cmp; + else + *lo = cmp; + } + while (*hi - *lo > 1); +} + #endif // PARRAY_HH diff --git a/flower/include/polynomial.hh b/flower/include/polynomial.hh index b978910caf..aade80fbbc 100644 --- a/flower/include/polynomial.hh +++ b/flower/include/polynomial.hh @@ -39,7 +39,6 @@ struct Polynomial /// eliminate #x# close to zero void real_clean (); - static Polynomial add (const Polynomial & p1, const Polynomial & p2); void scalarmultiply (Real fact); void operator *= (Real f) { scalarmultiply (f); } void operator /= (Real f) { scalarmultiply (1/f); } @@ -48,7 +47,6 @@ struct Polynomial void operator -= (Polynomial const &p2); Polynomial (Real a, Real b =0.0); Polynomial (){} - static Polynomial subtract (const Polynomial & p1, const Polynomial & p2); void set_negate (const Polynomial & src); /// take the derivative diff --git a/flower/polynomial.cc b/flower/polynomial.cc index f5d4b38fe3..c8bf66811f 100644 --- a/flower/polynomial.cc +++ b/flower/polynomial.cc @@ -94,23 +94,29 @@ Polynomial::clean () } -Polynomial -Polynomial::add (const Polynomial & p1, const Polynomial & p2) + +void +Polynomial::operator += (Polynomial const &p) { - Polynomial dest; - int tempord = p2.degree () >? p1.degree (); - for (int i = 0; i <= tempord; i++) - { - Real temp = 0.0; - if (i <= p1.degree ()) - temp += p1.coefs_[i]; - if (i <= p2.degree ()) - temp += p2.coefs_[i]; - dest.coefs_.push (temp); - } - return dest; + while (degree () < p.degree()) + coefs_.push (0.0); + + for (int i = 0; i <= p.degree(); i++) + coefs_[i] += p.coefs_[i]; } + +void +Polynomial::operator -= (Polynomial const &p) +{ + while (degree () < p.degree()) + coefs_.push (0.0); + + for (int i = 0; i <= p.degree(); i++) + coefs_[i] -= p.coefs_[i]; +} + + void Polynomial::scalarmultiply (Real fact) { @@ -118,24 +124,7 @@ Polynomial::scalarmultiply (Real fact) coefs_[i] *= fact; } -Polynomial -Polynomial::subtract (const Polynomial & p1, const Polynomial & p2) -{ - Polynomial dest; - int tempord = p2.degree () >? p1.degree (); - - for (int i = 0; i <= tempord; i++) - { - Real temp = 0.0; // can't store result directly.. a=a-b - if (i <= p1.degree ()) - temp += p1.coefs_[i]; - if (i <= p2.degree ()) - temp -= p2.coefs_[i]; - dest.coefs_.push (temp); - } - return dest; - -} + void Polynomial::set_negate (const Polynomial & src) @@ -356,14 +345,4 @@ Polynomial:: operator *= (Polynomial const &p2) *this = multiply (*this,p2); } -void -Polynomial::operator += (Polynomial const &p) -{ - *this = add ( *this, p); -} -void -Polynomial::operator -= (Polynomial const &p) -{ - *this = subtract (*this, p); -} diff --git a/input/SondagMorgen/SondagMorgenOmkvaedVolta2.ly b/input/SondagMorgen/SondagMorgenOmkvaedVolta2.ly deleted file mode 100644 index f266c95887..0000000000 --- a/input/SondagMorgen/SondagMorgenOmkvaedVolta2.ly +++ /dev/null @@ -1,175 +0,0 @@ -\version "1.5.68" -\include "deutsch.ly" - -marks = \lyrics { - \marks - ""1*9 -} - -ned = \downbow -op = \upbow - -global = \notes { - \global - \bar "|." - \property Score.repeatCommands = #'((volta #f)(volta "2")) - s1*9 -} - -akk = \lyrics { - \akk - "A11"2 "H11" - "Em7" "G$\\Delta$" "A11" "H11" - "C$\\Delta$"1 "D6" "Am9" "Hm7" "C$\\Delta$"1 "H9$\\sharp$" -} - - -mel = \notes { - \mel - \relative g' { - r2 r8 e'4 d8 ~ | - d8 h4 e8~e h g a ~| - a g a g a g a g | - h4. e,8~e2 | - h'4. e,8~e2 | - h'4. e,8~e2 | - h'4. d8~d4 c | - h4. e,8~e2 | - h'4 h r8 e4 d8 | - } -} - -kormel = \notes { - \kormel - \relative c'' { - R1*2 - r2 r8 e e e - \repeat unfold 5 { e4. e8~e2 } - cisis4 cisis r2 - } -} - -sopsax = \notes { - \sopsax - \context Voice=sax \relative c'' { - a8 h4 d8 r d4 e8-\sfz | - r4 g,8-\mf r r fis r4 | - r8 d r4 r8 e r4 | - s1*0-\mp - \repeat unfold 2{ - g4.-. g8 \< ~g4 \! r4*1/2 \> \! s4*1/2 | - a4.-. a8 \< ~a4 \! r4*1/2 \> \! s4*1/2 | - } - g4.-. g8 \< ~g4 \! r4*1/2 \> \! s4*1/2 | - cisis4-\ff cisis8 d r dis4 e8 | - } -} -altsax = \notes { - \altsax - \context Voice=sax \relative c'' { - a8 h4 d8 r d4 e8-\sfz | - r4 e,8-\mf r r d r4 | - r8 h r4 r8 cis r4 | - s1*0-\mp - \repeat unfold 2{ - e4.-. e8 \< ~e4 \! r4*1/2 \> \! s4*1/2 | - fis4.-. fis8 \< ~fis4 \! r4*1/2 \> \! s4*1/2 | - } - e4.-. e8 \< ~e4 \! r4*1/2 \> \! s4*1/2 | - a4-\ff a8 d r dis4 e8 | - } -} -tensax = \notes { - \tensax - \context Voice=sax \relative c' { - a8 h4 d8 r d4 e8-\sfz | - r4 h8-\mf r r a r4 | - r8 g r4 r8 a r4 | - s1*0-\mp - \repeat unfold 2{ - d4.-. d8 \< ~d4 \! r4*1/2 \> \! s4*1/2 | - e4.-. e8 \< ~e4 \! r4*1/2 \> \! s4*1/2 | - } - d4.-. d8 \< ~d4 \! r4*1/2 \> \! s4*1/2 | - dis4-\ff dis8 d r dis4 e8 | - } -} - -piar = \notes { - \piar - \relative c'' { - r8 r8 | - s1*2 - - - - - | - r8 | - } -} -U = \sustainUp -D = \sustainDown -pial = \notes { - \pial - a,,8 a, e, r e,8 | - e,,8 e, \su \sd g, g,, \su \sd e, a, - a,, \su \sd e, h, h,, \su \sd d, e, | - - - - - - r | -} -guitar = \notes { - \guitar - e8-2 e-2 < a-3 d'-4> e-2 e-2 < a-3 d'-4> e-2 < h-3 e'-4> | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | - e-2 e-2 < a-3 d'-4> e-2 e-2 e-2 < h-3 e'-4> e-2 | - s1*0_"FLANGE" - \repeat unfold 2 { - r8 d'-4 d'-4 a'-5 d'-4 e'-4 d'-4 - r8 d'-4 d'-4 a'-5 d'-4 e'-4 d'-4 - } - r8 d'-4 d'-4 a'-5 d'-4 e'-4 d'-4 - r8 < a-3 d'-4> e-2 < ais-3 dis'-4> e-2 < h-3 e'-4> | -} - -cello = \notes { - \cello - R1*9 -} - -bas = \notes { - \bas - a,8 a, r h, r d4 e8 | - e,8 e, r8 g, g, g, r a, | - a, a, r h, h, h, r4 | - c4. c'8 r c'4. - d4. d'8 r d'4. - a,4. a8 r a4. - h,4. h8 r h4. - c4. c'8 r c'4. - h,4 h,8 d8 r dis4 e8 | -} - -\include "drumpitch-init.ly" -drhi = \notes { - \drhi - hh8 hh hh hho r cymc4 cymc8 | - hh8 hh hh hh hh hh hh hh | - hh8 hh hh hh hh hh hh hho | - \repeat percent 5 { hh8 hh hh hho hh hho hh hh16 hh } - hh8 hh hho cymc8~cymc cymc4 cymc8 | -} -drlo = \notes { - \drlo - bd8 sn bd bd hhp bd4 bd8 | - bd4 sn8 bd bd4 sn8 bd | - bd4 sn8 bd bd4 < - bd sn - > | - \repeat percent 5 { bd4 bd8 bd bd4 bd } | - bd8 sn bd bd r bd4 bd8 | -} diff --git a/input/SondagMorgen/SondagMorgenOmkvaedVolta3.ly b/input/SondagMorgen/SondagMorgenOmkvaedVolta3.ly deleted file mode 100644 index b19d9f362d..0000000000 --- a/input/SondagMorgen/SondagMorgenOmkvaedVolta3.ly +++ /dev/null @@ -1,91 +0,0 @@ -\version "1.5.68" -\include "deutsch.ly" - -marks = \lyrics { - \marks - ""1 -} - -ned = \downbow -op = \upbow - -global = \notes { - \global - \property Score.repeatCommands = #'((volta #f)(volta "3")) - \bar ":|" - s1*1 -} - -akk = \lyrics { - \akk - "A11"2 "H11" -} - - -mel = \notes { - \mel - \relative c'' { - r2 r8 e4 d8 ~ | - } -} - -kormel = \notes { - \kormel - R1 -} - -sopsax = \notes { - \sopsax - \context Voice=sax \relative c'' { - a8 h4 d8 r d4 e8 | - } -} -altsax = \notes { - \altsax - \context Voice=sax \relative c'' { - a8 h4 d8 r d4 e8 | - } -} -tensax = \notes { - \tensax - \context Voice=sax \relative c' { - a8 h4 d8 r d4 e8 | - } -} - -piar = \notes { - \piar - \relative c'' { - r8 r8 | - } -} -U = \sustainUp -D = \sustainDown -pial = \notes { - \pial - a,,8 a, e, r e,8 | -} -guitar = \notes { - \guitar - e8-2 e-2 < a-3 d'-4> e-2 e-2 < a-3 d'-4> e-2 < h-3 e'-4> | -} - -cello = \notes { - \cello - R1 -} - -bas = \notes { - \bas - a,8 a, r h, r d4 e8~ | -} - -\include "drumpitch-init.ly" -drhi = \notes { - \drhi - hh8 hh hh hho r cymc4 cymc8 | -} -drlo = \notes { - \drlo - bd8 sn bd bd hhp bd4 bd8 | -} diff --git a/input/SondagMorgen/SondagMorgenOutro.ly b/input/SondagMorgen/SondagMorgenOutro.ly deleted file mode 100644 index cbd718bcd8..0000000000 --- a/input/SondagMorgen/SondagMorgenOutro.ly +++ /dev/null @@ -1,186 +0,0 @@ -\version "1.5.68" -\include "deutsch.ly" - -marks = \lyrics { - \marks - "\large\framebox{\bf{OUTRO}}"1*11 -} - -ned = \downbow -op = \upbow - -global = \notes { - \global - \property Score.repeatCommands = #'((volta #f)) - \bar ".|" - s1*11 - \bar "|." -} - -akk = \lyrics { - \akk - "Em7"2 "G"2 "Hm7"1 "Em7" "Hm7" "Em7" "Hm7" - "Em7"1 "Hm7" "Em7" "Hm7" "Em7" - -} - - -mel = \notes { - \mel - \time 2/2 - \relative c'' { - d8 h4 e8~e h g a ~| - a b a g a b a g | - e1 - R1 - g2 ~ g8 a g fis ~ | - fis h,2.. | - e1 | - fis2. r4 | - g2 ~ g8 a g fis ~ | - fis h,2.. | - e1 | - } -} - -kormel = \notes { - \kormel - \time 2/2 - \relative g' { - R1*4 - h2.. a8 ~ | - a d,2.. | - g1 | - d2. r4 | - h'2.. a8 ~ | - a d,2.. | - g1 | - } -} - -sopsax = \notes { - \sopsax - \time 2/2 - \relative c''' { - r2 g-\p( fis d )h1~h1 - h2.. a8~ a fis2.. | - g2( a )a2 d | - h2.. a8 ~ a fis2.. | - g2 r2 - } -} -altsax = \notes { - \altsax - \time 2/2 - \relative c'' { - r1 r1 r1 r1 - g2-\p ~g8 a g fis ~ fis d2..| - e2( g )fis a | - g2~g8 a g fis ~ fis d2..| - e2 r - } -} -tensax = \notes { - \tensax - \time 2/2 - \relative c'' { - r1 r1 r2 g-\p( fis d - )e2.. d8 ~ d h2.. | - h2( d )d d | - e2.. d8 ~ d h2.. | - h2 r - } -} - -piar = \notes { - \piar - \time 2/2 - \relative c' { - r2 - - fis'8( g d' fis, g d' fis, )g | - - R1 - fis8( g d' fis, g d' fis, )g | - - R1 - fis8( g d' fis, g d' fis, )g | - - \clef "G^8" - \property PianoStaff.Arpeggio \override #'arpeggio-direction = #1 - \property PianoStaff.connectArpeggios = ##t - - } -} -U = \sustainUp -D = \sustainDown -pial = \notes { - \pial - \clef "F" - \time 2/2 - - \relative e { -

- - - - - - - - s8 \U - s2 \U - } -} -guitar = \notes{ - \guitar - \time 2/2 - r2 | - \property Staff.Arpeggio \override #'arpeggio-direction = #1 - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - -} - -cello = \notes { - \cello - \time 2/2 - \relative c { - e1 d2( fis g h d fis )e1 fis2( d - )e1 d2( h g e fis d )e1 - } -} - -bas = \notes { - \bas - \time 2/2 - e2 g, | - h,2 r8 a h4 | - e2 r8 a,4 h,8 | - r h a fis a h g4 | - e2 r8 d4 h,8 ~ | - h,2 r2 - e2 r8 a,4 h,8 ~ | - h,2 r8 a h4 | - e2 r8 a,4 h,8 | - r h a fis a h g4 | - e1 | -} - -\include "drumpitch-init.ly" -drhi = \notes { - \drhi - \repeat percent 10 { cymr2 cymr } - cymr1 -} -drlo = \notes { - \drlo - s1*11 -} diff --git a/input/mutopia/J.S.Bach/wtk1-fugue2.ly b/input/mutopia/J.S.Bach/wtk1-fugue2.ly index 0fdaa32057..0bf13d6894 100644 --- a/input/mutopia/J.S.Bach/wtk1-fugue2.ly +++ b/input/mutopia/J.S.Bach/wtk1-fugue2.ly @@ -20,9 +20,8 @@ ".\\\\Unrestricted modification and redistribution is permitted and encouraged---copy this music and share it.}" tagline = \mutopiapublicdomain - lastupdated = "2002/July/7" - footer = "Mutopia-2002/07/07-6" - + lastupdated = "2002/August/19" + footer = "Mutopia-2002/08/19-6" } @@ -33,11 +32,12 @@ the few forced linebreaks were an earlier attempt to get the spacing to match up. - + +%\include "paper19.ly" %} -\include "paper19.ly" -\version "1.5.68" + +\version "1.6.0" diff --git a/input/mutopia/R.Schumann/romanze-op28-2.ly b/input/mutopia/R.Schumann/romanze-op28-2.ly index 1e2617758a..150b16a08f 100644 --- a/input/mutopia/R.Schumann/romanze-op28-2.ly +++ b/input/mutopia/R.Schumann/romanze-op28-2.ly @@ -1,7 +1,10 @@ % NOT FINISHED!!!! \include "deutsch.ly" -\include "paper19.ly" + + +%% 19 is broken --hwn. +%\include "paper19.ly" \version "1.5.71" \header { diff --git a/input/regression/beam-shortened-lengths.ly b/input/regression/beam-shortened-lengths.ly index f26d273a55..01088abf39 100644 --- a/input/regression/beam-shortened-lengths.ly +++ b/input/regression/beam-shortened-lengths.ly @@ -10,8 +10,8 @@ #`(,Beam::least_squares ,Beam::check_concave ,Beam::slope_damping) - + \stemUp f'4 [f8 f] [f16 f] [f32 f] [f64 f] [f128 f] } \paper{ linewidth = -1.0 } -} \ No newline at end of file +} diff --git a/input/regression/completion-heads-polyphony.ly b/input/regression/completion-heads-polyphony.ly new file mode 100644 index 0000000000..ceed2507b8 --- /dev/null +++ b/input/regression/completion-heads-polyphony.ly @@ -0,0 +1,23 @@ +\header { + + texidoc = "Completion heads are broken across bar lines. This was +intended as a debugging tool, but it can be used to ease music entry. +Completion heads are not fooled by polyphony with a different rhythm. +" + +} + +\score{ + \context Staff \notes \relative c'' < + { c2. c bes2 } \\ + { c,2. a8 g4 f4. g4 f } + > + + \paper { + \translator{ + \ThreadContext + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + } + } +} diff --git a/input/regression/lyric-align.ly b/input/regression/lyric-align.ly index f93182b946..d709989dd7 100644 --- a/input/regression/lyric-align.ly +++ b/input/regression/lyric-align.ly @@ -11,8 +11,7 @@ %\paper { linewidth = -1. } \score { - \addlyrics - \context Voice = "v" \notes \relative c'' { +< \context Voice = "v" \notes \relative c'' { \property Staff.automaticMelismata = ##t \cadenzaOn a\breve \bar "||" a1 \bar "|" a \bar "|" a \bar "||" \break a \bar "|" a \bar "|" a \bar "|" a \bar "||" \break a \bar "|" a \bar "|." @@ -24,11 +23,10 @@ \property Lyrics . LyricText \override #'alignment = #-1 \property Lyrics . LyricText \override #'begin-alignment = #8 - "Particularly useful for reciting notes " - left + "Particularly useful for reciting notes "\breve + left1 \property Lyrics . LyricText \override #'alignment = #0 - centered \property Lyrics . LyricText \override #'alignment = #1 @@ -67,7 +65,13 @@ } \context LyricsVoice = "v-2" \lyrics { % \property LyricsVoice . stanza = "2:" - " with many syllables under them." l c r l l l x x x note' true' + " with many syllables under them."\breve + l1 c r1 l + l1 l x x x + + % note' true' + %% ? what are the last 2 for? } > + > } diff --git a/input/regression/lyric-combine-polyphonic.ly b/input/regression/lyric-combine-polyphonic.ly new file mode 100644 index 0000000000..f59cc14d69 --- /dev/null +++ b/input/regression/lyric-combine-polyphonic.ly @@ -0,0 +1,39 @@ +\header { + +texidoc ="polyphonic rhythms and rests don't disturb +@code{\addlyrics}." + +} + +\score { + \notes { + \clef violin + \time 8/8 + \key des \major + < \context Voice = one { + \voiceOne + \addlyrics + \notes { + bes'4 bes'4 + bes'4 bes'4 + } + \context Lyrics \lyrics + { + Do __ mi __ nus ex + } + } + \context Voice = two { + \voiceTwo + \addlyrics + \notes { + ees'8 r8 r8 r8 ees' r8 r8 r8 + } + \context Lyrics \lyrics + { + Do __ na + } + } + > + } + \paper { linewidth=-1.0 } +} diff --git a/input/regression/molecule-hacking.ly b/input/regression/molecule-hacking.ly index 19f94d9380..3ff3c6a685 100644 --- a/input/regression/molecule-hacking.ly +++ b/input/regression/molecule-hacking.ly @@ -9,7 +9,7 @@ Beam. The note head is also rather naive, since the extent of the parens are also not seen by accidentals. " - } +} #(define (parenthesize-callback callback) "Construct a function that will do CALLBACK and add parentheses. @@ -34,8 +34,9 @@ GROB. The dimensions of the molecule is not affected. (subject (callback grob)) ; remember old size - (subject-dims (ly-get-molecule-extent subject 0)) - ) + (subject-dim-x (ly-get-molecule-extent subject 0)) + (subject-dim-y (ly-get-molecule-extent subject 1)) + ) ; add parens (set! subject @@ -44,7 +45,8 @@ GROB. The dimensions of the molecule is not affected. 0 -1 popen 0.2)) ; revert old size. - (ly-set-molecule-extent! subject 0 subject-dims) + (ly-set-molecule-extent! subject 0 subject-dim-x) + (ly-set-molecule-extent! subject 1 subject-dim-y) subject ) ) diff --git a/input/regression/prefatory-empty-spacing.ly b/input/regression/prefatory-empty-spacing.ly new file mode 100644 index 0000000000..2c3fb678aa --- /dev/null +++ b/input/regression/prefatory-empty-spacing.ly @@ -0,0 +1,13 @@ + +\header { + +texidoc =" The A is atop an invisible barline. The barline +although invisible, is also translated because it is the last one of +the break alignment." + +} + +\score{ \notes { +a a a a \break +\mark A +a a a a}} diff --git a/input/regression/property-once.ly b/input/regression/property-once.ly new file mode 100644 index 0000000000..74a566cf4f --- /dev/null +++ b/input/regression/property-once.ly @@ -0,0 +1,15 @@ +\header { + texidoc = "Once properties take effect during a single time step only." +} + +\score { + \notes \relative c' { + c4 + \once \property Voice.Stem = #'() + c4 + \once \property Voice.Stem \override #'thickness = #5.0 + c4 + c4 + } +} + diff --git a/input/regression/script-stacked.ly b/input/regression/script-stacked.ly index aabf7a0236..70e7e37057 100644 --- a/input/regression/script-stacked.ly +++ b/input/regression/script-stacked.ly @@ -1,6 +1,7 @@ \version "1.5.68" \header { -texidoc = "Scripts may b4e stacked." +texidoc = "Scripts may be stacked." } -\score { \notes { c''->-. } } + +\score { \notes { c'''->-. } } diff --git a/input/regression/system-extents.ly b/input/regression/system-extents.ly index a72e3b2ca3..5962f34310 100644 --- a/input/regression/system-extents.ly +++ b/input/regression/system-extents.ly @@ -8,7 +8,8 @@ \score { \notes \context Voice -{\slurDown c4 ( g4 ) c''4 +{ \property Staff.minimumVerticalExtent \unset + \slurDown c4 ( g4 ) c''4 } diff --git a/input/regression/tuplet-properties.ly b/input/regression/tuplet-properties.ly index 740e45fb90..2d71ed3361 100644 --- a/input/regression/tuplet-properties.ly +++ b/input/regression/tuplet-properties.ly @@ -34,7 +34,7 @@ NB should have no bracket, B should have bracket. \times 4/6 { c_"shorter, no edges" f b b f c} \property Voice.TupletBracket \revert #'edge-height \property Voice.TupletBracket \revert #'shorten-pair - \property Voice.TupletBracket \override #'edge-widen = #'(-0.5 . 0.5) + \property Voice.TupletBracket \override #'edge-widen = #'(0.5 . 0.5) \times 2/3 { b^""^""^"angled edges" b b } \property Voice.TupletBracket \revert #'direction \times 2/3 { b b b } diff --git a/input/sondag-morgen/GNUmakefile b/input/sondag-morgen/GNUmakefile index dcf406331e..debf2fa468 100644 --- a/input/sondag-morgen/GNUmakefile +++ b/input/sondag-morgen/GNUmakefile @@ -1,6 +1,6 @@ depth = ../.. -EXAMPLES=sondag-morgen +examples=sondag-morgen LOCALSTEPMAKE_TEMPLATES=ly mutopia include $(depth)/make/stepmake.make diff --git a/input/sondag-morgen/sondag-morgen-intro.ly b/input/sondag-morgen/sondag-morgen-intro.ly index 51ee1f1430..71ec11cdbd 100644 --- a/input/sondag-morgen/sondag-morgen-intro.ly +++ b/input/sondag-morgen/sondag-morgen-intro.ly @@ -123,18 +123,18 @@ guitar = \notes \transpose c' { \time 2/2 \key e \minor \property Staff.Arpeggio \override #'arpeggio-direction = #1 - g'8-5_"FLANGE" fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - + g'8\5_"FLANGE" fis'4\5 d'8\4 r8 h4.\3 | + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + + g'8\5 fis'4\5 d'8\4 r8 h4.\3 | + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + + g'8\5 fis'4\5 d'8\4 r8 h4.\3 | + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + + g'8\5 fis'4\5 d'8\4 r8 h4.\3 | + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + } diff --git a/input/sondag-morgen/sondag-morgen-omkvaed-volta1.ly b/input/sondag-morgen/sondag-morgen-omkvaed-volta1.ly index ba2ebd3ca1..5583a4a6d7 100644 --- a/input/sondag-morgen/sondag-morgen-omkvaed-volta1.ly +++ b/input/sondag-morgen/sondag-morgen-omkvaed-volta1.ly @@ -87,21 +87,23 @@ piar = \notes { } U = \sustainUp D = \sustainDown +Su = { \su \stemDown } +Sd = { \sd \stemUp } pial = \notes { \pial - a,, a, e, r e,8 | - e,,8 e, \su \sd g, g,, \su \sd e, ~ - | + \stemBoth a,, a, e, r e,8 | + e,,8 e, \Su \Sd g, g,, \Su \Sd e, ~ + \stemBoth | | r | } guitar = \notes { \guitar - e8-2 e-2 < a-3 d'-4> e-2 e-2 < a-3 d'-4> e-2 < h-3 e'-4> | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 e-2 ~ | - - ~ - r | + e8\2 e\2 < a\3 d'\4> e\2 e\2 < a\3 d'\4> e\2 < h\3 e'\4> | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 e\2 ~ | + + ~ + r | } cello = \notes { diff --git a/input/sondag-morgen/sondag-morgen-omkvaed-volta2.ly b/input/sondag-morgen/sondag-morgen-omkvaed-volta2.ly index f266c95887..3ae4d121a7 100644 --- a/input/sondag-morgen/sondag-morgen-omkvaed-volta2.ly +++ b/input/sondag-morgen/sondag-morgen-omkvaed-volta2.ly @@ -110,12 +110,15 @@ piar = \notes { } U = \sustainUp D = \sustainDown +Su = { \su \stemDown } +Sd = { \sd \stemUp } + pial = \notes { \pial - a,,8 a, e, r e,8 | - e,,8 e, \su \sd g, g,, \su \sd e, a, - a,, \su \sd e, h, h,, \su \sd d, e, | - + \stemBoth a,,8 a, e, r e,8 | + e,,8 e, \Su \Sd g, g,, \Su \Sd e, a, + a,, \Su \Sd e, h, h,, \Su \Sd d, e, | + \stemBoth @@ -124,16 +127,16 @@ pial = \notes { } guitar = \notes { \guitar - e8-2 e-2 < a-3 d'-4> e-2 e-2 < a-3 d'-4> e-2 < h-3 e'-4> | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | - e-2 e-2 < a-3 d'-4> e-2 e-2 e-2 < h-3 e'-4> e-2 | + e8\2 e\2 < a\3 d'\4> e\2 e\2 < a\3 d'\4> e\2 < h\3 e'\4> | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 < d'\4 g'\5> e\2 | + e\2 e\2 < a\3 d'\4> e\2 e\2 e\2 < h\3 e'\4> e\2 | s1*0_"FLANGE" \repeat unfold 2 { - r8 d'-4 d'-4 a'-5 d'-4 e'-4 d'-4 - r8 d'-4 d'-4 a'-5 d'-4 e'-4 d'-4 + r8 d'\4 d'\4 a'\5 d'\4 e'\4 d'\4 + r8 d'\4 d'\4 a'\5 d'\4 e'\4 d'\4 } - r8 d'-4 d'-4 a'-5 d'-4 e'-4 d'-4 - r8 < a-3 d'-4> e-2 < ais-3 dis'-4> e-2 < h-3 e'-4> | + r8 d'\4 d'\4 a'\5 d'\4 e'\4 d'\4 + r8 < a\3 d'\4> e\2 < ais\3 dis'\4> e\2 < h\3 e'\4> | } cello = \notes { diff --git a/input/sondag-morgen/sondag-morgen-omkvaed-volta3.ly b/input/sondag-morgen/sondag-morgen-omkvaed-volta3.ly index b19d9f362d..bc3fea6724 100644 --- a/input/sondag-morgen/sondag-morgen-omkvaed-volta3.ly +++ b/input/sondag-morgen/sondag-morgen-omkvaed-volta3.ly @@ -63,11 +63,11 @@ U = \sustainUp D = \sustainDown pial = \notes { \pial - a,,8 a, e, r e,8 | + \stemBoth a,,8 a, e, r e,8 | } guitar = \notes { \guitar - e8-2 e-2 < a-3 d'-4> e-2 e-2 < a-3 d'-4> e-2 < h-3 e'-4> | + e8\2 e\2 < a\3 d'\4> e\2 e\2 < a\3 d'\4> e\2 < h\3 e'\4> | } cello = \notes { diff --git a/input/sondag-morgen/sondag-morgen-omkvaed.ly b/input/sondag-morgen/sondag-morgen-omkvaed.ly index cf9b0970bf..6296206f8a 100644 --- a/input/sondag-morgen/sondag-morgen-omkvaed.ly +++ b/input/sondag-morgen/sondag-morgen-omkvaed.ly @@ -121,39 +121,41 @@ piar = \notes { } U = \sustainUp D = \sustainDown +Su = { \su \stemDown } +Sd = { \sd \stemUp } pial = \notes { \pial \key e \minor \clef "F_8" - e,,8 e, \su \sd g, g,, \su \sd e, a, | - a,, \su \sd e, h, h,, \su \sd d, e, | - e,,8 e, \su \sd g, g,, \su \sd e, a, | - a,, a, e, r e,8 | + e,,8 e, \Su \Sd g, g,, \Su \Sd e, a, | + a,, \Su \Sd e, h, h,, \Su \Sd d, e, | + e,,8 e, \Su \Sd g, g,, \Su \Sd e, a, | + \stemBoth a,, a, e, r e,8 | - e,,8 e, \su \sd g, g,, \su \sd e, ~ + e,,8 e, \Su \Sd g, g,, \Su \Sd e, ~ ~ e,8 | - e,,8 e, \su \sd g, g,, \su \sd e, a, - a,, a, a,, r | + e,,8 e, \Su \Sd g, g,, \Su \Sd e, a, + \stemBoth a,, a, a,, r | - e,,8 e, \su \sd g, g,, \su \sd e, a, - a,, \su \sd e, h, h,, \su \sd d, e, | - e,,8 e, \su \sd g, g,, \su \sd e, a, + e,,8 e, \Su \Sd g, g,, \Su \Sd e, a, + a,, \Su \Sd e, h, h,, \Su \Sd d, e, | + e,,8 e, \Su \Sd g, g,, \Su \Sd e, a, } guitar = \notes { \guitar \key e \minor \time 4/4 - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | - e-2 e-2 < a-3 d'-4> e-2 e-2 e-2 < h-3 e'-4> e-2 | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | - e-2 e-2 < a-3 d'-4> e-2 e-2 < a-3 d'-4> e-2 < h-3 e'-4> | - e8-2 < d'-4 g'-5> e-2 e-2 < e'8-4 a'-5> e-2 r8 ~ | - ~ | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | - e-2 e-2 e-2 < a-3 d'-4> e-2 < ais-3 dis'-4> e-2 < h-3 e'-4> | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | - e-2 e-2 < a-3 d'-4> e-2 e-2 e-2 < h-3 e'-4> e-2 | - e8-2 < d'-4 g'-5> e-2 e-2 < e'-4 a'-5> e-2 < d'-4 g'-5> e-2 | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 < d'\4 g'\5> e\2 | + e\2 e\2 < a\3 d'\4> e\2 e\2 e\2 < h\3 e'\4> e\2 | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 < d'\4 g'\5> e\2 | + e\2 e\2 < a\3 d'\4> e\2 e\2 < a\3 d'\4> e\2 < h\3 e'\4> | + e8\2 < d'\4 g'\5> e\2 e\2 < e'8\4 a'\5> e\2 r8 ~ | + ~ | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 < d'\4 g'\5> e\2 | + e\2 e\2 e\2 < a\3 d'\4> e\2 < ais\3 dis'\4> e\2 < h\3 e'\4> | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 < d'\4 g'\5> e\2 | + e\2 e\2 < a\3 d'\4> e\2 e\2 e\2 < h\3 e'\4> e\2 | + e8\2 < d'\4 g'\5> e\2 e\2 < e'\4 a'\5> e\2 < d'\4 g'\5> e\2 | } cello = \notes { diff --git a/input/sondag-morgen/sondag-morgen-outro.ly b/input/sondag-morgen/sondag-morgen-outro.ly index cbd718bcd8..81aedf008b 100644 --- a/input/sondag-morgen/sondag-morgen-outro.ly +++ b/input/sondag-morgen/sondag-morgen-outro.ly @@ -135,18 +135,18 @@ pial = \notes { guitar = \notes{ \guitar \time 2/2 - r2 | + r2 | \property Staff.Arpeggio \override #'arpeggio-direction = #1 - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - a8-3( d'-4 a'-5 a-3 d'-4 a'-5 a-3 )d'-4 | - - g'8-5 fis'4-5 d'8-4 r8 h4.-3 | - + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + + g'8\5 fis'4\5 d'8\4 r8 h4.\3 | + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + + g'8\5 fis'4\5 d'8\4 r8 h4.\3 | + a8\3( d'\4 a'\5 a\3 d'\4 a'\5 a\3 )d'\4 | + + g'8\5 fis'4\5 d'8\4 r8 h4.\3 | + } cello = \notes { diff --git a/input/sondag-morgen/sondag-morgen-vers-volta1.ly b/input/sondag-morgen/sondag-morgen-vers-volta1.ly index f24d27e25a..250e4fb090 100644 --- a/input/sondag-morgen/sondag-morgen-vers-volta1.ly +++ b/input/sondag-morgen/sondag-morgen-vers-volta1.ly @@ -64,7 +64,7 @@ pial = \notes { guitar = \notes { \guitar \relative c' { - r2 | + r2 | } } diff --git a/input/sondag-morgen/sondag-morgen-vers-volta2.ly b/input/sondag-morgen/sondag-morgen-vers-volta2.ly index 897e37c4d6..0ae77fffc0 100644 --- a/input/sondag-morgen/sondag-morgen-vers-volta2.ly +++ b/input/sondag-morgen/sondag-morgen-vers-volta2.ly @@ -69,7 +69,7 @@ pial = \notes { } guitar = \notes { \guitar - r4 e8-2 < a-3 d'-4> e-2 < ais-3 dis'-4> e-2 < h-3 e'-4> | + r4 e8\2 < a\3 d'\4> e\2 < ais\3 dis'\4> e\2 < h\3 e'\4> | } cello = \notes { diff --git a/input/sondag-morgen/sondag-morgen-vers.ly b/input/sondag-morgen/sondag-morgen-vers.ly index 7438a03bda..ec637df9ac 100644 --- a/input/sondag-morgen/sondag-morgen-vers.ly +++ b/input/sondag-morgen/sondag-morgen-vers.ly @@ -210,18 +210,18 @@ guitar = \notes { \time 7/8 s1*0_"NO FLANGE" \repeat percent 3 { - [ ] [ ] []| - [ ] [ ][ ] | + [ ] [ ] []| + [ ] [ ][ ] | } - [ ] [ ] []| + [ ] [ ] []| \time 9/8 - r4 [ ] [ ] | + r4 [ ] [ ] | \time 7/8 \key g \major \repeat percent 3 { - [ ] [ ] []| - [ ] [ ][ ] | + [ ] [ ] []| + [ ] [ ][ ] | } \time 4/4 s1*0-\mf \repeat unfold 2 diff --git a/input/sondag-morgen/sondag-morgen.ly b/input/sondag-morgen/sondag-morgen.ly index ed1f2285c5..6e0349dca3 100644 --- a/input/sondag-morgen/sondag-morgen.ly +++ b/input/sondag-morgen/sondag-morgen.ly @@ -15,6 +15,7 @@ sd = \translator Staff = down piece = "Score" tagline = "\\Large{Form: Intro Vers$_1$ Vers$_2$ Omkvæd Vers$_1$ Omkvæd Omkvæd Outro }" } + \score { \notes < \property Score.automaticMelismata = ##t @@ -78,6 +79,10 @@ sd = \translator Staff = down \context TabStaff=gui < \property Staff.instrument = "Guitar " \property Staff.instr = "gt " + \property TabStaff.stringOneTopmost = ##f + \property TabStaff.highStringOne = ##f + \property TabStaff.stringTunings = #(reverse guitar-tunings) + \context TabVoice \guitar > \context Staff = cello < diff --git a/input/test/GNUmakefile b/input/test/GNUmakefile index 82fc916468..e33a3600a5 100644 --- a/input/test/GNUmakefile +++ b/input/test/GNUmakefile @@ -15,4 +15,4 @@ EXTRA_DISTFILES=features.abc include $(depth)/make/stepmake.make -TITLE=LilyPond Feature Tests +TITLE=LilyPond Tips and Tricks diff --git a/input/test/accid.ly b/input/test/accid.ly index 569bd6a31b..d26f5292bf 100644 --- a/input/test/accid.ly +++ b/input/test/accid.ly @@ -3,7 +3,40 @@ \score { \context Voice \notes\relative c { \time 3/4 - cisis'' cisis! cisis? | + \property Staff.Accidental \set #'style = #'default + cisis''^"Accidental style = \#'default" cisis! cisis? | + cis cis! cis? | + c c! c? | + ces ces! ces? | + ceses ceses! ceses? | + \break + + \property Staff.Accidental \set #'style = #'hufnagel + cisis^"Accidental style = \#'hufnagel" cisis! cisis? | + cis cis! cis? | + c c! c? | + ces ces! ces? | + ceses ceses! ceses? | + \break + + \property Staff.Accidental \set #'style = #'medicaea + cisis^"Accidental style = \#'medicaea" cisis! cisis? | + cis cis! cis? | + c c! c? | + ces ces! ces? | + ceses ceses! ceses? | + \break + + \property Staff.Accidental \set #'style = #'vaticana + cisis^"Accidental style = \#'vaticana" cisis! cisis? | + cis cis! cis? | + c c! c? | + ces ces! ces? | + ceses ceses! ceses? | + \break + + \property Staff.Accidental \set #'style = #'mensural + cisis^"Accidental style = \#'mensural" cisis! cisis? | cis cis! cis? | c c! c? | ces ces! ces? | diff --git a/input/test/ancient-font.ly b/input/test/ancient-font.ly index abeb31b81d..302000f75f 100644 --- a/input/test/ancient-font.ly +++ b/input/test/ancient-font.ly @@ -1,60 +1,36 @@ \version "1.5.68" \header { title = "ancient font test" - date = "2000" + date = "2002" } - - \include "paper26.ly" -global = \notes { +upperStaff = \context GregorianStaff = upperStaff < + \context GregorianVoice < \property Score.timing = ##f -% \property Score.forceAccidental = ##t - \property Staff.TimeSignature \set #'font-family = #'ancient -% \property Staff.TimeSignature \override #'style = #'mensural -} +% \property Score.forceAccidental = ##t %%%%%%%% FIXME: what happened to this property? -upperVoice = \context Staff = upperVoice < - \global - % this is broken until further notice -- see refman % \property Staff.StaffSymbol \override #'line-count = #4 \context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \notes \transpose c' { - \property Staff.Clef \set #'font-family = #'ancient - \property Staff.KeySignature \set #'font-family = #'ancient \property Staff.KeySignature \override #'style = #'vaticana - \property Staff.Accidental \set #'font-family = #'ancient \property Staff.Accidental \override #'style = #'vaticana - \property Staff.Custos \set #'font-family = #'ancient - \property Staff.Custos \override #'style = #'vaticana - \property Staff.Custos \override #'neutral-position = #4 - \property Staff.Custos \override #'neutral-direction = #-1 - \property Staff.Custos \override #'adjust-if-on-staffline = ##t - \property Voice.NoteHead \set #'font-family = #'ancient \property Voice.NoteHead \override #'style = #'vaticana_punctum - \property Voice.Porrectus \override #'style = #'vaticana - \property Voice.Porrectus \override #'solid = ##t - \property Voice.Porrectus \override #'add-stem = ##t - \property Voice.Porrectus \override #'direction = #-1 - \property Voice.Porrectus \override #'thickness = #0.5 \key es \major \clef "vaticana_fa2" c!1 des! e! f! ges! -% \property Staff.clefGlyph = #"clefs-vaticana_do" -% \property Staff.clefPosition = #1 -% \property Staff.clefOctavation = #0 - \clef "vaticana_do2" - \property Voice.NoteHead \override #'style = #'vaticana_inclinatum - a! b! + a! b! ces' \property Staff.BarLine \override #'bar-size = #3.0 \bar "|" +% \break % 1 (8*1) + \property Voice.NoteHead \override #'style = #'vaticana_virga - ces' b! des'! \~ ges! \~ fes! + b! des'! ges! fes! \breathe \clef "vaticana_fa1" \property Voice.NoteHead \override #'style = #'vaticana_quilisma @@ -62,6 +38,8 @@ upperVoice = \context Staff = upperVoice < \property Voice.NoteHead \override #'style = #'vaticana_rvirga c d \property Staff.BarLine \override #'bar-size = #3.0 \bar "|" +% \break %2 (8*1) + \property Voice.NoteHead \override #'style = #'vaticana_rvirga es f \property Voice.NoteHead \override #'style = #'vaticana_lpes @@ -72,6 +50,8 @@ upperVoice = \context Staff = upperVoice < g f \property Voice.NoteHead \override #'style = #'vaticana_plica \property Staff.BarLine \override #'bar-size = #2.0 \bar "|" +% \break % 3 (8*1) + es d \property Voice.NoteHead \override #'style = #'vaticana_epiphonus c d @@ -85,13 +65,17 @@ upperVoice = \context Staff = upperVoice < \clef "medicaea_fa2" ces! des! \property Staff.BarLine \override #'bar-size = #3.0 \bar "|" +% \break % 4 (8*1) + e! f! ges! \clef "medicaea_do2" - \property Voice.NoteHead \override #'style = #'medicaea_subbipunctum + \property Voice.NoteHead \override #'style = #'medicaea_inclinatum a! b! ces'! \property Voice.NoteHead \override #'style = #'medicaea_virga b! a! \property Staff.BarLine \override #'bar-size = #3.0 \bar "|" +% \break % 5 (8*1) + ges! fes! \clef "medicaea_fa1" \property Voice.NoteHead \override #'style = #'medicaea_rvirga @@ -104,6 +88,8 @@ upperVoice = \context Staff = upperVoice < \clef "hufnagel_fa2" ces! des! es! \property Staff.BarLine \override #'bar-size = #3.0 \bar "|" +% \break % 6 (8*1) + fes! ges! \clef "hufnagel_do2" \property Voice.NoteHead \override #'style = #'hufnagel_lpes @@ -111,16 +97,23 @@ upperVoice = \context Staff = upperVoice < \property Voice.NoteHead \override #'style = #'hufnagel_virga bes! as! \property Staff.BarLine \override #'bar-size = #3.0 \bar "|" +% \break % 7 (8*1) + ges! fes! \clef "hufnagel_do_fa" \property Voice.NoteHead \override #'style = #'hufnagel_punctum es! des! ces! des! es! fes! \bar "||" +% \break % 8 (8*1) + + s32*1 +% \break % 12 (32*1) } + > > -lowerVoice = \context Staff = lowerNotes < - \global +lowerStaff = \context MensuralStaff = lowerStaff < + \context MensuralVoice < % this is broken until further notice -- see refman % \property Staff.StaffSymbol \override #'line-count = #5 @@ -129,130 +122,171 @@ lowerVoice = \context Staff = lowerNotes < \notes \transpose c' { \property Voice.autoBeaming = ##f - \property Staff.Clef \set #'font-family = #'ancient - \property Staff.KeySignature \set #'font-family = #'ancient - \property Staff.KeySignature \override #'style = #'mensural - \property Staff.Accidental \set #'font-family = #'ancient - \property Staff.Accidental \override #'style = #'mensural - \property Staff.Custos \set #'font-family = #'ancient - \property Staff.Custos \override #'style = #'mensural - \property Staff.Custos \override #'neutral-position = #3 - \property Staff.Custos \override #'neutral-direction = #-1 - \property Staff.Custos \override #'adjust-if-on-staffline = ##t - \property Voice.NoteHead \set #'font-family = #'ancient \property Voice.NoteHead \override #'style = #'neo_mensural - \property Voice.Stem \set #'font-family = #'ancient % ancient flags - \property Voice.Rest \set #'font-family = #'music \property Voice.Rest \override #'style = #'neo_mensural - \property Voice.Porrectus \override #'style = #'mensural - \property Voice.Porrectus \override #'solid = ##f - \property Voice.Porrectus \override #'add-stem = ##t - \property Voice.Porrectus \override #'thickness = #0.7 -% \property Voice.Porrectus \override #'auto-properties = ##t -% \property Voice.Porrectus \override #'width = #3.0 \key a \major - % IMPORTANT NOTE: - % - % The porrectus syntax is definitely subject to change. For - % proper use, it may eventually change into something like this: - % - % \startLigature e \~ c \endLigature - % - % The reason is that there needs to be some enclosing instance - % for correct handling of line breaking, alignment with - % adjacent note heads, and placement of accidentals. +% FIXME: lily crashes on some (invalid?) ligatures with: +% ERROR: In procedure gh_scm2int: +% ERROR: Wrong type argument in position 1: () - \clef "neo_mensural_c2" - cis' e' \~ d' gis' \~ e' +% FIXME: lily emits "Programming error: Infinity or NaN encountered" +% on many ligatures such as BB. + + cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \] \property Staff.forceClef = ##t \clef "neo_mensural_c2" + cis1 + \bar "|" +% \break % 2 (16*1) - fis' \~ b cis'' - b \~ a a \~ fis + \[ g\breve dis''\longa \] + b\breve \[ a\longa d\longa \] \clef "petrucci_c2" - cis \~ fis ces1 % \bar "|" +% \break % 4 (16*1) + fis1 ces1 \clef "petrucci_c2" r\longa \property Staff.forceClef = ##t \clef "mensural_c2" - r\breve r1 r2 - \clef "mensural_g" - r4 r8 r16 r16 \bar "|" + r\breve + \bar "|" +% \break % 5 (8*1) + r2 + \clef "mensural_g" + r4 r8 r16 r16 \property Voice.NoteHead \override #'style = #'mensural \property Voice.Stem \override #'style = #'mensural \property Voice.Stem \override #'thickness = #1.0 - \property Voice.Rest \set #'font-family = #'ancient \property Voice.Rest \override #'style = #'mensural \clef "petrucci_f" - c8 b, c16 b, c32 b, c64 b, c b, - d8 e d16 e d32 e d64 e d e + c8 b, c16 b, c32 b, c64 b, c64 b, + d8 e d16 e d32 e d64 e d64 e r\longa \property Staff.forceClef = ##t \clef "petrucci_f" - r\breve r1 % \bar "|" - \clef "mensural_f" + r\breve + \bar "|" +% \break % 6 (8*1) + r\breve + \clef "mensural_f" % FIXME: must set Voice.Stem style to #'neo_mensural to avoid % segmentation fault on r8/r16/r32. (Strange: what has % Voice.Stem style to do with mensural rests?) \property Voice.Stem \override #'style = #'neo_mensural - r2 r4 r8 r16 r32 r32 + r2 r4 r8 r16 r16 \property Voice.Stem \override #'style = #'mensural - \property Staff.forceClef = ##t \clef "mensural_f" - e2 f g + e\breve f g a1 \clef "mensural_g" +% \break % 7 (8*1) - bes'! \~ as'! \~ cis''! - bes'! \~ fis'! as'! \~ ges'! + \[ bes'!\longa a'!\longa c''!\longa \] + e'1 d' c' d' \bar "|" + \bar "|" +% \break % 9 (16*1) + + bes'!\longa fis'!1 as'!1 ges'!\longa % lig \property Staff.forceClef = ##t \clef "mensural_g" - e' d' c'1 \bar "|" + e'2 d' c' \bar "|" +% \break % 11 (16*1) \property Staff.forceClef = ##t \clef "petrucci_g" - c'2 d' e' f' g' + c'2 d' e' f' \clef "petrucci_g" - as'! bes'! cis''! + g' as'! bes'! cis''! bes'! as'! gis'! fis'! \property Staff.forceClef = ##t \clef "mensural_g" es'! des'! cis'!1 \bar "||" +% \break % 12 (8*1) } + > > \score { - \context ChoirStaff < - \upperVoice - \lowerVoice + \context Score < + \upperStaff + \lowerStaff > \paper { -% \paperTwentysix linewidth = 17.25\cm textheight = 26.0\cm stafflinethickness = \staffspace / 5.0 indent = 0.0 + \translator { + \ScoreContext + \accepts MensuralStaff + \accepts GregorianStaff +% timing = ##f %%%%%%%% FIXME: this has no effect + } + \translator { + \VoiceContext + \name MensuralVoice + \alias Voice + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + NoteHead \set #'style = #'mensural +% Stem \set #'style = #'mensural %%%%%%%% FIXME: this core dumps + Stem \set #'thickness = #1.0 + Rest \set #'style = #'mensural + autoBeaming = ##f + } + \translator { + \VoiceContext + \name GregorianVoice + \alias Voice + \remove Ligature_bracket_engraver +% \consists Gregorian_ligature_engraver %%%%%%%% TODO: not yet implemented + NoteHead \set #'style = #'vaticana_punctum + autoBeaming = ##f + } \translator { \StaffContext + \name MensuralStaff + \alias Staff + \accepts MensuralVoice \consists Custos_engraver -% Custos \override #'style = #'mensural - \remove Time_signature_engraver -% StaffSymbol \override #'thickness = #2.0 -% StaffSymbol \override #'line-count = #4 + TimeSignature \set #'style = #'mensural + KeySignature \set #'style = #'mensural + Accidental \set #'style = #'mensural + Custos \set #'style = #'mensural + Custos \set #'neutral-position = #3 + Custos \set #'neutral-direction = #-1 + Custos \set #'adjust-if-on-staffline = ##t + clefGlyph = #"clefs-petrucci_c2" + clefPosition = #-2 + clefOctavation = #0 } \translator { - \ScoreContext -% \remove System_start_delimiter_engraver -% systemStartDelimiter \override #'glyph = #'brace + \StaffContext + \name GregorianStaff + \alias Staff + \accepts GregorianVoice + \consists Custos_engraver + \remove Time_signature_engraver + StaffSymbol \set #'thickness = #2.0 + StaffSymbol \set #'line-count = #4 + KeySignature \set #'style = #'vaticana + Accidental \set #'style = #'vaticana + Custos \set #'style = #'vaticana + Custos \set #'neutral-position = #4 + Custos \set #'neutral-direction = #-1 + Custos \set #'adjust-if-on-staffline = ##t + clefGlyph = #"clefs-vaticana_do" + clefPosition = #1 + clefOctavation = #0 } \translator { - \ChoirStaffContext - \remove System_start_delimiter_engraver -% systemStartDelimiter \override #'glyph = #'empty - } + \HaraKiriStaffContext + \accepts MensuralVoice + \accepts GregorianVoice + } } } diff --git a/input/test/ancient-time.ly b/input/test/ancient-time.ly index 3a867e63b7..2c83288fc3 100644 --- a/input/test/ancient-time.ly +++ b/input/test/ancient-time.ly @@ -5,8 +5,7 @@ texidoc="Should use old style." \score { \notes { - \property Staff.TimeSignature \override #'style = #'oldC4/4 - \property Staff.TimeSignature \override #'font-family = #'ancient + \property Staff.TimeSignature \override #'style = #'neo_mensural s1 } } diff --git a/input/test/bar-number-every-fifth.ly b/input/test/bar-number-every-fifth.ly new file mode 100644 index 0000000000..fbcde9ac7d --- /dev/null +++ b/input/test/bar-number-every-fifth.ly @@ -0,0 +1,12 @@ +\score { + \context Staff \notes \transpose c'' { + \property Score.BarNumber \override #'break-visibility = #end-of-line-invisible + \property Score.barNumberVisibility = #(every-nth-bar-number-visible 5) + \property Score.BarNumber \override #'molecule-callback = + #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule) + \property Score.BarNumber \override #'font-relative-size = #1 + + \repeat unfold 11 { c d e f g a b c' } \bar "|." + } +} + diff --git a/input/test/boxed-molecule.ly b/input/test/boxed-molecule.ly index 7767e4f36b..a87f5e4dbd 100644 --- a/input/test/boxed-molecule.ly +++ b/input/test/boxed-molecule.ly @@ -1,53 +1,27 @@ -\version "1.5.68" +\version "1.6.1" \header { texidoc = "overriding the molecule callback can also be used to draw a box around arbitrary grobs. - TODO: check whether the corners are really correct. - TODO: circled molecules. " } -#(define (make-molecule-boxer callback) - (define (molecule-boxer grob) - (let* - ( - (mol (callback grob)) - (box-padding 0.1) - (x-ext (widen-interval (ly-get-molecule-extent mol 0) box-padding)) - (y-ext (widen-interval (ly-get-molecule-extent mol 1) box-padding)) - (rule-thick 0.1) - (x-rule (box-molecule (widen-interval x-ext rule-thick) - (cons 0 rule-thick))) - (y-rule (box-molecule (cons 0 rule-thick) y-ext)) - ) - - (set! mol (ly-combine-molecule-at-edge mol 0 1 y-rule (* 0.5 box-padding))) - (set! mol (ly-combine-molecule-at-edge mol 0 -1 y-rule (* 0.5 box-padding))) - (set! mol (ly-combine-molecule-at-edge mol 1 1 x-rule 0.0)) - (set! mol (ly-combine-molecule-at-edge mol 1 -1 x-rule 0.0)) - - mol - )) - molecule-boxer - ) - \score { \notes \relative c'' { \property Voice.TextScript \override #'molecule-callback = - #(make-molecule-boxer Text_item::brew_molecule) + #(make-molecule-boxer 0.1 0.3 0.2 Text_item::brew_molecule) c'4^"foo" \property Voice.Stem \override #'molecule-callback = - #(make-molecule-boxer Stem::brew_molecule) + #(make-molecule-boxer 0.05 0.25 0.25 Stem::brew_molecule) \property Score.RehearsalMark \override #'molecule-callback = - #(make-molecule-boxer Text_item::brew_molecule) + #(make-molecule-boxer 0.15 0.3 0.3 Text_item::brew_molecule) c8 \property Voice.Stem \revert #'molecule-callback diff --git a/input/test/chords.ly b/input/test/chords.ly index aea0e8f943..d92f586bd7 100644 --- a/input/test/chords.ly +++ b/input/test/chords.ly @@ -17,12 +17,13 @@ Would this be acceptable/good enough/convenient for entry? %} +% used to be quarter notes here. Why? --hwn scales = \notes \transpose c'' \chords{ % - c1:m c:min c4:dim c:aug c:sus c:maj - c1:6 c4:7 c:9 c:11 c:13 + c1:m c:min c:dim c:aug c:sus c:maj + c1:6 c:7 c:9 c:11 c:13 c:m7 c:m.sus c:m7.sus - c4:dim7 c:dim9 c2:7^5 + c:dim7 c:dim9 c2:7^5 c:13^5.7.9.11 % c1:7^5 c:13^5 c1 g d a e b fis diff --git a/input/test/clef-end-of-line.ly b/input/test/clef-end-of-line.ly new file mode 100644 index 0000000000..d0245f7816 --- /dev/null +++ b/input/test/clef-end-of-line.ly @@ -0,0 +1,32 @@ +\header { + + texidoc = "Scales, but with clef and key signature at the end of the line." + +} + +\score { + \notes \transpose c'' { + \property Staff.Clef \set #'break-visibility = #end-of-line-visible + \property Staff.KeySignature \set #'break-visibility = #end-of-line-visible + \property Staff.explicitClefVisibility = #end-of-line-visible + \property Staff.explicitKeySignatureVisibility = #end-of-line-visible + + % We want the time sig to take space, otherwise there is not + % enough white at the start of the line. + % + + \property Staff.TimeSignature \set #'transparent = ##t + \property Score.defaultBarType = #"empty" + + c1 d e f g a b c + \key d \major + \break + + % see above. + \time 4/4 + + d e fis g a b cis d + \key g \major + \break + \time 4/4 +} } diff --git a/input/test/custos.ly b/input/test/custos.ly index 725996d7fd..770717bbbe 100644 --- a/input/test/custos.ly +++ b/input/test/custos.ly @@ -1,9 +1,34 @@ \version "1.5.68" +\header { + texidoc = "custodes in various styles." +} + +\score { + \notes { + \property Staff.Custos \set #'neutral-position = #4 + \property Staff.Custos \set #'neutral-direction = #-1 + \property Staff.Custos \set #'adjust-if-on-staffline = ##t + + \property Staff.Custos \set #'style = #'hufnagel + c'1^"Custos style = \#'hufnagel" + \break < d'1 a' f''> + \property Staff.Custos \set #'style = #'medicaea + c'1^"Custos style = \#'medicaea" + \break < d'1 a' f''> -\score { \notes { c'1 \break < d'1 f' a'> } -\paper {\translator { \StaffContext -\consists Custos_engraver -}} + \property Staff.Custos \set #'style = #'vaticana + c'1^"Custos style = \#'vaticana" + \break < d'1 a' f''> + \property Staff.Custos \set #'style = #'mensural + c'1^"Custos style = \#'mensural" + \break < d'1 a' f''> + } + \paper { + \translator { + \StaffContext + \consists Custos_engraver + } + } } diff --git a/input/test/empty-staffs.ly b/input/test/empty-staffs.ly new file mode 100644 index 0000000000..6c6a0519c7 --- /dev/null +++ b/input/test/empty-staffs.ly @@ -0,0 +1,23 @@ +\header { + +texidoc = "Blank music paper, another example: empty staffs and a +tablature staff." + +} + +emptymusic = \notes { \repeat unfold 4 { s1\break } \bar "|." } + +\score { +\notes < + \context Staff \emptymusic + \context TabStaff \emptymusic + > + + + \paper { + \translator { + \ScoreContext + \remove Bar_number_engraver + } + } +} diff --git a/input/test/mensural-ligatures.ly b/input/test/mensural-ligatures.ly index 9a063b5c05..39c001d2b7 100644 --- a/input/test/mensural-ligatures.ly +++ b/input/test/mensural-ligatures.ly @@ -6,15 +6,13 @@ \include "paper26.ly" -% Note the horizontal alignment of the fermatas that obeys to the +% Note that the horizontal alignment of the fermatas obeys to the % graphical width of the ligatures rather to the musical moment in time. % This is intended behaviour. voice = \notes \transpose c'' { \property Score.timing = ##f \property Score.defaultBarType = "empty" - \property Voice.NoteHead \set #'font-family = #'ancient - \property Voice.NoteHead \override #'style = #'mensural g\longa c\breve a\breve f\breve d'\longa^\fermata \bar "|" \[ @@ -31,22 +29,18 @@ voice = \notes \transpose c'' { \bar "||" } -upperStaff = \context Staff = upperStaff < - \context MensuralVoice < - \voice - > -> - -lowerStaff = \context Staff = lowerStaff < - \context TranscribedVoice < - \voice - > -> - \score { \context ChoirStaff < - \upperStaff - \lowerStaff + \context MensuralStaff = upperStaff < + \context MensuralVoice < + \voice + > + > + \context Staff = lowerStaff < + \context Voice < + \voice + > + > > \paper { stafflinethickness = \staffspace / 5.0 @@ -56,23 +50,32 @@ lowerStaff = \context Staff = lowerStaff < \alias Voice \remove Ligature_bracket_engraver \consists Mensural_ligature_engraver - } - \translator { - \VoiceContext - \name TranscribedVoice - \alias Voice - \remove Mensural_ligature_engraver - \consists Ligature_bracket_engraver + NoteHead \set #'style = #'mensural } \translator { \StaffContext + \name MensuralStaff + \alias Staff \accepts MensuralVoice - \accepts TranscribedVoice - } + \consists Custos_engraver + TimeSignature \set #'style = #'mensural + KeySignature \set #'style = #'mensural + Accidental \set #'style = #'mensural + Custos \set #'style = #'mensural + Custos \set #'neutral-position = #3 + Custos \set #'neutral-direction = #-1 + Custos \set #'adjust-if-on-staffline = ##t + clefGlyph = #"clefs-petrucci_g" + clefPosition = #-2 + clefOctavation = #-0 + } \translator { \HaraKiriStaffContext \accepts MensuralVoice - \accepts TranscribedVoice } + \translator { + \ScoreContext + \accepts MensuralStaff + } } } diff --git a/input/test/poly-metric.ly b/input/test/poly-metric.ly new file mode 100644 index 0000000000..7a5b136565 --- /dev/null +++ b/input/test/poly-metric.ly @@ -0,0 +1,32 @@ +\header { + texidoc = "Polymetric music with aligned note values can be written + by moving the timing engraver to staff context." +} + +\score { + + \notes + < + \context Staff = SA + { + \time 4/4 + c1 c1 c1 + \bar "|." + } + \context Staff= SB { + \time 3/4 + c2. c2. c2. c2. + \bar "|." + } + + > + + \paper{ + \translator{ \ScoreContext + \remove "Timing_engraver" } + \translator{ \StaffContext + \consists "Timing_engraver" + \alias Timing +} +} +} diff --git a/input/test/rests.ly b/input/test/rests.ly index 1ca7f50251..a1aa622d30 100644 --- a/input/test/rests.ly +++ b/input/test/rests.ly @@ -1,17 +1,44 @@ \version "1.5.68" \header { - texidoc ="mensural style rests." - } + texidoc = "rests in various styles." +} + +% FIXME: Currently, this file produces "warning: flag `d-3' not found" +% errors (and similar for "d7") from Stem::flag(). This is should not +% happen, since there are no notes/stems in this example. \score { - \context Voice \notes\relative c { - r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 - \property Staff.Rest \override #'style = #'mensural - \emptyText - r\longa^"restStyle = \"mensural\"" r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 - - - } - \paper { } - \midi { } + \context Staff \notes\relative c { + \property Staff.Rest \set #'style = #'mensural + r\maxima^"Rest style = \#'mensural" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + + \property Staff.Rest \set #'style = #'neo_mensural + r\maxima^"Rest style = \#'neo\\_mensural" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + + \property Staff.Rest \set #'style = #'classical + r\maxima^"Rest style = \#'classical" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + + \property Staff.Rest \set #'style = #'default + r\maxima^"Rest style = \#'default" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + } + \paper { + \translator { + \StaffContext + %%%% FIXME: The following looks good, but produces + %%%% lots of warnings: + % \remove Bar_engraver + } + \translator { + \ScoreContext + \remove Bar_number_engraver + } + } } diff --git a/input/test/stem-extend.ly b/input/test/stem-extend.ly index fc31807090..bf552b6411 100644 --- a/input/test/stem-extend.ly +++ b/input/test/stem-extend.ly @@ -6,7 +6,7 @@ extension can be controlled through @code{Voice.Stem}'s grob-property "} \paper { linewidth = -1.} -\score {\notes \relative c { +\score {\notes \relative c \context Voice { \grace a'8 a4 \property Voice.Stem \set #'no-stem-extend = ##t \grace g8 g4 [g8 g] diff --git a/input/test/tab-staff.ly b/input/test/tab-staff.ly deleted file mode 100644 index e51beac322..0000000000 --- a/input/test/tab-staff.ly +++ /dev/null @@ -1,40 +0,0 @@ -\version "1.5.68" - - - -%{ - -Kludge for half-assed tab notation (you need to fill the numbers -yourself.) - -%} - -bla = \notes \relative c' { } - -\score { \notes -< - \context Voice = BLA \bla - \context TabStaff \context Thread \bla -> - -\paper { - \translator { - \StaffContext - \name TabStaff - StaffSymbol \override #'line-count = #6 - \remove "Clef_engraver" - \remove "Time_signature_engraver" - \consists "Pitch_squash_engraver" - NoteHead \override #'transparent = ##t - Stem \override #'transparent = ##t - NoteHead \override #'staff-position = #-6 - Dots \override #'transparent = ##t - squashedPosition = #-4 - Stem \override #'length = #12 -} -\translator { -\ScoreContext -\accepts TabStaff -} -} -} diff --git a/input/test/tablature.ly b/input/test/tablature.ly index 0abc88d5ee..93c4b5614c 100644 --- a/input/test/tablature.ly +++ b/input/test/tablature.ly @@ -1,4 +1,4 @@ -\version "1.5.68" +\version "1.6.2" %{ @@ -11,20 +11,22 @@ from string-number + pitch to number. %} partition = \notes { - a,4-2 c'-5 a-4 e'-6 - e-3 c'-5 a-4 e'-6 - } + \key e \major + e8\5 fis\5 gis\5 a\5 b\5 cis'\5 dis'\5 e'\5 + e8\4 fis\4 gis\4 a\4 b\4 cis'\4 dis'\4 e'\4 + e8 fis gis a b cis' dis' e' + \property Score.minimumFret = #5 + e8 fis gis a b cis' dis' e' +} \score { \context StaffGroup < \context Staff < - % Hide fingering number (used for string number) for the "normal" staff - \property Staff.Fingering \override #'transparent = ##t - - \partition + \clef "G_8" + \partition > \context TabStaff < - \partition + \partition > > } diff --git a/input/trip.ly b/input/trip.ly index 8f49d5babd..5d9d2047ed 100644 --- a/input/trip.ly +++ b/input/trip.ly @@ -198,7 +198,6 @@ fugaIIPedal = \notes \relative c { %13 \property Staff.PhrasingSlur \override #'dashed = #5.0 c4 \( ( d ) e\) f - % r4 fis,4-\ltoe e4.-\lheel e'8-\rheel | % tie accs: 2nd should get no acc @@ -219,20 +218,7 @@ fis8-\rtoe fis4-\rtoe [e8-\ltoe a-\rtoe] | > > - - \paper { - - \translator { - \OrchestralScoreContext - } - \translator { \PianoStaffContext - \consists "Instrument_name_engraver" - } - \translator { \StaffContext - \consists "Instrument_name_engraver" - } - } - +\paper {} \midi { \tempo 4 =96 } } diff --git a/input/tutorial/brahms-tweaked.ly b/input/tutorial/brahms-tweaked.ly index 56e0c1a411..239839a5f0 100644 --- a/input/tutorial/brahms-tweaked.ly +++ b/input/tutorial/brahms-tweaked.ly @@ -19,7 +19,7 @@ \stemUp \clef treble g ~ < g8 )e> } \\ { s16 - \property Voice.Stem \set #'transparent = ##t + \property Voice.Stem \set #'transparent = ##t d' \property Voice.Stem \revert #'transparent ~ < d4 b4 > } diff --git a/lily/GNUmakefile b/lily/GNUmakefile index 35ed40e707..79a516e0b2 100644 --- a/lily/GNUmakefile +++ b/lily/GNUmakefile @@ -6,12 +6,19 @@ SUBDIRS = include MODULE_LIBS=$(depth)/flower MODULE_INCLUDES= $(depth)/flower/include -MODULE_CXXFLAGS= +MODULE_CXXFLAGS= + + HELP2MAN_EXECS = lilypond STEPMAKE_TEMPLATES= c++ executable po help2man include $(depth)/make/stepmake.make +# for profiling, link guile statically: +# +# USER_LDFLAGS += -static -lltdl -ldl +# + ETAGS_FLAGS += -r '/^LY_DEFINE *(\([^,]+\),/\1/' -r '/^LY_DEFINE *([^,]+, *"\([^"]+\)"/\1/' default: diff --git a/lily/accidental.cc b/lily/accidental.cc index 4200f3b88a..426f94fbb6 100644 --- a/lily/accidental.cc +++ b/lily/accidental.cc @@ -95,6 +95,57 @@ Accidental_interface::accurate_boxes (Grob *a,Grob**common) 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. + */ +String +Accidental_interface::get_fontcharname(String style, int alteration) +{ + if (style == "hufnagel") + switch (alteration) + { + case -2: return "-2"; + case -1: return "hufnagel-1"; + case 0: return "vaticana0"; + case 1: return "mensural1"; + case 2: return "2"; + } + if (style == "medicaea") + switch (alteration) + { + case -2: return "-2"; + case -1: return "medicaea-1"; + case 0: return "vaticana0"; + case 1: return "mensural1"; + case 2: return "2"; + } + if (style == "vaticana") + switch (alteration) + { + case -2: return "-2"; + case -1: return "vaticana-1"; + case 0: return "vaticana0"; + case 1: return "mensural1"; + case 2: return "2"; + } + if (style == "mensural") + switch (alteration) + { + case -2: return "-2"; + case -1: return "mensural-1"; + case 0: return "vaticana0"; + case 1: return "mensural1"; + case 2: return "2"; + } + if (style == "neo_mensural") + style = ""; // currently same as default + if (style == "default") + style = ""; + return style + to_string (alteration); +} + MAKE_SCHEME_CALLBACK (Accidental_interface,brew_molecule,1); SCM Accidental_interface::brew_molecule (SCM smob) @@ -102,7 +153,7 @@ Accidental_interface::brew_molecule (SCM smob) Grob *me = unsmob_grob (smob); bool smaller = false; bool parens = false; - + bool caut = to_boolean (me->get_grob_property ("cautionary")); if (caut) { @@ -110,7 +161,7 @@ Accidental_interface::brew_molecule (SCM smob) parens = gh_equal_p (cstyle, ly_symbol2scm ("parentheses")); smaller = gh_equal_p (cstyle, ly_symbol2scm ("smaller")); } - + SCM scm_style = me->get_grob_property ("style"); String style; if (gh_symbol_p (scm_style)) @@ -121,11 +172,10 @@ Accidental_interface::brew_molecule (SCM smob) { /* preferably no name for the default style. - */ + */ style = ""; } - Font_metric *fm = 0; if (smaller) { @@ -141,16 +191,20 @@ Accidental_interface::brew_molecule (SCM smob) Molecule mol; for (SCM s = me->get_grob_property ("accidentals"); - gh_pair_p (s); s= gh_cdr (s)) + gh_pair_p (s); s = gh_cdr (s)) { - SCM entry = gh_car (s); - - - Molecule acc (fm->find_by_name (String ("accidentals-") + - style + - to_string (gh_scm2int(entry)))); - - mol.add_at_edge (X_AXIS, RIGHT, acc, 0.1); + int alteration = gh_scm2int (gh_car (s)); + String font_char = get_fontcharname (style, alteration); + Molecule acc (fm->find_by_name ("accidentals-" + font_char)); + + if (acc.empty_b()) + { + me->warning (_f ("accidental `%s' not found", font_char)); + } + else + { + mol.add_at_edge (X_AXIS, RIGHT, acc, 0.1); + } } if (parens) diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index fad161affb..a00877a75b 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -153,6 +153,7 @@ All_font_metrics::find_tfm (String name) } + Font_metric * All_font_metrics::find_font (String name) { diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index e5ae076708..74d345ee14 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -101,7 +101,8 @@ Auto_change_iterator::pending_pitch (Moment m) const m = iter->pending_moment (); } - delete iter; + scm_gc_unprotect_object (iter->self_scm()); + return ps; } diff --git a/lily/bar-check-iterator.cc b/lily/bar-check-iterator.cc index 6405496abc..af227ca0d9 100644 --- a/lily/bar-check-iterator.cc +++ b/lily/bar-check-iterator.cc @@ -22,15 +22,15 @@ public: VIRTUAL_COPY_CONS(Bar_check_iterator); virtual void process (Moment); Bar_check_iterator( ); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); }; -IMPLEMENT_CTOR_CALLBACK (Bar_check_iterator); +IMPLEMENT_CTOR_CALLBACK(Bar_check_iterator); Music * get_barcheck () { Music *bc = new Music; - bc->set_mus_property ("iterator-ctor", Bar_check_iterator::constructor_cxx_function); + bc->set_mus_property ("iterator-ctor", Bar_check_iterator::constructor_proc); return bc; } diff --git a/lily/bar-line.cc b/lily/bar-line.cc index d897133e21..03d8f61899 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -148,7 +148,6 @@ Bar_line::before_line_breaking (SCM smob) SCM proc = me->get_grob_property ("break-glyph-function"); g = gh_call2 (proc, g, scm_int2num (bsd)); } - if (!gh_string_p (g)) { diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 47bceef5bb..10eb2f4551 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -38,10 +38,6 @@ protected: }; -/* - TODO: more advanced formatting via SCM function, perhaps barnumbers - every 5 measures? */ - void Bar_number_engraver::process_music () { @@ -51,19 +47,20 @@ Bar_number_engraver::process_music () if (gh_string_p (wb)) { - SCM bn = get_property ("currentBarNumber"); SCM smp = get_property ("measurePosition"); - int ibn = gh_number_p (bn) ? gh_scm2int(bn) : 1; Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); - if (mp.main_part_ == Rational (0) - && ibn != 1) + if (mp.main_part_ == Rational (0)) { - create_items (); - - // guh. - text_->set_grob_property ("text", - scm_makfrom0str (to_string (gh_scm2int (bn)).to_str0 ())); + SCM bn = get_property ("currentBarNumber"); + SCM proc = get_property ("barNumberVisibility"); + if (gh_number_p (bn) && to_boolean(gh_call1(proc, bn))) + { + create_items (); + // guh. + text_->set_grob_property + ("text", scm_makfrom0str (to_string (gh_scm2int (bn)).to_str0 ())); + } } } diff --git a/lily/beam.cc b/lily/beam.cc index 8e454d3e91..3b76c373b9 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -67,6 +67,16 @@ Beam::add_stem (Grob *me, Grob *s) } +Real +Beam::get_thickness (Grob * me) +{ + SCM th = me->get_grob_property ("thickness"); + if (gh_number_p (th)) + return gh_scm2double (th)* Staff_symbol_referencer::staff_space (me); + else + return 0.0; +} + /* Return the translation between 2 adjoining beams. */ Real Beam::get_beam_translation (Grob *me) @@ -97,8 +107,7 @@ Beam::space_function (SCM smob, SCM beam_count) Real staff_space = Staff_symbol_referencer::staff_space (me); Real line = me->get_paper ()->get_var ("linethickness"); - Real thickness = gh_scm2double (me->get_grob_property ("thickness")) - * staff_space; + Real thickness = get_thickness (me); Real beam_translation = gh_scm2int (beam_count) < 4 ? (2*staff_space + line - thickness) / 2.0 @@ -316,8 +325,7 @@ Beam::brew_molecule (SCM grob) Real dy = pos.delta (); Real dydx = dy && dx ? dy/dx : 0; - Real thick = gh_scm2double (me->get_grob_property ("thickness")) - * Staff_symbol_referencer::staff_space (me); + Real thick = get_thickness (me); Real bdy = get_beam_translation (me); SCM last_beaming = SCM_EOL;; @@ -1215,8 +1223,7 @@ Beam::set_stem_lengths (Grob *me) &&gh_scm2double (me->get_grob_property ("gap"))) { gap = true; - thick = gh_scm2double (me->get_grob_property ("thickness")) - * Staff_symbol_referencer::staff_space(me); + thick = get_thickness(me); } // ugh -> use commonx diff --git a/lily/bezier.cc b/lily/bezier.cc index e165817f24..ffe48f240d 100644 --- a/lily/bezier.cc +++ b/lily/bezier.cc @@ -112,10 +112,9 @@ Bezier::polynomial (Axis a)const Polynomial p (0.0); for (int j=0; j <= 3; j++) { - p += control_[j][a] + p += (control_[j][a] * binomial_coefficient (3, j)) * Polynomial::power (j , Polynomial (0,1))* - Polynomial::power (3 - j, Polynomial (1,-1))* - binomial_coefficient (3, j); + Polynomial::power (3 - j, Polynomial (1,-1)); } return p; diff --git a/lily/break-align-interface.cc b/lily/break-align-interface.cc index c29c74b240..9bf4e4503a 100644 --- a/lily/break-align-interface.cc +++ b/lily/break-align-interface.cc @@ -71,7 +71,7 @@ void Break_align_interface::do_alignment (Grob *me) { Item * item = dynamic_cast (me); - + int rank = Paper_column::get_rank (item->get_column ()); Link_array elems = Pointer_group_interface__extract_grobs (me, (Grob*)0, "elements"); @@ -95,14 +95,13 @@ Break_align_interface::do_alignment (Grob *me) int edge_idx = -1; - while (idx < elems.size()) + while (idx < elems.size() - 1) { int next_idx = idx+1; - while ( next_idx < elems.size() && extents[next_idx].empty_b()) + while (next_idx < elems.size() && + extents[next_idx].empty_b() + && next_idx != elems.size() -1 ) next_idx++; - - if (next_idx == elems.size()) - break; Grob *l = elems[idx]; Grob *r = elems[next_idx]; @@ -133,18 +132,18 @@ Break_align_interface::do_alignment (Grob *me) table, but that gets icky when that grob is suicided for some reason. */ - for (SCM s = r->get_grob_property ("elements"); - gh_pair_p (s); s = gh_cdr (s)) - { - Grob * elt =unsmob_grob(gh_car (s)); - - SCM sym = elt->get_grob_property ("break-align-symbol"); - if (gh_symbol_p (sym)) - { - rsym = sym; - break; - } - } + for (SCM s = r->get_grob_property ("elements"); + gh_pair_p (s); s = gh_cdr (s)) + { + Grob * elt =unsmob_grob(gh_car (s)); + + SCM sym = elt->get_grob_property ("break-align-symbol"); + if (gh_symbol_p (sym)) + { + rsym = sym; + break; + } + } if (rsym == ly_symbol2scm("left-edge")) edge_idx = next_idx; @@ -183,7 +182,7 @@ Break_align_interface::do_alignment (Grob *me) offsets[next_idx] = extents[idx][RIGHT] + distance; else if (type == ly_symbol2scm("minimum-space")) offsets[next_idx] = extents[idx][RIGHT] >? distance; - + idx = next_idx; } diff --git a/lily/chord-tremolo-engraver.cc b/lily/chord-tremolo-engraver.cc index 4f0a920dca..e580e17716 100644 --- a/lily/chord-tremolo-engraver.cc +++ b/lily/chord-tremolo-engraver.cc @@ -79,7 +79,7 @@ Chord_tremolo_engraver::try_music (Music * m) { Repeated_music * rp = dynamic_cast (m); if (rp - && rp->get_mus_property ("iterator-ctor") == Chord_tremolo_iterator::constructor_cxx_function + && rp->get_mus_property ("iterator-ctor") == Chord_tremolo_iterator::constructor_proc && !repeat_) { Moment l = rp->length_mom (); diff --git a/lily/chord-tremolo-iterator.cc b/lily/chord-tremolo-iterator.cc index 7cec33c302..b4d7696968 100644 --- a/lily/chord-tremolo-iterator.cc +++ b/lily/chord-tremolo-iterator.cc @@ -22,7 +22,7 @@ Chord_tremolo_iterator::construct_children () { Repeated_music * rep = dynamic_cast (get_music ()); factor_ = Moment (Rational(1, 1)); - child_iter_ = get_iterator (rep->body ()); + child_iter_ = unsmob_iterator (get_iterator (rep->body ())); } Chord_tremolo_iterator::Chord_tremolo_iterator () @@ -35,7 +35,23 @@ Chord_tremolo_iterator::Chord_tremolo_iterator (Chord_tremolo_iterator const &sr : Music_iterator (src) { factor_ = src.factor_; - child_iter_ = src.child_iter_ ? src.child_iter_->clone () : 0; + child_iter_ = src.child_iter_ ? src.child_iter_->clone () : 0; + if (child_iter_) + scm_gc_unprotect_object (child_iter_->self_scm()); +} + +void +Chord_tremolo_iterator::do_quit() +{ + if (child_iter_) + child_iter_->quit(); +} + +void +Chord_tremolo_iterator::derived_mark () const +{ + if (child_iter_) + scm_gc_mark (child_iter_->self_scm()); } void @@ -65,11 +81,6 @@ Chord_tremolo_iterator::ok () const return child_iter_ && child_iter_->ok (); } -Chord_tremolo_iterator::~Chord_tremolo_iterator () -{ - delete child_iter_; -} - Music_iterator* Chord_tremolo_iterator::try_music_in_children (Music *m) const { diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index e7b4dfa94e..091ee979a0 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -95,28 +95,27 @@ Clef_engraver::create_clef () announce_grob(c, SCM_EOL); clef_ = c; - } - SCM cpos = get_property ("clefPosition"); + SCM cpos = get_property ("clefPosition"); - if (gh_number_p (cpos)) - Staff_symbol_referencer::set_position (clef_, gh_scm2int (cpos)); + if (gh_number_p (cpos)) + Staff_symbol_referencer::set_position (clef_, gh_scm2int (cpos)); - SCM oct = get_property ("clefOctavation"); - if (gh_number_p (oct) && gh_scm2int (oct)) - { - Item * g = new Item (get_property ("OctavateEight")); + SCM oct = get_property ("clefOctavation"); + if (gh_number_p (oct) && gh_scm2int (oct)) + { + Item * g = new Item (get_property ("OctavateEight")); - Side_position_interface::add_support (g,clef_); + Side_position_interface::add_support (g,clef_); - g->set_parent (clef_, Y_AXIS); - g->set_parent (clef_, X_AXIS); + g->set_parent (clef_, Y_AXIS); + g->set_parent (clef_, X_AXIS); - g->set_grob_property ("direction", scm_int2num (sign (gh_scm2int (oct)))); - octavate_ = g; - announce_grob(octavate_, SCM_EOL); + g->set_grob_property ("direction", scm_int2num (sign (gh_scm2int (oct)))); + octavate_ = g; + announce_grob(octavate_, SCM_EOL); + } } } - void Clef_engraver::process_music () { diff --git a/lily/clef.cc b/lily/clef.cc index 9a2eec2e3a..062d7b81ef 100644 --- a/lily/clef.cc +++ b/lily/clef.cc @@ -19,7 +19,7 @@ MAKE_SCHEME_CALLBACK (Clef,before_line_breaking,1); SCM Clef::before_line_breaking (SCM smob) { - Item * s = unsmob_item (smob); + Item *s = unsmob_item (smob); SCM glyph = s->get_grob_property ("glyph-name"); @@ -51,16 +51,19 @@ MAKE_SCHEME_CALLBACK (Clef,brew_molecule,1) SCM Clef::brew_molecule (SCM smob) { - Grob * sc = unsmob_grob (smob); - SCM glyph = sc->get_grob_property ("glyph-name"); - if (gh_string_p (glyph)) - { - return Font_interface::get_default_font (sc)->find_by_name (String (ly_scm2string (glyph))).smobbed_copy (); - } - else + Grob *me = unsmob_grob (smob); + SCM glyph_scm = me->get_grob_property ("glyph-name"); + if (!gh_string_p (glyph_scm)) + return SCM_EOL; + + String glyph = String (ly_scm2string (glyph_scm)); + Font_metric *fm = Font_interface::get_default_font (me); + Molecule out = fm->find_by_name (glyph); + if (out.empty_b()) { - return SCM_EOL; + me->warning (_f ("clef `%s' not found", glyph.to_str0 ())); } + return out.smobbed_copy (); } diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index 14d4d405c2..ca90b3d5db 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -43,7 +43,8 @@ class Completion_heads_engraver : public Engraver Moment note_end_mom_; bool first_b_; Rational left_to_do_; - + Rational do_nothing_until_; + Moment next_barline_moment (); Duration find_nearest_duration (Rational length); @@ -81,6 +82,8 @@ Completion_heads_engraver::try_music (Music *m) musiclen.main_part_ = Rational (0,1); } note_end_mom_ = note_end_mom_ >? (now + musiclen); + do_nothing_until_ = Rational (0,0); + return true; } else if (dynamic_cast (m)) @@ -92,6 +95,9 @@ Completion_heads_engraver::try_music (Music *m) } +/* + The duration _until_ the next barline. + */ Moment Completion_heads_engraver::next_barline_moment ( ) { @@ -146,8 +152,12 @@ Completion_heads_engraver::process_music () { if (!first_b_ && !left_to_do_) return ; - + first_b_ = false; + + Moment now = now_mom (); + if (do_nothing_until_ > now.main_part_) + return ; Duration note_dur; Duration *orig = 0; @@ -160,15 +170,15 @@ Completion_heads_engraver::process_music () orig = unsmob_duration (note_reqs_[0]->get_mus_property ("duration")); note_dur = *orig; } - Moment nb = next_barline_moment (); if (nb < note_dur.length_mom ()) { note_dur = find_nearest_duration (nb.main_part_); - Moment next = now_mom(); + Moment next = now; next.main_part_ += note_dur.length_mom (); top_engraver ()->add_moment_to_process (next); + do_nothing_until_ = next.main_part_; } if (orig) diff --git a/lily/custos.cc b/lily/custos.cc index a96e509d7f..4def4d6f22 100644 --- a/lily/custos.cc +++ b/lily/custos.cc @@ -8,10 +8,6 @@ /* TODO: - - merge create_ledger_line () and Note_head::create_ledger_line () - - - rewrite create_ledger_line () to support short and thin ledger lines - - do not show if a clef change immediately follows in the next line - decide: do or do not print custos if the next line starts with a rest @@ -35,83 +31,83 @@ SCM Custos::brew_molecule (SCM smob) { Item *me = (Item *)unsmob_grob (smob); - SCM scm_style = me->get_grob_property ("style"); + SCM scm_style = me->get_grob_property ("style"); + String style; if (gh_symbol_p (scm_style)) { - String style = ly_scm2string (scm_symbol_to_string (scm_style)); - - /* - * Shall we use a common custos font character regardless if on - * staffline or not, or shall we use individual font characters - * for both cases? - */ - bool adjust = - to_boolean (me->get_grob_property ("adjust-if-on-staffline")); - - String idx = "custodes-" + style + "-"; - - int neutral_pos; - SCM ntr_pos = me->get_grob_property ("neutral-position"); - if (gh_number_p (ntr_pos)) - neutral_pos = gh_scm2int (ntr_pos); - else - neutral_pos = 0; + style = ly_scm2string (scm_symbol_to_string (scm_style)); + } + else + { + style = "mensural"; + } - Direction neutral_direction = - to_dir (me->get_grob_property ("neutral-direction")); + /* + * Shall we use a common custos font character regardless if on + * staffline or not, or shall we use individual font characters + * for both cases? + */ + bool adjust = + to_boolean (me->get_grob_property ("adjust-if-on-staffline")); + + int neutral_pos; + SCM ntr_pos = me->get_grob_property ("neutral-position"); + if (gh_number_p (ntr_pos)) + neutral_pos = gh_scm2int (ntr_pos); + else + neutral_pos = 0; + + Direction neutral_direction = + to_dir (me->get_grob_property ("neutral-direction")); + + int pos = (int)rint (Staff_symbol_referencer::get_position (me)); + int sz = Staff_symbol_referencer::line_count (me)-1; + + String font_char = "custodes-" + style + "-"; + if (pos < neutral_pos) + font_char += "u"; + else if (pos > neutral_pos) + font_char += "d"; + else if (neutral_direction == UP) + font_char += "u"; + else if (neutral_direction == DOWN) + font_char += "d"; + else // auto direction; not yet supported -> use "d" + font_char += "d"; + + if (adjust) + { + font_char += (((pos ^ sz) & 0x1) == 0) ? "1" : "0"; + } + else + { + font_char += "2"; + } + Molecule molecule + = Font_interface::get_default_font (me)->find_by_name (font_char); + if (molecule.empty_b ()) + { + me->warning (_f ("custos `%s' not found", font_char)); + return SCM_EOL; + } + else + { + // add ledger lines int pos = (int)rint (Staff_symbol_referencer::get_position (me)); - int sz = Staff_symbol_referencer::line_count (me)-1; - - if (pos < neutral_pos) - idx += "u"; - else if (pos > neutral_pos) - idx += "d"; - else if (neutral_direction == UP) - idx += "u"; - else if (neutral_direction == DOWN) - idx += "d"; - else // auto direction; not yet supported -> use "d" - idx += "d"; - - if (adjust) - { - idx += (((pos ^ sz) & 0x1) == 0) ? "1" : "0"; - } - else - { - idx += "2"; - } - - Molecule molecule - = Font_interface::get_default_font (me)->find_by_name (idx); - if (molecule.empty_b ()) - { - String message = "no such custos: `" + idx + "'"; - warning (_ (message.to_str0 ())); - return SCM_EOL; - } - else - { - // add ledger lines - int pos = (int)rint (Staff_symbol_referencer::get_position (me)); - int interspaces = Staff_symbol_referencer::line_count (me)-1; - if (abs (pos) - interspaces > 1) - { - Molecule ledger_lines = - Note_head::brew_ledger_lines (me, pos, interspaces, - molecule.extent (X_AXIS), true); - molecule.add_molecule (ledger_lines); - } - return molecule.smobbed_copy (); + int interspaces = Staff_symbol_referencer::line_count (me)-1; + if (abs (pos) - interspaces > 1) + { + Molecule ledger_lines = + Note_head::brew_ledger_lines (me, pos, interspaces, + molecule.extent (X_AXIS), true); + molecule.add_molecule (ledger_lines); } + return molecule.smobbed_copy (); } - else - return SCM_EOL; } - ADD_INTERFACE (Custos, "custos-interface", "A custos is a staff context symbol that appears at the end of a staff line with monophonic musical contents (i.e. with a single diff --git a/lily/cxx-function-smob.cc b/lily/cxx-function-smob.cc deleted file mode 100644 index 4bdd4df701..0000000000 --- a/lily/cxx-function-smob.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* - grob-callback.cc -- implement Callback smob. - - source file of the GNU LilyPond music typesetter - - (c) 2000--2002 Han-Wen Nienhuys - - */ - -#include "cxx-function-smob.hh" -#include "ly-smobs.icc" - -static scm_t_bits callback_tag; - -static -SCM mark_smob (SCM) -{ - return SCM_EOL; -} - -static int -print_smob (SCM, SCM port, scm_print_state *) -{ - scm_puts ("#", port); - return 1; -} - -static size_t -free_smob (SCM) -{ - return 0; -} - -LY_DEFINE(cxx_function_type, "c++-function?", 1, 0, 0, (SCM x), - "Is this an encapsulated C++ function ?") -{ - return (SCM_CELL_TYPE (x)) == callback_tag ? SCM_BOOL_T : SCM_BOOL_F; -} - -void init_cxx_function_smobs () -{ - callback_tag = scm_make_smob_type ("callback", 0); - scm_set_smob_mark (callback_tag, mark_smob); - scm_set_smob_free (callback_tag, free_smob); - scm_set_smob_print (callback_tag, print_smob); - scm_set_smob_equalp (callback_tag, 0); -} - -SCM -smobify_cxx_function (Cxx_function cb) -{ - SCM z; - SCM_NEWSMOB(z,callback_tag, cb) ; - return z; -} - - -Cxx_function -unsmob_cxx_function (SCM x) -{ - - if (SCM_NIMP (x) && SCM_CELL_TYPE (x) == callback_tag) - return (Cxx_function) SCM_CELL_WORD_1 (x); - else - return 0; -} - diff --git a/lily/engraver.cc b/lily/engraver.cc index 02bf0e1074..b8cb0f4939 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -68,17 +68,7 @@ Engraver::Engraver() Score_engraver* Engraver::top_engraver () const { - /* - ugh. - */ - if (dynamic_cast((Engraver*)this)) - return dynamic_cast ((Engraver*)this); - - if (daddy_trans_) - return dynamic_cast (daddy_trans_)->top_engraver (); - - programming_error ("No score engraver!"); - return 0; + return dynamic_cast (top_translator()); } ENTER_DESCRIPTION(Engraver, diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index 120b580e28..ee6612cc4e 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -192,8 +192,8 @@ Fingering_engraver::make_script (Direction d, Music *r,Axis a, int i) if (gh_number_p (s)) priority = gh_scm2int (s); - /* Make sure they're in order of user input by adding index i. */ - priority += d*i; + /* See script-engraver.cc */ + priority += i; fingering->set_grob_property ("script-priority", gh_int2scm (priority)); diff --git a/lily/folded-repeat-iterator.cc b/lily/folded-repeat-iterator.cc index 016db26f40..b2e07aed32 100644 --- a/lily/folded-repeat-iterator.cc +++ b/lily/folded-repeat-iterator.cc @@ -1,5 +1,5 @@ /* - repeated-music-iterator.cc -- implement Folded_repeat_iterator + folded-repeat-iterator.cc -- implement Folded_repeat_iterator source file of the GNU LilyPond music typesetter @@ -30,11 +30,11 @@ Folded_repeat_iterator::ok () const { return main_iter_ || alternative_iter_; } - -Folded_repeat_iterator::~Folded_repeat_iterator () +void +Folded_repeat_iterator::do_quit() { - delete main_iter_; - delete alternative_iter_; + if (main_iter_)main_iter_->quit(); + if (alternative_iter_)alternative_iter_->quit(); } Folded_repeat_iterator::Folded_repeat_iterator (Folded_repeat_iterator const &src) @@ -43,6 +43,10 @@ Folded_repeat_iterator::Folded_repeat_iterator (Folded_repeat_iterator const &sr main_iter_ = src.main_iter_ ? src.main_iter_->clone () : 0; alternative_iter_ = src.alternative_iter_ ? src.alternative_iter_->clone () : 0; main_length_mom_ = src.main_length_mom_; + if (main_iter_) + scm_gc_unprotect_object (main_iter_->self_scm()); + if (alternative_iter_) + scm_gc_unprotect_object (alternative_iter_->self_scm()); } Moment @@ -60,10 +64,10 @@ void Folded_repeat_iterator::construct_children () { Repeated_music * mus = dynamic_cast (get_music ()); - main_iter_ = get_iterator (mus->body ()); + main_iter_ = unsmob_iterator (get_iterator (mus->body ())); if (!main_iter_->ok ()) { - leave_body (); + leave_body (); enter_alternative (); } } @@ -95,7 +99,7 @@ Folded_repeat_iterator::process (Moment m) alternative_iter_->process (m - main_length_mom_); if (!alternative_iter_->ok ()) { - delete alternative_iter_; + alternative_iter_->quit(); alternative_iter_ =0; } } @@ -105,7 +109,8 @@ void Folded_repeat_iterator::leave_body () { Repeated_music * mus = dynamic_cast (get_music ()); - delete main_iter_; + + main_iter_->quit (); main_iter_ = 0; main_length_mom_ += mus->body ()->length_mom (); } @@ -116,12 +121,17 @@ Folded_repeat_iterator::enter_alternative () Repeated_music * mus = dynamic_cast (get_music ()); if (mus->alternatives ()) { + /* + ugh. + */ Simultaneous_music_iterator * s = new Simultaneous_music_iterator; s->separate_contexts_b_ = true; s->init_translator (mus, report_to ()); alternative_iter_ = s; alternative_iter_->construct_children (); + + scm_gc_unprotect_object (s->self_scm()); } } @@ -137,5 +147,12 @@ Folded_repeat_iterator::try_music_in_children (Music * m) const return alternative_iter_->try_music (m); return 0; } - +void +Folded_repeat_iterator::derived_mark()const +{ + if (main_iter_) + scm_gc_mark (main_iter_->self_scm()); + if (alternative_iter_) + scm_gc_mark (alternative_iter_->self_scm()); +} IMPLEMENT_CTOR_CALLBACK (Folded_repeat_iterator); diff --git a/lily/font-metric.cc b/lily/font-metric.cc index 8fd2a49931..a25bde424f 100644 --- a/lily/font-metric.cc +++ b/lily/font-metric.cc @@ -82,7 +82,7 @@ Font_metric::~Font_metric () Font_metric::Font_metric () { description_ = SCM_EOL; - + self_scm_ = SCM_EOL; smobify_self (); } @@ -103,10 +103,20 @@ Font_metric::get_char (int)const } +void +Font_metric::derived_mark ()const +{ + +} + + + SCM Font_metric::mark_smob (SCM s) { Font_metric * m = (Font_metric*) SCM_CELL_WORD_1 (s); + + m->derived_mark(); return m->description_; } @@ -164,3 +174,16 @@ number-pairs.") } + + + +Molecule +Font_metric::get_char_molecule (int code) const +{ + Molecule m ; + SCM at = scm_list_n (ly_symbol2scm ("char"), gh_int2scm (code), + SCM_UNDEFINED); + at = fontify_atom (this, at); + Box b = get_char (code); + return Molecule (b, at); +} diff --git a/lily/gdb.cc b/lily/gdb.cc index e8f71657e4..e9bfd001dc 100644 --- a/lily/gdb.cc +++ b/lily/gdb.cc @@ -1,6 +1,8 @@ #include "item.hh" #include "spanner.hh" +#include "paper-column.hh" +extern "C" { // thanks to GDBs wonderful casting abilities, we need these: Item* to_item (Grob* g) @@ -12,3 +14,10 @@ to_spanner (Grob*g) { return dynamic_cast (g); } + +Paper_column* +to_pc (Grob* g) +{ + return dynamic_cast (g); +} +} diff --git a/lily/global-translator.cc b/lily/global-translator.cc index 0c079c40d2..bbe997ce0b 100644 --- a/lily/global-translator.cc +++ b/lily/global-translator.cc @@ -72,6 +72,7 @@ void Global_translator::one_time_step () { } + void Global_translator::start () { @@ -100,9 +101,6 @@ Global_translator::run_iterator_on_me (Music_iterator * iter) w = sneaky_insert_extra_moment (w); // printf ("proccing %s\n ", w.string ().to_str0 ()); - - - if (first) { first = false; @@ -116,3 +114,39 @@ Global_translator::run_iterator_on_me (Music_iterator * iter) one_time_step (); } } + +void +Global_translator::apply_finalizations () +{ + SCM lst = get_property ("finalizations"); + set_property ("finalizations" , SCM_EOL); + for (SCM s = lst ; gh_pair_p (s); s = gh_cdr (s)) + { + scm_primitive_eval (gh_car (s)); + } +} + +/* + Add a function to execute before stepping to the next time step. + */ +void +Global_translator::add_finalization (SCM x) +{ + SCM lst = get_property ("finalizations"); + lst = scm_cons (x, lst); + set_property ("finalizations" ,lst); +} + + +Global_translator * +Translator::top_translator()const +{ + if (dynamic_cast((Translator*)this)) + return dynamic_cast ((Translator*)this); + + if (daddy_trans_) + return daddy_trans_->top_translator (); + + programming_error ("No top translator!"); + return 0; +} diff --git a/lily/grace-iterator.cc b/lily/grace-iterator.cc index 4d99819fa6..6668b66f4e 100644 --- a/lily/grace-iterator.cc +++ b/lily/grace-iterator.cc @@ -14,13 +14,6 @@ #include "global-translator.hh" #include "warn.hh" - -Grace_iterator::~Grace_iterator () -{ - // child_iter_ = 0; -} - - void Grace_iterator::process (Moment m) { @@ -29,14 +22,6 @@ Grace_iterator::process (Moment m) Music_wrapper_iterator::process (main); } -void -Grace_iterator::construct_children () -{ - Music_wrapper_iterator::construct_children (); -} - - - Moment Grace_iterator::pending_moment () const { diff --git a/lily/grace-music.cc b/lily/grace-music.cc index 3aea71c706..516e02ce0e 100644 --- a/lily/grace-music.cc +++ b/lily/grace-music.cc @@ -36,14 +36,14 @@ Grace_music::start_mom () const Grace_music::Grace_music () { set_mus_property ("iterator-ctor", - Grace_iterator::constructor_cxx_function); + Grace_iterator::constructor_proc); } Grace_music::Grace_music (SCM p) : Music_wrapper (p) { set_mus_property ("iterator-ctor", - Grace_iterator::constructor_cxx_function); + Grace_iterator::constructor_proc); } ADD_MUSIC (Grace_music); diff --git a/lily/grob-pq-engraver.cc b/lily/grob-pq-engraver.cc index 0dfe3f7828..3d1d350e0a 100644 --- a/lily/grob-pq-engraver.cc +++ b/lily/grob-pq-engraver.cc @@ -28,6 +28,7 @@ int compare (Grob_mom const &a, Grob_mom const &b) return Moment::compare (a.end_, b.end_); } + class Grob_pq_engraver: public Engraver { public: @@ -76,59 +77,41 @@ Grob_pq_engraver::acknowledge_grob (Grob_info gi) } } +LY_DEFINE(ly_grob_pq_less_p, + "ly-grob-pq-less?", 2 , 0 ,0, (SCM a, SCM b), + "Compare 2 Grob PQ entries. Internal") +{ + if ( Moment::compare (*unsmob_moment (gh_car (a)), + *unsmob_moment (gh_car (b))) < 0) + return SCM_BOOL_T; + else + return SCM_BOOL_F; +} + + void Grob_pq_engraver::stop_translation_timestep () { Moment now = now_mom(); current_grobs_.sort (&compare); - + SCM current_list = SCM_EOL; + for (int i = current_grobs_.size(); i--;) + current_list = scm_cons (scm_cons (current_grobs_[i].end_.smobbed_copy(), + current_grobs_[i].grob_->self_scm ()), current_list); + + /* + We generate some garbage here. + */ SCM busy = get_property ("busyGrobs"); while (gh_pair_p (busy) && *unsmob_moment (gh_caar (busy)) == now) { busy = gh_cdr (busy); } - SCM start = busy; - SCM * current_cell = &start; - - int i = 0; - while (i < current_grobs_.size ()) - { - Moment stop; - stop.set_infinite (1); - - if (gh_pair_p (busy)) - { - SCM h = gh_car (busy); - stop = *unsmob_moment (gh_car (h)); - } - - Moment current_stop = current_grobs_[i].end_; - if (current_stop <= stop) - { - SCM new_entry = gh_cons (current_stop.smobbed_copy(), - current_grobs_[i].grob_->self_scm ()); - - /* - Insert before BUSY. - */ - i ++; - *current_cell = gh_cons (new_entry, busy); - current_cell = SCM_CDRLOC(*current_cell); - } - else - { - /* - if current_stop > stop, then stop != infty, and we - apparently have a next entry */ - busy = gh_cdr (busy); - current_cell = SCM_CDRLOC(*current_cell); - } - } - + busy = scm_merge_x (current_list, busy, ly_grob_pq_less_p_proc); current_grobs_.clear (); - daddy_trans_->set_property ("busyGrobs", start); + daddy_trans_->set_property ("busyGrobs", busy); } void @@ -140,7 +123,11 @@ Grob_pq_engraver::start_translation_timestep () SCM busy = start_busy; while (gh_pair_p (busy) && *unsmob_moment (gh_caar (busy)) < now) { - programming_error ("Skipped something ?!"); + /* + Todo: do something sensible. The grob-pq-engraver is not water + tight, and stuff like tupletSpannerDuration confuses it. + */ + programming_error (_f("Skipped something?\nGrob %s ended before I expected it to end.", unsmob_grob (gh_cdar (busy))->name().to_str0())); busy = gh_cdr (busy); } @@ -152,7 +139,8 @@ Grob_pq_engraver::start_translation_timestep () ENTER_DESCRIPTION(Grob_pq_engraver, -/* descr */ "Administrate when certain grobs (eg. note heads) stop playing. +/* descr */ "Administrate when certain grobs (eg. note heads) stop playing; this +engraver is a sort-of a failure, since it doesn't handle all sorts of borderline cases very well. ", /* creats*/ "", /* acks */ "grob-interface", diff --git a/lily/grob.cc b/lily/grob.cc index a30f020c8e..382cbe2de7 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -45,7 +45,7 @@ Grob::Grob (SCM basicprops) /* fixme: default should be no callback. */ - + self_scm_ = SCM_EOL; pscore_=0; status_ = 0; original_ = 0; @@ -122,6 +122,8 @@ Grob::Grob (Grob const&s) : dim_cache_ (s.dim_cache_) { original_ = (Grob*) &s; + self_scm_ = SCM_EOL; + immutable_property_alist_ = s.immutable_property_alist_; mutable_property_alist_ = SCM_EOL; @@ -751,7 +753,7 @@ Grob::print_smob (SCM s, SCM port, scm_print_state *) } SCM -Grob::do_derived_mark () +Grob::do_derived_mark () const { return SCM_EOL; } diff --git a/lily/include/accidental-interface.hh b/lily/include/accidental-interface.hh index c2dd022327..e906f9fcb4 100644 --- a/lily/include/accidental-interface.hh +++ b/lily/include/accidental-interface.hh @@ -19,6 +19,7 @@ public: DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); static bool has_interface (Grob*); + static String get_fontcharname(String style, int alteration); static Array Accidental_interface::accurate_boxes (Grob *me,Grob**common); }; diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index bd64140e19..9a742a7de0 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -17,10 +17,9 @@ #include "drul-array.hh" /** - Any piece of audio information. - We need virtual conclassors, - let's try decentralised factory for specific audio implemenations. - + + Any piece of audio information. We need virtual constructors, let's + try decentralised factory for specific audio implemenations. */ class Audio_item : public Audio_element { diff --git a/lily/include/auto-change-iterator.hh b/lily/include/auto-change-iterator.hh index cc54df7dd2..4dad325f28 100644 --- a/lily/include/auto-change-iterator.hh +++ b/lily/include/auto-change-iterator.hh @@ -17,18 +17,14 @@ class Auto_change_iterator : public Music_wrapper_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Auto_change_iterator (); protected: virtual void process (Moment); - - Array pending_pitch (Moment)const; private: - - Direction where_dir_; void change_to (Music_iterator* , String, String); }; diff --git a/lily/include/beam.hh b/lily/include/beam.hh index b06afc0e4e..e5f544b706 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -26,7 +26,10 @@ public: static void set_beaming (Grob*,Beaming_info_list *); static void set_stemlens (Grob*); static int get_beam_count (Grob*me); + static Real get_beam_translation (Grob*me); + static Real get_thickness (Grob*me); + static void connect_beams (Grob*me); DECLARE_SCHEME_CALLBACK (space_function, (SCM, SCM)); DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM)); diff --git a/lily/include/change-iterator.hh b/lily/include/change-iterator.hh index 65914db996..39e3f7a41d 100644 --- a/lily/include/change-iterator.hh +++ b/lily/include/change-iterator.hh @@ -19,7 +19,8 @@ public: VIRTUAL_COPY_CONS (Music_iterator); /* constructor is public */ virtual void process (Moment); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); + private: void error (String); }; diff --git a/lily/include/chord-tremolo-iterator.hh b/lily/include/chord-tremolo-iterator.hh index e9583bf704..de5344874a 100644 --- a/lily/include/chord-tremolo-iterator.hh +++ b/lily/include/chord-tremolo-iterator.hh @@ -16,17 +16,17 @@ class Chord_tremolo_iterator : public Music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Chord_tremolo_iterator (); Chord_tremolo_iterator (Chord_tremolo_iterator const & ); protected: - virtual ~Chord_tremolo_iterator (); + virtual void derived_mark () const; virtual Moment pending_moment () const; + virtual void do_quit(); virtual void construct_children () ; virtual bool ok () const; virtual void process (Moment) ; virtual Music_iterator *try_music_in_children (Music *) const; - private: Moment factor_; Music_iterator * child_iter_; diff --git a/lily/include/cxx-function-smob.hh b/lily/include/cxx-function-smob.hh deleted file mode 100644 index 9a99f19848..0000000000 --- a/lily/include/cxx-function-smob.hh +++ /dev/null @@ -1,21 +0,0 @@ -/* - cxx-function-smob.hh -- - source file of the GNU LilyPond music typesetter - - (c) 2000--2002 Han-Wen Nienhuys - - */ - -#ifndef CXX_FUNCT_SMOB_HH -#define CXX_FUNCT_SMOB_HH - -#include "lily-proto.hh" -#include "lily-guile.hh" - -typedef void * (*Cxx_function) (SCM param); -Cxx_function unsmob_cxx_function (SCM x); -SCM smobify_cxx_function (Cxx_function cb); - - -#endif /* CXX_FUNCT_SMOB_HH */ - diff --git a/lily/include/folded-repeat-iterator.hh b/lily/include/folded-repeat-iterator.hh index c5c087c94f..4768ba0b90 100644 --- a/lily/include/folded-repeat-iterator.hh +++ b/lily/include/folded-repeat-iterator.hh @@ -20,14 +20,14 @@ class Folded_repeat_iterator : public Music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Folded_repeat_iterator (Folded_repeat_iterator const &src); Folded_repeat_iterator (); - ~Folded_repeat_iterator (); - + virtual void derived_mark () const; virtual void construct_children (); virtual Moment pending_moment () const; + virtual void do_quit(); virtual bool ok () const; protected: diff --git a/lily/include/font-metric.hh b/lily/include/font-metric.hh index e9f5598ece..57cd47a75a 100644 --- a/lily/include/font-metric.hh +++ b/lily/include/font-metric.hh @@ -24,13 +24,15 @@ public: virtual int count () const; virtual Box get_char (int ascii) const; + virtual Molecule get_char_molecule (int ascii) const; virtual Box text_dimension (String) const; virtual Molecule find_by_name (String) const; - DECLARE_SMOBS (Font_metric,); private: Font_metric (Font_metric const&); // no copy. protected: + virtual void derived_mark () const; + Font_metric (); }; diff --git a/lily/include/global-translator.hh b/lily/include/global-translator.hh index c59cc3fb43..39d814747c 100644 --- a/lily/include/global-translator.hh +++ b/lily/include/global-translator.hh @@ -14,8 +14,8 @@ #include "moment.hh" #include "pqueue.hh" - -class Global_translator : public virtual Translator_group{ +class Global_translator : public virtual Translator_group +{ PQueue extra_mom_pq_; public: VIRTUAL_COPY_CONS (Translator); @@ -28,6 +28,9 @@ public: Moment sneaky_insert_extra_moment (Moment); void add_moment_to_process (Moment); void run_iterator_on_me (Music_iterator*); + + void apply_finalizations (); + void add_finalization (SCM); virtual Music_output *get_output (); virtual void prepare (Moment); diff --git a/lily/include/grace-iterator.hh b/lily/include/grace-iterator.hh index b44bc8c41b..f758bbd6f8 100644 --- a/lily/include/grace-iterator.hh +++ b/lily/include/grace-iterator.hh @@ -16,10 +16,8 @@ class Grace_iterator : public Music_wrapper_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - ~Grace_iterator (); - virtual void construct_children () ; virtual void process (Moment); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Moment pending_moment () const; }; diff --git a/lily/include/grob.hh b/lily/include/grob.hh index 8f11341b25..ebc46be195 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -107,7 +107,7 @@ public: virtual void do_break_processing (); virtual Grob *find_broken_piece (System*) const; virtual void discretionary_processing (); - virtual SCM do_derived_mark (); + virtual SCM do_derived_mark () const; Molecule * get_molecule () const; SCM get_uncached_molecule () const; diff --git a/lily/include/interpretation-context-handle.hh b/lily/include/interpretation-context-handle.hh index 0dbf9431a5..93786a5203 100644 --- a/lily/include/interpretation-context-handle.hh +++ b/lily/include/interpretation-context-handle.hh @@ -23,6 +23,7 @@ public: Interpretation_context_handle (Interpretation_context_handle const&); Translator_group * report_to () const; + void quit (); private: Translator_group * report_to_; void down (); diff --git a/lily/include/item.hh b/lily/include/item.hh index 58c9969b62..8a0fd0b4b7 100644 --- a/lily/include/item.hh +++ b/lily/include/item.hh @@ -44,7 +44,7 @@ public: protected: virtual void discretionary_processing (); void copy_breakable_items (); - virtual SCM do_derived_mark (); + virtual SCM do_derived_mark () const; }; diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index f72a67f5ec..e447afb5b1 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -58,7 +58,7 @@ inline SCM scm_c_make_vector (int k, SCM val) { } #define scm_c_define_gsubr scm_make_gsubr #define scm_c_eval_string(str) gh_eval_str ((char*)str) - +#define scm_remember_upto_here_1(s) scm_remember (&s) #define scm_gc_protect_object scm_protect_object #define scm_gc_unprotect_object scm_unprotect_object #define scm_list_n scm_listify @@ -105,6 +105,12 @@ SCM ly_deep_copy (SCM); SCM ly_truncate_list (int k, SCM l ); +/* + Unreliable on gcc2 + */ +// #define CACHE_SYMBOLS + + #if (__GNUC__ > 2) /* todo: should add check for x86 as well @@ -269,19 +275,28 @@ public:\ } _ ## name ## _scm_initter; \ /* end define */ -#define LY_DEFINE(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ -SCM FNAME ARGLIST ; \ +#define LY_DEFINE_WITHOUT_DECL(INITPREFIX, FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ SCM FNAME ## _proc;\ void \ -FNAME ## init ()\ +INITPREFIX ## init ()\ {\ FNAME ## _proc \ = scm_c_define_gsubr (PRIMNAME,REQ, OPT, VAR, (Scheme_function_unknown) FNAME);\ ly_add_function_documentation (PRIMNAME, #ARGLIST, DOCSTRING);\ }\ -ADD_SCM_INIT_FUNC (FNAME ## init_unique_prefix, FNAME ## init);\ +ADD_SCM_INIT_FUNC (INITPREFIX ## init_unique_prefix, INITPREFIX ## init);\ SCM \ FNAME ARGLIST\ +#define LY_DEFINE(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ +SCM FNAME ARGLIST ; \ +LY_DEFINE_WITHOUT_DECL(FNAME, FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) + + +#define LY_DEFINE_MEMBER_FUNCTION(CLASS, FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \ +SCM FNAME ARGLIST ; \ +LY_DEFINE_WITHOUT_DECL(CLASS ## FNAME, CLASS::FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) + + #endif /* LILY_GUILE_HH */ diff --git a/lily/include/lyric-combine-music-iterator.hh b/lily/include/lyric-combine-music-iterator.hh index 49251c0fe1..e85fc6ab63 100644 --- a/lily/include/lyric-combine-music-iterator.hh +++ b/lily/include/lyric-combine-music-iterator.hh @@ -19,16 +19,16 @@ public: VIRTUAL_COPY_CONS (Music_iterator); Lyric_combine_music_iterator (); Lyric_combine_music_iterator (Lyric_combine_music_iterator const&src); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); protected: virtual void construct_children (); virtual Moment pending_moment () const; + virtual void do_quit(); virtual void process (Moment); virtual Music_iterator *try_music_in_children (Music *) const; virtual bool ok () const; - virtual ~Lyric_combine_music_iterator (); - + virtual void derived_mark () const; private: bool get_busy_status ()const ; Music_iterator * music_iter_; diff --git a/lily/include/molecule.hh b/lily/include/molecule.hh index fd4833d71f..a1b887066f 100644 --- a/lily/include/molecule.hh +++ b/lily/include/molecule.hh @@ -89,7 +89,7 @@ public: DECLARE_UNSMOB(Molecule,molecule); -SCM fontify_atom (Font_metric*, SCM atom); +SCM fontify_atom (Font_metric const*, SCM atom); Molecule create_molecule (SCM brew_molecule); diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index 759a55abb7..e005bd60d3 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -15,7 +15,7 @@ #include "moment.hh" #include "virtual-methods.hh" #include "interpretation-context-handle.hh" -#include "cxx-function-smob.hh" +#include "smobs.hh" /** --- @@ -62,14 +62,15 @@ class Music_iterator protected: Moment music_length_; Moment start_mom_; + + DECLARE_SMOBS (Music_iterator,dummy); public: VIRTUAL_COPY_CONS (Music_iterator); - + Moment music_length_mom () const; Moment music_start_mom () const; Music_iterator (); Music_iterator (Music_iterator const&); - virtual ~Music_iterator (); /** Do the reporting. Will try MUSIC_L_ in its own translator first, @@ -87,61 +88,53 @@ public: /** Get an iterator matching the type of MUS, and use TRANS to find an accompanying translation unit */ - static Music_iterator* get_static_get_iterator (Music * mus); + static SCM get_static_get_iterator (Music * mus); void init_translator (Music *, Translator_group *); +void quit (); + virtual Moment pending_moment () const; virtual bool ok () const; virtual SCM get_pending_events (Moment until)const; virtual void process (Moment until); virtual void skip (Moment until); - + virtual void derived_mark ()const; + virtual void construct_children (); + /** Construct sub-iterators, and set the translator to report to. */ - virtual void construct_children (); - static SCM constructor_cxx_function; + + DECLARE_SCHEME_CALLBACK(constructor, ()); /** Get an iterator for MUS, inheriting the translation unit from THIS. */ - Music_iterator* get_iterator (Music *) const; + SCM get_iterator (Music *) const; virtual Music_iterator* try_music_in_children (Music *) const; Music * get_music () const; +protected: + virtual void do_quit(); private: Interpretation_context_handle handle_; Music * music_; }; -/* - implement Class::constructor, a SCM function that - returns an encapsulated factory function. - */ #define IMPLEMENT_CTOR_CALLBACK(Class) \ -static void * \ -Class ## _ctor (SCM) \ +LY_DEFINE_MEMBER_FUNCTION(Class,constructor, #Class "::constructor",\ + 0,0,0,\ + (),\ + "Construct a " #Class " music iterator")\ { \ - return new Class ; \ + SCM val = (new Class)->self_scm(); \ + scm_gc_unprotect_object (val);\ + return val ; \ } \ -SCM Class :: constructor_cxx_function;\ -void \ -Class ## _constructor_init () \ -{ \ - SCM s = smobify_cxx_function (& Class ## _ctor); \ - scm_permanent_object (s);\ - gh_define (#Class "::constructor", s);\ - Class :: constructor_cxx_function = s;\ -}\ -ADD_SCM_INIT_FUNC (Class ## _ctor_init, Class ## _constructor_init); - - - - - +DECLARE_UNSMOB(Music_iterator, iterator); #endif // MUSIC_ITERATOR_HH diff --git a/lily/include/music-wrapper-iterator.hh b/lily/include/music-wrapper-iterator.hh index ad031f588d..2d985372e8 100644 --- a/lily/include/music-wrapper-iterator.hh +++ b/lily/include/music-wrapper-iterator.hh @@ -22,13 +22,14 @@ class Music_wrapper_iterator : public Music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Music_wrapper_iterator (); Music_wrapper_iterator (Music_wrapper_iterator const&); - ~Music_wrapper_iterator (); + virtual void derived_mark () const; virtual void construct_children () ; virtual Moment pending_moment () const; + virtual void do_quit(); virtual bool ok () const; virtual SCM get_pending_events (Moment)const; virtual void skip (Moment); diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index f7f62efc35..d9b67bb9b6 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -75,6 +75,12 @@ protected: virtual bool do_equal_b (Request const*) const; }; +class String_number_req : public Script_req +{ +protected: + VIRTUAL_COPY_CONS (Music); + virtual bool do_equal_b (Request const*) const; +}; /// request which has some kind of pitch struct Melodic_req :virtual Request diff --git a/lily/include/output-property-music-iterator.hh b/lily/include/output-property-music-iterator.hh index 6677fb283e..b9cf40b015 100644 --- a/lily/include/output-property-music-iterator.hh +++ b/lily/include/output-property-music-iterator.hh @@ -15,7 +15,7 @@ class Output_property_music_iterator : public Simple_music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); /* construction */ protected: virtual void process (Moment); diff --git a/lily/include/part-combine-music-iterator.hh b/lily/include/part-combine-music-iterator.hh index 713c333048..fa88a2dc5e 100644 --- a/lily/include/part-combine-music-iterator.hh +++ b/lily/include/part-combine-music-iterator.hh @@ -19,12 +19,13 @@ public: Part_combine_music_iterator (); enum State { UNKNOWN, UNRELATED=1, SOLO1=2, SOLO2=4, UNIRHYTHM=8, UNISON=16, UNISILENCE=32, SPLIT_INTERVAL=64 }; - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); protected: - virtual ~Part_combine_music_iterator (); + virtual void derived_mark () const; Part_combine_music_iterator (Part_combine_music_iterator const &); virtual void construct_children (); virtual Moment pending_moment () const; + virtual void do_quit(); virtual void process (Moment); virtual SCM get_pending_events (Moment)const; virtual Music_iterator *try_music_in_children (Music *) const; diff --git a/lily/include/percent-repeat-iterator.hh b/lily/include/percent-repeat-iterator.hh index c73e995cb9..a2c420e01f 100644 --- a/lily/include/percent-repeat-iterator.hh +++ b/lily/include/percent-repeat-iterator.hh @@ -16,12 +16,13 @@ class Percent_repeat_iterator : public Music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Percent_repeat_iterator (); Percent_repeat_iterator (Percent_repeat_iterator const & ); protected: - virtual ~Percent_repeat_iterator (); + virtual void derived_mark () const; virtual Moment pending_moment () const; + virtual void do_quit(); virtual void construct_children () ; virtual bool ok () const; virtual void process (Moment) ; diff --git a/lily/include/property-iterator.hh b/lily/include/property-iterator.hh index 9dd3b2cce0..50485ed15c 100644 --- a/lily/include/property-iterator.hh +++ b/lily/include/property-iterator.hh @@ -22,9 +22,11 @@ class Property_iterator : public Simple_music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; - /* construction */ + DECLARE_SCHEME_CALLBACK(constructor, ()); + DECLARE_SCHEME_CALLBACK(once_finalization, (SCM, SCM )); + protected: + virtual void do_quit(); virtual void process (Moment); }; @@ -38,8 +40,7 @@ class Property_unset_iterator : public Simple_music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; - /* construction */ + DECLARE_SCHEME_CALLBACK(constructor, ()); protected: virtual void process (Moment); }; @@ -48,19 +49,19 @@ class Push_property_iterator : public Simple_music_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); + DECLARE_SCHEME_CALLBACK(once_finalization, (SCM, SCM)); protected: - /* construction */ virtual void process (Moment); + virtual void do_quit(); }; class Pop_property_iterator : public Simple_music_iterator { public: - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); VIRTUAL_COPY_CONS (Music_iterator); protected: - /* construction */ virtual void process (Moment); }; diff --git a/lily/include/request-chord-iterator.hh b/lily/include/request-chord-iterator.hh index 645b1c200b..b9eabca0da 100644 --- a/lily/include/request-chord-iterator.hh +++ b/lily/include/request-chord-iterator.hh @@ -31,7 +31,7 @@ class Request_chord_iterator : public Simple_music_iterator enum { NONE_DONE, START_DONE, END_DONE } status_; public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Request_chord_iterator (); Request_chord_iterator (Request_chord_iterator const&); diff --git a/lily/include/sequential-iterator.hh b/lily/include/sequential-iterator.hh index 09159dac36..efdc5634ea 100644 --- a/lily/include/sequential-iterator.hh +++ b/lily/include/sequential-iterator.hh @@ -54,13 +54,14 @@ public: Grace_fixup * grace_fixups_; VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Sequential_iterator (); Sequential_iterator (Sequential_iterator const&); - virtual ~Sequential_iterator (); + virtual void derived_mark () const; virtual void construct_children (); virtual Moment pending_moment () const; + virtual void do_quit(); virtual bool ok () const; virtual void skip (Moment); virtual SCM get_pending_events (Moment)const; @@ -72,7 +73,7 @@ protected: protected: Moment here_mom_; Music_iterator * iter_; - Protected_scm list_; + SCM list_; SCM cursor_; virtual void next_element (bool side_effect); diff --git a/lily/include/sequential-music-iterator.hh b/lily/include/sequential-music-iterator.hh index 31d4220927..b327fcfa96 100644 --- a/lily/include/sequential-music-iterator.hh +++ b/lily/include/sequential-music-iterator.hh @@ -19,7 +19,7 @@ class Sequential_music_iterator : public Sequential_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); private: virtual SCM get_music_list()const; virtual void descend_to_child (); diff --git a/lily/include/simple-music-iterator.hh b/lily/include/simple-music-iterator.hh index c969a3ba95..d154b14461 100644 --- a/lily/include/simple-music-iterator.hh +++ b/lily/include/simple-music-iterator.hh @@ -23,12 +23,13 @@ protected: Moment last_processed_mom_; public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); Simple_music_iterator (); Simple_music_iterator (Simple_music_iterator const &); virtual void process (Moment); virtual bool ok ()const; virtual Moment pending_moment ()const; + virtual void skip (Moment); }; diff --git a/lily/include/simultaneous-music-iterator.hh b/lily/include/simultaneous-music-iterator.hh index 8d25491da1..f922492dea 100644 --- a/lily/include/simultaneous-music-iterator.hh +++ b/lily/include/simultaneous-music-iterator.hh @@ -11,7 +11,6 @@ #define SIMULTANEOUS_MUSIC_ITERATOR_HH #include "music-iterator.hh" -#include "cons.hh" class Simultaneous_music_iterator : public Music_iterator { @@ -19,15 +18,15 @@ public: VIRTUAL_COPY_CONS (Music_iterator); Simultaneous_music_iterator (); Simultaneous_music_iterator (Simultaneous_music_iterator const&); - virtual ~Simultaneous_music_iterator (); - static SCM constructor_cxx_function; + virtual void derived_mark () const; + DECLARE_SCHEME_CALLBACK(constructor, ()); /// make a new context for every child. bool separate_contexts_b_; - int cursor_; virtual void construct_children (); virtual Moment pending_moment () const; + virtual void do_quit(); virtual bool ok () const; virtual SCM get_pending_events (Moment)const; virtual void skip (Moment); @@ -37,7 +36,7 @@ protected: virtual Music_iterator *try_music_in_children (Music *) const; private: - Cons_list children_p_list_; + SCM children_list_; }; #endif // SIMULTANEOUS_MUSIC_ITERATOR_HH diff --git a/lily/include/source-file.hh b/lily/include/source-file.hh index b587a594fd..fff428f8ac 100644 --- a/lily/include/source-file.hh +++ b/lily/include/source-file.hh @@ -8,6 +8,7 @@ #include "string.hh" #include "interval.hh" #include "protected-scm.hh" +#include "parray.hh" /** class for reading and mapping a file. @@ -50,13 +51,16 @@ public: int get_char (char const* pos_str0) const; /* - DOCUMENT-ME + JUNKME. + + This thing doubles as a file-storage/file-iterator object. */ char const* pos_str0_; SCM get_port()const { return str_port_; } private: String name_string_; + Link_array newline_locations_; std::istream* istream_; char * contents_str0_; int length_; diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index c146182f17..e56560744e 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -55,7 +55,7 @@ public: static int compare (Spanner * const &,Spanner * const &); virtual Grob* find_broken_piece (System*) const; - virtual SCM do_derived_mark (); + virtual SCM do_derived_mark () const; static bool has_interface (Grob*); virtual System *get_system () const; protected: diff --git a/lily/include/time-scaled-music-iterator.hh b/lily/include/time-scaled-music-iterator.hh index 2ddcdf298c..2271908759 100644 --- a/lily/include/time-scaled-music-iterator.hh +++ b/lily/include/time-scaled-music-iterator.hh @@ -16,7 +16,7 @@ class Time_scaled_music_iterator : public Music_wrapper_iterator { public: VIRTUAL_COPY_CONS (Music_iterator); - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); /* construction */ protected: virtual void process (Moment); diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 97784a82a9..4b27559aa9 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -66,7 +66,9 @@ public: SCM properties_scm_; DECLARE_SMOBS (Translator, dummy); + public: + Global_translator * top_translator () const; TRANSLATOR_DECLARATIONS(Translator); /** try to fit the request in this engraver diff --git a/lily/include/virtual-font-metric.hh b/lily/include/virtual-font-metric.hh new file mode 100644 index 0000000000..13befc1c87 --- /dev/null +++ b/lily/include/virtual-font-metric.hh @@ -0,0 +1,34 @@ + +/* +virtual-font-metric.hh -- declare Virtual_font_metric + +source file of the GNU LilyPond music typesetter + +(c) 2002 Han-Wen Nienhuys + + */ + +#ifndef VIRTUAL_FONT_METRIC_HH +#define VIRTUAL_FONT_METRIC_HH + +#include "font-metric.hh" + +class Virtual_font_metric : public Font_metric +{ + SCM font_list_; +public: + Virtual_font_metric (SCM namelist, Real, Paper_def*); + + virtual int count () const; + virtual Box get_char (int ascii) const; + virtual Molecule get_char_molecule (int ascii) const; + + virtual Molecule find_by_name (String) const; + +protected: + virtual void derived_mark () const; +}; + + +#endif /* VIRTUAL_FONT_METRIC_HH */ + diff --git a/lily/interpretation-context-handle.cc b/lily/interpretation-context-handle.cc index 3c1e38153a..7b0afb6a1e 100644 --- a/lily/interpretation-context-handle.cc +++ b/lily/interpretation-context-handle.cc @@ -31,8 +31,14 @@ Interpretation_context_handle::clone () const Interpretation_context_handle::~Interpretation_context_handle () { - if (report_to_) - down (); + /* + Don't do + + if (report_to_) + down (); + + with GC, this is asynchronous. + */ } void @@ -49,10 +55,20 @@ Interpretation_context_handle::down () report_to_ = 0; } +void +Interpretation_context_handle::quit () +{ + if (report_to_) + { + report_to_->iterator_count_ --; + report_to_ = 0; + } +} + bool Interpretation_context_handle::try_music (Music *m) { - return report_to_->try_music (m); + return report_to_->try_music (m); } void @@ -75,6 +91,7 @@ Interpretation_context_handle::set_translator (Translator_group*trans) Translator_group* Interpretation_context_handle::report_to ()const { + return report_to_; } diff --git a/lily/item.cc b/lily/item.cc index 12d4d48a47..77083104e0 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -174,7 +174,7 @@ Item::handle_prebroken_dependencies () } SCM -Item::do_derived_mark () +Item::do_derived_mark ()const { if (broken_to_drul_[LEFT]) scm_gc_mark (broken_to_drul_[LEFT]->self_scm ()); diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc index 7b3c9ab3a1..81946e2769 100644 --- a/lily/key-signature-interface.cc +++ b/lily/key-signature-interface.cc @@ -17,7 +17,7 @@ #include "lookup.hh" #include "lily-guile.hh" #include "lily-proto.hh" - +#include "accidental-interface.hh" struct Key_signature_interface { @@ -99,7 +99,7 @@ Key_signature_interface::brew_molecule (SCM smob) Grob*me =unsmob_grob (smob); Real inter = Staff_symbol_referencer::staff_space (me)/2.0; - + SCM scm_style = me->get_grob_property ("style"); String style; if (gh_symbol_p (scm_style)) @@ -115,25 +115,34 @@ Key_signature_interface::brew_molecule (SCM smob) Molecule mol; SCM c0s = me->get_grob_property ("c0-position"); - int c0p=0; + int c0p = 0; if (gh_number_p (c0s)) - c0p = gh_scm2int (c0s); + c0p = gh_scm2int (c0s); /* SCM lists are stacks, so we work from right to left, ending with the cancellation signature. */ + Font_metric *fm = Font_interface::get_default_font (me); for (SCM s = newas; gh_pair_p (s); s = ly_cdr (s)) { - SCM what = ly_caar (s); - int alter = gh_scm2int (ly_cdar (s)); - int pos = alteration_pos (what, alter, c0p); - - Molecule m = Font_interface::get_default_font (me)-> - find_by_name (String ("accidentals-") + style + to_string (alter)); - m.translate_axis (pos * inter, Y_AXIS); - mol.add_at_edge (X_AXIS, LEFT, m, 0); + int alteration = gh_scm2int (ly_cdar (s)); + String font_char = + Accidental_interface::get_fontcharname (style, alteration); + Molecule acc (fm->find_by_name ("accidentals-" + font_char)); + + if (acc.empty_b()) + { + me->warning (_f ("accidental `%s' not found", font_char)); + } + else + { + SCM what = ly_caar (s); + int pos = alteration_pos (what, alteration, c0p); + acc.translate_axis (pos * inter, Y_AXIS); + mol.add_at_edge (X_AXIS, LEFT, acc, 0); + } } Item *it = dynamic_cast (me) ; @@ -163,8 +172,8 @@ Key_signature_interface::brew_molecule (SCM smob) || ly_cdr (found) != ly_cdar (old)) { SCM what = ly_caar (old); - int alter = 0; - int pos = alteration_pos (what, alter, c0p); + int alteration = 0; + int pos = alteration_pos (what, alteration, c0p); Molecule m = natural; m.translate_axis (pos* inter, Y_AXIS); diff --git a/lily/kpath.cc b/lily/kpath.cc index 9579aae41f..a8a5211437 100644 --- a/lily/kpath.cc +++ b/lily/kpath.cc @@ -9,6 +9,18 @@ #include #include +/* + +The problem, as far as I can tell, is that MacOS X has its getopt +prototype in , while I think other operating systems have it +in other places. is included by kpathsea.h, so you end up +renaming both conflicting prototypes to YAKLUDGE. + +I found a somewhat more elegant patch for this: Just #include + before defining YAKLUDGE. + +*/ +#include #include "config.h" #define popen REALLYUGLYKLUDGE diff --git a/lily/lexer.ll b/lily/lexer.ll index 78b43638f2..48d8c35640 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -113,6 +113,7 @@ WORD {A}{AN}* ALPHAWORD {A}+ DIGIT {N} UNSIGNED {N}+ +E_UNSIGNED \\{N}+ FRACTION {N}+\/{N}+ INT -?{UNSIGNED} REAL ({INT}\.{N}*)|(-?\.{N}+) @@ -303,6 +304,10 @@ HYPHEN -- yylval.i = String_convert::dec2int (String (YYText ())); return UNSIGNED; } + {E_UNSIGNED} { + yylval.i = String_convert::dec2int (String (YYText () +1)); + return E_UNSIGNED; + } \" { start_quote (); @@ -398,6 +403,9 @@ HYPHEN -- \/\+ { return CHORD_BASS; } + \/ { + return CHORD_SLASH; + } \^ { return CHORD_CARET; } @@ -435,6 +443,7 @@ HYPHEN -- return UNSIGNED; } + [{}] { return YYText ()[0]; @@ -471,6 +480,7 @@ HYPHEN -- return E_TILDE; case '\\': return E_BACKSLASH; + default: return E_CHAR; } diff --git a/lily/ligature-head.cc b/lily/ligature-head.cc index ee1690ac4a..8959988fef 100644 --- a/lily/ligature-head.cc +++ b/lily/ligature-head.cc @@ -16,14 +16,6 @@ * "rhythmic-head-interface" in the interfaces list. Otherwise, text * scripts (such as fermata) are horizontally aligned with the end of * the ligature rather than with the associated head. Why? - * - * TODO: if properties font-family and style are not set properly - * (e.g. by a user erronously setting font-family to #'music), - * lilypond currently crashes with the message: "lilypond: - * ../flower/include/interval.hh:28: Real Interval_t::center() - * const: Assertion `!empty_b ()' failed.". The code of this class - * should be clever enough to foresee a potential crash, print a - * warning, and supply sensible default values that avoid the crash. */ MAKE_SCHEME_CALLBACK (Ligature_head,brew_molecule,1); SCM diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 2784781400..7a08f7d3f3 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -13,6 +13,20 @@ #include #include /* isinf */ #include /* strdup, strchr */ + + +#include "lily-proto.hh" + +/* macosx fix: + + + source-file.hh includes cmath which undefines isinf and isnan +*/ +inline int my_isinf(Real r) { return isinf(r); } +inline int my_isnan(Real r) { return isnan(r); } + + + #include "libc-extension.hh" #include "lily-guile.hh" #include "main.hh" @@ -27,28 +41,6 @@ // #define TEST_GC -#ifdef PARANOID -#include -#undef gh_pair_p -bool -ly_pair_p (SCM x) -{ -#if 0 - assert (!SCM_CONSP (x) || (*(scm_t_bits*) SCM2PTR (SCM_CAR (x))) != scm_tc_free_cell); - assert (!SCM_CONSP (x) || (*(scm_t_bits*) SCM2PTR (SCM_CDR (x))) != scm_tc_free_cell); -#elif GUILE_MINOR_VERSION < 5 - assert (!SCM_CONSP (x) || !SCM_FREEP (SCM_CAR (x))); - assert (!SCM_CONSP (x) || !SCM_FREEP (SCM_CDR (x))); -#else - assert (!SCM_CONSP (x) || !SCM_FREE_CELL_P (SCM_CAR (x))); - assert (!SCM_CONSP (x) || !SCM_FREE_CELL_P (SCM_CDR (x))); -#endif - //return SCM_NFALSEP (scm_pair_p (x)); - return gh_pair_p (x); -} -#define gh_pair_p ly_pair_p -#endif - SCM ly_last (SCM list) { @@ -106,7 +98,7 @@ gulp_file_to_string (String fn) int n; char * str = gulp_file (s, &n); String result (str); - delete str; + delete[] str; if (verbose_global_b) progress_indication ("]"); @@ -201,8 +193,6 @@ void add_scm_init_func (void (*f) ()) scm_init_funcs_->push (f); } -extern void init_cxx_function_smobs (); - void ly_init_guile () @@ -210,7 +200,6 @@ ly_init_guile () SCM last_mod = scm_current_module (); scm_set_current_module (scm_c_resolve_module ("guile")); - init_cxx_function_smobs (); for (int i=scm_init_funcs_->size () ; i--;) (scm_init_funcs_->elem (i)) (); @@ -319,11 +308,6 @@ ly_scm2offset (SCM s) gh_scm2double (ly_cdr (s))); } - -/* - convert without too many decimals, and leave a space at the end. - */ - LY_DEFINE(ly_number2string, "ly-number->string", 1, 0,0, (SCM s), @@ -339,7 +323,7 @@ leaves a space at the end. { Real r (gh_scm2double (s)); - if (isinf (r) || isnan (r)) + if (my_isinf (r) || my_isnan (r)) { programming_error ("Infinity or NaN encountered while converting Real number; setting to zero."); r = 0.0; @@ -359,7 +343,7 @@ leaves a space at the end. Undef this to see if GUILE GC is causing too many swaps. */ -// #define TEST_GC +//#define TEST_GC #ifdef TEST_GC #include diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index 75a7d89e68..127945b3d6 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -31,9 +31,9 @@ Lyric_combine_music_iterator::Lyric_combine_music_iterator () melisma_playing_req = new Melisma_playing_req; melisma_stop_req = new Melisma_req; melisma_start_req = new Melisma_req; + melisma_start_req->set_span_dir (START); + melisma_stop_req->set_span_dir (STOP); } - melisma_start_req->set_span_dir (START); - melisma_stop_req->set_span_dir (STOP); music_iter_ =0; lyric_iter_ =0; @@ -52,14 +52,22 @@ Lyric_combine_music_iterator::ok () const return music_iter_->ok (); } +void +Lyric_combine_music_iterator::derived_mark()const +{ + if (music_iter_) + scm_gc_mark (music_iter_->self_scm()); + if (lyric_iter_) + scm_gc_mark (lyric_iter_->self_scm()); +} void Lyric_combine_music_iterator::construct_children () { Lyric_combine_music const * m = dynamic_cast (get_music ()); - music_iter_ = get_iterator (m->get_music ()); - lyric_iter_ = get_iterator (m->get_lyrics ()); + music_iter_ = unsmob_iterator (get_iterator (m->get_music ())); + lyric_iter_ = unsmob_iterator (get_iterator (m->get_lyrics ())); } bool @@ -102,21 +110,13 @@ Lyric_combine_music_iterator::process (Moment m) music_iter_->process (m); - if ( get_busy_status ()) + if (get_busy_status ()) { bool melisma_b = try_music (melisma_playing_req); if (!melisma_b) { if (lyric_iter_->ok ()) { - // FIXME -#if 0 // devise a new way for this - if (melisma_b && !melisma_started_b_) - lyric_iter_->try_music (melisma_start_req); - else if (melisma_started_b_) - lyric_iter_->try_music (melisma_stop_req); -#endif - Moment m= lyric_iter_->pending_moment (); lyric_iter_->process (m); } @@ -124,18 +124,25 @@ Lyric_combine_music_iterator::process (Moment m) } } - -Lyric_combine_music_iterator::~Lyric_combine_music_iterator () +void +Lyric_combine_music_iterator::do_quit () { - delete lyric_iter_; - delete music_iter_; + if (music_iter_) + music_iter_->quit(); + if (lyric_iter_) + lyric_iter_->quit(); + } - Lyric_combine_music_iterator::Lyric_combine_music_iterator (Lyric_combine_music_iterator const & src) : Music_iterator (src) { lyric_iter_ = src.lyric_iter_ ? src.lyric_iter_->clone () : 0; music_iter_ = src.music_iter_ ? src.music_iter_->clone () : 0; + + if (lyric_iter_) + scm_gc_unprotect_object (lyric_iter_->self_scm()); + if (music_iter_) + scm_gc_unprotect_object (music_iter_->self_scm()); } Music_iterator* diff --git a/lily/lyric-combine-music.cc b/lily/lyric-combine-music.cc index 861f2f1886..8e36faa674 100644 --- a/lily/lyric-combine-music.cc +++ b/lily/lyric-combine-music.cc @@ -15,7 +15,7 @@ Lyric_combine_music::Lyric_combine_music (SCM l) : Music (l) { set_mus_property ("iterator-ctor", - Lyric_combine_music_iterator::constructor_cxx_function); + Lyric_combine_music_iterator::constructor_proc); } diff --git a/lily/main.cc b/lily/main.cc index 3375142449..dd856b5a81 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -263,7 +263,7 @@ setup_paths () for (char **s = suffixes; *s; s++) { String p = prefix_directory[i] + to_string ('/') + String (*s); - global_path.add (p); + global_path.prepend (p); #if !KPATHSEA /* Urg: GNU make's $ (word) index starts at 1 */ diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index 999ea817a4..3c8637f04a 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -426,24 +426,9 @@ Mensural_ligature_engraver::propagate_properties () gh_scm2double (thickness_scm) : 1.4; thickness *= finished_ligature_->get_paper ()->get_var ("linethickness"); - /* - * FIXME: Since character "noteheads--1mensural" is defined in - * parmesan font only, the right-hand expression in the - * following assignment evaluates to a width of 0.0, in case - * font-family of finished_ligature_ is _not_ set to "ancient" - * (by default, it is; see grob properties of MensuralLigature - * in scm/grob-description.scm). This may arise severe problems - * in the future when switching between fonts (e.g. mensural - * versus neo-mensural). - */ Real head_width = Font_interface::get_default_font (finished_ligature_)-> find_by_name ("noteheads--1mensural").extent (X_AXIS).length (); - if (head_width == 0.0) - { - programming_error ("Mensural_ligature_engraver: failed evaluating head_width (most probably a font-family selection problem)"); - } - SCM flexa_width_scm = finished_ligature_->get_grob_property ("flexa-width"); Real flexa_width = (flexa_width_scm != SCM_EOL) ? diff --git a/lily/molecule.cc b/lily/molecule.cc index 1a5efa8c76..15cc8f2f07 100644 --- a/lily/molecule.cc +++ b/lily/molecule.cc @@ -262,7 +262,7 @@ dumped in the output file.") } SCM -fontify_atom (Font_metric * met, SCM f) +fontify_atom (Font_metric const * met, SCM f) { if (f == SCM_EOL) return f; diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index dcb596a117..a6d2a721a4 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -17,8 +17,12 @@ #include "simple-music-iterator.hh" #include "context-specced-music.hh" +#include "ly-smobs.icc" + Music_iterator::Music_iterator () { + music_ = 0; + smobify_self (); } Music_iterator::Music_iterator (Music_iterator const& src) @@ -27,22 +31,19 @@ Music_iterator::Music_iterator (Music_iterator const& src) music_ = src.music_; music_length_ = src.music_length_; start_mom_ = src.start_mom_; + smobify_self (); } Music_iterator::~Music_iterator () { } - - - Translator_group* Music_iterator::report_to () const { return handle_.report_to (); } - void Music_iterator::set_translator (Translator_group *trans) { @@ -82,30 +83,34 @@ Music_iterator::get_pending_events (Moment)const return SCM_EOL; } -Music_iterator* +SCM Music_iterator::get_static_get_iterator (Music *m) { Music_iterator * p =0; SCM ctor = m->get_mus_property ("iterator-ctor") ; - if (unsmob_cxx_function (ctor)) + SCM iter = SCM_EOL; + if (gh_procedure_p (ctor)) { - Cxx_function f = unsmob_cxx_function (ctor); - - p = (Music_iterator*) (*f) (SCM_EOL); + iter = gh_call0 (ctor); + p = unsmob_iterator (iter); } - else if (dynamic_cast (m)) - p = new Music_wrapper_iterator; else { - p = new Simple_music_iterator ; + if (dynamic_cast (m)) + p = new Music_wrapper_iterator; + else + p = new Simple_music_iterator; + + iter = p->self_scm(); + scm_gc_unprotect_object (iter); } p->music_ = m; assert (m); p->music_length_ = m->length_mom (); p->start_mom_ = m->start_mom (); - return p; + return iter; } @@ -113,7 +118,6 @@ Moment Music_iterator::music_length_mom () const { return music_length_; - } Moment @@ -151,14 +155,16 @@ Music_iterator::init_translator (Music *m, Translator_group *report) } -Music_iterator* +SCM Music_iterator::get_iterator (Music *m) const { - Music_iterator*p = get_static_get_iterator (m); + SCM ip = get_static_get_iterator (m); + Music_iterator*p = unsmob_iterator (ip); + p->init_translator (m, report_to ()); p->construct_children (); - return p; + return ip; } /* @@ -166,7 +172,6 @@ Music_iterator::get_iterator (Music *m) const Iterator::try_music */ - Music_iterator* Music_iterator::try_music (Music *m) const { @@ -190,3 +195,52 @@ Music_iterator::get_music () const { return music_; } + +/****************************************************************/ + +IMPLEMENT_TYPE_P (Music_iterator, "ly-iterator?"); +IMPLEMENT_SMOBS(Music_iterator); +IMPLEMENT_DEFAULT_EQUAL_P(Music_iterator); + +SCM +Music_iterator::mark_smob (SCM smob) +{ + Music_iterator * mus = (Music_iterator *)SCM_CELL_WORD_1 (smob); + + mus->derived_mark (); + /* + Careful with GC, although we intend the following as pointers + only, we _must_ mark them. + */ + if (mus->report_to()) + scm_gc_mark (mus->report_to()->self_scm()); + if (mus->music_) + scm_gc_mark (mus->music_->self_scm()); + + + return SCM_EOL; +} + +int +Music_iterator::print_smob (SCM , SCM port, scm_print_state*) +{ + scm_puts ("#", port); + return 1; +} + +void +Music_iterator::derived_mark()const +{ +} + +void +Music_iterator::quit () +{ + do_quit (); + handle_.quit (); +} + +void +Music_iterator::do_quit() +{ +} diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc index 4980c9344f..7798d65eaf 100644 --- a/lily/music-wrapper-iterator.cc +++ b/lily/music-wrapper-iterator.cc @@ -18,23 +18,30 @@ Music_wrapper_iterator::Music_wrapper_iterator () Music_wrapper_iterator::Music_wrapper_iterator (Music_wrapper_iterator const &src) : Music_iterator (src) { - if (src.child_iter_) - child_iter_ = src.child_iter_->clone (); - else - child_iter_ = 0; + child_iter_ = (src.child_iter_) ? src.child_iter_->clone () : 0; + if (child_iter_) + scm_gc_unprotect_object (child_iter_->self_scm()); } -Music_wrapper_iterator::~Music_wrapper_iterator () +void +Music_wrapper_iterator::do_quit() +{ + child_iter_->quit(); +} + +void +Music_wrapper_iterator::derived_mark()const { - delete child_iter_; + if (child_iter_) + scm_gc_mark (child_iter_->self_scm()); } void Music_wrapper_iterator::construct_children () { - child_iter_ = - get_iterator (dynamic_cast (get_music ())->element ()); + Music * m = dynamic_cast (get_music ())-> element(); + child_iter_ = unsmob_iterator (get_iterator (m)); } bool diff --git a/lily/music.cc b/lily/music.cc index 4eb6a68514..40d913266a 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -34,6 +34,7 @@ ly_deep_mus_copy (SCM m) Music::Music () { + self_scm_ = SCM_EOL; immutable_property_alist_ = SCM_EOL; mutable_property_alist_ = SCM_EOL; smobify_self (); @@ -43,6 +44,7 @@ Music::Music (Music const &m) { immutable_property_alist_ = m.immutable_property_alist_; mutable_property_alist_ = SCM_EOL; + self_scm_ = SCM_EOL; /* First we smobify_self, then we copy over the stuff. If we don't, @@ -57,6 +59,7 @@ Music::Music (Music const &m) Music::Music (SCM l) { + self_scm_ = SCM_EOL; immutable_property_alist_ = l; mutable_property_alist_ = SCM_EOL; smobify_self (); diff --git a/lily/musical-request.cc b/lily/musical-request.cc index ac24a4c917..c4a58d0ed2 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -85,6 +85,15 @@ Text_script_req::do_equal_b (Request const* r) const t->get_mus_property ("text")); } +bool +String_number_req::do_equal_b (Request const* r) const +{ + String_number_req const* s = dynamic_cast (r); + return s && gh_equal_p (get_mus_property ("string"), + s->get_mus_property ("string")); +} + + bool Articulation_req::do_equal_b (Request const* r) const { @@ -95,5 +104,4 @@ Articulation_req::do_equal_b (Request const* r) const && get_direction () == a->get_direction (); } - - +ADD_MUSIC(String_number_req); diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index cff5ae13e6..48005225d1 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -58,6 +58,7 @@ static Keyword_ent the_key_tab[]={ {"lyrics", LYRICS}, {"key", KEY}, {"mark", MARK}, + {"once", ONCE}, {"pitch", PITCH}, {"time", TIME_T}, {"times", TIMES}, diff --git a/lily/note-head.cc b/lily/note-head.cc index 4b2596c298..16c58ebaea 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -103,7 +103,7 @@ Note_head::brew_ledger_lines (Grob *me, } Molecule -internal_brew_molecule (Grob *me, bool ledger_take_space) +internal_brew_molecule (Grob *me, bool ledger_take_space) { SCM style = me->get_grob_property ("style"); if (!gh_symbol_p (style)) @@ -120,20 +120,16 @@ internal_brew_molecule (Grob *me, bool ledger_take_space) SCM exp = scm_list_n (ly_symbol2scm ("find-notehead-symbol"), log, ly_quote_scm (style), SCM_UNDEFINED); - SCM scm_pair = scm_primitive_eval (exp); - SCM scm_font_char = ly_car (scm_pair); - SCM scm_font_family = ly_cdr (scm_pair); + SCM scm_font_char = scm_primitive_eval (exp); String font_char = "noteheads-" + ly_scm2string (scm_font_char); - String font_family = ly_scm2string (scm_font_family); - - me->set_grob_property("font-family", ly_symbol2scm (font_family.to_str0 ())); - Molecule out = - Font_interface::get_default_font (me)->find_by_name (font_char); - if (out.empty_b()) - { - warning (_f("Symbol not found, ", font_char.to_str0())); + + Font_metric * fm = Font_interface::get_default_font (me); + Molecule out = fm->find_by_name (font_char); + if (out.empty_b()) + { + me->warning (_f ("note head `%s' not found", font_char.to_str0 ())); } - + int interspaces = Staff_symbol_referencer::line_count (me)-1; int pos = (int)rint (Staff_symbol_referencer::get_position (me)); if (abs (pos) - interspaces > 1) @@ -254,7 +250,6 @@ Note_head::stem_attachment_coordinate (Grob *me, Axis a) return gh_number_p (result) ? gh_scm2double (result) : 0.0; } - int Note_head::get_balltype (Grob*me) { diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc index e7256e8bbe..7964a2966e 100644 --- a/lily/note-spacing.cc +++ b/lily/note-spacing.cc @@ -66,6 +66,10 @@ Note_spacing::get_spacing (Grob *me, Item* right_col, if (!g) g = Note_column::first_head (it); + /* + Ugh. If Stem is switched off, we don't know what the + first note head will be. + */ if (g) left_head_wid = g->extent(it_col, X_AXIS); } @@ -102,7 +106,8 @@ Note_spacing::get_spacing (Grob *me, Item* right_col, */ *fixed = left_head_wid.empty_b () ? increment : left_head_wid[RIGHT]; *space = (base_space - increment) + *fixed + - (extents[LEFT][RIGHT] - left_head_wid[RIGHT])/ 2; + (extents[LEFT][RIGHT] + - (left_head_wid.empty_b () ? 0.0 : left_head_wid[RIGHT]))/ 2; ; if (*space - *fixed < 2 * ((- extents[RIGHT][LEFT]) >? 0)) @@ -233,7 +238,7 @@ Note_spacing::stem_dir_correction (Grob*me, Item * rcolumn, Grob *stem = Note_column::get_stem (it); - if (!stem) + if (!stem || !stem->live ()) { if (d == RIGHT && Separation_item::has_interface (it)) { diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index 2c494b8317..17b025423c 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -40,7 +40,7 @@ bool Output_property_engraver::try_music (Music* m) { if (m->get_mus_property ("iterator-ctor") == - Output_property_music_iterator::constructor_cxx_function) + Output_property_music_iterator::constructor_proc) { props_.push (m); return true; diff --git a/lily/paper-def.cc b/lily/paper-def.cc index e00444cf5d..f6bf6ec19b 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -6,8 +6,10 @@ (c) 1997--2002 Han-Wen Nienhuys */ + #include +#include "virtual-font-metric.hh" #include "all-font-metrics.hh" #include "string.hh" #include "misc.hh" @@ -133,6 +135,8 @@ Paper_def::get_paper_outputter () /* todo: use symbols and hashtable idx? + + */ Font_metric * Paper_def::find_font (SCM fn, Real m) @@ -143,19 +147,31 @@ Paper_def::find_font (SCM fn, Real m) if (gh_pair_p (met)) return unsmob_metrics (ly_cdr (met)); - SCM ssc; - if (variable_tab_->try_retrieve (ly_symbol2scm ("outputscale"), &ssc)) + /* + Hmm. We're chaining font - metrics. Should consider wether to merge + virtual-font and scaled_font. + */ + Font_metric* f=0; + if (gh_list_p (fn)) { - m /= gh_scm2double (ssc); + f = new Virtual_font_metric (fn, m, this); + } + else + { + SCM ssc; + if (variable_tab_->try_retrieve (ly_symbol2scm ("outputscale"), &ssc)) + { + m /= gh_scm2double (ssc); + } + + f = all_fonts_global->find_font (ly_scm2string (fn)); + SCM val = Scaled_font_metric::make_scaled_font_metric (f, m); + scaled_fonts_ = scm_acons (key, val, scaled_fonts_); + f = unsmob_metrics (val); + scm_gc_unprotect_object (val); } - - Font_metric* f = all_fonts_global->find_font (ly_scm2string (fn)); - SCM val = Scaled_font_metric::make_scaled_font_metric (f, m); - scaled_fonts_ = scm_acons (key, val, scaled_fonts_); - - scm_gc_unprotect_object (val); - return dynamic_cast (unsmob_metrics (val)); + return f; } diff --git a/lily/parser.yy b/lily/parser.yy index 73ad657154..99ff663353 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -23,6 +23,7 @@ this. */ +#include #include #include "translator-def.hh" @@ -82,7 +83,7 @@ set_property_music (SCM sym, SCM value) Music * p = new Music (SCM_EOL); p->set_mus_property ("symbol", sym); p->set_mus_property ("iterator-ctor", - Property_iterator::constructor_cxx_function); + Property_iterator::constructor_proc); p->set_mus_property ("value", value); return p; @@ -111,7 +112,7 @@ set_music_properties (Music *p, SCM a) // needed for bison.simple's malloc () and free () -#include +// #include #include @@ -209,6 +210,7 @@ yylex (YYSTYPE *s, void * v) %token NAME %token PITCHNAMES %token NOTES +%token ONCE %token PAPER %token PARTIAL %token PENALTY @@ -242,10 +244,10 @@ yylex (YYSTYPE *s, void * v) %token E_CHAR E_EXCLAMATION E_SMALLER E_BIGGER E_OPEN E_CLOSE %token E_LEFTSQUARE E_RIGHTSQUARE E_TILDE %token E_BACKSLASH -%token CHORD_BASS CHORD_COLON CHORD_MINUS CHORD_CARET +%token E_UNSIGNED +%token CHORD_BASS CHORD_COLON CHORD_MINUS CHORD_CARET CHORD_SLASH %token FIGURE_SPACE - %type exclamations questions dots optional_rest %type bass_number bass_mod %type br_bass_figure bass_figure figure_list figure_spec @@ -282,7 +284,6 @@ yylex (YYSTYPE *s, void * v) %type tremolo_type %type bare_int bare_unsigned %type script_dir - %type identifier_init %type steno_duration optional_notemode_duration multiplied_duration @@ -301,7 +302,7 @@ yylex (YYSTYPE *s, void * v) %type embedded_scm scalar %type Music Sequential_music Simultaneous_music %type relative_music re_rhythmed_music part_combined_music -%type property_def translator_change +%type property_def translator_change simple_property_def %type Music_list %type music_output_def_body %type shorthand_command_req @@ -309,6 +310,7 @@ yylex (YYSTYPE *s, void * v) %type command_req verbose_command_req %type extender_req %type hyphen_req +%type string_request %type string bare_number number_expression number_term number_factor %type score_block score_body @@ -523,7 +525,7 @@ translator_spec_body: } | translator_spec_body ALIAS STRING { Translator_def*td = unsmob_translator_def ($$); - td->type_aliases_ = gh_cons ($3, td->type_aliases_); + td->type_aliases_ = scm_cons ($3, td->type_aliases_); } | translator_spec_body GROBDESCRIPTIONS embedded_scm { Translator_def*td = unsmob_translator_def($$); @@ -686,11 +688,11 @@ The representation of a list is the to have efficient append. */ Music_list: /* empty */ { - $$ = gh_cons (SCM_EOL, SCM_EOL); + $$ = scm_cons (SCM_EOL, SCM_EOL); } | Music_list Music { SCM s = $$; - SCM c = gh_cons ($2->self_scm (), SCM_EOL); + SCM c = scm_cons ($2->self_scm (), SCM_EOL); scm_gc_unprotect_object ($2->self_scm ()); /* UGH */ if (gh_pair_p (ly_cdr (s))) gh_set_cdr_x (ly_cdr (s), c); /* append */ @@ -747,11 +749,12 @@ Repeated_music: /* we can not get durations and other stuff correct down the line, so we have to add to the duration log here. - - TODO: do dots. */ SCM func = scm_primitive_eval (ly_symbol2scm ("shift-duration-log")); - gh_call2 (func, r->self_scm (), gh_int2scm(-intlog2 ($3))); + if (($3 % 3) == 0) + gh_call3 (func, r->self_scm (), gh_int2scm(-intlog2 ($3*2/3)),gh_int2scm(1)); + else + gh_call3 (func, r->self_scm (), gh_int2scm(-intlog2 ($3)), gh_int2scm(0)); } set_music_properties (r, result); @@ -808,7 +811,7 @@ Simple_music: m->set_mus_property ("grob-property", $3); m->set_mus_property ("grob-value", $5); m->set_mus_property ("iterator-ctor", - Output_property_music_iterator::constructor_cxx_function); + Output_property_music_iterator::constructor_proc); $$ = m; } @@ -836,7 +839,7 @@ Composite_music: | AUTOCHANGE STRING Music { Music * chm = new Music_wrapper (SCM_EOL); chm->set_mus_property ("element", $3->self_scm ()); - chm->set_mus_property ("iterator-ctor", Auto_change_iterator::constructor_cxx_function); + chm->set_mus_property ("iterator-ctor", Auto_change_iterator::constructor_proc); scm_gc_unprotect_object ($3->self_scm ()); chm->set_mus_property ("what", $2); @@ -859,14 +862,14 @@ Composite_music: SCM ms = SCM_EOL; if (stopm) { stopm = stopm->clone (); - ms = gh_cons (stopm->self_scm (), ms); + ms = scm_cons (stopm->self_scm (), ms); scm_gc_unprotect_object (stopm->self_scm ()); } - ms = gh_cons ($2->self_scm (), ms); + ms = scm_cons ($2->self_scm (), ms); scm_gc_unprotect_object ($2->self_scm()); if (startm) { startm = startm->clone (); - ms = gh_cons (startm->self_scm () , ms); + ms = scm_cons (startm->self_scm () , ms); scm_gc_unprotect_object (startm->self_scm ()); } @@ -1025,7 +1028,7 @@ translator_change: TRANSLATOR STRING '=' STRING { Music * t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", - Change_iterator::constructor_cxx_function); + Change_iterator::constructor_proc); t-> set_mus_property ("change-to-type", $2); t-> set_mus_property ("change-to-id", $4); @@ -1035,6 +1038,15 @@ translator_change: ; property_def: + simple_property_def + | ONCE simple_property_def { + $$ = $2; + SCM e = $2->get_mus_property ("element"); + unsmob_music (e)->set_mus_property ("once", SCM_BOOL_T); + } + ; + +simple_property_def: PROPERTY STRING '.' STRING '=' scalar { Music *t = set_property_music (scm_string_to_symbol ($4), $6); @@ -1052,7 +1064,7 @@ property_def: Music *t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", - Property_unset_iterator::constructor_cxx_function); + Property_unset_iterator::constructor_proc); t->set_mus_property ("symbol", scm_string_to_symbol ($4)); Context_specced_music *csm = new Context_specced_music (SCM_EOL); @@ -1070,7 +1082,7 @@ property_def: bool itc = internal_type_checking_global_b; Music *t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", - Push_property_iterator::constructor_cxx_function); + Push_property_iterator::constructor_proc); t->set_mus_property ("symbol", scm_string_to_symbol ($4)); t->set_mus_property ("pop-first", SCM_BOOL_T); if (autobeam) @@ -1087,7 +1099,9 @@ property_def: csm-> set_mus_property ("context-type", $2); } - | PROPERTY STRING '.' STRING OVERRIDE embedded_scm '=' embedded_scm { + | PROPERTY STRING '.' STRING OVERRIDE + embedded_scm '=' embedded_scm + { /* UGH UGH UGH UGH. */ @@ -1097,7 +1111,7 @@ property_def: Music *t = new Music (SCM_EOL); t->set_mus_property ("iterator-ctor", - Push_property_iterator::constructor_cxx_function); + Push_property_iterator::constructor_proc); t->set_mus_property ("symbol", scm_string_to_symbol ($4)); if (autobeam) @@ -1115,6 +1129,7 @@ property_def: $$->set_spot (THIS->here_input ()); csm-> set_mus_property ("context-type", $2); + } | PROPERTY STRING '.' STRING REVERT embedded_scm { Music *t = new Music (SCM_EOL); @@ -1123,7 +1138,7 @@ property_def: bool itc = internal_type_checking_global_b; t->set_mus_property ("iterator-ctor", - Pop_property_iterator::constructor_cxx_function); + Pop_property_iterator::constructor_proc); t->set_mus_property ("symbol", scm_string_to_symbol ($4)); if (autobeam) internal_type_checking_global_b = false; @@ -1172,7 +1187,7 @@ request_chord: command_element: command_req { $$ = new Request_chord (SCM_EOL); - $$->set_mus_property ("elements", gh_cons ($1->self_scm (), SCM_EOL)); + $$->set_mus_property ("elements", scm_cons ($1->self_scm (), SCM_EOL)); scm_gc_unprotect_object ($1->self_scm()); $$-> set_spot (THIS->here_input ()); @@ -1185,7 +1200,7 @@ command_element: l->set_spot (THIS->here_input ()); $$ = new Request_chord (SCM_EOL); - $$->set_mus_property ("elements", gh_cons (l->self_scm (), SCM_EOL)); + $$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL)); scm_gc_unprotect_object (l->self_scm()); $$->set_spot (THIS->here_input ()); } @@ -1196,13 +1211,13 @@ command_element: l->set_spot (THIS->here_input ()); $$ = new Request_chord (SCM_EOL); - $$->set_mus_property ("elements", gh_cons (l->self_scm (), SCM_EOL)); + $$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL)); $$->set_spot (THIS->here_input ()); scm_gc_unprotect_object (l->self_scm()); } | E_BACKSLASH { - $$ = new Music (gh_list (gh_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED)); + $$ = new Music (gh_list (scm_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED)); $$->set_spot (THIS->here_input ()); } | '|' { @@ -1221,7 +1236,7 @@ command_element: $$ = csm; $$->set_spot (THIS->here_input ()); - csm->set_mus_property ("context-type", scm_makfrom0str ("Score")); + csm->set_mus_property ("context-type", scm_makfrom0str ("Timing")); } | PARTIAL duration_length { Moment m = - unsmob_duration ($2)->length_mom (); @@ -1232,7 +1247,7 @@ command_element: scm_gc_unprotect_object (p->self_scm ()); $$ =sp ; - sp-> set_mus_property ("context-type", scm_makfrom0str ( "Score")); + sp-> set_mus_property ("context-type", scm_makfrom0str ("Timing")); } | CLEF STRING { SCM func = scm_primitive_eval (ly_symbol2scm ("clef-name-to-properties")); @@ -1242,7 +1257,7 @@ command_element: for (SCM s = result ; gh_pair_p (s); s = ly_cdr (s)) { Music * p = new Music (SCM_EOL); set_music_properties (p, ly_car (s)); - l = gh_cons (p->self_scm (), l); + l = scm_cons (p->self_scm (), l); scm_gc_unprotect_object (p->self_scm ()); } Sequential_music * seq = new Sequential_music (SCM_EOL); @@ -1276,8 +1291,6 @@ command_element: Context_specced_music * sp = new Context_specced_music (SCM_EOL); sp->set_mus_property ("element", seq->self_scm ()); - - scm_gc_unprotect_object (p3->self_scm ()); scm_gc_unprotect_object (p2->self_scm ()); scm_gc_unprotect_object (p1->self_scm ()); @@ -1285,11 +1298,7 @@ command_element: $$ = sp; -/* - TODO: should make alias TimingContext for Score -*/ - - sp-> set_mus_property ("context-type", scm_makfrom0str ( "Score")); + sp-> set_mus_property ("context-type", scm_makfrom0str ( "Timing")); } ; @@ -1394,6 +1403,17 @@ post_request: verbose_request | request_with_dir | close_request + | string_request + ; + + +string_request: + E_UNSIGNED { + String_number_req* s = new String_number_req; + s->set_mus_property ("string-number", gh_int2scm($1)); + s->set_spot (THIS->here_input ()); + $$ = s; + } ; @@ -1773,7 +1793,7 @@ multiplied_duration: fraction: FRACTION { $$ = $1; } | UNSIGNED '/' UNSIGNED { - $$ = gh_cons (gh_int2scm ($1), gh_int2scm ($3)); + $$ = scm_cons (gh_int2scm ($1), gh_int2scm ($3)); } ; @@ -1856,7 +1876,7 @@ figure_list: $$ = SCM_EOL; } | figure_list br_bass_figure { - $$ = gh_cons ($2, $1); + $$ = scm_cons ($2, $1); } ; @@ -2023,7 +2043,7 @@ chord_inversion: { $$ = SCM_EOL; } - | '/' steno_tonic_pitch { + | CHORD_SLASH steno_tonic_pitch { $$ = $2; } ; @@ -2039,10 +2059,10 @@ chord_bass: chord_step: chord_note { - $$ = gh_cons ($1, SCM_EOL); + $$ = scm_cons ($1, SCM_EOL); } | CHORDMODIFIER_PITCH { - $$ = gh_cons (unsmob_pitch ($1)->smobbed_copy (), SCM_EOL); + $$ = scm_cons (unsmob_pitch ($1)->smobbed_copy (), SCM_EOL); } | CHORDMODIFIER_PITCH chord_note { /* Ugh. */ $$ = scm_list_n (unsmob_pitch ($1)->smobbed_copy (), diff --git a/lily/part-combine-music-iterator.cc b/lily/part-combine-music-iterator.cc index 7a871bc815..11a0a75bff 100644 --- a/lily/part-combine-music-iterator.cc +++ b/lily/part-combine-music-iterator.cc @@ -20,24 +20,43 @@ Part_combine_music_iterator::Part_combine_music_iterator () second_iter_ = 0; first_until_ = 0; second_until_ = 0; + + state_ = 0; +} + +void +Part_combine_music_iterator::derived_mark () const +{ + if (first_iter_) + scm_gc_mark (first_iter_->self_scm()); + if (second_iter_) + scm_gc_mark(second_iter_->self_scm()); } -Part_combine_music_iterator::~Part_combine_music_iterator () +void +Part_combine_music_iterator::do_quit () { - delete second_iter_; - delete first_iter_; + if (first_iter_) + first_iter_->quit(); + if (second_iter_) + second_iter_->quit(); } Part_combine_music_iterator::Part_combine_music_iterator (Part_combine_music_iterator const &src) : Music_iterator (src) { - second_iter_ = src.second_iter_ ? src.second_iter_->clone () : 0; first_iter_ = src.first_iter_ ? src.first_iter_->clone () : 0; + second_iter_ = src.second_iter_ ? src.second_iter_->clone () : 0; first_until_ = src.first_until_; second_until_ = src.second_until_; state_ = src.state_; suffix_ = src.suffix_; + + if (first_iter_) + scm_gc_unprotect_object (first_iter_->self_scm()); + if (second_iter_) + scm_gc_unprotect_object (second_iter_->self_scm()); } Moment @@ -64,8 +83,8 @@ Part_combine_music_iterator::construct_children () { Part_combine_music const * m = dynamic_cast (get_music ()); - first_iter_ = get_iterator (m->get_first ()); - second_iter_ = get_iterator (m->get_second ()); + first_iter_ = unsmob_iterator (get_iterator (m->get_first ())); + second_iter_ = unsmob_iterator (get_iterator (m->get_second ())); } void @@ -176,10 +195,11 @@ Part_combine_music_iterator::get_state (Moment) Moment second_mom = second_until_; Moment diff_until = diff_mom + now; + bool first = true; Music_iterator *first_iter = first_iter_->clone (); Music_iterator *second_iter = second_iter_->clone (); - + Moment last_pending (-1); Moment pending = now; while (now < diff_until @@ -311,9 +331,10 @@ Part_combine_music_iterator::get_state (Moment) second_iter->skip (pending); now = pending; } - delete first_iter; - delete second_iter; + scm_gc_unprotect_object (first_iter->self_scm ()); + scm_gc_unprotect_object (second_iter->self_scm ()); } + return state; } @@ -331,7 +352,7 @@ Part_combine_music_iterator::process (Moment m) **** Tried this, but won't work: - Consider thread switching: threads "one", "two" and "both". +s Consider thread switching: threads "one", "two" and "both". User can't pre-set the (most important) stem direction at thread level! */ diff --git a/lily/part-combine-music.cc b/lily/part-combine-music.cc index 7ab0a6f95a..da76cf1e94 100644 --- a/lily/part-combine-music.cc +++ b/lily/part-combine-music.cc @@ -15,7 +15,7 @@ Part_combine_music::Part_combine_music (SCM l) : Music (l) { set_mus_property ("iterator-ctor", - Part_combine_music_iterator::constructor_cxx_function); + Part_combine_music_iterator::constructor_proc); } void diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 74c87e873b..70f1252879 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -85,7 +85,7 @@ Percent_repeat_engraver::try_music (Music * m) Repeated_music * rp = dynamic_cast (m); if (rp && rp->get_mus_property ("iterator-ctor") - == Percent_repeat_iterator::constructor_cxx_function + == Percent_repeat_iterator::constructor_proc && !repeat_) { body_length_ = rp->body_length_mom (); diff --git a/lily/percent-repeat-iterator.cc b/lily/percent-repeat-iterator.cc index 3bce52030a..cc9c112ad8 100644 --- a/lily/percent-repeat-iterator.cc +++ b/lily/percent-repeat-iterator.cc @@ -16,14 +16,24 @@ IMPLEMENT_CTOR_CALLBACK (Percent_repeat_iterator); Percent_repeat_iterator::Percent_repeat_iterator () { + child_iter_ = 0; } +void +Percent_repeat_iterator::do_quit() +{ + if (child_iter_) + child_iter_->quit(); +} Percent_repeat_iterator::Percent_repeat_iterator (Percent_repeat_iterator const & p) : Music_iterator (p) { child_iter_ = p.child_iter_ ? p.child_iter_->clone (): 0; finish_mom_ = p.finish_mom_ ; + + if(child_iter_) + scm_gc_unprotect_object (child_iter_->self_scm()); } bool @@ -37,7 +47,7 @@ Percent_repeat_iterator::construct_children () { Repeated_music * mus =dynamic_cast (get_music ()); finish_mom_ = mus->length_mom (); - child_iter_ = get_iterator (mus->body ()); + child_iter_ = unsmob_iterator (get_iterator (mus->body ())); } @@ -58,7 +68,7 @@ Percent_repeat_iterator::process (Moment m) if (finish_mom_ <= m ) { - delete child_iter_; + child_iter_->quit(); child_iter_ = 0; } } @@ -78,8 +88,9 @@ Percent_repeat_iterator::try_music_in_children (Music *m) const return child_iter_->try_music (m); } - -Percent_repeat_iterator::~Percent_repeat_iterator () +void +Percent_repeat_iterator::derived_mark()const { - delete child_iter_; + if (child_iter_) + scm_gc_mark (child_iter_->self_scm()); } diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index 480b506858..34f46db21a 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -10,6 +10,7 @@ #include "music.hh" #include "translator-def.hh" #include "translator-group.hh" +#include "global-translator.hh" bool check_grob(Music *mus, SCM sym); @@ -44,6 +45,34 @@ Property_unset_iterator::process (Moment m) Simple_music_iterator::process (m); } +MAKE_SCHEME_CALLBACK(Property_iterator,once_finalization, 2); +SCM +Property_iterator::once_finalization(SCM translator, SCM music ) +{ + Music * m = unsmob_music (music); + Translator_group * tg + = dynamic_cast (unsmob_translator (translator)); + SCM sym = m->get_mus_property ("symbol"); + + tg->unset_property (sym); + return SCM_UNSPECIFIED; +} + +void +Property_iterator::do_quit () +{ + if (to_boolean (get_music ()->get_mus_property ("once"))) + { + SCM trans = report_to()->self_scm(); + SCM music = get_music()->self_scm(); + + Global_translator * tg= report_to()->top_translator (); + + tg->add_finalization (scm_list_n (once_finalization_proc, + trans, music, SCM_UNDEFINED)); + } +} + SCM list_p = 0; @@ -75,7 +104,9 @@ Push_property_iterator::process (Moment m) SCM eprop = get_music ()->get_mus_property ("grob-property"); SCM val = get_music ()->get_mus_property ("grob-value"); - if (to_boolean (get_music ()->get_mus_property ("pop-first"))) + if (to_boolean (get_music ()->get_mus_property ("pop-first")) + && !to_boolean (get_music ()->get_mus_property ("once")) + ) Translator_def::apply_pushpop_property (report_to (), sym, eprop, SCM_UNDEFINED); @@ -84,6 +115,38 @@ Push_property_iterator::process (Moment m) Simple_music_iterator::process (m); } +MAKE_SCHEME_CALLBACK(Push_property_iterator,once_finalization, 2); +SCM +Push_property_iterator::once_finalization (SCM trans, SCM music) +{ + Music * mus = unsmob_music (music); + Translator_group *tg + = dynamic_cast (unsmob_translator (trans)); + + SCM sym = mus->get_mus_property ("symbol"); + if (check_grob (mus, sym)) + { + SCM eprop = mus->get_mus_property ("grob-property"); + + Translator_def::apply_pushpop_property (tg, sym, eprop, SCM_UNDEFINED); + } + return SCM_UNSPECIFIED; +} + +void +Push_property_iterator::do_quit () +{ + if (to_boolean (get_music ()->get_mus_property ("once"))) + { + SCM trans = report_to()->self_scm(); + SCM music = get_music ()->self_scm(); + + Global_translator * tg= report_to()->top_translator (); + tg->add_finalization (scm_list_n (once_finalization_proc, + trans, music, SCM_UNDEFINED)); + } +} + void Pop_property_iterator::process (Moment m) { @@ -97,7 +160,9 @@ Pop_property_iterator::process (Moment m) } + IMPLEMENT_CTOR_CALLBACK (Pop_property_iterator); IMPLEMENT_CTOR_CALLBACK (Push_property_iterator); IMPLEMENT_CTOR_CALLBACK (Property_iterator); IMPLEMENT_CTOR_CALLBACK (Property_unset_iterator); + diff --git a/lily/request-chord.cc b/lily/request-chord.cc index 322cf49e03..3de20f4b4f 100644 --- a/lily/request-chord.cc +++ b/lily/request-chord.cc @@ -7,13 +7,13 @@ Request_chord::Request_chord (SCM s) : Simultaneous_music (s) { set_mus_property ("iterator-ctor", - Request_chord_iterator::constructor_cxx_function); + Request_chord_iterator::constructor_proc); } Request_chord::Request_chord () { set_mus_property ("iterator-ctor", - Request_chord_iterator::constructor_cxx_function); + Request_chord_iterator::constructor_proc); } Pitch diff --git a/lily/rest.cc b/lily/rest.cc index 9cdd9078c7..4f135a31ca 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -48,11 +48,10 @@ Rest::after_line_breaking (SCM smob) /* make this function easily usable in C++ */ - String -Rest::glyph_name (Grob * me, int balltype, String style) +Rest::glyph_name (Grob *me, int balltype, String style) { - bool ledger_b =false; + bool ledgered_b = false; if (balltype == 0 || balltype == 1) { @@ -63,18 +62,49 @@ Rest::glyph_name (Grob * me, int balltype, String style) Figure out when the rest is far enough outside the staff. This could bemore generic, but hey, we understand this even after dinner. - */ - ledger_b = ledger_b || (balltype == 0 && (pos >= rad +2 || pos < -rad )); - ledger_b = ledger_b || (balltype == 1 && - (pos <= -rad -2 || pos > rad)); + ledgered_b |= (balltype == 0) && (pos >= +rad + 2 || pos < -rad); + ledgered_b |= (balltype == 1) && (pos <= -rad - 2 || pos > +rad); } - return ("rests-") + to_string (balltype) - + (ledger_b ? "o" : "") + style; -} + String actual_style (style.to_str0 ()); + + if ((style == "mensural") || (style == "neo_mensural")) { + + /* + FIXME: Currently, ancient font does not provide ledgered rests; + hence the "o" suffix in the glyph name is bogus. But do we need + ledgered rests at all now that we can draw ledger lines with + variable width, length and blotdiameter? -- jr + */ + ledgered_b = 0; + + /* + There are no 32th/64th/128th mensural/neo_mensural rests. In + these cases, revert back to default style. + */ + if (balltype > 4) + actual_style = ""; + } + + if ((style == "classical") && (balltype != 2)) { + /* + classical style: revert back to default style for any rest other + than quarter rest + */ + actual_style = ""; + } + if (style == "default") { + /* + Some parts of lily still prefer style "default" over "". + Correct this here. -- jr + */ + actual_style = ""; + } + return ("rests-") + to_string (balltype) + (ledgered_b ? "o" : "") + actual_style; +} MAKE_SCHEME_CALLBACK (Rest,brew_molecule,1); @@ -91,20 +121,21 @@ Rest::brew_internal_molecule (SCM smob) int balltype = gh_scm2int (balltype_scm); String style; - SCM style_sym =me->get_grob_property ("style"); - if (gh_symbol_p (style_sym)) + SCM style_scm = me->get_grob_property ("style"); + if (gh_symbol_p (style_scm)) { - style = ly_scm2string (scm_symbol_to_string (style_sym)); + style = ly_scm2string (scm_symbol_to_string (style_scm)); } - for(;;) { - String idx = glyph_name (me, balltype, style); - Molecule res = Font_interface::get_default_font (me)->find_by_name (idx); - if(res.empty_b() && style!="") - style=""; - else - return res.smobbed_copy(); - } + Font_metric *fm = Font_interface::get_default_font (me); + String font_char = glyph_name (me, balltype, style); + Molecule out = fm->find_by_name (font_char); + if (out.empty_b()) + { + me->warning (_f ("rest `%s' not found, ", font_char.to_str0 ())); + } + + return out.smobbed_copy(); } SCM diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 693158620b..ce13f5ec44 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -55,11 +55,8 @@ Score_engraver::make_columns () Grob_info i2 (musical_column_); i2.origin_trans_ = this; - announce_grob (i1); announce_grob (i2); - - } } @@ -145,6 +142,8 @@ Score_engraver::one_time_step () } stop_translation_timestep (); + + apply_finalizations (); check_removal (); @@ -176,7 +175,6 @@ Score_engraver::typeset_grob (Grob *elem) if (!elem) programming_error ("Score_engraver: empty elt\n"); else - elems_.push (elem); } diff --git a/lily/score.cc b/lily/score.cc index 1c0956d857..ceb327d9ec 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -71,28 +71,10 @@ Score::~Score () } -/* - should enable this to find weird mistakes? -*/ -#define PARANOIA - -#ifdef PARANOIA -#include -#endif void Score::run_translator (Music_output_def *odef) { -#ifdef PARANOIA - if (verbose_global_b) - { - struct rlimit rls; - - getrlimit (RLIMIT_STACK, &rls); - progress_indication (_f("stack size cur %d, max %d\n" ,rls.rlim_cur, rls.rlim_max)); - } -#endif - /* We want to know if we want to store locations, since they take a lot of overhead. @@ -110,15 +92,14 @@ Score::run_translator (Music_output_def *odef) Music * music = unsmob_music (music_); trans->final_mom_ = music->length_mom (); - - Music_iterator * iter = Music_iterator::get_static_get_iterator (music); + SCM protected_iter = Music_iterator::get_static_get_iterator (music); + Music_iterator * iter = unsmob_iterator (protected_iter); iter->init_translator (music, trans); iter->construct_children (); if (! iter->ok ()) { - delete iter; warning (_ ("Need music in a score")); errorlevel_ =1; return ; @@ -126,7 +107,8 @@ Score::run_translator (Music_output_def *odef) trans->start (); trans->run_iterator_on_me (iter); - delete iter; + iter->quit(); + scm_remember_upto_here_1 (protected_iter); trans->finish (); if (errorlevel_) diff --git a/lily/script-column.cc b/lily/script-column.cc index deab16f026..2a6e38bea4 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -23,55 +23,59 @@ Script_column::add_staff_sided (Grob *me, Item *i) me->add_dependency (i); } -static int -staff_side_compare (Grob * const &i1, - Grob * const &i2) +LY_DEFINE(grob_script_priority_less, + "ly-grob-script-priority-less", 2, 0, 0, + (SCM a, SCM b), + "Compare two grobs by script priority. For internal use.") { + Grob * i1 = unsmob_grob (a); + Grob* i2 = unsmob_grob (b); + SCM p1 = i1->get_grob_property ("script-priority"); SCM p2 = i2->get_grob_property ("script-priority"); - return gh_scm2int (p1) - gh_scm2int (p2); + return gh_scm2int (p1) < gh_scm2int (p2) ? SCM_BOOL_T : SCM_BOOL_F; } -MAKE_SCHEME_CALLBACK (Script_column,before_line_breaking,1); + +MAKE_SCHEME_CALLBACK (Script_column,before_line_breaking,1); SCM Script_column::before_line_breaking (SCM smob) { Grob* me = unsmob_grob (smob); - Drul_array > arrs; + Drul_array scripts (SCM_EOL, SCM_EOL); Link_array staff_sided = Pointer_group_interface__extract_grobs (me, (Grob*)0, "scripts"); for (int i=0; i < staff_sided.size (); i++) { - Direction d = Side_position_interface::get_direction (staff_sided[i]); + Grob* g = staff_sided[i]; + Direction d = Side_position_interface::get_direction (g); if (!d) { programming_error ( "No direction for script?"); d = DOWN; - staff_sided[i]->set_grob_property ("direction", gh_int2scm (d)); + g->set_grob_property ("direction", gh_int2scm (d)); } - arrs[d].push (staff_sided[i]); + scripts[d] = scm_cons (g->self_scm(), scripts[d]); } Direction d = DOWN; do { - Link_array &arr - (arrs[d]); + SCM ss = scm_reverse_x (scripts[d], SCM_EOL); - arr.sort (staff_side_compare); + ss = scm_stable_sort_x (ss, grob_script_priority_less_proc); Grob * last = 0; - for (int i=0; i < arr.size (); i++) + for (SCM s = ss; gh_pair_p (s); s = gh_cdr (s)) { - + Grob* g = unsmob_grob (gh_car (s)); if (last) - Side_position_interface::add_support (arr[i],last); - - arr[i]->set_grob_property ("script-priority", SCM_EOL); - last = arr[i]; + Side_position_interface::add_support (g,last); + + last = g; } } while (flip (&d) != DOWN); diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 455ab600eb..aa16108edd 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -89,8 +89,11 @@ Script_engraver::process_music () if (gh_number_p (s)) priority = gh_scm2int (s); - /* Make sure they're in order of user input by adding index i. */ - priority += i * (to_dir (force_dir) ? to_dir (force_dir) : 1); + /* Make sure they're in order of user input by adding index i. + Don't use the direction in this priority. Smaller means closer + to the head. + */ + priority += i; if (ly_dir_p (force_dir) && to_dir (force_dir)) p->set_grob_property ("direction", force_dir); diff --git a/lily/sequential-iterator.cc b/lily/sequential-iterator.cc index 64247fd727..6817d3a0d5 100644 --- a/lily/sequential-iterator.cc +++ b/lily/sequential-iterator.cc @@ -21,20 +21,6 @@ Grace_fixup *get_grace_fixups (SCM cursor); */ -/* - - TODO: the grace note handling hasn't been done for skip() and - get_pending_events(), meaning that staff-switching and partcombining will be - broken with grace notes. - - */ -/* - - TODO: the grace note handling hasn't been done for skip() and - get_pending_events(), meaning that staff-switching and partcombining will be - broken with grace notes. - - */ /* Invariant for the data structure. @@ -53,6 +39,8 @@ Grace_fixup *get_grace_fixups (SCM cursor); Sequential_iterator::Sequential_iterator () { here_mom_ = Moment (0); + list_ = SCM_EOL; + cursor_ = SCM_EOL; grace_fixups_ = 0; iter_ =0; } @@ -63,6 +51,14 @@ Sequential_iterator::get_music_list () const return SCM_EOL; } +void +Sequential_iterator::do_quit () +{ + if (iter_) + iter_->quit(); +} + + Sequential_iterator::Sequential_iterator (Sequential_iterator const &src) : Music_iterator (src) { @@ -70,15 +66,19 @@ Sequential_iterator::Sequential_iterator (Sequential_iterator const &src) cursor_ = src.cursor_; list_ = src.cursor_; here_mom_ = src.here_mom_; - if (src.iter_) - iter_ = src.iter_->clone (); - else - iter_ = 0; + iter_ = (src.iter_) ? src.iter_->clone () : 0; + + if (iter_) + scm_gc_unprotect_object (iter_->self_scm()); } -Sequential_iterator::~Sequential_iterator () +void +Sequential_iterator::derived_mark ()const { - delete iter_; + if (iter_) + scm_gc_mark (iter_->self_scm()); + scm_gc_mark (list_); + scm_gc_mark (cursor_); } @@ -143,7 +143,13 @@ Sequential_iterator::construct_children () list_ = get_music_list (); cursor_ = list_; - iter_ = gh_pair_p (cursor_) ? get_iterator (unsmob_music (ly_car (cursor_))) : 0; + iter_ = 0; + if (gh_pair_p (cursor_)) + { + Music *m =unsmob_music (ly_car (cursor_)); + iter_ = unsmob_iterator (get_iterator (m)); + } + while (iter_ && !iter_->ok ()) { next_element (true); @@ -196,11 +202,11 @@ Sequential_iterator::next_element (bool side_effect) here_mom_ += len; } - delete iter_; cursor_ = ly_cdr (cursor_); + iter_->quit(); if (gh_pair_p (cursor_)) - iter_ = get_iterator (unsmob_music (ly_car (cursor_))); + iter_ = unsmob_iterator (get_iterator (unsmob_music (ly_car (cursor_)))); else iter_ = 0; } @@ -256,8 +262,8 @@ Sequential_iterator::get_pending_events (Moment until)const else me->next_element (false); } - delete me; - + + scm_gc_unprotect_object (me->self_scm()); return s; } @@ -266,8 +272,6 @@ Sequential_iterator::get_pending_events (Moment until)const Skip events till UNTIL. We don't do any other side effects such as descending to child iterator contexts, because they might depend on \context specs and \translator changes being executed - - TODO: check support for grace notes here. */ void Sequential_iterator::skip (Moment until) diff --git a/lily/sequential-music-iterator.cc b/lily/sequential-music-iterator.cc index 1079706bb6..6b019e7861 100644 --- a/lily/sequential-music-iterator.cc +++ b/lily/sequential-music-iterator.cc @@ -37,5 +37,5 @@ IMPLEMENT_CTOR_CALLBACK (Sequential_music_iterator); SCM Sequential_music_iterator::get_music_list()const { - return dynamic_cast (get_music ())->music_list (); + return dynamic_cast (get_music ())->music_list (); } diff --git a/lily/sequential-music.cc b/lily/sequential-music.cc index 0933d28e53..6a1c6f5240 100644 --- a/lily/sequential-music.cc +++ b/lily/sequential-music.cc @@ -6,13 +6,13 @@ Sequential_music::Sequential_music (SCM head) : Music_sequence (head) { set_mus_property ("iterator-ctor", - Sequential_music_iterator::constructor_cxx_function); + Sequential_music_iterator::constructor_proc); } Sequential_music::Sequential_music () : Music_sequence () { set_mus_property ("iterator-ctor", - Sequential_music_iterator::constructor_cxx_function); + Sequential_music_iterator::constructor_proc); } diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index fef3caea83..aa6269be08 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -9,7 +9,7 @@ - add support for different stretch/shrink constants? */ - +#include #include #include // isinf @@ -311,8 +311,21 @@ Simple_spacer::add_columns (Link_array const &icols) my_solve_linelen (); } -#include +/* + + TODO: should a add penalty for widely varying spring forces (caused + by constraints, eg. + + ===== + | | + o|o| x ##x + + + The ## forces the notes apart; we shouldn't allow the O's to touch + this closely. + + */ void Simple_spacer::solve (Column_x_positions *positions, bool ragged) const { diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index dcdf880ab5..957b7bb628 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -16,33 +16,45 @@ Simultaneous_music_iterator::Simultaneous_music_iterator () { separate_contexts_b_ = false; + children_list_ = SCM_EOL; } Simultaneous_music_iterator::Simultaneous_music_iterator (Simultaneous_music_iterator const& src) : Music_iterator (src) { - separate_contexts_b_ = src.separate_contexts_b_; - for (Cons *p = src.children_p_list_.head_; p; p = p->next_) + separate_contexts_b_ + = src.separate_contexts_b_; + + SCM children_list = SCM_EOL; + SCM *tail = &children_list; + for (SCM s = src.children_list_; gh_pair_p (s); s = gh_cdr(s)) { - Music_iterator *i = p->car_; - children_p_list_.append (new Killing_cons (i->clone (), 0)); + Music_iterator *i = unsmob_iterator (gh_car (s)); + SCM cl = i->clone ()->self_scm(); + *tail = scm_cons (cl, *tail); + tail = SCM_CDRLOC (*tail); + scm_gc_unprotect_object (cl); } + + children_list_ = children_list; + scm_remember_upto_here_1 (children_list); } -Simultaneous_music_iterator::~Simultaneous_music_iterator () +void +Simultaneous_music_iterator::derived_mark()const { - children_p_list_.junk (); + scm_gc_mark (children_list_); } SCM Simultaneous_music_iterator::get_pending_events (Moment m)const { - SCM s = SCM_EOL; - for (Cons *p = children_p_list_.head_; p; p = p->next_) + SCM l = SCM_EOL; + for (SCM s = children_list_; gh_pair_p (s); s = gh_cdr(s)) { - s = gh_append2 (p->car_->get_pending_events (m), s); + l = gh_append2 (unsmob_iterator (gh_car (s))->get_pending_events (m), l); } - return s; + return l; } void @@ -51,10 +63,15 @@ Simultaneous_music_iterator::construct_children () int j = 0; SCM i = get_music ()->get_mus_property ("elements"); + + children_list_ = SCM_EOL; + SCM * tail = &children_list_; for (; gh_pair_p (i); i = ly_cdr (i), j++) { Music *mus = unsmob_music (ly_car (i)); - Music_iterator * mi = get_static_get_iterator (mus); + + SCM scm_iter = get_static_get_iterator (mus); + Music_iterator * mi = unsmob_iterator (scm_iter); /* if separate_contexts_b_ is set, create a new context with the number number as name */ @@ -69,48 +86,60 @@ Simultaneous_music_iterator::construct_children () mi->init_translator (mus, t); mi->construct_children (); - + if (mi->ok ()) { - children_p_list_.append (new Killing_cons (mi,0)); + *tail = scm_cons (scm_iter, *tail); + tail = SCM_CDRLOC (*tail); } else - delete mi; + mi->set_translator (0); } } - void Simultaneous_music_iterator::process (Moment until) { - for (Cons **pp = &children_p_list_.head_; *pp;) + SCM *proc = &children_list_; + while(gh_pair_p (*proc)) { - Music_iterator * i = (*pp)->car_; + Music_iterator * i = unsmob_iterator (gh_car (*proc)); if (i->pending_moment () == until) { i->process (until); } if (!i->ok ()) - delete children_p_list_.remove_cons (pp); + { + i->quit (); + *proc = gh_cdr (*proc); + } else - pp = & (*pp)->next_; + { + proc = SCM_CDRLOC(*proc); + } } } void Simultaneous_music_iterator::skip (Moment until) { - for (Cons **pp = &children_p_list_.head_; *pp;) + SCM *proc = &children_list_; + while(gh_pair_p (*proc)) { - Music_iterator * i = (*pp)->car_; + Music_iterator * i = unsmob_iterator (gh_car (*proc)); if (i->pending_moment () <= until) { i->skip (until); } if (!i->ok ()) - delete children_p_list_.remove_cons (pp); + { + i->quit (); + *proc = gh_cdr (*proc); + } else - pp = & (*pp)->next_; + { + proc = SCM_CDRLOC(*proc); + } } } @@ -120,8 +149,8 @@ Simultaneous_music_iterator::pending_moment () const Moment next; next.set_infinite (1); - for (Cons *p = children_p_list_.head_; p; p = p->next_) - next = next car_->pending_moment () ; + for (SCM s = children_list_; gh_pair_p (s); s = gh_cdr(s)) + next = next pending_moment () ; return next; } @@ -130,18 +159,24 @@ Simultaneous_music_iterator::pending_moment () const bool Simultaneous_music_iterator::ok () const { - return children_p_list_.head_; + return gh_pair_p (children_list_); } Music_iterator* Simultaneous_music_iterator::try_music_in_children (Music *m) const { Music_iterator * b=0; - for (Cons *p = children_p_list_.head_; !b && p; p = p->next_) - b =p->car_->try_music (m); + for (SCM s = children_list_; !b && gh_pair_p (s); s = gh_cdr(s)) + b =unsmob_iterator (gh_car (s))->try_music (m); return b; } +void +Simultaneous_music_iterator::do_quit () +{ + for (SCM s = children_list_; gh_pair_p (s); s = gh_cdr(s)) + unsmob_iterator (gh_car (s))->quit(); +} IMPLEMENT_CTOR_CALLBACK (Simultaneous_music_iterator); diff --git a/lily/simultaneous-music.cc b/lily/simultaneous-music.cc index 85a3b8136f..580a6f9b9d 100644 --- a/lily/simultaneous-music.cc +++ b/lily/simultaneous-music.cc @@ -20,14 +20,14 @@ Simultaneous_music::Simultaneous_music (SCM head) : Music_sequence (head) { set_mus_property ("iterator-ctor", - Simultaneous_music_iterator::constructor_cxx_function); + Simultaneous_music_iterator::constructor_proc); } Simultaneous_music::Simultaneous_music () : Music_sequence () { set_mus_property ("iterator-ctor", - Simultaneous_music_iterator::constructor_cxx_function); + Simultaneous_music_iterator::constructor_proc); } diff --git a/lily/source-file.cc b/lily/source-file.cc index cbe4967b52..23cf17cf7c 100644 --- a/lily/source-file.cc +++ b/lily/source-file.cc @@ -7,6 +7,8 @@ & Han-Wen Nienhuys */ +#include "config.h" + #include #include #if HAVE_SSTREAM @@ -99,6 +101,10 @@ Source_file::Source_file (String filename_string) pos_str0_ = to_str0 (); init_port(); + + for (int i = 0; i < length_; i++) + if (contents_str0_[i] == '\n') + newline_locations_.push (contents_str0_ + i); } void @@ -121,11 +127,6 @@ Source_file::tell () const std::istream* Source_file::get_istream () { - /* - if (!name_string_.length ()) - return &cin; - */ - if (!istream_) { if (length ()) // can-t this be done without such a hack? @@ -160,7 +161,7 @@ Source_file::~Source_file () { delete istream_; istream_ = 0; - delete contents_str0_; + delete[] contents_str0_; } Slice @@ -261,15 +262,15 @@ Source_file::get_line (char const* pos_str0) const if (!in_b (pos_str0)) return 0; - int i = 1; - char const* scan_str0 = to_str0 (); - if (!scan_str0) - return 0; - - while (scan_str0 < pos_str0) - if (*scan_str0++ == '\n') - i++; - return i; + int lo=0; + int hi = newline_locations_.size(); + + binary_search_bounds (newline_locations_, + pos_str0, + Link_array::default_compare, + &lo, &hi); + + return lo; } int diff --git a/lily/spanner.cc b/lily/spanner.cc index b29c40425b..bc2d9bdd12 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -289,7 +289,7 @@ Spanner::get_broken_left_end_align () const } SCM -Spanner::do_derived_mark () +Spanner::do_derived_mark () const { /* We'd be fucked if this is called before spanned_drul_[] is inited. */ @@ -336,8 +336,7 @@ Spanner::set_spacing_rods (SCM smob) r.item_l_drul_[LEFT] = sp->get_bound (LEFT); r.item_l_drul_[RIGHT] = sp->get_bound (RIGHT); r.distance_ = - gh_scm2double (me->get_grob_property ("minimum-length")) - * 1.0; + gh_scm2double (me->get_grob_property ("minimum-length")); r.add_to_cols (); return SCM_UNSPECIFIED; diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index cf931c2f23..bc95433a78 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -203,6 +203,13 @@ Staff_spacing::get_spacing_params (Grob *me, Real * space, Real * fixed) &last_ext); if (!last_grob) { + /* + TODO: + + Should insert a adjustable space here? For excercises, you might want to + use a staff without a clef in the beginning. + */ + /* we used to have a warning here, but itgenerates a lot of spurious error messages. diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 07ff23e07e..b1f3eb4b99 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -79,14 +79,21 @@ Stem_engraver::acknowledge_grob (Grob_info i) the first and last (quarter) note bothe get one tremolo flag. */ int requested_type = gh_scm2int (tremolo_req_->get_mus_property ("tremolo-type")); - SCM f = get_property ("tremoloFlags"); if (!requested_type && gh_number_p (f)) requested_type = gh_scm2int (f); else daddy_trans_->set_property ("tremoloFlags", gh_int2scm (requested_type)); - if (requested_type) + int tremolo_flags = intlog2 (requested_type) - 2 + - (duration_log > 2 ? duration_log - 2 : 0); + if (tremolo_flags <= 0) + { + tremolo_req_->origin()->warning (_("tremolo duration is too long")); + tremolo_flags = 0; + } + + if (tremolo_flags) { tremolo_ = new Item (get_property ("StemTremolo")); announce_grob(tremolo_, tremolo_req_->self_scm()); @@ -96,11 +103,7 @@ Stem_engraver::acknowledge_grob (Grob_info i) the tremolo-type minus the number of flags of the note itself. */ - int tremolo_flags = intlog2 (requested_type) - 2 - - (duration_log > 2 ? duration_log - 2 : 0); - if (tremolo_flags < 0) - tremolo_flags = 0; - tremolo_->set_grob_property ("flag-count", + tremolo_->set_grob_property ("flag-count", gh_int2scm (tremolo_flags)); tremolo_->set_parent (stem_, X_AXIS); } diff --git a/lily/stem.cc b/lily/stem.cc index fa3401e2a9..c9deff1dc9 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -516,6 +516,12 @@ Stem::height (SCM smob, SCM ax) Interval iv; if (mol != SCM_EOL) iv = unsmob_molecule (mol)->extent (a); + if (Grob *b =get_beam (me)) + { + Direction d = get_direction (me); + iv[d] += d * Beam::get_thickness (b) /2.0 ; + } + return ly_interval2scm (iv); } @@ -527,17 +533,12 @@ Stem::flag (Grob*me) e.g. "stroke-style", maybe with values "" (i.e. no stroke), "single" and "double". Needs more discussion. */ - String style, fstyle, staffline_offs; - SCM fst = me->get_grob_property ("flag-style"); - if (gh_string_p (fst)) - { - fstyle = ly_scm2string (fst); - } + String style, staffline_offs; - SCM st = me->get_grob_property ("style"); - if (gh_symbol_p (st)) + SCM style_scm = me->get_grob_property ("style"); + if (gh_symbol_p (style_scm)) { - style = (ly_scm2string (scm_symbol_to_string (st))); + style = (ly_scm2string (scm_symbol_to_string (style_scm))); } else { @@ -579,10 +580,9 @@ Stem::flag (Grob*me) --hwn. */ - Grob *first = first_head(me); - int sz = Staff_symbol_referencer::line_count (me)-1; - int p = (int)rint (Staff_symbol_referencer::get_position (first)); - staffline_offs = (((p ^ sz) & 0x1) == 0) ? "1" : "0"; + int p = (int)rint (Staff_symbol_referencer::get_position (first_head (me))); + staffline_offs = Staff_symbol_referencer::on_staffline (me, p) ? + "1" : "0"; } else { @@ -593,14 +593,36 @@ Stem::flag (Grob*me) { staffline_offs = ""; } - char c = (get_direction (me) == UP) ? 'u' : 'd'; - String index_string - = String ("flags-") + style + to_string (c) + staffline_offs + to_string (duration_log (me)); - Molecule m - = Font_interface::get_default_font (me)->find_by_name (index_string); - if (!fstyle.empty_b ()) - m.add_molecule (Font_interface::get_default_font (me)->find_by_name (String ("flags-") + to_string (c) + fstyle)); - return m; + char dir = (get_direction (me) == UP) ? 'u' : 'd'; + String font_char = + style + to_string (dir) + staffline_offs + to_string (duration_log (me)); + Font_metric *fm = Font_interface::get_default_font (me); + Molecule flag = fm->find_by_name ("flags-" + font_char); + if (flag.empty_b ()) + { + me->warning (_f ("flag `%s' not found", font_char)); + } + + SCM stroke_scm = me->get_grob_property ("flag-style"); + if (gh_string_p (stroke_scm)) + { + String stroke = ly_scm2string (stroke_scm); + if (!stroke.empty_b ()) + { + String font_char = to_string (dir) + stroke; + Molecule stroke = fm->find_by_name ("flags-" + font_char); + if (stroke.empty_b ()) + { + me->warning (_f ("flag stroke `%s' not found", font_char)); + } + else + { + flag.add_molecule (stroke); + } + } + } + + return flag; } MAKE_SCHEME_CALLBACK (Stem,dim_callback,2); @@ -823,11 +845,7 @@ Stem::calc_stem_info (Grob *me) me->get_grob_property ("beamed-minimum-free-lengths"))) * staff_space; - int my_beam_count = Stem::beam_multiplicity (me).length () + 1; -#if 0 - Real height_of_my_beams = beam_thickness - + (my_beam_count - 1) * beam_translation; -#else + /* UGH It seems that also for ideal minimum length, we must use the maximum beam count (for this direction): @@ -837,7 +855,6 @@ Stem::calc_stem_info (Grob *me) must be horizontal. */ Real height_of_my_beams = beam_thickness + (beam_count - 1) * beam_translation; -#endif Real ideal_minimum_length = ideal_minimum_free + height_of_my_beams diff --git a/lily/syllable-group.cc b/lily/syllable-group.cc index 909a296bde..e4bf7a8f52 100644 --- a/lily/syllable-group.cc +++ b/lily/syllable-group.cc @@ -100,12 +100,12 @@ Syllable_group::add_extender (Grob * extender) bool Syllable_group::set_lyric_align (const char *punc, Grob *default_notehead) { - if (lyrics_.size ()<=1) + if (lyrics_.size () <= 0) { - // No lyrics or single line: nothing to do. + // No lyrics: nothing to do. return true; } - + Grob * lyric; alignment_ = appropriate_alignment (punc); diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 38f0dc7100..a301c88972 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -127,27 +127,17 @@ System_start_delimiter::staff_brace (Grob*me, Real y) { Font_metric *fm = 0; - for (int i = 0; ; i++) - { - if (!fm || y > fm->get_char (fm->count ()-1)[Y_AXIS].length ()) - { - /* We go through the style sheet to lookup the font file - name. This is better than using find_font directly, - esp. because that triggers mktextfm for non-existent - fonts. */ - SCM br = ly_symbol2scm ("braces"); - SCM fam = gh_cons (ly_symbol2scm ("font-family"), br); - SCM sz = gh_cons (ly_symbol2scm ("font-relative-size"), gh_int2scm (i)); - - SCM alist = scm_list_n (fam, sz, SCM_UNDEFINED); - fm = Font_interface::get_font (me, scm_list_n (alist, SCM_UNDEFINED)); - /* Hmm, if lookup fails, we get cmr10 anyway */ - if (ly_scm2string (ly_car (fm->description_)) == "cmr10") - break; - } - else - break; - } + /* We go through the style sheet to lookup the font file + name. This is better than using find_font directly, + esp. because that triggers mktextfm for non-existent + fonts. */ + SCM br = ly_symbol2scm ("braces"); + SCM fam = gh_cons (ly_symbol2scm ("font-family"), br); + SCM sz = gh_cons (ly_symbol2scm ("font-relative-size"), ly_symbol2scm ("*")); + + SCM alist = scm_list_n (fam, sz, SCM_UNDEFINED); + fm = Font_interface::get_font (me, scm_list_n (alist, SCM_UNDEFINED)); + int lo = 0; @@ -166,13 +156,11 @@ System_start_delimiter::staff_brace (Grob*me, Real y) } while (hi - lo > 1); - SCM at = scm_list_n (ly_symbol2scm ("char"), gh_int2scm (lo), SCM_UNDEFINED); - at = fontify_atom (fm, at); - - b = fm->get_char (lo); + Molecule m (fm->get_char_molecule (lo)); + b=m.extent_box(); b[X_AXIS] = Interval (0,0); - return Molecule (b, at); + return Molecule (b, m.get_expr()); } diff --git a/lily/tab-note-heads-engraver.cc b/lily/tab-note-heads-engraver.cc index a156c160e5..9e8062a42f 100644 --- a/lily/tab-note-heads-engraver.cc +++ b/lily/tab-note-heads-engraver.cc @@ -25,7 +25,7 @@ class Tab_note_heads_engraver : public Engraver Link_array dots_; Link_array note_reqs_; - Link_array tabstring_reqs_; + Link_array tabstring_reqs_; public: TRANSLATOR_DECLARATIONS(Tab_note_heads_engraver); @@ -50,10 +50,8 @@ Tab_note_heads_engraver::try_music (Music *m) note_reqs_.push (n); return true; } - else if (Text_script_req * ts = dynamic_cast (m)) + else if (String_number_req * ts = dynamic_cast (m)) { - if (m->get_mus_property ("text-type") != ly_symbol2scm ("finger")) return false; - while(tabstring_reqs_.size () < note_reqs_.size ()-1) tabstring_reqs_.push(0); tabstring_reqs_.push(ts); @@ -75,6 +73,7 @@ Tab_note_heads_engraver::process_music () { SCM stringTunings = get_property ("stringTunings"); int number_of_strings = ((int) gh_length(stringTunings)); + bool high_string_one = to_boolean(get_property ("highStringOne")); Item * note = new Item (get_property ("TabNoteHead")); @@ -84,16 +83,17 @@ Tab_note_heads_engraver::process_music () if(tabstring_reqs_.size()>i) tabstring_req = tabstring_reqs_[i]; // printf("%d %d\n",tabstring_reqs_.size(),i); - size_t lenp; + // size_t lenp; int tab_string; bool string_found; if (tabstring_req) { - char* tab_string_as_string = gh_scm2newstr(tabstring_req->get_mus_property ("text"), &lenp); - tab_string = atoi(tab_string_as_string); + //char* tab_string_as_string = gh_scm2newstr(tabstring_req->get_mus_property ("text"), &lenp); + //tab_string = atoi(tab_string_as_string); + tab_string = gh_scm2int(tabstring_req->get_mus_property ("string-number")); string_found = true; } else { - tab_string = number_of_strings; + tab_string = high_string_one ? 1 : number_of_strings; string_found = false; } @@ -125,24 +125,18 @@ Tab_note_heads_engraver::process_music () int fret = unsmob_pitch(scm_pitch)->semitone_pitch() - gh_scm2int(gh_list_ref(stringTunings,gh_int2scm(tab_string-1))); if(fretset_grob_property ("text", text); - SCM c0 = get_property ("centralCPosition"); - if (gh_number_p (c0)) pos += gh_scm2int (c0); + int pos = 2 * tab_string - number_of_strings - 1; // No tab-note between the string !!! + if(to_boolean(get_property("stringOneTopmost"))) + pos = -pos; + note->set_grob_property ("text", text); note->set_grob_property ("staff-position", gh_int2scm (pos)); announce_grob (note, req->self_scm()); @@ -180,6 +174,6 @@ ENTER_DESCRIPTION(Tab_note_heads_engraver, /* descr */ "Generate one or more tablature noteheads from Music of type Note_req.", /* creats*/ "TabNoteHead Dots", /* acks */ "", -/* reads */ "centralCPosition stringTunings minimumFret tablatureFormat", +/* reads */ "centralCPosition stringTunings minimumFret tablatureFormat highStringOne stringOneTopmost", /* write */ ""); diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index a448d15ef8..723e111741 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -105,8 +105,8 @@ Text_engraver::process_acknowledged_grobs () if (gh_number_p (s)) priority = gh_scm2int (s); - /* Make sure they're in order of user input by adding index i. */ - priority += i * (r->get_direction () ? r->get_direction () : 1); + /* see script-engraver.cc */ + priority += i; text->set_grob_property ("script-priority", gh_int2scm (priority)); diff --git a/lily/text-spanner-engraver.cc b/lily/text-spanner-engraver.cc index 8e26e7d501..e0d1c5f0a7 100644 --- a/lily/text-spanner-engraver.cc +++ b/lily/text-spanner-engraver.cc @@ -29,7 +29,7 @@ protected: virtual bool try_music (Music *); virtual void stop_translation_timestep (); virtual void start_translation_timestep (); - virtual void process_acknowledged_grobs (); + virtual void process_music (); private: Spanner *span_; @@ -82,7 +82,7 @@ Text_spanner_engraver::try_music (Music *m) } void -Text_spanner_engraver::process_acknowledged_grobs () +Text_spanner_engraver::process_music () { if (req_drul_[STOP]) { @@ -93,14 +93,9 @@ Text_spanner_engraver::process_acknowledged_grobs () } else { - assert (!finished_); - Grob* e = unsmob_grob (get_property ("currentMusicalColumn")); - span_->set_bound (RIGHT, e); - finished_ = span_; span_ = 0; current_req_ = 0; - req_drul_[STOP] = 0; } } @@ -108,8 +103,7 @@ Text_spanner_engraver::process_acknowledged_grobs () { if (current_req_) { - req_drul_[START]->origin ()->warning - (_ ("already have a text spanner")); + req_drul_[START]->origin ()->warning(_ ("already have a text spanner")); } else { @@ -122,9 +116,6 @@ Text_spanner_engraver::process_acknowledged_grobs () span_->set_grob_property ("width-correct", gh_double2scm (0)); Side_position_interface::set_axis (span_, Y_AXIS); - Grob *e = unsmob_grob (get_property ("currentMusicalColumn")); - span_->set_bound (LEFT, e); - announce_grob (span_, req_drul_[START]->self_scm()); req_drul_[START] = 0; } @@ -134,10 +125,14 @@ Text_spanner_engraver::process_acknowledged_grobs () void Text_spanner_engraver::acknowledge_grob (Grob_info info) { - if (span_ && Note_column::has_interface (info.grob_)) + Spanner * spans[2] ={span_, finished_}; + for (int i = 0; i < 2 ; i++) { - Side_position_interface::add_support (span_, info.grob_); - add_bound_item (span_, dynamic_cast (info.grob_)); + if (spans[i] && Note_column::has_interface (info.grob_)) + { + Side_position_interface::add_support (spans[i], info.grob_); + add_bound_item (spans[i], dynamic_cast (info.grob_)); + } } } @@ -147,6 +142,12 @@ Text_spanner_engraver::typeset_all () if (finished_) { Side_position_interface::add_staff_support (finished_); + + if (!finished_->get_bound (RIGHT)) + { + Grob* e = unsmob_grob (get_property ("currentMusicalColumn")); + span_->set_bound (RIGHT, e); + } typeset_grob (finished_); finished_ = 0; } @@ -155,6 +156,12 @@ Text_spanner_engraver::typeset_all () void Text_spanner_engraver::stop_translation_timestep () { + if (span_ && !span_->get_bound (LEFT)) + { + Grob* e = unsmob_grob (get_property ("currentMusicalColumn")); + span_->set_bound (LEFT, e); + } + typeset_all (); } @@ -171,7 +178,7 @@ Text_spanner_engraver::finalize () } ENTER_DESCRIPTION(Text_spanner_engraver, -/* descr */ "Create text spanner from a Span_req ", +/* descr */ "Create text spanner from a Span_req.", /* creats*/ "TextSpanner", /* acks */ "note-column-interface", /* reads */ "", diff --git a/lily/time-scaled-music-iterator.cc b/lily/time-scaled-music-iterator.cc index 4c1e81343e..cbba1e4f03 100644 --- a/lily/time-scaled-music-iterator.cc +++ b/lily/time-scaled-music-iterator.cc @@ -27,5 +27,5 @@ Time_scaled_music_iterator::process (Moment m) Music_wrapper_iterator::process (m); } - + IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator); diff --git a/lily/time-scaled-music.cc b/lily/time-scaled-music.cc index 2b79cc390b..a46483a491 100644 --- a/lily/time-scaled-music.cc +++ b/lily/time-scaled-music.cc @@ -14,7 +14,7 @@ Time_scaled_music::Time_scaled_music (SCM l) : Music_wrapper (l) { set_mus_property ("iterator-ctor", - Time_scaled_music_iterator::constructor_cxx_function); + Time_scaled_music_iterator::constructor_proc); } diff --git a/lily/time-signature.cc b/lily/time-signature.cc index d960b647cd..e66adfc8d4 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -57,30 +57,39 @@ Time_signature::brew_molecule (SCM smob) } Molecule -Time_signature::special_time_signature (Grob *me, SCM style, int n, int d) +Time_signature::special_time_signature (Grob *me, SCM scm_style, int n, int d) { - String st = ly_scm2string (scm_symbol_to_string (style)); - SCM scm_n = gh_int2scm (n); - SCM scm_d = gh_int2scm (d); - SCM exp = scm_list_n (ly_symbol2scm ("find-timesig-symbol"), - scm_n, scm_d, ly_quote_scm (style), - SCM_UNDEFINED); - SCM scm_pair = scm_primitive_eval (exp); - SCM scm_font_char = ly_car (scm_pair); - SCM scm_font_family = ly_cdr (scm_pair); - String font_char = ly_scm2string (scm_font_char); - String font_family = ly_scm2string (scm_font_family); - me->set_grob_property("font-family", ly_symbol2scm (font_family.to_str0 ())); - - Molecule m = - Font_interface::get_default_font (me)->find_by_name ("timesig-" + font_char); - if (!m.empty_b ()) - return m; + String style = ly_scm2string (scm_symbol_to_string (scm_style)); + + if (style == "numbered") + return numbered_time_signature (me, n, d); + + if ((style == "default") || (style == "")) + style = to_string ("C"); + + if (style == "C") + { + if /* neither C2/2 nor C4/4 */ + (((n != 2) || (d != 2)) && + ((n != 4) || (d != 4))) + { + return numbered_time_signature (me, n, d); + } + } + + String char_name = style + to_string (n) + "/" + to_string (d); + me->set_grob_property ("font-family", ly_symbol2scm ("music")); + Molecule out = + Font_interface::get_default_font (me)->find_by_name ("timesig-" + char_name); + if (!out.empty_b ()) + return out; /* - If there is no such symbol, we default without warning to the - numbered style. - */ + If there is no such symbol, we default to the numbered style. + (Here really with a warning!) + */ + me->warning (_f ("time signature symbol `%s' not found; " + "reverting to numbered style", char_name)); return numbered_time_signature (me, n, d); } @@ -124,21 +133,20 @@ ADD_INTERFACE (Time_signature,"time-signature-interface", 4/4 and 2/2 are typeset as C and struck C, respectively. All other time signatures are written with two digits. - @item @code{old} + @item @code{neo_mensural} + 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are + typeset with neo-mensural style mensuration marks. All other time + signatures are written with two digits. + + @item @code{mensural} 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are - typeset with old-style mensuration marks. All other time + typeset with mensural style mensuration marks. All other time signatures are written with two digits. @item @code{1xxx} All time signatures are typeset with a single digit, e.g. 3/2 is written as 3. (Any symbol starting with the digit @code{1} will do.) - - @item @code{C}@var{M}@code{/}@var{N}, -@code{old}@var{M}@code{/}@var{N} or - @code{old6/8alt} - Tells LilyPond to use a specific symbol as time signature, - regardless of the actual time signature. @end table See also the test-file @file{input/test/time.ly}. diff --git a/lily/translator-def.cc b/lily/translator-def.cc index 7db483d56a..14a4fe5404 100644 --- a/lily/translator-def.cc +++ b/lily/translator-def.cc @@ -50,7 +50,11 @@ Translator_def::Translator_def () end_consists_name_list_ = SCM_EOL; property_ops_ = SCM_EOL; type_name_ = SCM_EOL; + + smobify_self(); + } + Translator_def::~Translator_def () { } @@ -58,11 +62,21 @@ Translator_def::~Translator_def () Translator_def::Translator_def (Translator_def const & s) : Input (s) { + type_aliases_ = SCM_EOL; + translator_group_type_ = SCM_EOL; + accepts_name_list_ = SCM_EOL; + consists_name_list_ = SCM_EOL; + end_consists_name_list_ = SCM_EOL; + property_ops_ = SCM_EOL; + type_name_ = SCM_EOL; + + + smobify_self(); consists_name_list_ = scm_list_copy (s.consists_name_list_); end_consists_name_list_ = scm_list_copy (s.end_consists_name_list_); accepts_name_list_ = scm_list_copy (s.accepts_name_list_); property_ops_ = scm_list_copy (s.property_ops_); - type_aliases_ = s.type_aliases_; + type_aliases_ = scm_list_copy (s.type_aliases_); translator_group_type_ = s.translator_group_type_; type_name_ = s.type_name_; } @@ -275,14 +289,16 @@ SCM Translator_def::clone_scm () const { Translator_def * t = new Translator_def (*this); - return t->unprotected_smobify_self (); + scm_gc_unprotect_object (t->self_scm()); + return t->self_scm(); } SCM Translator_def::make_scm () { Translator_def* t = new Translator_def; - return t->unprotected_smobify_self (); + scm_gc_unprotect_object (t->self_scm()); + return t->self_scm(); } void diff --git a/lily/translator.cc b/lily/translator.cc index 3b233d7f05..dd4ea8c236 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -32,6 +32,7 @@ Translator::init () Translator::Translator () { + self_scm_ = SCM_EOL; init (); output_def_ = 0; smobify_self (); @@ -39,6 +40,7 @@ Translator::Translator () Translator::Translator (Translator const &s) { + self_scm_ = SCM_EOL; init (); output_def_ = s.output_def_; type_string_ = s.type_string_; diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index b00c319c23..bb61ecbce4 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -134,6 +134,14 @@ Tuplet_bracket::brew_molecule (SCM smob) number_visibility = !par_beam; Grob * commonx = columns[0]->common_refpoint (columns.top (),X_AXIS); + + /* + Tuplet brackets are normally not broken, but we shouldn't crash if + they are. + */ + commonx = commonx->common_refpoint (sp->get_bound(LEFT), X_AXIS); + commonx = commonx->common_refpoint (sp->get_bound(RIGHT), X_AXIS); + Direction dir = Directional_element_interface::get (me); Grob * lgr = get_x_bound_grob (columns[0], dir); @@ -308,7 +316,7 @@ Tuplet_bracket::calc_position_and_height (Grob*me,Real *offset, Real * dy) { Real notey = columns[i]->extent (commony, Y_AXIS)[dir] - me->relative_coordinate (commony, Y_AXIS); - + Real x = columns[i]->relative_coordinate (commonx, X_AXIS) - x0; Real tuplety = *dy * x * factor; @@ -322,11 +330,12 @@ Tuplet_bracket::calc_position_and_height (Grob*me,Real *offset, Real * dy) /* horizontal brackets should not collide with staff lines. + */ - if (*dy == 0) + Real ss= Staff_symbol_referencer::staff_space (me); + if (*dy == 0 && fabs (*offset) < ss * Staff_symbol_referencer::staff_radius (me)) { // quantize, then do collision check. - Real ss= Staff_symbol_referencer::staff_space (me); *offset *= 2 / ss; *offset = rint (*offset); diff --git a/lily/unfolded-repeat-iterator.cc b/lily/unfolded-repeat-iterator.cc index 69bc3fbdc7..f4f56af6e4 100644 --- a/lily/unfolded-repeat-iterator.cc +++ b/lily/unfolded-repeat-iterator.cc @@ -15,7 +15,7 @@ source file of the GNU LilyPond music typesetter class Unfolded_repeat_iterator : public Sequential_iterator { public: - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); VIRTUAL_COPY_CONS (Music_iterator); protected: virtual SCM get_music_list () const; @@ -56,7 +56,7 @@ Unfolded_repeat_iterator::get_music_list () const class Volta_repeat_iterator : public Sequential_iterator { public: - static SCM constructor_cxx_function; + DECLARE_SCHEME_CALLBACK(constructor, ()); VIRTUAL_COPY_CONS (Music_iterator); Volta_repeat_iterator(); diff --git a/lily/virtual-font-metric.cc b/lily/virtual-font-metric.cc new file mode 100644 index 0000000000..276a245096 --- /dev/null +++ b/lily/virtual-font-metric.cc @@ -0,0 +1,106 @@ +/* + virtual-font-metric.cc -- implement Virtual_font_metric + +source file of the GNU LilyPond music typesetter + +(c) 2002 Han-Wen Nienhuys + + */ + +#include "virtual-font-metric.hh" +#include "all-font-metrics.hh" +#include "main.hh" +#include "molecule.hh" +#include "paper-def.hh" + + +/* + passing DEF is ughish. Should move into paperdef? + */ +Virtual_font_metric::Virtual_font_metric (SCM name_list, + Real mag,Paper_def*def) +{ + font_list_ = SCM_EOL; + SCM *tail = &font_list_; + for (SCM s = name_list; gh_pair_p (s); s = gh_cdr (s)) + { + SCM nm = gh_car (s); + + Font_metric *fm = def->find_font (nm, mag); + *tail = scm_cons (fm->self_scm(),SCM_EOL); + tail = SCM_CDRLOC (*tail); + } +} + +void +Virtual_font_metric::derived_mark()const +{ + scm_gc_mark (font_list_); +} + +int +Virtual_font_metric::count () const +{ + int k = 0; + for (SCM s = font_list_; gh_pair_p (s); s = gh_cdr (s)) + { + k+= unsmob_metrics (gh_car (s))->count (); + } + + return k; +} + +Molecule +Virtual_font_metric::find_by_name (String glyph) const +{ + Molecule m; + for (SCM s = font_list_; m.empty_b () && gh_pair_p (s); s = gh_cdr (s)) + { + m = unsmob_metrics (gh_car (s))->find_by_name (glyph); + } + + return m; +} + + + +Box +Virtual_font_metric::get_char (int code) const +{ + int last_k = 0; + for (SCM s = font_list_; gh_pair_p (s); s = gh_cdr (s)) + { + Font_metric* fm = unsmob_metrics (gh_car (s)); + int k = last_k + fm->count (); + if (last_k <= code && code < k) + { + return fm->get_char (code - last_k); + } + last_k = k; + } + + + return Box(); +} + + +Molecule +Virtual_font_metric::get_char_molecule (int code) const +{ + Molecule m ; + int last_k = 0; + for (SCM s = font_list_; gh_pair_p (s); s = gh_cdr (s)) + { + Font_metric* fm = unsmob_metrics (gh_car (s)); + int k = last_k + fm->count (); + if (last_k <= code && code < k) + { + m = fm->get_char_molecule (code - last_k); + break; + } + last_k = k; + } + + return m; +} + diff --git a/ly/a3-init.ly b/ly/a3-init.ly new file mode 100644 index 0000000000..4685cedbc4 --- /dev/null +++ b/ly/a3-init.ly @@ -0,0 +1,5 @@ +\version "1.5.68" +% a3-init.ly + +hsize = 296.9 \mm +vsize = 420.0 \mm diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 6684c0bc52..c195c75f97 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -134,6 +134,7 @@ VoiceContext = \translator { \consists "Arpeggio_engraver" \consists "Multi_measure_rest_engraver" \consists "Text_spanner_engraver" + \consists "Grob_pq_engraver" \consists "Ligature_bracket_engraver" \consists "Breathing_sign_engraver" @@ -346,7 +347,13 @@ ScoreContext = \translator { \consists "Repeat_acknowledge_engraver" \consists "Staff_collecting_engraver" + + % move the alias along with the engraver. + + %% TODO? add this alias from Timing_engraver::initialize() ? \consists "Timing_engraver" + \alias "Timing" + \consists "Output_property_engraver" \consists "System_start_delimiter_engraver" \consists "Mark_engraver" @@ -390,6 +397,7 @@ ScoreContext = \translator { automaticMelismata = ##t defaultBarType = #"|" + barNumberVisibility = #default-bar-number-visibility explicitClefVisibility = #all-visible explicitKeySignatureVisibility = #all-visible @@ -487,6 +495,10 @@ TabStaffContext = \translator { % 6 strings StaffSymbol \override #'line-count = #6 StaffSymbol \override #'staff-space = #1.5 + + stringOneTopmost = ##t + highStringOne = ##t + % One may change the strings tuning as following : % The lenght of the list must be equal to the number of string %TabNoteHead \override #'string-tunings = #'(10 10 10 10 10 10) @@ -495,12 +507,13 @@ TabStaffContext = \translator { clefGlyph = #"clefs-tab" clefPosition = #0 - % Don't draw stems over the tabature figures ! + % Don't draw stems over the tablature figures ! Stem \override #'avoid-note-head = ##t % No accidental in tablature ! \remove Accidental_engraver - stringTunings = #'(-20 -15 -10 -5 -1 4) + \remove Key_engraver + stringTunings = #guitar-tunings tablatureFormat = #fret-number-tablature-format } diff --git a/ly/performer-init.ly b/ly/performer-init.ly index 3bc296fab1..0735bce8f1 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -106,6 +106,7 @@ ScoreContext = \translator { \type "Score_performer" \name Score + \alias Timing instrument = #"bright acoustic" \accepts Staff \accepts GrandStaff @@ -115,7 +116,7 @@ ScoreContext = \translator { \accepts ChoirStaff \accepts RhythmicStaff \accepts ChordNames - + \alias "Timing" \consists "Timing_translator" \consists "Swallow_performer" diff --git a/ly/property-init.ly b/ly/property-init.ly index 0afb1888fb..003d54f2de 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -66,10 +66,10 @@ tupletBoth = { -cadenzaOn = \property Score.timing = ##f +cadenzaOn = \property Timing.timing = ##f cadenzaOff = { - \property Score.timing = ##t - \property Score.measurePosition = #(make-moment 0 1) + \property Timing.timing = ##t + \property Timing.measurePosition = #(make-moment 0 1) } newpage = { diff --git a/make/generic-rules.make b/make/generic-rules.make index e81890bf2d..b41e4846f0 100644 --- a/make/generic-rules.make +++ b/make/generic-rules.make @@ -14,10 +14,4 @@ $(outdir)/%: %.in include $(depth)/make/substitute.make -# HUH??? -$(outdir)/%.hh: $(doc-dir)/%.in - rm -f $@ - echo '_(' > $@ - cat $< | $(sed-quotes) | $(sed-newline) | $(sed-quote-line) >> $@ - echo ');' >> $@ diff --git a/make/lilypond-vars.make b/make/lilypond-vars.make index 516f519719..7d0d40cd6f 100644 --- a/make/lilypond-vars.make +++ b/make/lilypond-vars.make @@ -46,8 +46,7 @@ LILYPOND_BOOK = $(script-dir)/lilypond-book.py LILYPOND_BOOK_INCLUDES = -I $(pwd) -I $(outdir) -I$(input-dir) -I $(input-dir)/tricks/ -I $(input-dir)/regression/ -I $(input-dir)/test/ -I $(input-dir)/tutorial/ -I $(builddir)/mf/$(outconfbase)/ -I $(builddir)/mf/out/ LY2DVI = $(script-dir)/ly2dvi.py LYS_TO_TELY = $(buildscript-dir)/lys-to-tely.py -PS_TO_GIFS = $(buildscript-dir)/ps-to-gifs.sh -PS_TO_PNGS = $(buildscript-dir)/ps-to-pngs.sh + else ### some versions apparently choke on $(message) @@ -60,8 +59,6 @@ LILYPOND_BOOK = $(shell $(SHELL) -c 'type -p lilypond-book') LILYPOND_BOOK_INCLUDES = -I. -I.. -I$(outdir) LY2DVI = $(shell $(SHELL) -c 'type -p ly2dvi') LYS_TO_TELY = $(shell $(SHELL) -c 'type -p lys-to-tely') -PS_TO_GIFS = $(shell $(SHELL) -c 'type -p ps-to-gifs') -PS_TO_PNGS = $(shell $(SHELL) -c 'type -p ps-to-pngs') endif diff --git a/make/lilypond.lsm.in b/make/lilypond.lsm.in index 71bf18e624..8b8d1b9577 100644 --- a/make/lilypond.lsm.in +++ b/make/lilypond.lsm.in @@ -2,14 +2,16 @@ Begin3 Title: LilyPond Version: @TOPLEVEL_VERSION@ Entered-date: @DATE@ -Description: @BLURB@ +Description: LilyPond is a music typesetter. It produces beautiful sheet music +using a description file as input. LilyPond is part of the GNU +Project. Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) -Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) -Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k @package@-@TOPLEVEL_VERSION@.tar.gz -Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k @package@-@TOPLEVEL_VERSION@.tar.gz +Maintained-by: hanwen@cs.uu.nl (Han-Wen Nienhuys) +Primary-site: ftp.lilypond.org /pub/LilyPond/v1.6/ + 1500k @package@-@TOPLEVEL_VERSION@.tar.gz +Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/v1.6/ + 1500k @package@-@TOPLEVEL_VERSION@.tar.gz Copying-policy: GPL End diff --git a/make/lilypond.mandrake.spec.in b/make/lilypond.mandrake.spec.in index 4738a845e9..43edd6971d 100644 --- a/make/lilypond.mandrake.spec.in +++ b/make/lilypond.mandrake.spec.in @@ -1,19 +1,25 @@ +# Does info really work? +%define info yes + %define name lilypond %define version @TOPLEVEL_VERSION@ %define release 1mdk -Name: %{name} -Summary: A program for printing sheet music. -Version: %{version} -Release: %{release} -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-%{version}.tar.gz +Summary: A program for printing sheet music. +Name: %{name} +Version: %{version} +Release: %{release} +License: GPL +Group: Publishing +URL: http://www.lilypond.org/ +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-%{version}.tar.gz ## Patch0: lilypond-GNUmakefile.in.patch.bz2 -License: GPL -Group: Publishing -URL: http://www.lilypond.org/ -BuildRoot: %{_tmppath}/%{name}-buildroot -BuildRequires: guile guile-devel -Requires: tetex +Source1: %name-16x16.png.tar.bz2 +Source2: %name-32x32.png.tar.bz2 +Source3: %name-48x48.png.tar.bz2 +BuildRoot: %{_tmppath}/%{name}-buildroot +BuildRequires: guile guile-devel +Requires: tetex %description LilyPond is a music typesetter. It produces beautiful sheet music using a @@ -29,22 +35,23 @@ http://www.mutopiaproject.org for details). If you are new to lilypond, you will almost certainly want to install the "lilypond-extras" package in addition to the "lilypond" package. -You may also wish to investigate the "denemo" package, which provides a -graphical front end to lilypond. - -See the file README.first for more information. +## You may also wish to investigate the "denemo" package, which provides a +## graphical front end to lilypond. +## +## See the file README.first for more information. - -%package extras +%package documentation Summary: LilyPond documentation, examples and Mutopia files. Group: Publishing Requires: lilypond -%description extras +%description documentation The documentation of LilyPond, both in HTML and PostScript, along with example input files and the files from the Mutopia project. %prep +rm -rf $RPM_BUILD_ROOT + %setup -a 1 ## % patch0 -b .orig @@ -52,9 +59,16 @@ example input files and the files from the Mutopia project. # DO NOT use % { configure } , it hardcodes all paths, runs libtool, # so we can't do make prefix=/tmp/ install. # -- not sure what this comment means; it's a relic from the PPC spec file -- mbrown@fensystems.co.uk -./configure --disable-checking --disable-debugging --enable-printing --prefix=%{_prefix} --disable-optimise --enable-shared -make -make web-doc +##./configure --disable-checking --disable-debugging --enable-printing --prefix=%{_prefix} --disable-optimising --enable-shared +## Add options if needed +./configure --disable-checking --prefix=%{_prefix} --enable-optimising +make MAKE_PFA_FILES=1 all + +# make info +make -C Documentation + +# make html +make web-doc top-web %install @@ -64,83 +78,146 @@ RPM_DOC_ROOT=$RPM_BUILD_ROOT%{_docdir}/%{name}-%{version} rm -rf $RPM_DOC_ROOT mkdir -p $RPM_DOC_ROOT -make prefix="$RPM_BUILD_ROOT%{_prefix}" install -%{find_lang} %{name} +strip lily/out/lilypond +make prefix="$RPM_BUILD_ROOT%{_prefix}" MAKE_PFA_FILES=1 all install +# %{find_lang} %{name} + +%if info=="yes" +gzip -9fn $RPM_BUILD_ROOT%{_prefix}/info/* +%endif # Move info and man files into correct locations -mv $RPM_BUILD_ROOT/usr/info $RPM_BUILD_ROOT%{_infodir} -mv $RPM_BUILD_ROOT/usr/man $RPM_BUILD_ROOT%{_mandir} +# mv $RPM_BUILD_ROOT/usr/info $RPM_BUILD_ROOT%{_infodir} +# mv $RPM_BUILD_ROOT/usr/man $RPM_BUILD_ROOT%{_mandir} -# Move TeX font files into system TeX tree locations -mkdir -p $RPM_BUILD_ROOT%{_datadir}/texmf/fonts/{afm,source,tfm} -mv $RPM_BUILD_ROOT%{_datadir}/lilypond/afm $RPM_BUILD_ROOT%{_datadir}/texmf/fonts/afm/lilypond -mv $RPM_BUILD_ROOT%{_datadir}/lilypond/mf $RPM_BUILD_ROOT%{_datadir}/texmf/fonts/source/lilypond -mv $RPM_BUILD_ROOT%{_datadir}/lilypond/tfm $RPM_BUILD_ROOT%{_datadir}/texmf/fonts/tfm/lilypond -mkdir -p $RPM_BUILD_ROOT%{_datadir}/texmf/tex -mv $RPM_BUILD_ROOT%{_datadir}/lilypond/tex $RPM_BUILD_ROOT%{_datadir}/texmf/tex/lilypond +mkdir -p $RPM_BUILD_ROOT/usr/share/emacs/site-lisp/site-start.d +install -m 644 lilypond-mode.el lilypond-font-lock.el lilypond-indent.el $RPM_BUILD_ROOT/usr/share/emacs/site-lisp/ +install -m 644 lilypond-init.el $RPM_BUILD_ROOT/usr/share/emacs/site-lisp/site-start.d -# Copy emacs mode files into %{_datadir}/lilypond/emacs -mkdir -p $RPM_BUILD_ROOT%{_datadir}/lilypond/emacs -cp *.el $RPM_BUILD_ROOT%{_datadir}/lilypond/emacs/ +gzip -9fn $RPM_BUILD_ROOT%{_prefix}/man/man1/* + +mkdir -p $RPM_BUILD_ROOT%{_prefix}/../etc/profile.d +cp buildscripts/out/lilypond-profile $RPM_BUILD_ROOT%{_prefix}/../etc/profile.d/lilypond.sh +cp buildscripts/out/lilypond-login $RPM_BUILD_ROOT%{_prefix}/../etc/profile.d/lilypond.csh -# Create documentation tree in %{_docdir} -mkdir -p $RPM_DOC_ROOT/HTML -tar -C $RPM_DOC_ROOT/HTML -xzf out/web.tar.gz -ln -s HTML/input $RPM_DOC_ROOT/Examples -ln -s HTML/input/test $RPM_DOC_ROOT/Tricks -mkdir -p $RPM_DOC_ROOT/Printable -ln -s ../HTML/Documentation/user/out-www/lilypond.ps.gz $RPM_DOC_ROOT/Printable/Manual.ps.gz -ln -s ../HTML/Documentation/user/out-www/glossary.ps.gz $RPM_DOC_ROOT/Printable/Glossary.ps.gz -cp AUTHORS.txt CHANGES COPYING DEDICATION FAQ.txt NEWS README.txt VERSION README.mandrake $RPM_DOC_ROOT/README.first +# again, make sure that main package installs even if doco fails +mkdir -p web/out +tar -C web -xzf out/web.tar.gz + +# Create documentation tree in %{_docdir} +## mkdir -p $RPM_DOC_ROOT/HTML +## tar -C $RPM_DOC_ROOT/HTML -xzf out/web.tar.gz +## ln -s HTML/input $RPM_DOC_ROOT/Examples +## ln -s HTML/input/test $RPM_DOC_ROOT/Tricks + +## mkdir -p $RPM_DOC_ROOT/Printable +## ln -s ../HTML/Documentation/user/out-www/lilypond.ps.gz $RPM_DOC_ROOT/Printable/Manual.ps.gz +## ln -s ../HTML/Documentation/user/out-www/glossary.ps.gz $RPM_DOC_ROOT/Printable/Glossary.ps.gz +## cp AUTHORS.txt COPYING DEDICATION NEWS README.txt VERSION $RPM_DOC_ROOT/README.first + +# Menu +# Every entry must be changed according package specifications +# Pay attention to "section" "command" and "longtitle" + +mkdir -p $RPM_BUILD_ROOT%{_menudir} +cat >$RPM_BUILD_ROOT%{_menudir}/%{name} < $RPM_BUILD_ROOT/%{_miconsdir}/%{name}.png +bzcat %{SOURCE2} > $RPM_BUILD_ROOT/%{_iconsdir}/%{name}.png +bzcat %{SOURCE3} > $RPM_BUILD_ROOT/%{_liconsdir}/%{name}png %post -touch /tmp/.lilypond-install -rm `find /var/lib/texmf -name 'feta*pk' -or -name 'feta*tfm' -or -name 'parmesan*pk' -or -name 'parmesan*tfm' -print'` /tmp/.lilypond-install -/usr/bin/mktexlsr -%_install_info lilypond.info -%_install_info lilypond-internals.info +%{update_menus} -echo 'Please logout first before using LilyPond.' +touch /tmp/.lilypond-install +rm `find /var/lib/texmf -name 'feta*pk' -or -name 'feta*tfm' -or -name 'parmesan*pk' -or -name 'parmesan*tfm' -print` /tmp/.lilypond-install +%if info=="yes" +/sbin/install-info %{_prefix}/info/lilypond.info.gz %{_prefix}/info/dir +%endif %preun -%_remove_install_info lilypond.info -%_remove_install_info lilypond-internals.info + +%if info=="yes" +if [ $1 = 0 ]; then + /sbin/install-info --delete %{_prefix}/info/lilypond.info.gz %{_prefix}/info/dir +fi +%endif + +rm -f /usr/share/lilypond/%{version}/fonts/type1/fonts.dir +chkfontpath --remove=/usr/share/lilypond/%{version}/fonts/type1/ %postun -/usr/bin/mktexlsr - - -%files -f %{name}.lang -%defattr(-,root,root,0755) -%{_bindir}/* -%{_datadir}/lilypond/ -%{_datadir}/texmf/fonts/afm/lilypond -%{_datadir}/texmf/fonts/source/lilypond -%{_datadir}/texmf/fonts/tfm/lilypond -%{_datadir}/texmf/tex/lilypond - -%doc %{_infodir}/* -%doc %{_mandir}/man1/* -%doc %{_docdir}/%{name}-%{version}/AUTHORS.txt -%doc %{_docdir}/%{name}-%{version}/CHANGES -%doc %{_docdir}/%{name}-%{version}/COPYING -%doc %{_docdir}/%{name}-%{version}/DEDICATION -%doc %{_docdir}/%{name}-%{version}/FAQ.txt -%doc %{_docdir}/%{name}-%{version}/NEWS -%doc %{_docdir}/%{name}-%{version}/README.txt -%doc %{_docdir}/%{name}-%{version}/VERSION -%doc %{_docdir}/%{name}-%{version}/README.first - -%files extras -%defattr(-,root,root,0755) -%doc %{_docdir}/%{name}-%{version}/HTML -%doc %{_docdir}/%{name}-%{version}/Mutopia -%doc %{_docdir}/%{name}-%{version}/Printable -%doc %{_docdir}/%{name}-%{version}/Tricks -%doc %{_docdir}/%{name}-%{version}/Examples +%{clean_menus} + +%clean +## This section is meant to clean the build directory tree, $RPM_BUILD_ROOT +rm -rf $RPM_BUILD_ROOT +## %files -f %{name}.lang +%files +# The special tag %doc designates files being part of the documentation of the +# package. The files so-called will be placed in /usr/doc/lilypond-%{version}/ +%doc COPYING README.txt INSTALL.txt DEDICATION NEWS AUTHORS.txt +%{_datadir}/emacs/site-lisp/lilypond-* +# is the following really started during startup of emacs? +%{_datadir}/emacs/site-lisp/site-start.d/lilypond-* + +%{_prefix}/bin/abc2ly +%{_prefix}/bin/as2text +%{_prefix}/bin/convert-ly +%{_prefix}/bin/etf2ly +%{_prefix}/bin/lilypond +%{_prefix}/bin/ly2dvi +%{_prefix}/bin/midi2ly +%{_prefix}/bin/lilypond-book +%{_prefix}/bin/mup2ly +%{_prefix}/bin/musedata2ly +%{_prefix}/bin/pmx2ly + +%if info=="yes" +%{_prefix}/info/lilypond.info.gz +%{_prefix}/info/lilypond-internals.info.gz +%endif + +%{_prefix}/man/man1/abc2ly.1.bz2 +%{_prefix}/man/man1/as2text.1.bz2 +%{_prefix}/man/man1/convert-ly.1.bz2 +%{_prefix}/man/man1/etf2ly.1.bz2 +%{_prefix}/man/man1/lilypond.1.bz2 +%{_prefix}/man/man1/ly2dvi.1.bz2 +%{_prefix}/man/man1/midi2ly.1.bz2 +%{_prefix}/man/man1/lilypond-book.1.bz2 +%{_prefix}/man/man1/musedata2ly.1.bz2 +%{_prefix}/man/man1/mup2ly.1.bz2 +%{_prefix}/man/man1/pmx2ly.1.bz2 + +%{_prefix}/share/%{name}/%{version}/ +%{_prefix}/share/locale/*/LC_MESSAGES/lilypond.mo +%{_prefix}/../etc/profile.d/lilypond.* +%_bindir/* +%_menudir/* +%_miconsdir/* +%_iconsdir/* +%_liconsdir/* + +%files documentation + +%doc web/ + +%changelog +* Fri Aug 30 2002 Heikki Johannes Junes 1.6.0-1mdk +- Adapted from lilypond.redhat.skel and skeleton found in Mandrake's RPM-docs. +- TODO: info (?) and dependencies. %changelog * Fri Jun 01 2001 Lenny Cartier 1.4.2-1mdk diff --git a/make/lilypond.redhat.spec.in b/make/lilypond.redhat.spec.in index 763d1f0c8a..c7f0a50fcc 100644 --- a/make/lilypond.redhat.spec.in +++ b/make/lilypond.redhat.spec.in @@ -26,7 +26,7 @@ Group: Applications/Publishing %description documentation -The documentation of LilyPond, both in HTML and PostScript. +The documentation and example files of LilyPond. %prep %setup @@ -39,7 +39,7 @@ The documentation of LilyPond, both in HTML and PostScript. # In fact, do not take out the spaces between % and { in the above comment, # because RPM will gladly do a substitution anyway. -./configure --disable-checking --prefix=%{_prefix} --enable-optimise +./configure --disable-checking --prefix=%{_prefix} --enable-optimising make MAKE_PFA_FILES=1 all diff --git a/make/lilypond.suse.spec.in b/make/lilypond.suse.spec.in index c5e68f391e..b5c4cb4017 100644 --- a/make/lilypond.suse.spec.in +++ b/make/lilypond.suse.spec.in @@ -92,7 +92,7 @@ The documentation of LilyPond, both in HTML and PostScript. # In fact, do not take out the spaces between % and { , because RPM will gladly # do a substitution anyway. -CFLAGS="$RPM_OPT_FLAGS" ./configure --disable-checking --disable-debugging --enable-printing --prefix=%{_prefix} --enable-optimise --enable-shared +CFLAGS="$RPM_OPT_FLAGS" ./configure --disable-checking --disable-debugging --enable-printing --prefix=%{_prefix} --enable-optimising --enable-shared make LDFLAGS=-s "CFLAGS=$RPM_OPT_FLAGS" all diff --git a/make/ly-rules.make b/make/ly-rules.make index 4d5590f2da..dd3f297c4f 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -4,7 +4,7 @@ $(outdir)/%.latex: %.doc - rm -f $@ + -chmod a+w $@ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES)\ $(LILYPOND_BOOK_FLAGS) --verbose --dependencies --outdir=$(outdir) $< chmod -w $@ @@ -12,22 +12,25 @@ $(LILYPOND_BOOK_FLAGS) --verbose --dependencies --outdir=$(outdir) $< # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir. # it is not, for --srcdir builds $(outdir)/%.texi: %.tely - rm -f $@ + -chmod a+w $@ set|egrep '(TEX|LILY)' # ugh, what's this? $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --verbose $(LILYPOND_BOOK_FLAGS) $< chmod -w $@ $(outdir)/%.texi: $(outdir)/%.tely - rm -f $@ - set|egrep '(TEX|LILY)' # ugh, what's this? + -chmod a+w $@ +# debugging: +# set|egrep '(TEX|LILY)' $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --verbose $(LILYPOND_BOOK_FLAGS) $< - rm -f $< +# +# DON'T REMOVE SOURCE FILES, otherwise the .TEXI ALWAYS OUT OF DATE. +# rm -f $< chmod -w $@ # nexi: no-lily texi # for plain info doco: don't run lily $(outdir)/%.nexi: %.tely - rm -f $@ + -chmod a+w $@ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $(LILYPOND_BOOK_FLAGS) $< mv $(@D)/$(*F).texi $@ chmod -w $@ diff --git a/make/lysdoc-rules.make b/make/lysdoc-rules.make index 6c7f72bdf2..b41e4c7892 100644 --- a/make/lysdoc-rules.make +++ b/make/lysdoc-rules.make @@ -1,3 +1,6 @@ + + $(outdir)/$(NAME).tely: $(LY_FILES) $(PYTHON) ../../buildscripts/lys-to-tely.py --name=$(outdir)/$(NAME) --title="$(TITLE)" $(LY_FILES) + diff --git a/make/mutopia-rules.make b/make/mutopia-rules.make index 85ad770767..8320ee47cc 100644 --- a/make/mutopia-rules.make +++ b/make/mutopia-rules.make @@ -1,12 +1,8 @@ -$(outdir)/%.gif: $(outdir)/%.ps - sh $(PS_TO_GIFS) $< - -mv $(name-stem)-page*.gif $(outdir)/ - ln -s $(name-stem)-page1.gif $@ - $(outdir)/%.png: $(outdir)/%.ps - sh $(PS_TO_PNGS) $< + gs -sDEVICE=pnggray -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$(name-stem)-page%d.png" -r90 -dNOPAUSE $< -c quit + -mv $(name-stem)-page*.png $(outdir)/ ln -s $(name-stem)-page1.png $@ diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 0144f77770..8d1574848d 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -56,7 +56,9 @@ INSTALLATION_OUT_FILES3=$(TFM_FILES) # making pfas takes a lot of CPU time. Let's skip it for now. #MAKE_PFA_FILES=1 -PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa)) $(outdir)/cmbxti8.pfa + +SAUTER_FONT_FILES=cmbxti7 cmbxti8 cmbxti12 cmbxti14 cmcsc7 cmcsc12 cmtt17 cmbx14 cmbx17 +PFA_FILES= $(addprefix $(outdir)/, $(addsuffix .pfa, $(SAUTER_FONT_FILES)) $(FONT_FILES:.mf=.pfa)) ifdef MAKE_PFA_FILES ALL_GEN_FILES += $(PFA_FILES) $(outdir)/lilypond.map $(outdir)/fonts.scale @@ -69,7 +71,7 @@ INSTALLATION_OUT_FILES5=$(outdir)/lilypond.map endif $(outdir)/lilypond.map: - echo $(FONT_FILES:.mf=) | tr ' ' '\n' | \ + echo $(notdir $(PFA_FILES:.pfa=)) | tr ' ' '\n' | \ sed 's/\(.*\)/\1 \1 <\1.pfa/' > $@ $(outdir)/fonts.scale: @@ -89,9 +91,9 @@ local-clean: rm -f mfplain.mem mfplain.log rm -f *.tfm *.log -pfa: $(PFA_FILES) +pfa: $(PFA_FILES) $(outdir)/lilypond.map $(outdir)/fonts.scale # needed for web documentation -$(outdir)/cmbxti8.pfa: - $(MFTRACE) -I $(outdir)/ --pfa --simplify --keep-trying cmbxti8 - mv cmbxti8.pfa $(outdir)/ +$(addprefix $(outdir)/, $(SAUTER_FONT_FILES:=.pfa)): + $(foreach i, $(SAUTER_FONT_FILES), \ + $(MFTRACE) -I $(outdir)/ --pfa --simplify --keep-trying $(i) && mv $(i).pfa $(outdir)/ && ) true diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf index 4549a17f35..4da3607f7f 100644 --- a/mf/feta-eindelijk.mf +++ b/mf/feta-eindelijk.mf @@ -95,17 +95,23 @@ fet_endchar; define_pixels(breve_rest_y, breve_rest_x, multi_rest_x, multi_beam_height); +fet_beginchar("maxima rest", "-3", "maximarest"); + set_char_box(0, 3 breve_rest_x#, breve_rest_y#, breve_rest_y#); + draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); + addto currentpicture also currentpicture shifted (2 breve_rest_x, 0); +fet_endchar; fet_beginchar("longa rest", "-2", "longarest"); - set_char_box(0, breve_rest_x#, breve_rest_y#, breve_rest_y#); - draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); + set_char_box(0, breve_rest_x#, breve_rest_y#, breve_rest_y#); + draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); fet_endchar; fet_beginchar("breve rest", "-1", "breverest"); - set_char_box(0, breve_rest_x#, 0, breve_rest_y#); - draw_block ((0,0), (breve_rest_x, floor (breve_rest_y))); + set_char_box(0, breve_rest_x#, 0, breve_rest_y#); + draw_block ((0,0), (breve_rest_x, floor (breve_rest_y))); fet_endchar; + tracingvariables := 1; fet_beginchar("Quarter rest","2","quartrest"); diff --git a/mf/parmesan-heads.mf b/mf/parmesan-heads.mf index 2b35a7eb62..49c964d937 100644 --- a/mf/parmesan-heads.mf +++ b/mf/parmesan-heads.mf @@ -486,50 +486,50 @@ def inclinatum_char(expr verbose_name, internal_name, mudela_name, enddef; % punctum -punctum_char("Ed. Vat. punctum", "0vaticana_punctum", "vatpunctumhead", +punctum_char("Ed. Vat. punctum", "vaticana_punctum", "vatpunctumhead", false, false, false, false, false, false, false, false, false, 1.0); % punctum cavum (for OpusTeX compatibility) -punctum_char("Ed. Vat. punctum cavum", "0vaticana_punctum_cavum", +punctum_char("Ed. Vat. punctum cavum", "vaticana_punctum_cavum", "vatpunctumcavumhead", false, false, false, true, false, false, false, false, false, 1.0); % linea punctum (for OpusTeX compatibility) -punctum_char("Ed. Vat. linea punctum", "0vaticana_linea_punctum", +punctum_char("Ed. Vat. linea punctum", "vaticana_linea_punctum", "vatlineapunctumhead", false, false, true, false, false, false, false, false, false, 1.0); % linea punctum cavum (for OpusTeX compatibility) -punctum_char("Ed. Vat. linea punctum cavum", "0vaticana_linea_punctum_cavum", +punctum_char("Ed. Vat. linea punctum cavum", "vaticana_linea_punctum_cavum", "vatlineapunctumcavumhead", false, false, true, true, false, false, false, false, false, 1.0); % punctum inclinatum -inclinatum_char("Ed. Vat. inclinatum", "0vaticana_inclinatum", +inclinatum_char("Ed. Vat. inclinatum", "vaticana_inclinatum", "vatinclinatumhead", false, false, false); % virga (i.e. right stemmed punctum) -punctum_char("Ed. Vat. virga", "0vaticana_virga", "vatvirgahead", +punctum_char("Ed. Vat. virga", "vaticana_virga", "vatvirgahead", false, true, false, false, false, false, false, false, false, 1.0); % left stemmed punctum as used in clivis (flexa) ligature -punctum_char("Ed. Vat. reverse virga", "0vaticana_rvirga", "vatrvirgahead", +punctum_char("Ed. Vat. reverse virga", "vaticana_rvirga", "vatrvirgahead", true, false, false, false, false, false, false, false, false, 1.0); % pes lower punctum -punctum_char("Ed. Vat. pes lower punctum", "0vaticana_lpes", "vatlpeshead", +punctum_char("Ed. Vat. pes lower punctum", "vaticana_lpes", "vatlpeshead", false, false, false, false, true, false, true, false, false, 1.0); % pes upper punctum -punctum_char("Ed. Vat. pes upper punctum", "0vaticana_upes", "vatupeshead", +punctum_char("Ed. Vat. pes upper punctum", "vaticana_upes", "vatupeshead", false, false, false, false, true, false, false, false, false, 1.0); @@ -539,29 +539,29 @@ punctum_char("Ed. Vat. pes upper punctum", "0vaticana_upes", "vatupeshead", % punctum to avoid collision with the lower punctum note of the pes when % the upper punctum sits directly on top of the lower punctum. % -punctum_char("Ed. Vat. var pes upper punctum", "0vaticana_vupes", +punctum_char("Ed. Vat. var pes upper punctum", "vaticana_vupes", "vatvupeshead", false, false, false, false, true, false, false, false, true, 1.0); % small punctum as used in epiphonus/cephalicus -punctum_char("Ed. Vat. plica", "0vaticana_plica", "vatplicahead", +punctum_char("Ed. Vat. plica", "vaticana_plica", "vatplicahead", false, false, false, false, true, false, false, false, false, 0.5); % excentric punctum as used in epiphonus -punctum_char("Ed. Vat. epiphonus", "0vaticana_epiphonus", "vatepiphonushead", +punctum_char("Ed. Vat. epiphonus", "vaticana_epiphonus", "vatepiphonushead", false, false, false, false, false, false, true, true, false, 1.0); % excentric punctum as used in cephalicus -punctum_char("Ed. Vat. cephalicus", "0vaticana_cephalicus", +punctum_char("Ed. Vat. cephalicus", "vaticana_cephalicus", "vatcephalicushead", false, false, false, false, false, false, false, true, false, 1.0); % quilisma -fet_beginchar("Ed. Vat. quilisma", "0vaticana_quilisma", "vatquilismahead") +fet_beginchar("Ed. Vat. quilisma", "vaticana_quilisma", "vatquilismahead") save b_h,a_w; a_b:=1.54; % b_h*a_b/a_w = wd/ht b_h:=0.85; @@ -589,39 +589,39 @@ fet_beginchar("Ed. Vat. quilisma", "0vaticana_quilisma", "vatquilismahead") fet_endchar; % solesmes punctum inclinatum parvum -inclinatum_char("Solesmes punctum inclinatum parvum", "0solesmes_incl_parvum", +inclinatum_char("Solesmes punctum inclinatum parvum", "solesmes_incl_parvum", "solinclparvumhead", true, false, false); % solesmes punctum auctum ascendens -punctum_char("Solesmes punctum auctum ascendens", "0solesmes_auct_asc", +punctum_char("Solesmes punctum auctum ascendens", "solesmes_auct_asc", "solauctaschead", false, false, false, false, false, true, true, false, false, 1.0); % solesmes punctum auctum descendens -punctum_char("Solesmes punctum auctum descendens", "0solesmes_auct_desc", +punctum_char("Solesmes punctum auctum descendens", "solesmes_auct_desc", "solauctdeschead", false, false, false, false, false, true, false, false, false, 1.0); % solesmes punctum inclinatum auctum -inclinatum_char("Solesmes punctum incl. auctum", "0solesmes_incl_auctum", +inclinatum_char("Solesmes punctum incl. auctum", "solesmes_incl_auctum", "solpunctuminclinatumauctumhead", false, false, true); % solesmes stropha -inclinatum_char("Solesmes stropha", "0solesmes_stropha", +inclinatum_char("Solesmes stropha", "solesmes_stropha", "solstrophahead", false, true, false); % solesmes stropha aucta -inclinatum_char("Solesmes stropha aucta", "0solesmes_stropha_aucta", +inclinatum_char("Solesmes stropha aucta", "solesmes_stropha_aucta", "solstrophaauctahead", false, true, true); % solesmes oriscus -fet_beginchar("Solesmes oriscus", "0solesmes_oriscus", +fet_beginchar("Solesmes oriscus", "solesmes_oriscus", "soloriscushead") save b_h, a_w; a_b := 1.54; % b_h*a_b/a_w = wd/ht @@ -658,7 +658,7 @@ fet_endchar; % % inclinatum -fet_beginchar("Ed. Med. inclinatum", "0medicaea_inclinatum", +fet_beginchar("Ed. Med. inclinatum", "medicaea_inclinatum", "medinclinatumhead") save b_h, a_w; a_b := 1.54; % b_h*a_b/a_w = wd/ht @@ -724,15 +724,15 @@ def punctum_char (expr verbose_name, internal_name, mudela_name, enddef; % punctum -punctum_char("Ed. Med. punctum", "0medicaea_punctum", "medpunctumhead", +punctum_char("Ed. Med. punctum", "medicaea_punctum", "medpunctumhead", false, false); % left up-stemmed punctum -punctum_char("Ed. Med. reverse virga", "0medicaea_rvirga", "medrvirgahead", +punctum_char("Ed. Med. reverse virga", "medicaea_rvirga", "medrvirgahead", true, false); % virga (i.e. left down-stemmed punctum) -punctum_char("Ed. Med. virga", "0medicaea_virga", "medvirgahead", +punctum_char("Ed. Med. virga", "medicaea_virga", "medvirgahead", false, true); %%%%%%%% @@ -783,13 +783,13 @@ def punctum_char (expr verbose_name, internal_name, mudela_name, enddef; % punctum -punctum_char("Hufnagel punctum", "0hufnagel_punctum", "hufpunctumhead", false) +punctum_char("Hufnagel punctum", "hufnagel_punctum", "hufpunctumhead", false) % virga -punctum_char("Hufnagel virga", "0hufnagel_virga", "hufvirgahead", true) +punctum_char("Hufnagel virga", "hufnagel_virga", "hufvirgahead", true) % pes lower punctum -fet_beginchar("Hufnagel pes lower punctum", "0hufnagel_lpes", "huflpeshead") +fet_beginchar("Hufnagel pes lower punctum", "hufnagel_lpes", "huflpeshead") save b_h, a_w; a_b := 1.54; % b_h*a_b/a_w = wd/ht b_h := 0.85; diff --git a/po/da.po b/po/da.po index ca3f6df0ab..2e737d14df 100644 --- a/po/da.po +++ b/po/da.po @@ -1,12 +1,13 @@ # Danish translation of lilypond # Copyright (C) 2001 Free Software Foundation, Inc. -# Keld Simonsen , 2001. +# Keld Simonsen , 2001-2002. +# Reviewed 2001-09-28 Rune Zedeler # msgid "" msgstr "" -"Project-Id-Version: lilypond 1.4.6\n" +"Project-Id-Version: lilypond 1.6.0\n" "POT-Creation-Date: 2002-08-18 17:05+0200\n" -"PO-Revision-Date: 2001-09-22 21:00+0200\n" +"PO-Revision-Date: 2002-09-07 21:00+0200\n" "Last-Translator: Keld Simonsen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" @@ -19,9 +20,7 @@ msgid "Running %s..." msgstr "Kør %s..." #: ly2dvi.py:118 -msgid "" -"Distributed under terms of the GNU General Public License. It comes with NO " -"WARRANTY." +msgid "Distributed under terms of the GNU General Public License. It comes with NO WARRANTY." msgstr "" #: ly2dvi.py:125 midi2ly.py:148 mup2ly.py:143 update-lily.py:137 input.cc:87 @@ -97,9 +96,9 @@ msgstr "tilf # %s er programmets navn #: ly2dvi.py:338 -#, fuzzy, c-format +#, c-format msgid "keep all output, output to directory %s.dir" -msgstr "behold al uddata, og navngiv kataloget %s.dir" +msgstr "behold al uddata, udskrivo i kataloget %s.dir" #: ly2dvi.py:339 msgid "don't run LilyPond" @@ -119,7 +118,7 @@ msgstr "skriv uddata til FIL" #: ly2dvi.py:342 msgid "find pfa fonts used in FILE" -msgstr "" +msgstr "find pfa-skrifttyper brugt i FIL" #: ly2dvi.py:344 msgid "set the resolution of the preview to RES" @@ -130,9 +129,8 @@ msgid "generate PostScript output" msgstr "lav PostScript-uddata" #: ly2dvi.py:346 -#, fuzzy msgid "generate PDF output" -msgstr "lav PostScript-uddata" +msgstr "lav PDF-uddata" #: ly2dvi.py:347 msgid "use pdflatex to generate a PDF output" @@ -164,14 +162,14 @@ msgid "show warranty and copyright" msgstr "vis garanti og copyright" #: ly2dvi.py:448 -#, fuzzy, c-format +#, c-format msgid "no such setting: `%s'" -msgstr "indstillingen findes ikke: %s" +msgstr "indstillingen findes ikke: '%s'" #: ly2dvi.py:508 #, c-format msgid "LilyPond crashed (signal %d)." -msgstr "" +msgstr "LilyPond gik ned (signal %d)." #: ly2dvi.py:509 msgid "Please submit a bug report to bug-lilypond@gnu.org" @@ -188,14 +186,14 @@ msgid "Analyzing %s..." msgstr "Analyserer %s..." #: ly2dvi.py:578 -#, fuzzy, c-format +#, c-format msgid "no LilyPond output found for `%s'" -msgstr "ingen lilyponduddata fundet for %s" +msgstr "ingen lilyponduddata fundet for '%s'" #: ly2dvi.py:618 -#, fuzzy, c-format +#, c-format msgid "invalid value: `%s'" -msgstr "ugyldigt værdi: %s" +msgstr "ugyldig værdi: '%s'" #: ly2dvi.py:724 msgid "LaTeX failed on the output file." @@ -206,14 +204,14 @@ msgid "The error log is as follows:" msgstr "" #: ly2dvi.py:849 -#, fuzzy, c-format +#, c-format msgid "not a PostScript file: `%s'" -msgstr "kan ikke åbne fil: \"%s\"" +msgstr "ikke en PostScript fil: '%s'" #: ly2dvi.py:865 midi2ly.py:1012 update-lily.py:458 #, c-format msgid "getopt says: `%s'" -msgstr "" +msgstr "getopt siger: '%s'" #: ly2dvi.py:948 msgid "pseudo filter" @@ -224,9 +222,9 @@ msgid "pseudo filter only for single input file" msgstr "" #: ly2dvi.py:980 -#, fuzzy, c-format +#, c-format msgid "filename should not contain spaces: `%s'" -msgstr "Indholder allerede: \"%s\"" +msgstr "filnavn bør ikke indeholde mellemrum: '%s'" # hær er det spørg om skrivning til en fil #: ly2dvi.py:1076 input-file-results.cc:67 @@ -248,13 +246,12 @@ msgid "%s output to `%s'..." msgstr "%s udskrevet til \"%s\"..." #: ly2dvi.py:1111 -#, fuzzy msgid "no files specified on command line" msgstr "ingen filer angivne på kommandolinjen." #: midi2ly.py:92 msgid "Convert MIDI to LilyPond source" -msgstr "" +msgstr "Konvertér MIDI til LilyPond-klide" #: midi2ly.py:95 msgid "print absolute pitches" @@ -270,17 +267,16 @@ msgstr "" #: midi2ly.py:97 msgid "print explicit durations" -msgstr "" +msgstr "udskriv eksplicitte længder" #: midi2ly.py:99 -#, fuzzy msgid "ALT[:MINOR]" -msgstr "TONE[:MOL]" +msgstr "" #: midi2ly.py:99 #, fuzzy msgid "set key: ALT=+sharps|-flats; MINOR=1" -msgstr "sæt tonart: TONE +forhøjelser/-sænkninger; :1 mol" +msgstr "sæt toneart: TONE +forhøjelser/-sænkninger; :1 mol" #: midi2ly.py:101 msgid "quantise note starts on DUR" @@ -300,16 +296,15 @@ msgstr "" #: midi2ly.py:1027 msgid "Example:" -msgstr "" +msgstr "Eksempel:" #: midi2ly.py:1081 msgid "no files specified on command line." msgstr "ingen filer angivne på kommandolinjen." #: mup2ly.py:69 -#, fuzzy msgid "Convert mup to LilyPond source" -msgstr "Konvertér mup til ly" +msgstr "Konvertér mup til LilyPond-kilde" #: mup2ly.py:72 msgid "debug" @@ -440,19 +435,19 @@ msgid "invalid argument `%s' to option `%s'" msgstr "ugyldigt argument \"%s\" til flag \"%s\"" #: warn.cc:24 -#, fuzzy, c-format +#, c-format msgid "warning: %s\n" -msgstr "advarsel: " +msgstr "advarsel: %s\n" #: warn.cc:30 -#, fuzzy, c-format +#, c-format msgid "error: %s\n" -msgstr "fejl: " +msgstr "fejl: %s\n" #: warn.cc:43 -#, fuzzy, c-format +#, c-format msgid "programming error: %s (Continuing; cross thumbs)\n" -msgstr " (Fortsætter, kryds fingrene)" +msgstr "programfejl: %s (Fortsætter, kryds fingrene)\n" #: accidental-engraver.cc:181 new-accidental-engraver.cc:237 #, c-format @@ -460,9 +455,9 @@ msgid "Accidental typesetting list must begin with context-name: %s" msgstr "" #: accidental-engraver.cc:206 new-accidental-engraver.cc:262 -#, fuzzy, c-format +#, c-format msgid "unknown accidental typesetting: %s. Ignored" -msgstr "ukendt \"escaped\" streng: \"\\%s\"" +msgstr "" #: accidental-engraver.cc:222 new-accidental-engraver.cc:278 #, c-format @@ -500,12 +495,8 @@ msgid "does not match: `%s'" msgstr "matcher ikke: \"%s\"" #: all-font-metrics.cc:102 -msgid "" -" Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V " -"to show font paths." -msgstr "" -" Genopbyg alle .afm-filer, og fjern alle .pk- og .tfm-filer. Kør igen med -V " -"for at vise skrifttypesøgestier." +msgid " Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V to show font paths." +msgstr " Genopbyg alle .afm-filer, og fjern alle .pk- og .tfm-filer. Kør igen med -V for at vise skrifttypesøgestier." #: all-font-metrics.cc:167 #, c-format @@ -561,25 +552,21 @@ msgid "beam was started here" msgstr "bjælken startede her" #: beam.cc:134 -#, fuzzy msgid "beam has less than two visible stems" -msgstr "bjælke har mindre end to nodehalse" +msgstr "bjælke har mindre end to synlige nodehalse" #: beam.cc:139 -#, fuzzy msgid "Beam has less than two stems. Removing beam." -msgstr "bjælke har mindre end to nodehalse" +msgstr "Bjælke har mindre end to nodehalse. Fjerner bjælke." #: beam.cc:951 -msgid "" -"Not sure that we can find a nice beam slope (no viable initial configuration " -"found)." -msgstr "" +msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)." +msgstr "Ikke sikker på at vi kan finde en pæn hældning på bjælken (ingen brugelig initiel konfiguration fundet)." #: break-align-interface.cc:166 -#, fuzzy, c-format +#, c-format msgid "No spacing entry from %s to `%s'" -msgstr "Tilføjer ikke oversætter: \"%s\"" +msgstr "Ingen mellemrums-indgang fra %s til `%s'" #: change-iterator.cc:22 #, c-format @@ -636,9 +623,8 @@ msgid "already have a decrescendo" msgstr "har allerede et diminuendo" #: dynamic-engraver.cc:215 -#, fuzzy msgid "Cresc started here" -msgstr "bjælken startede her" +msgstr "Cresc startede her" #: dynamic-engraver.cc:307 msgid "unterminated (de)crescendo" @@ -650,13 +636,11 @@ msgstr "uafsluttet udvider" #: extender-engraver.cc:108 msgid "Nothing to connect extender to on the left. Ignoring extender request." -msgstr "" -"Der er ingenting at forbinde udvideren mod til venstre. Ignorerer ønsket om " -"udvider" +msgstr "Der er ingenting at forbinde udvideren mod til venstre. Ignorerer ønsket om udvider" #: folded-repeat-iterator.cc:78 msgid "no one to print a repeat brace" -msgstr "det er ingen som kan skrive et gentagelsestegn" +msgstr "der er ingen som kan skrive et gentagelsestegn" #: font-interface.cc:238 msgid "couldn't find any font satisfying " @@ -685,9 +669,7 @@ msgstr "uafsluttet bindestreg" #: hyphen-engraver.cc:101 msgid "Nothing to connect hyphen to on the left. Ignoring hyphen request." -msgstr "" -"Det er ingenting at forbinde bindestregen mod til venstre. Ignorerer " -"bindestregsforespørgslen." +msgstr "Der er ingenting at forbinde bindestregen med til venstre. Ignorerer bindestregsforespørgslen." #: input-file-results.cc:71 source-file.cc:52 streams.cc:38 #, c-format @@ -724,22 +706,22 @@ msgid "FIXME: key change merge" msgstr "FIX: tonartsskiftsfletning" #: kpath.cc:64 -#, fuzzy, c-format +#, c-format msgid "Kpathsea couldn't find TFM file `%s'" -msgstr "kan ikke finde fil: \"%s\"" +msgstr "Kpathsea kunne ikke finde TMF-fil: \"%s\"" #: ligature-bracket.cc:105 ligature-bracket.cc:139 ligature-engraver.cc:124 msgid "no left bound" -msgstr "" +msgstr "Ingen venstrekant" #: ligature-engraver.cc:81 #, fuzzy msgid "can't find start of ligature" -msgstr "kan ikke finde start på bue" +msgstr "kan ikke finde start på legatobue" #: ligature-engraver.cc:86 msgid "no right bound" -msgstr "" +msgstr "Ingen højrekant" #: ligature-engraver.cc:108 #, fuzzy @@ -749,7 +731,7 @@ msgstr "har allerede en bj #: ligature-engraver.cc:166 #, fuzzy msgid "unterminated ligature" -msgstr "uafsluttet bue" +msgstr "uafsluttet legatobue" #: ligature-engraver.cc:183 msgid "ligature may not contain rest; ignoring rest" @@ -763,28 +745,25 @@ msgstr "bj #: lily-guile.cc:99 #, c-format msgid "(load path: `%s')" -msgstr "(indlæsningssøgesti: \"%s\"" +msgstr "(indlæsningssøgesti: \"%s\")" #: lily-guile.cc:582 -#, fuzzy, c-format +#, c-format msgid "Can't find property type-check for `%s' (%s)." -msgstr "" -"Kan ikke finde egenskabstypekontrol for \"%s\". Måske har du lavet en " -"tastefejl? Laver tildeling alligevel." +msgstr "Kan ikke finde typetjek for egenskab af '%s' (%s)." #: lily-guile.cc:585 msgid "Perhaps you made a typing error?" -msgstr "" +msgstr "Måske lavede du en tastefejl?" #: lily-guile.cc:591 msgid "Doing assignment anyway." -msgstr "" +msgstr "Laver tildeling aligevel." #: lily-guile.cc:605 #, c-format msgid "Type check for `%s' failed; value `%s' must be of type `%s'" -msgstr "" -"Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\"" +msgstr "Typekontrol for \"%s\" mislykkedes; værdi \"%s\" skal have typen \"%s\"" #: lookup.cc:141 msgid "round filled box horizontal extent smaller than blot; decreasing blot" @@ -796,7 +775,7 @@ msgstr "" #: lyric-phrasing-engraver.cc:311 msgid "lyrics found without any matching notehead" -msgstr "tekst fundet uden noget matchende nodehoved" +msgstr "tekst fundet uden noget tilhørende nodehoved" #: lyric-phrasing-engraver.cc:317 msgid "Huh? Melismatic note found to have associated lyrics." @@ -808,7 +787,7 @@ msgstr "UDTR" #: main.cc:107 msgid "set options, use -e '(ly-option-usage)' for help" -msgstr "" +msgstr "sæt alternativer, brug -e '(ly-option-usage)' for hjælp" #. another bug in option parser: --output=foe is taken as an abbreviation #. for --output-format @@ -817,8 +796,9 @@ msgid "EXT" msgstr "FMT" #: main.cc:110 +#, fuzzy msgid "use output format EXT" -msgstr "" +msgstr "brug uddataformat FMT (scm, ps, tex eller as)" #: main.cc:112 msgid "FIELD" @@ -826,7 +806,7 @@ msgstr "FELT" #: main.cc:112 msgid "write header field to BASENAME.FIELD" -msgstr "skriv rubrikfælt til BASNAVN.FELT" +msgstr "skriv rubrikfelt til BASENAVN.FELT" #: main.cc:113 msgid "add DIR to search path" @@ -980,7 +960,7 @@ msgstr "kan ikke finde omgivelsen \"%s\"" #: music.cc:159 #, c-format msgid "Transposition by %s makes accidental larger than two" -msgstr "Transponering med %s gør accicental større end to" +msgstr "Transponering med %s medfører løst fortegn større end to" #: my-lily-lexer.cc:142 #, c-format @@ -998,15 +978,15 @@ msgstr "Tolker..." #: my-lily-parser.cc:54 msgid "Braces don't match" -msgstr "Krølleparenteser passer ikke" +msgstr "Klammer passer ikke" #: note-collision.cc:340 msgid "Too many clashing notecolumns. Ignoring them." -msgstr "For mange sammenhængende nodekolonner. Ignorerer dem." +msgstr "For mange overlappende nodekolonner. Ignorerer dem." #: note-head.cc:134 msgid "Symbol not found, " -msgstr "" +msgstr "Symbol ikke fundet, " #: output-property-music-iterator.cc:20 request-chord-iterator.cc:76 #, c-format @@ -1023,9 +1003,9 @@ msgid ", at " msgstr ", ved " #: paper-score.cc:77 -#, fuzzy, c-format +#, c-format msgid "Element count %d (spanners %d) " -msgstr "Elementantal %d " +msgstr "" #: paper-score.cc:82 msgid "Preprocessing elements..." @@ -1037,7 +1017,7 @@ msgstr "Udskriver partitur, defineret ved: " #: parse-scm.cc:80 msgid "GUILE signaled an error for the expression begining here" -msgstr "" +msgstr "GUILE signalerede en fejl for udtrykket, der begynder her" #. #. We could change the current translator's id, but that would make @@ -1048,7 +1028,7 @@ msgstr "" #: part-combine-music-iterator.cc:116 #, c-format msgid "I'm one myself: `%s'" -msgstr "Jag er selv én: \"%s\"" +msgstr "Jeg er selv én: \"%s\"" #: part-combine-music-iterator.cc:119 #, c-format @@ -1057,11 +1037,11 @@ msgstr "ingen af disse i min familie: \"%s\"" #: percent-repeat-engraver.cc:116 msgid "Don't know how to handle a percent repeat of this length." -msgstr "Véd ikke hvordan en procentgentagelse af denne længde skal håndteres." +msgstr "Véd ikke hvordan en procenttegnsgentagelse (percent) af denne længde skal håndteres." #: percent-repeat-iterator.cc:53 msgid "no one to print a percent" -msgstr "der er ingen som kan skrive en procent" +msgstr "der er ingen som kan skrive et procent-tegn" #: performance.cc:51 msgid "Track ... " @@ -1072,9 +1052,8 @@ msgid "Creator: " msgstr "Skaber: " #: performance.cc:103 -#, fuzzy msgid "at " -msgstr ", ved " +msgstr "ved " #: performance.cc:114 #, c-format @@ -1101,9 +1080,8 @@ msgid "can't find start of piano pedal: `%s'" msgstr "kan ikke finde start på pianopedal: \"%s\"" #: piano-pedal-engraver.cc:405 -#, fuzzy msgid "unterminated pedal bracket" -msgstr "uafsluttet bjælke" +msgstr "" #: pitch.cc:25 msgid "Pitch arguments out of range" @@ -1155,13 +1133,11 @@ msgid " Evalute the Scheme EXPR before parsing any .ly files." msgstr "" #: scm-option.cc:48 -msgid "" -" Multiple -e options may be given, they will be evaluated sequentially." +msgid " Multiple -e options may be given, they will be evaluated sequentially." msgstr "" #: scm-option.cc:50 -msgid "" -" The function ly-set-option allows for access to some internal variables." +msgid " The function ly-set-option allows for access to some internal variables." msgstr "" #: scm-option.cc:52 @@ -1177,9 +1153,9 @@ msgid "Unknown internal option!" msgstr "" #: score-engraver.cc:102 -#, fuzzy, c-format +#, c-format msgid "can't find `%s'" -msgstr "kan ikke finde: \"%s\"" +msgstr "kan ikke finde: '%s'" #: score-engraver.cc:103 msgid "Fonts have not been installed properly. Aborting" @@ -1230,22 +1206,21 @@ msgstr "" #: slur-engraver.cc:140 msgid "unterminated slur" -msgstr "uafsluttet bue" +msgstr "uafsluttet legatobue" #. How to shut up this warning, when Voice_devnull_engraver has #. eaten start request? #: slur-engraver.cc:157 msgid "can't find start of slur" -msgstr "kan ikke finde start på bue" +msgstr "kan ikke finde start på legatobue" #: slur.cc:53 -#, fuzzy msgid "Putting slur over rest." -msgstr "Sætter bue over pause. Ignorerer." +msgstr "Sætter legatobue over pause." #: slur.cc:424 msgid "Slur over rest?" -msgstr "Bue over pause?" +msgstr "Legatobue over pause?" #: source-file.cc:65 #, c-format @@ -1269,7 +1244,7 @@ msgstr "" #: stem-engraver.cc:117 #, c-format msgid "Adding note head to incompatible stem (type = %d)" -msgstr "Tilføjer nodehoved til inkompatibel bue (type = %d)" +msgstr "Tilføjer nodehoved til inkompatibel nodehals (type = %d)" #: stem.cc:118 msgid "Weird stem size; check for narrow beams" @@ -1324,8 +1299,7 @@ msgstr "TFM-rubrik i \"%s\" har kun %u ord" #: tfm-reader.cc:142 #, c-format msgid "%s: TFM file has %u parameters, which is more than the %u I can handle" -msgstr "" -"%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere" +msgstr "%s: TFM-fil har %u parametre, hvilket er mere end de %u jeg kan håndtere" #: tfm.cc:83 #, c-format @@ -1334,15 +1308,15 @@ msgstr "kan ikke finde ASCII-tegn: %d" #: tie-engraver.cc:216 msgid "lonely tie" -msgstr "ensom bue" +msgstr "ensom bindebue" #: tie-performer.cc:161 msgid "No ties were created!" -msgstr "Ingen buer blev lavet!" +msgstr "Ingen bindebuer blev lavet!" #: time-scaled-music-iterator.cc:25 msgid "no one to print a tuplet start bracket" -msgstr "der findes ingen som kan skrive en startparentes for tuppel" +msgstr "der findes ingen som kan skrive en startklamme for tuppel" #: translator-ctors.cc:53 #, c-format @@ -1380,11 +1354,11 @@ msgstr "kan ikke finde eller oprette: \"%s\"" #: volta-engraver.cc:111 msgid "No volta spanner to end" -msgstr "Ingen reprisebro til slut" +msgstr "Ingen volte-bro at afslutte" #: volta-engraver.cc:121 msgid "Already have a volta spanner. Stopping that one prematurely." -msgstr "Har allerede en reprisebro. Stopper denne for tidligt." +msgstr "Har allerede en volte-bro. Stopper denne for tidligt." #: volta-engraver.cc:125 msgid "Also have a stopped spanner. Giving up." @@ -1397,7 +1371,7 @@ msgstr "Identificerer m #: parser.yy:729 msgid "More alternatives than repeats. Junking excess alternatives." -msgstr "Flere alternativer end repriser. Stryger tiloversblevne alternativer." +msgstr "Flere alternativer end gentagelser. Stryger tiloversblevne alternativer." #: parser.yy:798 msgid "Second argument must be a symbol" @@ -1504,23 +1478,20 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\"" #~ msgid "Generate .dvi with LaTeX for LilyPond" #~ msgstr "Generér .dvi med LaTeX for LilyPond" -# det handlar om mmap hær -#~ msgid "can't map file" -#~ msgstr "kan ikke lave \"mmap\" på filen" - -#, fuzzy -#~ msgid "use output format EXT (tex [default], pdftex, ps, scm or as)" -#~ msgstr "brug uddataformat FMT (scm, ps, tex eller as)" - -#~ msgid "This binary was compiled with the following options:" -#~ msgstr "Dette program blev oversat med følgende flag:" +# %s er progravnavnet (mup2ly) +#~ msgid "%s is far from completed. Not all constructs are recognised." +#~ msgstr "%s er langt fra færdig, og kan ikke genkende alle konstruktioner." -#~ msgid "Expecting %d arguments" -#~ msgstr "Forventer %d argumenter" +#~ msgid "Cleaning `%s'..." +#~ msgstr "Renser \"%s\"..." #~ msgid "EOF in a string" #~ msgstr "EOF i en streng" +# det handlar om mmap hær +#~ msgid "can't map file" +#~ msgstr "kan ikke lave \"mmap\" på filen" + #~ msgid "" #~ msgstr "" @@ -1531,14 +1502,23 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\"" #~ msgstr "kan ikke finde start på bjælke" #~ msgid "weird beam vertical offset" -#~ msgstr "underligt lodret afstand for bjælke" +#~ msgstr "underlig lodret afstand for bjælke" #~ msgid "unknown spacing pair `%s', `%s'" #~ msgstr "ukendt afstandspar \"%s\", \"%s\"" +#~ msgid "no Grace context available" +#~ msgstr "ingen forslagsnodeomgivelse (Grace) tilgængelig" + +#~ msgid "Unattached grace notes. Attaching to last musical column." +#~ msgstr "Ikke-fæstede forslagsnoder. Fæster ved sidste musikkolonne." + #~ msgid "evalute EXPR as Scheme after .scm init is read" #~ msgstr "evaluér UDTR som Scheme efter .scm-init er læst" +#~ msgid "This binary was compiled with the following options:" +#~ msgstr "Dette program blev oversat med følgende flag:" + #~ msgid "ly_get_mus_property (): Not a Music" #~ msgstr "ly_get_mus_property (): Ikke en \"Music\"" @@ -1554,6 +1534,9 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\"" #~ msgid "ly_music_name (): Not a music expression" #~ msgstr "ly_music_name (): Ikke et musikudtryk" +#~ msgid "writing header field `%s' to `%s'..." +#~ msgstr "skriver rubrikfelt \"%s\" til \"%s\"..." + #~ msgid "" #~ "`%s' is deprecated. Use\n" #~ " \\property %s.%s \\override #'%s = #%s" @@ -1570,28 +1553,18 @@ msgstr "Overvej at konvertere inddata med skriptet \"convert-ly\"" #~ msgid "Scheme options:" #~ msgstr "Scheme-flag:" +#~ msgid "Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway." +#~ msgstr "Kan ikke finde egenskabstypekontrol for \"%s\". Måske har du lavet en tastefejl? Laver tildeling alligevel." + #~ msgid "ly-get-trans-property: expecting a Translator_group argument" #~ msgstr "ly-get-trans-property: forventede et Translator_group-argument" +#~ msgid "Expecting %d arguments" +#~ msgstr "Forventer %d argumenter" + #~ msgid "Oldest supported input version: %s" #~ msgstr "Ældste inddataversion som understøttes: %s" -# %s er progravnavnet (mup2ly) -#~ msgid "%s is far from completed. Not all constructs are recognised." -#~ msgstr "%s er langt fra færdig, og kan ikke genkende alle konstruktioner." - -#~ msgid "Cleaning `%s'..." -#~ msgstr "Renser \"%s\"..." - -#~ msgid "no Grace context available" -#~ msgstr "ingen prydomgivelse tilgængelig" - -#~ msgid "Unattached grace notes. Attaching to last musical column." -#~ msgstr "Ikke-fæstede prydsnoder. Fæster ved sidste musikkolonne." - -#~ msgid "writing header field `%s' to `%s'..." -#~ msgstr "skriver rubrikfelt \"%s\" til \"%s\"..." - #~ msgid "#32 in quarter: %d" #~ msgstr "#32 i fjerdedel: %d" diff --git a/po/fr.po b/po/fr.po index 29ea501e48..6f1862fa0a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: lilypond 1.5.69\n" +"Project-Id-Version: lilypond 1.6.0\n" "POT-Creation-Date: 2002-08-18 17:05+0200\n" -"PO-Revision-Date: 2002-07-30 08:00-0500\n" +"PO-Revision-Date: 2002-08-26 12:00-0500\n" "Last-Translator: Michel Robitaille \n" "Language-Team: French \n" "MIME-Version: 1.0\n" @@ -19,10 +19,8 @@ msgid "Running %s..." msgstr "Exécution de %s..." #: ly2dvi.py:118 -msgid "" -"Distributed under terms of the GNU General Public License. It comes with NO " -"WARRANTY." -msgstr "" +msgid "Distributed under terms of the GNU General Public License. It comes with NO WARRANTY." +msgstr "Distribué selon les termes de la GNU General Public License. Le logiciel est fourni sans GARANTIE." #: ly2dvi.py:125 midi2ly.py:148 mup2ly.py:143 update-lily.py:137 input.cc:87 msgid "warning: " @@ -73,12 +71,11 @@ msgstr "Nettoyage de %s..." #: ly2dvi.py:330 msgid "Run LilyPond using LaTeX for titling" -msgstr "" +msgstr "Exécuter LilyPond en utilisant LaTeX pour le « titling »" #: ly2dvi.py:334 main.cc:115 msgid "write Makefile dependencies for every input file" -msgstr "" -"produire les dépendances pour Makefile concernant chaque fichier d'entrée" +msgstr "produire les dépendances pour Makefile concernant chaque fichier d'entrée" #: ly2dvi.py:335 midi2ly.py:98 mup2ly.py:74 update-lily.py:87 main.cc:111 msgid "this help" @@ -93,9 +90,9 @@ msgid "add DIR to LilyPond's search path" msgstr "ajouter le RÉPERTOIRE au chemin de recherche de LilyPond" #: ly2dvi.py:338 -#, fuzzy, c-format +#, c-format msgid "keep all output, output to directory %s.dir" -msgstr "conserver toutes les sorties et nommer le répertoire %s.dir" +msgstr "conserver toutes les sorties dans le répertoire %s.dir" #: ly2dvi.py:339 msgid "don't run LilyPond" @@ -118,27 +115,24 @@ msgid "find pfa fonts used in FILE" msgstr "repérer les fontes pfa utilisées dans le FICHIER" #: ly2dvi.py:344 -#, fuzzy msgid "set the resolution of the preview to RES" -msgstr "Initialiser le résolution de la prévisualitation à la RÉSOLUTION" +msgstr "utiliser la RÉSOLUTION pour la prévisualitation" #: ly2dvi.py:345 msgid "generate PostScript output" msgstr "générer une sortie PostScript" #: ly2dvi.py:346 -#, fuzzy msgid "generate PDF output" -msgstr "générer une sortie PostScript" +msgstr "générer une sortie PDF" #: ly2dvi.py:347 msgid "use pdflatex to generate a PDF output" -msgstr "" +msgstr "utiliser pdflatex pour générer la sortie PDF" #: ly2dvi.py:349 -#, fuzzy msgid "make a picture of the first system" -msgstr "Produire une image de ce premier système." +msgstr "produire une image de ce premier système" #: ly2dvi.py:350 msgid "KEY=VAL" @@ -161,23 +155,23 @@ msgid "show warranty and copyright" msgstr "afficher la notice de garantie et du droit d'auteur" #: ly2dvi.py:448 -#, fuzzy, c-format +#, c-format msgid "no such setting: `%s'" -msgstr "pas de telle initialisation: %s" +msgstr "pas de telle configuration: « %s »" #: ly2dvi.py:508 #, c-format msgid "LilyPond crashed (signal %d)." -msgstr "" +msgstr "Lilypond a planté (signal %d)." #: ly2dvi.py:509 msgid "Please submit a bug report to bug-lilypond@gnu.org" -msgstr "" +msgstr "SVP soumettre un rapport d'anomalies à bug-lilypond@gnu.org" #: ly2dvi.py:513 -#, fuzzy, c-format +#, c-format msgid "LilyPond failed on the input file (exit status %d)." -msgstr "Échec de LaTex sur le fichier de sortie." +msgstr "Échec de Lilypond sur le fichier d'entrée (état de sortie %d)." #: ly2dvi.py:522 #, c-format @@ -185,14 +179,14 @@ msgid "Analyzing %s..." msgstr "Analyse de %s..." #: ly2dvi.py:578 -#, fuzzy, c-format +#, c-format msgid "no LilyPond output found for `%s'" -msgstr "aucune sortie n'a été trouvée pour %s" +msgstr "aucune sortie de Lilypond n'a été trouvée pour « %s »" #: ly2dvi.py:618 -#, fuzzy, c-format +#, c-format msgid "invalid value: `%s'" -msgstr "valeur invalide: %s" +msgstr "valeur invalide: « %s »" #: ly2dvi.py:724 msgid "LaTeX failed on the output file." @@ -200,7 +194,7 @@ msgstr " #: ly2dvi.py:726 msgid "The error log is as follows:" -msgstr "" +msgstr "Le journal d'erreurs est comme suit:" #: ly2dvi.py:849 #, c-format @@ -214,11 +208,11 @@ msgstr "getopt() indique: #: ly2dvi.py:948 msgid "pseudo filter" -msgstr "" +msgstr "pseudo filtre" #: ly2dvi.py:951 msgid "pseudo filter only for single input file" -msgstr "" +msgstr "pseudo filtre seulement pour le seul fichier d'entrée" #: ly2dvi.py:980 #, c-format @@ -242,9 +236,8 @@ msgid "%s output to `%s'..." msgstr "%s produites dans « %s »..." #: ly2dvi.py:1111 -#, fuzzy msgid "no files specified on command line" -msgstr "aucun fichier spéficié sur la ligne de commande." +msgstr "aucun fichier spéficié sur la ligne de commande" #: midi2ly.py:92 msgid "Convert MIDI to LilyPond source" @@ -448,8 +441,7 @@ msgstr "Erreur de programmation: %s (Poursuite; croisons les doigts)\n" #: accidental-engraver.cc:181 new-accidental-engraver.cc:237 #, c-format msgid "Accidental typesetting list must begin with context-name: %s" -msgstr "" -"Liste de mise en page accidentelle doit débuter avec un nom de contexte: %s" +msgstr "Liste de mise en page accidentelle doit débuter avec un nom de contexte: %s" #: accidental-engraver.cc:206 new-accidental-engraver.cc:262 #, c-format @@ -492,12 +484,8 @@ msgid "does not match: `%s'" msgstr "ne concorde pas: « %s »" #: all-font-metrics.cc:102 -msgid "" -" Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V " -"to show font paths." -msgstr "" -" Reconstruire tous les fichiers .afm et enlever tous les fichiers .pk et ." -"tfm. Ré-exécuter avec l'option -V pour afficher les chemins vers les fontes" +msgid " Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V to show font paths." +msgstr " Reconstruire tous les fichiers .afm et enlever tous les fichiers .pk et .tfm. Ré-exécuter avec l'option -V pour afficher les chemins vers les fontes" #: all-font-metrics.cc:167 #, c-format @@ -561,12 +549,8 @@ msgid "Beam has less than two stems. Removing beam." msgstr "faisceau a moins de deux queues. Retrait du faisceau." #: beam.cc:951 -msgid "" -"Not sure that we can find a nice beam slope (no viable initial configuration " -"found)." -msgstr "" -"Pas certain que l'on puisse repérer un joli pente dans le faisceau " -"(configuration initiale viable non repérée)" +msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)." +msgstr "Pas certain que l'on puisse repérer un joli pente dans le faisceau (configuration initiale viable non repérée)" #: break-align-interface.cc:166 #, c-format @@ -640,9 +624,7 @@ msgstr "prolongation non termin #: extender-engraver.cc:108 msgid "Nothing to connect extender to on the left. Ignoring extender request." -msgstr "" -"Rien à relier à la prolongation sur la gauche. Requête de prolongation " -"ignorée." +msgstr "Rien à relier à la prolongation sur la gauche. Requête de prolongation ignorée." #: folded-repeat-iterator.cc:78 msgid "no one to print a repeat brace" @@ -655,7 +637,7 @@ msgstr "ne peut rep #: gourlay-breaking.cc:188 #, c-format msgid "Optimal demerits: %f" -msgstr "" +msgstr "Démérites optionnels: %f" #: gourlay-breaking.cc:193 msgid "No feasible line breaking found" @@ -675,9 +657,7 @@ msgstr "trait d'union non termin #: hyphen-engraver.cc:101 msgid "Nothing to connect hyphen to on the left. Ignoring hyphen request." -msgstr "" -"Rien à connecter au trait d'union sur la gauche. Requête de trait d'union " -"ignoré" +msgstr "Rien à connecter au trait d'union sur la gauche. Requête de trait d'union ignoré" #: input-file-results.cc:71 source-file.cc:52 streams.cc:38 #, c-format @@ -752,39 +732,30 @@ msgid "(load path: `%s')" msgstr "(chemin de chargement: « %s »)" #: lily-guile.cc:582 -#, fuzzy, c-format +#, c-format msgid "Can't find property type-check for `%s' (%s)." -msgstr "" -"Ne peut repérer la propriété de vérification de type pour « %s » (%s). Peut-" -"être avez-vous commis une erreur d'orthographe? Affectation faite de toutes " -"manières." +msgstr "Ne peut repérer la propriété de vérification de type pour « %s » (%s)." #: lily-guile.cc:585 msgid "Perhaps you made a typing error?" -msgstr "" +msgstr "Peut-être avez-vous commis une erreur?" #: lily-guile.cc:591 msgid "Doing assignment anyway." -msgstr "" +msgstr "Affectation faite malgré tout." #: lily-guile.cc:605 #, c-format msgid "Type check for `%s' failed; value `%s' must be of type `%s'" -msgstr "" -"Vérification de type pour « %s » a échoué; la valeur « %s » doit être de " -"type « %s »" +msgstr "Vérification de type pour « %s » a échoué; la valeur « %s » doit être de type « %s »" #: lookup.cc:141 msgid "round filled box horizontal extent smaller than blot; decreasing blot" -msgstr "" -"largeur horizontale de la boîte plus petite que le diamètre du coin; " -"réduction du diamètre du coin" +msgstr "largeur horizontale de la boîte plus petite que le diamètre du coin; réduction du diamètre du coin" #: lookup.cc:146 msgid "round filled box vertical extent smaller than blot; decreasing blot" -msgstr "" -"hauteur verticale de la boîte plus petite que le diamètre du coin; réduction " -"du diamètre du coin" +msgstr "hauteur verticale de la boîte plus petite que le diamètre du coin; réduction du diamètre du coin" #: lyric-phrasing-engraver.cc:311 msgid "lyrics found without any matching notehead" @@ -799,10 +770,8 @@ msgid "EXPR" msgstr "EXPR" #: main.cc:107 -#, fuzzy msgid "set options, use -e '(ly-option-usage)' for help" -msgstr "" -"Options de scheme: essayer -e \"(set-lily-option 'help 0)\" pour de l'aide" +msgstr "options d'initialisation: utiliser -e '(ly-option-usage)' pour de l'aide" #. another bug in option parser: --output=foe is taken as an abbreviation #. for --output-format @@ -812,7 +781,7 @@ msgstr "EXT" #: main.cc:110 msgid "use output format EXT" -msgstr "" +msgstr "utiliser le format de sortie EXT" #: main.cc:112 msgid "FIELD" @@ -857,10 +826,8 @@ msgid "" "using a high level description file as input. LilyPond is part of \n" "the GNU Project.\n" msgstr "" -"LilyPond est un logiciel de composition de musique. Il produit de jolies " -"feuilles\n" -"de musique en utilisant un fichier de description de haut niveau à " -"l'entrée.\n" +"LilyPond est un logiciel de composition de musique. Il produit de jolies feuilles\n" +"de musique en utilisant un fichier de description de haut niveau à l'entrée.\n" "LilyPond fait parti du projet GNU.\n" #: main.cc:182 @@ -870,10 +837,8 @@ msgid "" "and you are welcome to change it and/or distribute copies of it under\n" "certain conditions. Invoke as `%s --warranty' for more information.\n" msgstr "" -"Ce logiciel est libre. Il est couvert par la licence GNU General Public " -"License,\n" -"et vous êtes libre de le modifier et/ou distribuer sous certaines " -"conditions\n" +"Ce logiciel est libre. Il est couvert par la licence GNU General Public License,\n" +"et vous êtes libre de le modifier et/ou distribuer sous certaines conditions\n" "Invoquer commme suit « %s --warranty » pour plus de détails.\n" #: main.cc:188 main.cc:200 @@ -911,8 +876,7 @@ msgstr "" "la license GNU General Public License for more details.\n" "\n" " Vous devriez avoir reçu une copie (consulter le fichier COPYING) de la\n" -"license GNU General Public License accompagnant ce logiciel; si absente " -"écrire à\n" +"license GNU General Public License accompagnant ce logiciel; si absente écrire à\n" "la Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n" "USA.\n" @@ -944,14 +908,12 @@ msgstr "Mensural_ligature: #: mensural-ligature.cc:166 #, c-format msgid "Mensural_ligature: delta-pitch undefined on flexa %d; assuming 0" -msgstr "" -"Mensural_ligature: croissance du ton indéfinie sur flexa %d; 0 est assumé" +msgstr "Mensural_ligature: croissance du ton indéfinie sur flexa %d; 0 est assumé" #: mensural-ligature.cc:177 #, c-format msgid "Mensural_ligature: flexa-width undefined on flexa %d; assuming 2.0" -msgstr "" -"Mensural_ligature: largeur de flexa indéfinie sur flexa %d; 2.0 est assumé" +msgstr "Mensural_ligature: largeur de flexa indéfinie sur flexa %d; 2.0 est assumé" #: mensural-ligature.cc:208 msgid "Mensural_ligature: unexpected case fall-through" @@ -1025,9 +987,9 @@ msgid ", at " msgstr ", à " #: paper-score.cc:77 -#, fuzzy, c-format +#, c-format msgid "Element count %d (spanners %d) " -msgstr "Éléments dénombrés %d." +msgstr "Éléments dénombrés %d (spanners %d) " #: paper-score.cc:82 msgid "Preprocessing elements..." @@ -1039,7 +1001,7 @@ msgstr "Production d'une feuille de musique, d #: parse-scm.cc:80 msgid "GUILE signaled an error for the expression begining here" -msgstr "" +msgstr "GUILE a signalé une erreur pour l'expression débutant ici" #. #. We could change the current translator's id, but that would make @@ -1147,47 +1109,41 @@ msgid "too many colliding rests" msgstr "trop de pauses en collision" #: scm-option.cc:44 -#, fuzzy msgid "lilypond -e EXPR means:" -msgstr "lilypond -e EXPRESSION signifie" +msgstr "lilypond -e EXPRESSION signifie:" #: scm-option.cc:46 msgid " Evalute the Scheme EXPR before parsing any .ly files." -msgstr "" +msgstr "Evaluer l'EXPRESSION Scheme avant d'analyser les fichiers .ly" #: scm-option.cc:48 -msgid "" -" Multiple -e options may be given, they will be evaluated sequentially." -msgstr "" +msgid " Multiple -e options may be given, they will be evaluated sequentially." +msgstr "Les options multiples -e peuvent être fournis, elles seront évaluées séquentiellement." #: scm-option.cc:50 -msgid "" -" The function ly-set-option allows for access to some internal variables." -msgstr "" +msgid " The function ly-set-option allows for access to some internal variables." +msgstr "L'option de la fonction ly-set-option permet l'accès à quelques variables internes." #: scm-option.cc:52 msgid "Usage: lilypond -e \"(ly-set-option SYMBOL VAL)\"" -msgstr "" +msgstr "Usage: lilypond -e \"(ly-set-option SYMBOLE VALEUR)\"" #: scm-option.cc:54 msgid "Where SYMBOL VAL pair is any of:" -msgstr "" +msgstr "Où la paire SYMBOLE VALEUR peut prendre les options suivantes:" #: scm-option.cc:122 msgid "Unknown internal option!" msgstr "Option interne inconnue!" #: score-engraver.cc:102 -#, fuzzy, c-format +#, c-format msgid "can't find `%s'" -msgstr "ne peut trouver: « %s »" +msgstr "ne peut trouver « %s »" #: score-engraver.cc:103 -#, fuzzy msgid "Fonts have not been installed properly. Aborting" -msgstr "" -"Ne peut repérer feta20.afm. Les fontes n'ont pas été installées " -"correctement; abandon" +msgstr "Les fontes n'ont pas été installées correctement. Abandon" #: score-engraver.cc:207 #, c-format @@ -1327,8 +1283,7 @@ msgstr "L'en-t #: tfm-reader.cc:142 #, c-format msgid "%s: TFM file has %u parameters, which is more than the %u I can handle" -msgstr "" -"%s: le fichier TFM a %u paramètres qui sont plus que %u pouvant être traités" +msgstr "%s: le fichier TFM a %u paramètres qui sont plus que %u pouvant être traités" #: tfm.cc:83 #, c-format @@ -1394,22 +1349,18 @@ msgid "Also have a stopped spanner. Giving up." msgstr "A aussi une clef arrêtée. Abandon." #: parser.yy:434 -#, fuzzy msgid "Identifier should have alphabetic characters only" msgstr "L'identificateur doit contenir des caractères alphabétiques seulement" #: parser.yy:729 msgid "More alternatives than repeats. Junking excess alternatives." -msgstr "" -"Plus d'alternatives que de répétitions. Rebuts dépasse la limite des " -"alternatives." +msgstr "Plus d'alternatives que de répétitions. Rebuts dépasse la limite des alternatives." #: parser.yy:798 msgid "Second argument must be a symbol" msgstr "Le second argument doit être un symbole" #: parser.yy:803 -#, fuzzy msgid "First argument must be a procedure taking one argument" msgstr "Le premier argument doit être une procédure n'acceptant qu'un argument" @@ -1482,9 +1433,8 @@ msgid "Can't evaluate Scheme in safe mode" msgstr "Ne peut évaluer le Schème de façon sûre" #: lexer.ll:364 -#, fuzzy msgid "Brace found at end of lyric. Did you forget a space?" -msgstr "Accolade repérée à la fin des paroles. Espace oublié?" +msgstr "Accolade repérée à la fin des paroles. Avez-vous oublié un espace?" #: lexer.ll:480 #, c-format @@ -1497,14 +1447,13 @@ msgid "unknown escaped string: `\\%s'" msgstr "chaîne d'échappement inconnue: « \\%s »" #: lexer.ll:657 -#, fuzzy, c-format +#, c-format msgid "Incorrect lilypond version: %s (%s, %s)" -msgstr "version de lilypond incorrecte: %s (%s, %s)" +msgstr "Version de lilypond incorrecte: %s (%s, %s)" #: lexer.ll:658 -#, fuzzy msgid "Consider updating the input with the convert-ly script" -msgstr "Considérer la conversion de l'entrée à l'aide du script convert-ly" +msgstr "Considérer la mise à jour de l'entrée à l'aide du script convert-ly" #~ msgid "Generate .dvi with LaTeX for LilyPond" #~ msgstr "Générer un fichier .dvi à l'aide de LaTeX pour LilyPond" @@ -1516,8 +1465,7 @@ msgstr "Consid #~ msgstr "ne peut produire le fichier map" #~ msgid "use output format EXT (tex [default], pdftex, ps, scm or as)" -#~ msgstr "" -#~ "utiliser le format de sortie EXT (tex (par défaut), pdftex, ps, scm ou as)" +#~ msgstr "utiliser le format de sortie EXT (tex (par défaut), pdftex, ps, scm ou as)" #~ msgid "This binary was compiled with the following options:" #~ msgstr "Ce binaire a été compilé avec les options suivantes:" @@ -1526,8 +1474,7 @@ msgstr "Consid #~ msgstr "%d arguments attendus" #~ msgid "%s is far from completed. Not all constructs are recognised." -#~ msgstr "" -#~ "%s est loin d'être complet. Tous les construits n'ont pas été reconnus." +#~ msgstr "%s est loin d'être complet. Tous les construits n'ont pas été reconnus." #~ msgid "Cleaning `%s'..." #~ msgstr "Nettoyage de « %s »..." @@ -1554,13 +1501,10 @@ msgstr "Consid #~ msgstr "Aucun contexte disponible pour la note d'ornement" #~ msgid "Unattached grace notes. Attaching to last musical column." -#~ msgstr "" -#~ "Notes d'ornement non attachées. On les rattache à la dernière colonne " -#~ "musicale." +#~ msgstr "Notes d'ornement non attachées. On les rattache à la dernière colonne musicale." #~ msgid "evalute EXPR as Scheme after .scm init is read" -#~ msgstr "" -#~ "évaluer EXPR comme un Schème après la lecture de initialisation .scm" +#~ msgstr "évaluer EXPR comme un Schème après la lecture de initialisation .scm" #~ msgid "ly_get_mus_property (): Not a Music" #~ msgstr "ly_get_mus_property (): n'est pas de la musique" @@ -1588,8 +1532,7 @@ msgstr "Consid #~ " \\propriété %s.%s \\pour écraser #'%s = #%s" #~ msgid "Wrong type for property: %s, type: %s, value found: %s, type: %s" -#~ msgstr "" -#~ "Type erroné pour la propriété: %s, type: %s, valeur trouvée: %s, type: %s" +#~ msgstr "Type erroné pour la propriété: %s, type: %s, valeur trouvée: %s, type: %s" #~ msgid "too many notes for rest collision" #~ msgstr "trop de notes pour la pause en collision" @@ -1598,8 +1541,7 @@ msgstr "Consid #~ msgstr "Option de schèmes:" #~ msgid "ly-get-trans-property: expecting a Translator_group argument" -#~ msgstr "" -#~ "ly-get-trans-property: s'attendait à un argument de type Translator_group" +#~ msgstr "ly-get-trans-property: s'attendait à un argument de type Translator_group" #~ msgid "Oldest supported input version: %s" #~ msgstr "Version supportant les plus vieux formats: %s" @@ -1660,9 +1602,7 @@ msgstr "Consid #~ msgstr "autoriser la mise au point de sortie" #~ msgid "don't output tuplets, double dots or rests, smallest is 32" -#~ msgstr "" -#~ "ne pas produire les tuplets, les doubles pointées ou les pauses, plus " -#~ "petits que 32" +#~ msgstr "ne pas produire les tuplets, les doubles pointées ou les pauses, plus petits que 32" #~ msgid "set FILE as default output" #~ msgstr "définir le FICHIER comme étant la sortie par défaut" diff --git a/scm/documentation-lib.scm b/scm/documentation-lib.scm index ba9685ad0a..626f2fc250 100644 --- a/scm/documentation-lib.scm +++ b/scm/documentation-lib.scm @@ -27,11 +27,17 @@ (string-append "@code{" (texify (scm->string x)) "}") ) + +;; +;; don't confuse users with # syntax. +;; (define (scm->string val) - (string-append - (if (self-evaluating? val) "" "'") - (call-with-output-string (lambda (port) (display val port))) - )) + (if (and (procedure? val) (symbol? (procedure-name val))) + (symbol->string (procedure-name val)) + (string-append + (if (self-evaluating? val) "" "'") + (call-with-output-string (lambda (port) (display val port))) + ))) (define (node name) (string-append diff --git a/scm/drums.scm b/scm/drums.scm index f6187f3705..b3151aa994 100644 --- a/scm/drums.scm +++ b/scm/drums.scm @@ -196,6 +196,7 @@ (ly-set-mus-property! m 'symbol 'NoteHead) (ly-set-mus-property! m 'grob-property 'style) (ly-set-mus-property! m 'grob-value t) + (ly-set-mus-property! m 'pop-first #t) m ) ) diff --git a/scm/font.scm b/scm/font.scm index f72a401b67..116382de82 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -40,19 +40,22 @@ ) (define paper-style-sheet-alist - '( - ((8 * * braces 8) . "feta-braces8") - ((7 * * braces 7) . "feta-braces7") - ((6 * * braces 6) . "feta-braces6") - ((5 * * braces 5) . "feta-braces5") - ((4 * * braces 4) . "feta-braces4") - ((3 * * braces 3) . "feta-braces3") - ((2 * * braces 2) . "feta-braces2") - ((1 * * braces 1) . "feta-braces1") - ((0 * * braces 0) . "feta-braces0") - )) + `( + ((* * * braces *) . ("feta-braces0" + "feta-braces1" + "feta-braces2" + "feta-braces3" + "feta-braces4" + "feta-braces5" + "feta-braces6" + "feta-braces7" + "feta-braces8") ))) ;; FIXME: what about this comment?: + +;; font-lookup seems a little inefficient -- walking this entire list +;; for a single font. +;; ;; should really have name/pt size at the front of the list. ;; (also tried to vary the order of this list, with little effect) ;; @@ -136,21 +139,21 @@ ((-4 * * dynamic 7) . "feta-din7") ((-5 * * dynamic 6) . "feta-din6") - ((2 * * music 26) . "feta26") - ((1 * * music 23) . "feta23") - ((0 * * music 20) . "feta20") - ((-1 * * music 16) . "feta16") - ((-2 * * music 13) . "feta13") - ((-3 * * music 11) . "feta11") - ((-4 * * music 11) . "feta11") - - ((2 * * ancient 26) . "parmesan26") - ((1 * * ancient 23) . "parmesan23") - ((0 * * ancient 20) . "parmesan20") - ((-1 * * ancient 16) . "parmesan16") - ((-2 * * ancient 13) . "parmesan13") - ((-3 * * ancient 11) . "parmesan11") - ((-4 * * ancient 11) . "parmesan11") + ((2 * * music 26) . ("feta26" "parmesan26")) + ((1 * * music 23) . ("feta23" "parmesan23")) + ((0 * * music 20) . ("feta20" "parmesan20")) + ((-1 * * music 16) . ("feta16" "parmesan16")) + ((-2 * * music 13) . ("feta13" "parmesan13")) + ((-3 * * music 11) . ("feta11" "parmesan11")) + ((-4 * * music 11) . ("feta11" "parmesan11")) + + ((2 * * ancient 26) . ("feta26" "parmesan26")) + ((1 * * ancient 23) . ("feta23" "parmesan23")) + ((0 * * ancient 20) . ("feta20" "parmesan20")) + ((-1 * * ancient 16) . ("feta16" "parmesan16")) + ((-2 * * ancient 13) . ("feta13" "parmesan13")) + ((-3 * * ancient 11) . ("feta11" "parmesan11")) + ((-4 * * ancient 11) . ("feta11" "parmesan11")) ((0 * * math 10) . "msam10") ((-1 * * math 10) . "msam10") @@ -161,7 +164,10 @@ ;; (define (change-relative-size font-desc decrement) "return a FONT-DESCR with relative size decremented by DECREMENT" - (cons (- (car font-desc) decrement) (cdr font-desc)) + + (if (number? (car font-desc)) + (cons (- (car font-desc) decrement) (cdr font-desc)) + font-desc) ) (define (change-rhs-size font-desc from to ) @@ -169,7 +175,6 @@ (regexp-substitute/global #f from (cdr font-desc) 'pre to 'post)) ) - ;; (define (map-alist-keys func list) @@ -207,13 +212,17 @@ )) ) -(set! font-list-alist +;; +;; make a kludged up paper-19 style sheet. Broken by virtual fonts. +;; +(if #f + (set! font-list-alist (cons (cons 'paper19 (map (lambda (x) (change-rhs-size x "20" "19")) paper20-style-sheet-alist)) - font-list-alist)) + font-list-alist))) (define (make-style-sheet sym) `((fonts . ,(append paper-style-sheet-alist diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 6f72730b9b..d3f8f6149f 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -9,6 +9,7 @@ ;;;; staffspace (distances) ;;;; WARNING: the meta field should be the last one. +;;;; WARNING: don't use anonymous functions for initialization. ;; TODO: junk the meta field in favor of something more compact? (define all-grob-descriptions @@ -321,7 +322,6 @@ (LeftEdge . ( (break-align-symbol . left-edge) - (X-offset-callbacks . (,Break_align_interface::alignment_callback)) (X-extent-callback . ,Grob::point_dimension_callback) (breakable . #t) (space-alist . ( @@ -331,7 +331,7 @@ (staff-bar . (extra-space . 0.0)) (breathing-sign . (minimum-space . 0.0)) (clef . (extra-space . 1.0)) - (first-note . (extra-space . 0.0)) + (first-note . (extra-space . 1.0)) (key-signature . (extra-space . 0.0)) )) (meta . ((interfaces . (break-aligned-interface item-interface )))) @@ -1026,6 +1026,7 @@ (style . default) (molecule-callback . ,tablature-molecule-callback) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) + (extra-offset . (0 . -0.65)) ;; UGH! TODO: Clean this up! (stem-attachment-function . ,tablature-stem-attachment-function) (meta . ((interfaces . (rhythmic-head-interface diff --git a/scm/lily.scm b/scm/lily.scm index 6771baa6c4..795536e68f 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -11,11 +11,8 @@ ;;(write standalone (current-error-port)) -; (set-debug-cell-accesses! #t) ;;; General settings - - ;; debugging evaluator is slower. ;(debug-enable 'debug) @@ -23,6 +20,7 @@ ;(read-enable 'positions) + (define point-and-click #f) (define security-paranoia #f) (define midi-debug #f) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index cab888da17..72f3635608 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -10,38 +10,39 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define (shift-duration-log music shift ) - "Recurse through music, adding SHIFT to duration-log to any note -encountered. This scales the music up by a factor 2^k." +(define (shift-duration-log music shift dot) + "Recurse through music, adding SHIFT to duration-log and optionally + a dot to any note encountered. This scales the music up by a factor + 2^shift * (2 - (1/2)^dot)" (let* ((es (ly-get-mus-property music 'elements)) (e (ly-get-mus-property music 'element)) (n (ly-music-name music)) - (f (lambda (x) (shift-duration-log x shift))) + (f (lambda (x) (shift-duration-log x shift dot))) ) (if (or (equal? n "Note_req") (equal? n "Rest_req")) (let* ( - (d (ly-get-mus-property music 'duration)) - (cp (duration-factor d)) - (nd (make-duration (+ shift (duration-log d)) - (duration-dot-count d) - (car cp) - (cdr cp))) - - ) + (d (ly-get-mus-property music 'duration)) + (cp (duration-factor d)) + (nd (make-duration (+ shift (duration-log d)) + (+ dot (duration-dot-count d)) + (car cp) + (cdr cp))) + + ) (ly-set-mus-property! music 'duration nd) - )) - + )) + (if (pair? es) (ly-set-mus-property! music 'elements (map f es))) - + (if (music? e) (ly-set-mus-property! music 'element (f e))) - + music)) @@ -59,7 +60,7 @@ written by Rune Zedeler. " (if (equal? (ly-get-mus-property music 'iterator-ctor) Chord_tremolo_iterator::constructor) - (shift-duration-log music (intlog2 (ly-get-mus-property music 'repeat-count))) + (shift-duration-log music (intlog2 (ly-get-mus-property music 'repeat-count)) 0) ) (ly-set-mus-property! music 'length Repeated_music::unfolded_music_length) @@ -325,4 +326,16 @@ this is not an override ) -(define toplevel-music-functions (list check-start-chords voicify-music)) +;; switch it on here, so parsing and init isn't checked (too slow!) + +(define (switch-on-debugging m) + (set-debug-cell-accesses! 15000) + m + ) + +(define toplevel-music-functions + (list check-start-chords + voicify-music + +; switch-on-debugging + )) diff --git a/scm/music-property-description.scm b/scm/music-property-description.scm index ffa83e31ef..726aa92d4e 100644 --- a/scm/music-property-description.scm +++ b/scm/music-property-description.scm @@ -21,7 +21,7 @@ -(music-property-description 'iterator-ctor c++-function? "Function to construct music-event-iterator object for this Music") +(music-property-description 'iterator-ctor procedure? "Function to construct music-event-iterator object for this Music") (music-property-description 'duration duration? "Duration of this note/lyric.") (music-property-description 'metronome-count number? "How many beats in a minute?") (music-property-description 'span-type string? "What kind of spanner should be created? @@ -49,6 +49,7 @@ TODO: consider making type into symbol ") (music-property-description 'last-pitch pitch? "The last pitch after relativization.") (music-property-description 'length procedure? "How to compute the duration of this music") (music-property-description 'numerator integer? "numerator of a time signature") +(music-property-description 'once boolean? "Apply this operation only during one time step?") (music-property-description 'origin ly-input-location? "where was this piece of music defined?") (music-property-description 'penalty number? "Penalty for break hint.") (music-property-description 'pitch pitch? "the pitch of this note") @@ -62,7 +63,7 @@ TODO: consider making type into symbol ") (music-property-description 'start-moment-function procedure? "Function to compute the negative length of starting grace notes.") - +(music-property-description 'string-number integer? "The number of the string in a String_number_req") (music-property-description 'symbol symbol? "Grob name to perform an override/revert on.") (music-property-description 'text markup? "markup expression to be printed") ;; markup? diff --git a/scm/output-lib.scm b/scm/output-lib.scm index 58ec903adc..9267948f69 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -9,7 +9,7 @@ ; The TabNoteHead stem attachment function. (define (tablature-stem-attachment-function style duration) - (cons 0.0 1.0) + (cons 0.0 0.5) ;; UGH! ) ; The TabNoteHead molecule callback. @@ -66,10 +66,35 @@ +(define guitar-tunings '(4 -1 -5 -10 -15 -20)) ; end of tablature functions +(define (make-molecule-boxer line-thick x-padding y-padding callback) + "Makes a routine that adds a box around the grob parsed as argument" + (define (molecule-boxer grob) + (let* + ( + (mol (callback grob)) + (x-ext (widen-interval (ly-get-molecule-extent mol 0) x-padding)) + (y-ext (widen-interval (ly-get-molecule-extent mol 1) y-padding)) + (x-rule (box-molecule (widen-interval x-ext line-thick) + (cons 0 line-thick))) + (y-rule (box-molecule (cons 0 line-thick) y-ext)) + ) + + (set! mol (ly-combine-molecule-at-edge mol 0 1 y-rule x-padding)) + (set! mol (ly-combine-molecule-at-edge mol 0 -1 y-rule x-padding)) + (set! mol (ly-combine-molecule-at-edge mol 1 1 x-rule 0)) + (set! mol (ly-combine-molecule-at-edge mol 1 -1 x-rule 0)) + + mol + )) + molecule-boxer + ) + + (define (arg->string arg) (cond ((number? arg) (inexact->string arg 10)) ((string? arg) (string-append "\"" arg "\"")) @@ -127,22 +152,20 @@ ;; silly, use alist? (define (find-notehead-symbol duration style) (case style - ((xcircle) (cons "2xcircle" "music")) - ((harmonic) (cons "0neo_mensural" "music")) + ((xcircle) "2xcircle") + ((harmonic) "0neo_mensural") ((baroque) ;; Oops, I actually would not call this "baroque", but, for ;; backwards compatibility to 1.4, this is supposed to take ;; brevis, longa and maxima from the neo-mensural font and all ;; other note heads from the default font. -- jr (if (< duration 0) - (cons (string-append (number->string duration) "neo_mensural") "ancient") - (cons (number->string duration) "music"))) + (string-append (number->string duration) "neo_mensural") + (number->string duration))) ((mensural) - (cons (string-append (number->string duration) (symbol->string style)) - "ancient")) + (string-append (number->string duration) (symbol->string style))) ((neo_mensural) - (cons (string-append (number->string duration) (symbol->string style)) - "ancient")) + (string-append (number->string duration) (symbol->string style))) ((default) ;; The default font in mf/feta-bolletjes.mf defines a brevis, but ;; neither a longa nor a maxima. Hence let us, for the moment, @@ -151,11 +174,13 @@ ;; should look exactly like the brevis of the default font, but ;; with a stem exactly like that of the quarter note. -- jr (if (< duration -1) - (cons (string-append (number->string duration) "neo_mensural") "ancient") - (cons (number->string duration) "music"))) + (string-append (number->string duration) "neo_mensural") + (number->string duration))) (else - (cons (string-append (number->string (max 0 duration)) (symbol->string style)) - "music")))) + (if (string-match "vaticana*|hufnagel*|medicaea*" (symbol->string style)) + (symbol->string style) + (string-append (number->string (max 0 duration)) + (symbol->string style)))))) (define (note-head-style->attachment-coordinates style duration) @@ -188,43 +213,6 @@ centered, X==1 is at the right, X == -1 is at the left." '(1.0 . 0.0) ))) -(define (find-timesig-symbol nom denom style) - (case style - ((mensural) - (cons (string-append - "mensural" - (number->string nom) - "/" - (number->string denom)) - "ancient")) - ((neo_mensural) - (cons (string-append - "neo_mensural" - (number->string nom) - "/" - (number->string denom)) - "ancient")) - ((numbered) - (cons (string-append - (number->string nom) - "/" - (number->string denom)) - "music")) - (else - ;; default: use "C" style when possible, otherwise return "" - (cons - (case nom - ((2) - (case denom - ((2) "C2/2") - (else ""))) - ((4) - (case denom - ((4) "C4/4") - (else ""))) - (else "")) - "music")))) - (define (string-encode-integer i) (cond ((= i 0) "o") @@ -234,6 +222,6 @@ centered, X==1 is at the right, X == -1 is at the left." (string-encode-integer (quotient i 26)))))) +(define ((every-nth-bar-number-visible n) barnum) (= 0 (modulo barnum n))) - - +(define (default-bar-number-visibility barnum) (> barnum 1)) diff --git a/scm/tex.scm b/scm/tex.scm index 4f997945c4..d6e6c9d543 100644 --- a/scm/tex.scm +++ b/scm/tex.scm @@ -142,7 +142,7 @@ (begin ; uncomment for some stats about lily memory ; (display (gc-stats)) - (string-append "\n\\EndLilyPondOutput" + (string-append "\n\\EndLilyPondOutput\n" ; Put GC stats here. ))) diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index 33b6448e41..14043e6788 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -127,6 +127,7 @@ using barchecks in polyphonic music.") still counted. Bar generation will resume according to that count if this property is set to zero. ") +(translator-property-description 'barNumberVisibility procedure? "Procedure that takes an int and returns whether the corresponding bar number should be printed") (translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set") (translator-property-description 'beatLength moment? "The length of one beat in this time signature.") (translator-property-description 'breakAlignOrder list? "Defines the order in which @@ -213,6 +214,8 @@ procedure? "visibility-lambda function for explicit Key changes; extra natural sign before accidentals changing from a non-natural to another non-natural. ") + +(translator-property-description 'finalizations list? "List of expressions to evaluate before proceeding to next time step. Internal variable.") (translator-property-description 'followVoice boolean? "if set, note heads are tracked across staff switches by a thin line") (translator-property-description 'fontSize integer? @@ -222,6 +225,8 @@ in a context. This is done using the @code{Font_size_engraver}.") (translator-property-description 'forceClef boolean? "Show clef symbol, even if it hasn't changed. Only active for the first clef after the property is set, not for the full staff.") (translator-property-description 'graceAccidentalSpace number? "amount space to alot for an accidental") (translator-property-description 'graceAlignPosition dir? "put the grace note before or after the main note?") +(translator-property-description 'highStringOne boolean? "Whether the 1st string is the string with +highest pitch on the instrument (used by the automatic string selector).") (translator-property-description 'instr markup? "see @code{instrument}") (translator-property-description 'instrument markup? " If @code{Instrument_name_engraver} @cindex Instrument_name_engraver @@ -322,6 +327,8 @@ help with debugging large scores.") (translator-property-description 'split-interval boolean? "set if part-combiner separated voices based on splitInterval.") (translator-property-description 'squashedPosition integer? " Vertical position of squashing for Pitch_squash_engraver.") +(translator-property-description 'stringOneTopmost boolean? "Whether the 1st string is printed on the +top line of the tablature.") (translator-property-description 'stavesFound list? "list of all staff-symbols found.") (translator-property-description 'stanza markup? "Stanza `number' to print at start of a verse. Use in LyricsVoice context.") diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index a2d6dd846a..47db68f0b3 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -46,10 +46,17 @@ import __main__ # Handle bug in Python 1.6-2.1 # -# there are recursion limits for some patterns in Python 1.6 til 2.1. +# there are recursion limits for some patterns in Python 1.6 til 2.1. # fix this by importing the 1.5.2 implementation pre instead. Fix by Mats. -if float (sys.version[0:3]) < 2.2: + +## We would like to do this for python 2.2 as well, unfortunately +## python 2.2 has another bug, see Sf.net bugtracker +## +## https://sourceforge.net/tracker/?func=detail&aid=604803&group_id=5470&atid=105470 +## + +if float (sys.version[0:3]) <= 2.1: try: import pre re = pre @@ -106,6 +113,8 @@ kpse = os.popen ('kpsexpand \$TEXMF').read() kpse = re.sub('[ \t\n]+$','', kpse) type1_paths = os.popen ('kpsewhich -expand-path=\$T1FONTS').read () +binary = 'lilypond' +#binary = 'valgrind --suppressions=/home/hanwen/usr/src/guile-1.6.supp --num-callers=10 /home/hanwen/usr/src/lilypond/lily/out/lilypond' environment = { # TODO: * prevent multiple addition. # * clean TEXINPUTS, MFINPUTS, TFMFONTS, @@ -190,22 +199,48 @@ class LatexPaper: cmd = "latex '\\nonstopmode \input %s'" % fname if verbose_p: - sys.stderr.write ("Invoking `%s' as pipe" % cmd) - p = os.popen(cmd) - ln = p.readline() - while ln: + sys.stderr.write ("Invoking `%s' as pipe" % cmd) + try: + status = quiet_system (cmd, "Latex for finding dimensions") + except: + sys.stderr.write (_("Invoking LaTeX failed.") + '\n' ) + sys.stderr.write (_("This is the error log:\n") + '\n') + + lns = open ('lily-tmp.log').readlines() + + countdown = -3 + for ln in lns: + sys.stderr.write (ln) + if re.match('^!', ln): + countdown = 3 + + if countdown == 0: + break + + if countdown > 0: + countdown = countdown -1 + + sys.stderr.write (" ... (further messages elided)...\n") + sys.exit (1) + + lns = open ('lily-tmp.log').readlines() + for ln in lns: ln = string.strip(ln) m = re_dim.match(ln) if m: if m.groups()[0] in ('textwidth', 'columnsep'): self.__dict__['m_%s' % m.groups()[0]] = float(m.groups()[1]) - ln = p.readline() + try: os.remove (fname) os.remove (os.path.splitext(fname)[0]+".aux") os.remove (os.path.splitext(fname)[0]+".log") except: pass + + if not self.__dict__.has_key ('m_textwidth'): + raise 'foo!' + def get_linewidth(self): if self.m_num_cols == 1: w = self.m_textwidth @@ -417,7 +452,7 @@ output_dict= {

@end html ''', } @@ -430,7 +465,11 @@ def output_verbatim (body, small): body = re.sub ('>', '>', body) body = re.sub ('<', '<', body) elif __main__.format == 'texi': - body = re.sub ('([@{}])', '@\\1', body) + + # clumsy workaround for python 2.2 pre bug. + body = re.sub ('@', '@@', body) + body = re.sub ('{', '@{', body) + body = re.sub ('}', '@}', body) if small: key = 'output-small-verbatim' @@ -1035,7 +1074,9 @@ def quiet_system (cmd, name): return system (cmd) def get_bbox (filename): - system ('gs -sDEVICE=bbox -q -sOutputFile=- -dNOPAUSE %s -c quit > %s.bbox 2>&1 ' % (filename, filename)) + + # gs bbox device is ugh, it always prints of stderr. + system ('gs -sDEVICE=bbox -q -sOutputFile=- -dNOPAUSE %s -c quit > %s.bbox 2>&1' % (filename, filename)) box = open (filename + '.bbox').read() m = re.match ('^%%BoundingBox: ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)', box) @@ -1057,9 +1098,9 @@ def make_pixmap (name): x = (2* margin + bbox[2] - bbox[0]) * res / 72. y = (2* margin + bbox[3] - bbox[1]) * res / 72. - cmd = r'''gs -g%dx%d -sDEVICE=pnggray -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=- -r%d -dNOPAUSE %s %s -c quit > %s''' + cmd = r'''gs -g%dx%d -sDEVICE=pnggray -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=%s -r%d -dNOPAUSE %s %s -c quit ''' - cmd = cmd % (x, y, res, name + '.trans.eps', name + '.eps',name + '.png') + cmd = cmd % (x, y, name + '.png', res, name + '.trans.eps', name + '.eps') status = 0 try: status = system (cmd) @@ -1107,8 +1148,8 @@ def compile_all_files (chunks): if g_outdir: lilyopts = lilyopts + '--dep-prefix=' + g_outdir + '/' texfiles = string.join (tex, ' ') - cmd = 'lilypond --header=texidoc %s %s %s' \ - % (lilyopts, g_extra_opts, texfiles) + cmd = '%s --header=texidoc %s %s %s' \ + % (binary, lilyopts, g_extra_opts, texfiles) system (cmd) diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index e8c871ec36..1dfae03313 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -130,9 +130,13 @@ def user_error (s, e=1): sys.exit (e) def error (s): - '''Report the error S. Exit by raising an exception. Please - do not abuse by trying to catch this error. If you do not want - a stack trace, write to the output directly. + '''Report the error S. + + If verbose is set, exit by raising an exception. Otherwise, + simply sys.exit(). + + Please do not abuse by trying to catch this error. If you do + not want a stack trace, write to the output directly. RETURN VALUE @@ -141,7 +145,10 @@ def error (s): ''' progress (_ ("error: ") + s) - raise _ ("Exiting ... ") + if verbose_p: + raise _ ("Exiting ... ") + else: + sys.exit (2) def getopt_args (opts): '''Construct arguments (LONG, SHORT) for getopt from list of options.''' @@ -321,6 +328,7 @@ errorport = sys.stderr keep_temp_dir_p = 0 verbose_p = 0 preview_p = 0 +lilypond_error_p = 0 preview_resolution = 90 pseudo_filter_p = 0 latex_cmd = 'latex' @@ -509,8 +517,12 @@ def run_lilypond (files, dep_prefix): + _ ("Please submit a bug report to bug-lilypond@gnu.org") + "\n") if status: - error ( "\n" \ - + _ ("LilyPond failed on the input file (exit status %d).") % exit_status + "\n") + sys.stderr.write ( "\n" \ + + _ ("LilyPond failed on an input file (exit status %d).") % exit_status + "\n") + sys.stderr.write (_("Trying to salvage the rest.") +'\n\n') + + global lilypond_error_p + lilypond_error_p = 1 def analyse_lilypond_output (filename, extra): @@ -600,6 +612,7 @@ def one_latex_definition (defn, first): ly_paper_to_latexpaper = { 'a4' : 'a4paper', 'letter' : 'letterpaper', + 'a3' : 'a3paper' } #TODO: should set textheight (enlarge) depending on papersize. @@ -1105,7 +1118,8 @@ if files: os.chdir (original_dir) cleanup_temp () - + + sys.exit (lilypond_error_p) else: help () user_error (_ ("no files specified on command line"), 2) diff --git a/tex/titledefs.tex b/tex/titledefs.tex index fd680ff7e4..653afeb09c 100644 --- a/tex/titledefs.tex +++ b/tex/titledefs.tex @@ -8,6 +8,13 @@ %% makes LaTeX break on the \\ in: %% \ifx\lilypondfoo\undefined\else{\lilypondfoo\\}\fi %% +% The feta characters for use in titles +\input feta20.tex +% +\font\fetasixteen=feta16 +\def\fetafont{\fetasixteen} +\def\fetachar#1{\hbox{\fetasixteen#1}} +% \def\makelilypondtitle { \begin{center} -- 2.39.2

[picture of music] - +