From: Francisco Vila Date: Thu, 1 Mar 2012 12:59:42 +0000 (+0100) Subject: Merge branch 'lilypond/translation' into staging X-Git-Tag: release/2.15.32-1~18 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=e885a8cabc8335f1c46c48e92d4048e9d258cd10;hp=caa20bea6318da01b4b9f5591255a6bc02f1c190;p=lilypond.git Merge branch 'lilypond/translation' into staging --- diff --git a/Documentation/changes.tely b/Documentation/changes.tely index 16f0085e98..b3fe430955 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -61,6 +61,14 @@ which scares away people. @end ignore +@item +The LilyPond G clef has been redesigned - upper loop is now more balanced, +bottom crook sticks out less and the "spine" (main vertical line) is more +evenly curved. The old and new versions can be compared by looking at the +documentation: +@uref{http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs, old version}, +@uref{http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs, new version}. + @item Lilypond's stencil commands have been simplified to allow for less code duplication and better height approximations of graphical objects. The diff --git a/Documentation/contributor/introduction.itexi b/Documentation/contributor/introduction.itexi index e41b42b0fb..b15b4291d0 100644 --- a/Documentation/contributor/introduction.itexi +++ b/Documentation/contributor/introduction.itexi @@ -21,9 +21,9 @@ help LilyPond. @helpusNeed -@helpusTasks +@helpusSimple -@helpusProjects +@helpusAdvanced @node Overview of work flow diff --git a/Documentation/contributor/lsr-work.itexi b/Documentation/contributor/lsr-work.itexi index 1a64a55c8f..9cc0d1805d 100644 --- a/Documentation/contributor/lsr-work.itexi +++ b/Documentation/contributor/lsr-work.itexi @@ -299,6 +299,31 @@ Download the latest snippet tarball, extract it, and run @option{--to=@var{version}} to ensure snippets are updated to the correct stable version. +Make sure you use @code{convert-ly} from the latest available release to gain +all advantages from the latest converting-rules-updates. + +Example: + +@itemize + +@item +LSR-version: 2.12.2 + +@item +intended LSR-update to 2.14.2 + +@item +latest release 2.15.30 + +@end itemize + +Use @code{convert-ly} from 2.15.30 and the following terminal +command for all files: + +@example +convert-ly -e -t2.14.2 *.ly +@end example + @item Copy relevant snippets (i.e., snippets whose version is equal to or less than the new version of LilyPond) from diff --git a/Documentation/included/helpus.itexi b/Documentation/included/helpus.itexi index 07b6ffb4bd..1578a36174 100644 --- a/Documentation/included/helpus.itexi +++ b/Documentation/included/helpus.itexi @@ -16,10 +16,10 @@ of spending time on those simple tasks. @end macro -@macro helpusTasks +@macro helpusSimple @subheading Simple tasks -No source code or compiling required! +@strong{No programming skills} required! @itemize @item @@ -45,6 +45,10 @@ testing new features. Please contribute to these discussions! @end itemize +@end macro + + +@macro helpusAdvanced @subheading Advanced tasks These jobs generally require that you have the source code and can @@ -82,7 +86,7 @@ Frogs, and read @rcontrib{Programming work}. @end macro - +@ignore @macro helpusProjects @subheading Projects @@ -135,4 +139,5 @@ with larger tasks in the future. @end macro +@end ignore diff --git a/Documentation/ly-examples/GNUmakefile b/Documentation/ly-examples/GNUmakefile index a3ee42280b..b4e4d2c0be 100644 --- a/Documentation/ly-examples/GNUmakefile +++ b/Documentation/ly-examples/GNUmakefile @@ -14,7 +14,7 @@ all: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES) endif $(outdir)/%.png: %.ly - $(LILYPOND_PREVIEW) -o $(outdir) $< + $(buildscript-dir)/run-and-check "$(LILYPOND_PREVIEW) -o $(outdir) $<" "$*.preview.log" mv $(outdir)/$*.preview.png $@ $(outdir)/%-small.png: $(outdir)/%.png diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely index a3707bf42a..b5c60a1980 100644 --- a/Documentation/notation/rhythms.itely +++ b/Documentation/notation/rhythms.itely @@ -2147,17 +2147,31 @@ if @code{beamExceptions} is not reset. \repeat unfold 8 {c8} @end lilypond -In a similar fashion, eighth notes in 3/4 time are beamed as a full -measure by default. To beam eighth notes in 3/4 time on the beat, -reset @code{beamExceptions}. +In traditional engraving, eighth notes can have special beaming rules. +A measure consisting of only eighth notes can be beamed in one. This rule is +controlled by the context property @code{beamWholeMeasure}: @lilypond[quote,verbatim,relative=2] \time 3/4 -% by default we beam in (3) due to beamExceptions -\repeat unfold 6 {a8} | -% This will beam (1 1 1) due to beatLength -\set Timing.beamExceptions = #'() -\repeat unfold 6 {a8} +% By default we beam in one +\repeat unfold 6 { a8 } +% We can avoid beaming in one +\set Timing.beamWholeMeasure = ##f +\repeat unfold 6 { a8 } +@end lilypond + +In some engraving from the Romantic and Classical periods, +a half-measure of eighth notes can be beamed +together even though this violates the general rule (see Gould, p. 153). +This behavior is controlled by the context property @code{beamHalfMeasure}: + +@lilypond[quote,verbatim,relative=2] +\time 3/4 +% By default we avoid half-measure beams +r4. a8 a a | +% We can allow half-measure beams +\set Timing.beamHalfMeasure = ##t +r4. a8 a a | @end lilypond @i{@strong{How automatic beaming works}} diff --git a/Documentation/snippets/centering-markup-on-note-heads-automatically.ly b/Documentation/snippets/centering-markup-on-note-heads-automatically.ly index ce227d016e..74cab448cd 100644 --- a/Documentation/snippets/centering-markup-on-note-heads-automatically.ly +++ b/Documentation/snippets/centering-markup-on-note-heads-automatically.ly @@ -4,8 +4,8 @@ % and then run scripts/auxiliar/makelsr.py % % This file is in the public domain. -%% Note: this file works from version 2.14.0 -\version "2.14.0" +%% Note: this file works from version 2.15.31 +\version "2.15.31" \header { lsrtags = "text, tweaks-and-overrides, contexts-and-engravers" @@ -25,29 +25,23 @@ been shifted via @code{force-hshift}. #(define (Text_align_engraver ctx) (let ((scripts '()) (note-column #f)) - - `((acknowledgers - (note-column-interface - . ,(lambda (trans grob source) - ;; cache NoteColumn in this Voice context - (set! note-column grob))) - - (text-script-interface - . ,(lambda (trans grob source) - ;; whenever a TextScript is acknowledged, - ;; add it to `scripts' list - (set! scripts (cons grob scripts))))) - - (stop-translation-timestep - . ,(lambda (trans) - ;; if any TextScript grobs exist, - ;; set NoteColumn as X-parent - (and (pair? scripts) - (for-each (lambda (script) - (set! (ly:grob-parent script X) note-column)) - scripts)) - ;; clear scripts ready for next timestep - (set! scripts '())))))) + (make-engraver + (acknowledgers + ((note-column-interface trans grob source) + ;; cache NoteColumn in this Voice context + (set! note-column grob)) + ((text-script-interface trans grob source) + ;; whenever a TextScript is acknowledged, + ;; add it to `scripts' list + (set! scripts (cons grob scripts)))) + ((stop-translation-timestep trans) + ;; if any TextScript grobs exist, + ;; set NoteColumn as X-parent + (for-each (lambda (script) + (set! (ly:grob-parent script X) note-column)) + scripts) + ;; clear scripts ready for next timestep + (set! scripts '()))))) \layout { \context { diff --git a/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly b/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly index 77af8a9290..927eabde3a 100644 --- a/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly +++ b/Documentation/snippets/creating-metronome-marks-in-markup-mode.ly @@ -27,7 +27,7 @@ aber sie ändern nicht das Tempo für die MIDI-Ausgabe. doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen" -%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 +%% Translation of GIT committish: af3df3b7c6e062635bdccb739be41962969806a0 texidocfr = " Vous pouvez créer des indications de tempo sous la forme d'étiquettes textuelles -- des objets @code{markup} -- notamment des équivalences. diff --git a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly index b208a61ca7..9219df9c54 100644 --- a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly +++ b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly @@ -35,12 +35,12 @@ weggelassen werden kann. " doctitlede = "Bunddiagramme anpassen" -%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd +%% Translation of GIT committish: af01b3b78afa2e7c3c60e7280ee0b6382135bd35 texidocfr = " Les propriétés d'un diagramme de fret sont définies par les -@code{fret-diagram-details}. En matière de diagramme FretBoards, les +@code{'fret-diagram-details}. En matière de diagramme de fret, les adaptations s'appliquent à l'objet @code{FretBoards.FretBoard}. Un -@code{FretBoard} est comparable à un @code{Voice}@tie{}: il s'agit +@code{FretBoards} est comparable à un @code{Voice}@tie{}: il s'agit d'un contexte du plus bas niveau, et il n'est donc pas primordial de l'instancier de manière explicite pour adapter ses propriétés. diff --git a/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly b/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly index bf498a657a..025b32766b 100644 --- a/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly +++ b/Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly @@ -4,8 +4,8 @@ % and then run scripts/auxiliar/makelsr.py % % This file is in the public domain. -%% Note: this file works from version 2.14.0 -\version "2.14.0" +%% Note: this file works from version 2.15.31 +\version "2.15.31" \header { %% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98 @@ -42,10 +42,6 @@ Esto es básicamente una reescritura en Scheme del código de %%% Grob utilities %%% %%% These are literal rewrites of some C++ methods used by the ambitus engraver. -#(define (ly:event::in-event-class event class-name) - "Check if @var{event} the given class. -Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}." - (memq class-name (ly:make-event-class (ly:event-property event 'class)))) #(define (ly:separation-item::add-conditional-item grob grob-item) "Add @var{grob-item} to the array of conditional elements of @var{grob}. @@ -209,7 +205,7 @@ position of middle C and key signature from @var{translator}'s context." ;; Get the event that caused the note-grob creation ;; and check that it is a note-event. (let ((note-event (ly:grob-property note-grob 'cause))) - (if (ly:event::in-event-class note-event 'note-event) + (if (ly:in-event-class? note-event 'note-event) ;; get the pitch from the note event (let ((pitch (ly:event-property note-event 'pitch))) ;; if this pitch is lower than the current ambitus lower @@ -313,23 +309,24 @@ position of middle C and key signature from @var{translator}'s context." (lambda (context) (let ((ambitus #f)) ;; when music is processed: make the ambitus object, if not already built - `((process-music . ,(lambda (translator) - (if (not ambitus) - (set! ambitus (make-ambitus translator))))) - ;; set the ambitus clef and key signature state - (stop-translation-timestep . ,(lambda (translator) - (if ambitus - (initialize-ambitus-state ambitus translator)))) - ;; when a note-head grob is built, update the ambitus notes - (acknowledgers - (note-head-interface . ,(lambda (engraver grob source-engraver) - (if ambitus - (update-ambitus-notes ambitus grob))))) - ;; finally, typeset the ambitus according to its upper and lower notes - ;; (if any). - (finalize . ,(lambda (translator) - (if ambitus - (typeset-ambitus ambitus translator)))))))) + (make-engraver + ((process-music translator) + (if (not ambitus) + (set! ambitus (make-ambitus translator)))) + ;; set the ambitus clef and key signature state + ((stop-translation-timestep translator) + (if ambitus + (initialize-ambitus-state ambitus translator))) + ;; when a note-head grob is built, update the ambitus notes + (acknowledgers + ((note-head-interface engraver grob source-engraver) + (if ambitus + (update-ambitus-notes ambitus grob)))) + ;; finally, typeset the ambitus according to its upper and lower notes + ;; (if any). + ((finalize translator) + (if ambitus + (typeset-ambitus ambitus translator))))))) %%% %%% Example diff --git a/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly index e9725f3db6..c9552557c9 100644 --- a/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly +++ b/Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly @@ -40,7 +40,7 @@ wie das zweite Beispiel zeigt. " doctitlede = "Klammer anzeigen wenn nur ein System gesetzt wird" -%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 +%% Translation of GIT committish: af3df3b7c6e062635bdccb739be41962969806a0 texidocfr = " Lorsque, dans des regoupements de type @code{ChoirStaff} ou @code{StaffGroup}, une seule portée est active, aucune indication n'est diff --git a/Documentation/snippets/formatting-lyrics-syllables.ly b/Documentation/snippets/formatting-lyrics-syllables.ly index 4fe20bb404..3a1d963b33 100644 --- a/Documentation/snippets/formatting-lyrics-syllables.ly +++ b/Documentation/snippets/formatting-lyrics-syllables.ly @@ -17,6 +17,14 @@ individuales dentro de la letra. lsrtags = "text, vocal-music" +%% Translation of GIT committish: ea0b270e14781707ab52683acddf9302bbe337f3 + texidoces = " +Es posible usar el modo de marcado para dar formato a sílabas +individuales dentro de la letra. + +" + doctitlees = "Dar formato a sílabas de la letra" + %%% Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422 texidocde = " Textbeschriftungsmodus kann eingesetzt werden, um individuelle Silben im Gesangstext @@ -24,6 +32,7 @@ zu formatieren. " doctitlede = "Silben im Gesangstext formatieren" + %% Translation of GIT committish: d9d1da30361a0bcaea1ae058eb1bc8dd3a5b2e4c texidocfr = " Le mode markup permet d'individualiser la mise en forme de certaines syllabes. diff --git a/Documentation/snippets/hymn-template.ly b/Documentation/snippets/hymn-template.ly index b8af195da3..d2d680e43d 100644 --- a/Documentation/snippets/hymn-template.ly +++ b/Documentation/snippets/hymn-template.ly @@ -27,6 +27,7 @@ strofe come testo separato sotto la musica. " doctitleit = "Modello per inno" + %% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 texidocde = " diff --git a/Documentation/snippets/nesting-staves.ly b/Documentation/snippets/nesting-staves.ly index 273caf791c..f1169e155c 100644 --- a/Documentation/snippets/nesting-staves.ly +++ b/Documentation/snippets/nesting-staves.ly @@ -44,7 +44,7 @@ die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: @code{SystemSta " doctitlede = "Systeme schachteln" -%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 +%% Translation of GIT committish: af3df3b7c6e062635bdccb739be41962969806a0 texidocfr = " La propriété @code{systemStartDelimiterHierarchy} permet de créer des regroupements imbriqués complexes. La commande diff --git a/Documentation/snippets/numbers-as-easy-note-heads.ly b/Documentation/snippets/numbers-as-easy-note-heads.ly index 7dd3cc616e..30ea77e487 100644 --- a/Documentation/snippets/numbers-as-easy-note-heads.ly +++ b/Documentation/snippets/numbers-as-easy-note-heads.ly @@ -4,8 +4,8 @@ % and then run scripts/auxiliar/makelsr.py % % This file is in the public domain. -%% Note: this file works from version 2.14.0 -\version "2.14.0" +%% Note: this file works from version 2.15.31 +\version "2.15.31" \header { %% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98 @@ -62,21 +62,19 @@ object it sees. #(define Ez_numbers_engraver - (list - (cons 'acknowledgers - (list - (cons 'note-head-interface - (lambda (engraver grob source-engraver) - (let* ((context (ly:translator-context engraver)) - (tonic-pitch (ly:context-property context 'tonic)) - (tonic-name (ly:pitch-notename tonic-pitch)) - (grob-pitch - (ly:event-property (event-cause grob) 'pitch)) - (grob-name (ly:pitch-notename grob-pitch)) - (delta (modulo (- grob-name tonic-name) 7)) - (note-names - (make-vector 7 (number->string (1+ delta))))) - (ly:grob-set-property! grob 'note-names note-names)))))))) + (make-engraver + (acknowledgers + ((note-head-interface engraver grob source-engraver) + (let* ((context (ly:translator-context engraver)) + (tonic-pitch (ly:context-property context 'tonic)) + (tonic-name (ly:pitch-notename tonic-pitch)) + (grob-pitch + (ly:event-property (event-cause grob) 'pitch)) + (grob-name (ly:pitch-notename grob-pitch)) + (delta (modulo (- grob-name tonic-name) 7)) + (note-names + (make-vector 7 (number->string (1+ delta))))) + (ly:grob-set-property! grob 'note-names note-names)))))) #(set-global-staff-size 26) diff --git a/Documentation/snippets/partcombine-and-autobeamoff.ly b/Documentation/snippets/partcombine-and-autobeamoff.ly index fb3f88f340..bf5fb3e519 100644 --- a/Documentation/snippets/partcombine-and-autobeamoff.ly +++ b/Documentation/snippets/partcombine-and-autobeamoff.ly @@ -47,6 +47,7 @@ necesario hacer tres llamadas a @code{\\autoBeamOff}. " doctitlees = "Partcombine y autoBeamOff" + %% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 texidocde = " @@ -78,6 +79,7 @@ wenn man es mit @code{\\partcombine} verwendet, muss @code{\\autoBeamOff} " doctitlede = "Partcombine und autoBeamOff" + %% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4 texidocfr = " La fonction @code{\\autoBeamOff} dans le cadre d'un diff --git a/Documentation/snippets/placement-of-right-hand-fingerings.ly b/Documentation/snippets/placement-of-right-hand-fingerings.ly index 343e6c5efb..108976ad0d 100644 --- a/Documentation/snippets/placement-of-right-hand-fingerings.ly +++ b/Documentation/snippets/placement-of-right-hand-fingerings.ly @@ -29,11 +29,11 @@ das folgende Beispiel zeigt: " doctitlede = "Positionierung von Fingersatz der rechten Hand" -%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4 +%% Translation of GIT committish: af01b3b78afa2e7c3c60e7280ee0b6382135bd35 texidocfr = " Vous disposez d'une propriété spécifique qui permet de contrôler plus finement le positionnement des doigtés main droite, comme l'indique -l'exemple suivant. +l'exemple suivant. N'oubliez pas le construction de type accord. " doctitlefr = "Positionnement des doigtés main droite" diff --git a/Documentation/snippets/printing-marks-on-every-staff.ly b/Documentation/snippets/printing-marks-on-every-staff.ly index 2273efe107..8a3d47ccbd 100644 --- a/Documentation/snippets/printing-marks-on-every-staff.ly +++ b/Documentation/snippets/printing-marks-on-every-staff.ly @@ -9,7 +9,7 @@ \header { lsrtags = "text" -%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98 +%% Translation of GIT committish: ea0b270e14781707ab52683acddf9302bbe337f3 texidoces = " Aunque normalmente las marcas de ensayo textuales sólo se imprimen sobre el pentagrama superior, también se pueden imprimir en otro diff --git a/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly index ada34d8dd1..9d5e2017e1 100644 --- a/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly +++ b/Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly @@ -32,7 +32,7 @@ von @code{MetronomeMark} oder @code{RehearsalMark} entsprechend verändert werde " doctitlede = "Metronom- und Übungszeichen unter das System setzen" -%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6 +%% Translation of GIT committish: af3df3b7c6e062635bdccb739be41962969806a0 texidocfr = " Les indications de tempo et les marques de repère s'impriment par défaut au-dessus de la portée. Le fait de régler en conséquence la propriété diff --git a/Documentation/snippets/woodwind-diagrams-key-lists.ly b/Documentation/snippets/woodwind-diagrams-key-lists.ly index 0f492428d0..22dea409c0 100644 --- a/Documentation/snippets/woodwind-diagrams-key-lists.ly +++ b/Documentation/snippets/woodwind-diagrams-key-lists.ly @@ -8,7 +8,7 @@ \version "2.14.0" \header { -%%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98 +%%% Translation of GIT committish: ea0b270e14781707ab52683acddf9302bbe337f3 texidoces = " diff --git a/Documentation/translations.itexi b/Documentation/translations.itexi index 937a88bd4b..58f80293ef 100644 --- a/Documentation/translations.itexi +++ b/Documentation/translations.itexi @@ -108,11 +108,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -588,11 +588,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -876,11 +876,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -1632,11 +1632,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -1908,11 +1908,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -2158,11 +2158,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -2868,11 +2868,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -3411,11 +3411,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Yoshiki Sawada @* @@ -3517,6 +3517,7 @@ Jean-Charles Malahieude @end ifnothtml @* +@end ifnothtml @ifhtml @html @@ -3551,11 +3552,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @tab Federico Bruni @* @@ -3569,6 +3570,54 @@ up to date @ifnothtml Luca Rossetto Casel @end ifnothtml +@tab Francisco Vila +@* + +@ifhtml + +@html +translated +@end html +@end ifhtml +@ifnothtml +translated +@end ifnothtml +@* + +@ifhtml + +@html +up to date +@end html +@end ifhtml +@ifnothtml +up to date +@end ifnothtml +@tab Valentin Villenave +@* +Jean-Charles Malahieude +@* + +@ifhtml + +@html +Jean-Charles Malahieude +@end html +@end ifhtml +@ifnothtml +Jean-Charles Malahieude +@end ifnothtml +@* + +@ifhtml + +@html +John Mandereau +@end html +@end ifhtml +@ifnothtml +John Mandereau +@end ifnothtml @* @ifhtml @@ -3617,11 +3666,11 @@ translated @ifhtml @html -partially up to date +up to date @end html @end ifhtml @ifnothtml -partially up to date +up to date @end ifnothtml @item 1.3 Expressive marks @@ -3872,6 +3921,7 @@ John Mandereau @end ifnothtml @* +@end ifnothtml @ifhtml @html @@ -3888,7 +3938,7 @@ John Mandereau @end html @end ifhtml @ifnothtml -translated +not translated @end ifnothtml @* @@ -3938,13 +3988,13 @@ not translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml -@tab Yoshiki Sawada +@tab Francisco Vila @* @ifhtml @@ -3977,11 +4027,11 @@ up to date @ifhtml @html -translated +Jean-Charles Malahieude @end html @end ifhtml @ifnothtml -translated +Jean-Charles Malahieude @end ifnothtml @* @@ -3997,6 +4047,7 @@ up to date @tab Francisco Vila @* +@end ifnothtml @ifhtml @html @@ -4038,11 +4089,11 @@ Jean-Charles Malahieude @ifhtml @html -John Mandereau +Luca Rossetto Casel @end html @end ifhtml @ifnothtml -John Mandereau +Luca Rossetto Casel @end ifnothtml @* @@ -4058,11 +4109,11 @@ John Mandereau @ifhtml @html -translated +not translated @end html @end ifhtml @ifnothtml -translated +not translated @end ifnothtml @* @@ -4151,18 +4202,18 @@ partially up to date @ifhtml @html -translated +John Mandereau @end html @end ifhtml @ifnothtml -translated +John Mandereau @end ifnothtml @* @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml @@ -4171,6 +4222,7 @@ up to date @tab Francisco Vila @* +@end ifnothtml @ifhtml @html @@ -4219,11 +4271,11 @@ John Mandereau @ifhtml @html -translated +not translated @end html @end ifhtml @ifnothtml -translated +not translated @end ifnothtml @* @@ -4248,6 +4300,11 @@ up to date @ifnothtml Luca Rossetto Casel @end ifnothtml +@item +2.6 Wind instruments +@* +(319) +@tab Till Paala @* @ifhtml @@ -4273,13 +4330,13 @@ not translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml -@tab Yoshiki Sawada +@tab Francisco Vila @* @ifhtml @@ -4312,11 +4369,11 @@ up to date @ifhtml @html -translated +Jean-Charles Malahieude @end html @end ifhtml @ifnothtml -translated +Jean-Charles Malahieude @end ifnothtml @* @@ -4329,28 +4386,25 @@ translated @ifnothtml up to date @end ifnothtml -@tab Francisco Vila @* @ifhtml @html -translated + @end html @end ifhtml @ifnothtml -translated -@end ifnothtml -@* +@end ifnothtml @ifhtml @html -up to date +translated @end html @end ifhtml @ifnothtml -up to date +translated @end ifnothtml @tab Jean-Charles Malahieude @* @@ -4435,11 +4489,11 @@ translated @ifhtml @html -up to date +partially up to date @end html @end ifhtml @ifnothtml -up to date +partially up to date @end ifnothtml @item 1.8 Text @@ -5774,22 +5828,8 @@ partially up to date @end html @end ifhtml @ifnothtml -translated -@end ifnothtml -@* -@ifhtml - -@html -up to date -@end html -@end ifhtml -@ifnothtml -up to date @end ifnothtml -@tab Francisco Vila -@* - @ifhtml @html @@ -6251,11 +6291,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -6412,11 +6452,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -6553,11 +6593,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -9581,11 +9621,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* @@ -9854,11 +9894,11 @@ translated @ifhtml @html -up to date + @end html @end ifhtml @ifnothtml -up to date + @end ifnothtml @tab Francisco Vila @* diff --git a/Documentation/web/community.itexi b/Documentation/web/community.itexi index b48776f19a..d26509623a 100644 --- a/Documentation/web/community.itexi +++ b/Documentation/web/community.itexi @@ -506,13 +506,13 @@ demonstrate what you think it should look like! @divClass{column-left-top} @divClass{keep-bullets} -@helpusTasks +@helpusSimple @divEnd @divEnd @divClass{column-right-top} -@helpusProjects +@helpusAdvanced @divEnd @@ -546,7 +546,7 @@ in mind the following points: @itemize @item -LilyPond developers may advertise their services on the lilypnod +LilyPond developers may advertise their services on the lilypond email lists from time to time. @item diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi index 9e265f6887..254b762d6e 100644 --- a/Documentation/web/news-front.itexi +++ b/Documentation/web/news-front.itexi @@ -9,6 +9,20 @@ @c used for news about the upcoming release; see CG 10.2 +@newsItem +@subsubheading LilyPond 2.15.31 released! @emph{Feb 29, 2012} + +We are happy to announce the release of LilyPond 2.15.31. This +release contains the usual number of bugfixes. + +It is strongly recommended that normal users do @strong{not} use +this release, and instead use the stable 2.14 version. Please +note that due to a few Critical bugs, this is not the next release +candidate. + +@newsEnd + + @newsItem @subsubheading Release candidate 3 of 2.16 - LilyPond 2.15.30 released! @emph{Feb 17, 2012} diff --git a/GNUmakefile.in b/GNUmakefile.in index bd2d0ce5a3..2d22f9f378 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -133,15 +133,12 @@ WEB_TRACKED_FILES = $(filter-out $(outdir)/index.html, \ $(shell bash -O nullglob -c "echo Documentation/$(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}") \ $(shell bash -O nullglob -c "echo Documentation/$(outdir)/*/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}") -WWW-post: $(top-build-dir)/.htaccess $(outdir)/examples.html $(WEB_ROOT_FILES) +WWW-post: $(top-build-dir)/.htaccess $(WEB_ROOT_FILES) # need UTF8 setting in case this is hosted on a website. $(top-build-dir)/.htaccess: echo -e 'AddDefaultCharset utf-8\nAddCharset utf-8 .html\nAddCharset utf-8 .en\nAddCharset utf-8 .nl\nAddCharset utf-8 .txt\n' > $(top-build-dir)/.htaccess -$(outdir)/examples.html: $(WEB_EXAMPLE_FILES) - $(buildscript-dir)/mutopia-index -o $(outdir)/examples.html input/ - $(outdir)/offline-root/index.html: $(WEB_TRACKED_FILES) $(buildscript-dir)/www_post $(PACKAGE_NAME) $(TOPLEVEL_VERSION) $(outdir) offline find $(outdir)/offline-root -type l | xargs rm -f diff --git a/VERSION b/VERSION index 533839d81a..6f7139f232 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 MINOR_VERSION=15 -PATCH_LEVEL=31 +PATCH_LEVEL=32 MY_PATCH_LEVEL= VERSION_STABLE=2.14.2 -VERSION_DEVEL=2.15.30 +VERSION_DEVEL=2.15.31 diff --git a/input/regression/autobeam-3-4-rules.ly b/input/regression/autobeam-3-4-rules.ly new file mode 100644 index 0000000000..5730b6c424 --- /dev/null +++ b/input/regression/autobeam-3-4-rules.ly @@ -0,0 +1,24 @@ +\version "2.15.31" + +\header { + + doctitle = "Special beaming rules for 3/4 time" + + texinfo = " +Whole-measure and half-measure beaming in 3/4 time can be controlled. +The first measure should be beamed in one. The second measure should +be beamed in three. The third and fourth measures should be beamed +at 3/8. + " + +} + +\relative c' { + \time 3/4 + c8^\markup "Beam in one" c c c c c + \set Timing.beamWholeMeasure = ##f + c8^\markup "Beam in three" c c c c c + \set Timing.beamHalfMeasure = ##t + r4.^\markup "Beam in Two" c8 c c + c8 c c r4. +} diff --git a/input/regression/layout-from.ly b/input/regression/layout-from.ly new file mode 100644 index 0000000000..2c0669a2fe --- /dev/null +++ b/input/regression/layout-from.ly @@ -0,0 +1,19 @@ +\version "2.15.31" + +\header { + texidoc = " +@code{\\layout-from} can interpret property-setting music for changing +context definitions inside of layout definitions like @code{\\layout} +or @code{\\midi}. +" +} + +\score { + \relative c' { cis cis cis cis } + \layout { + \layout-from { \accidentalStyle "dodecaphonic" } + } + \midi { + \layout-from { \tempo 4 = 240 } + } +} diff --git a/input/regression/multiple-time-sig-settings.ly b/input/regression/multiple-time-sig-settings.ly index 2caad79c8e..ab95af5498 100644 --- a/input/regression/multiple-time-sig-settings.ly +++ b/input/regression/multiple-time-sig-settings.ly @@ -10,7 +10,7 @@ by the markups. \new Staff{ \relative c' { - \overrideTimeSignatureSettings + \overrideTimeSignatureSettings #'(4 . 4) % time signature fraction #'(1 . 4) % base moment fraction #'(1 1 1 1) % beatStructure @@ -19,7 +19,7 @@ by the markups. #'(3 . 4) % time signature fraction #'(1 . 4) % base moment fraction #'(1 1 1) % beatStructure - #'() % beamExceptions + #'((end . (((1 . 8) . (2 2 2))))) % set exceptions to beam by 1/4 \time 4/4 c8^\markup {"Beam by 1/4"} c c c c c c c | \time 3/4 diff --git a/input/regression/rest-on-nonstandard-staff.ly b/input/regression/rest-on-nonstandard-staff.ly index 4870f578cf..f81aebdfbc 100644 --- a/input/regression/rest-on-nonstandard-staff.ly +++ b/input/regression/rest-on-nonstandard-staff.ly @@ -55,4 +55,9 @@ mus = { \override Staff.StaffSymbol #'line-positions = #'(-4 -2 1 5) \mus } + + \new Staff { + \stopStaff + \mus + } >> diff --git a/lily/book-scheme.cc b/lily/book-scheme.cc index 39ad1181b6..7f1026a3e7 100644 --- a/lily/book-scheme.cc +++ b/lily/book-scheme.cc @@ -164,3 +164,7 @@ LY_DEFINE (ly_book_scores, "ly:book-scores", Book *b = unsmob_book (book); return b->scores_; } + +#include "ly-smobs.icc" + +IMPLEMENT_TYPE_P (Book, "ly:book?"); diff --git a/lily/context-def.cc b/lily/context-def.cc index 00b10f9616..1bea3ea440 100644 --- a/lily/context-def.cc +++ b/lily/context-def.cc @@ -349,3 +349,6 @@ Context_def::to_alist () const return ell; } +#include "ly-smobs.icc" + +IMPLEMENT_TYPE_P (Context_def, "ly:context-def?"); diff --git a/lily/parser.yy b/lily/parser.yy index 29f4f2a1e0..c26f2aae63 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -864,8 +864,6 @@ book_body: push_paper (parser, $$->paper_); $$->header_ = parser->lexer_->lookup_identifier ("$defaultheader"); parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$->self_scm ()); - parser->lexer_->set_identifier (ly_symbol2scm ("book-output-suffix"), SCM_BOOL_F); - parser->lexer_->set_identifier (ly_symbol2scm ("book-filename"), SCM_BOOL_F); } | BOOK_IDENTIFIER { $$ = unsmob_book ($1); diff --git a/lily/rest.cc b/lily/rest.cc index a25e6a9319..0bb61444b4 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -26,6 +26,7 @@ #include "output-def.hh" #include "paper-score.hh" #include "staff-symbol-referencer.hh" +#include "staff-symbol.hh" #include "stencil.hh" #include "grob.hh" @@ -48,7 +49,7 @@ Rest::y_offset_callback (SCM smob) robust_scm2double (me->get_property ("staff-position"), 0) * 0.5 * ss; /* - semibreve rests were always positioned one off + semibreve rests are positioned one staff line off */ if (duration_log == 0) amount += ss; @@ -66,17 +67,25 @@ Rest::y_offset_callback (SCM smob) /* make a semibreve rest hang from the next line, - except for a single line staff; - assume the next line being integer steps away + except for a single line staff */ if (duration_log == 0 && line_count > 1) - ++pos; + pos += 2; /* make sure rest is aligned to a staff line */ - while (!Staff_symbol_referencer::on_line (me, pos)) - ++pos; + if (Grob *staff = Staff_symbol_referencer::get_staff_symbol(me)) + { + std::vector linepos = Staff_symbol::line_positions (staff); + std::sort(linepos.begin(), linepos.end()); + std::vector::const_iterator it + = std::lower_bound(linepos.begin(), linepos.end(), pos); + if (it != linepos.end()) + { + pos = (int)ceil(*it); + } + } amount = ss * 0.5 * pos; } @@ -112,14 +121,14 @@ Rest::glyph_name (Grob *me, int durlog, string style, bool try_ledgers) int const pos = int (Staff_symbol_referencer::get_position (me)); /* - half rests need ledger if not lying on a staff line, - whole rests need ledger if not hanging from a staff line, - breve rests need ledger if neither lying on nor hanging from a staff line + half rests need ledger if not lying on a staff line, + whole rests need ledger if not hanging from a staff line, + breve rests need ledger if neither lying on nor hanging from a staff line */ if (-1 <= durlog && durlog <= 1) is_ledgered = !Staff_symbol_referencer::on_staff_line (me, pos) - && !(durlog == -1 - && Staff_symbol_referencer::on_staff_line (me, pos + 2)); + && !(durlog == -1 + && Staff_symbol_referencer::on_staff_line (me, pos + 2)); } string actual_style (style.c_str ()); diff --git a/ly/context-mods-init.ly b/ly/context-mods-init.ly index 087d4bb155..b8361a58ec 100644 --- a/ly/context-mods-init.ly +++ b/ly/context-mods-init.ly @@ -16,7 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.15.6" +\version "2.15.31" RemoveEmptyStaves = \with { \remove "Axis_group_engraver" @@ -31,3 +31,78 @@ RemoveEmptyStaves = \with { \description "Remove staves which are considered to be empty according to the list of interfaces set by @code{keepAliveInterfaces}." } + +"layout-from" = +#(define-void-function (parser location bottom music) + ((symbol? 'Voice) ly:music?) + (_i "To be used in output definitions. Take the layout instruction +events from @var{music} and do the equivalent of context modifications +duplicating their effect. + +This is handy for making layout definitions by using property +definitions like @code{\\accidentalStyle} or definitions like +@code{\\tabFullNotation} that may work in multiple or unknown +contexts. + +Layout instructions specified without explicit context get mapped to +the context symbol @var{bottom}, with a default of @code{'Voice}. + +For example, you can tell @code{\\layout-from} to apply a contained +@example +\\override #'font-size = #2 +@end example +to @samp{TabVoice} or @samp{Lyrics} context instead of the default +@samp{Voice} context, if the context where you would normally use +@var{music} is not one that would have @samp{Voice} as its +@samp{Bottom}.") + (let loop ((m music) (mods #f)) + ;; The parser turns all sets, overrides etc into something + ;; wrapped in ContextSpeccedMusic. If we ever get a set, + ;; override etc that is not wrapped in ContextSpeccedMusic, the + ;; user has created it in Scheme himself without providing the + ;; required wrapping. In that case, using #f in the place of a + ;; context modification results in a reasonably recognizable + ;; error. + (if (music-is-of-type? m 'layout-instruction-event) + (ly:add-context-mod + mods + (case (ly:music-property m 'name) + ((PropertySet) + (list 'assign + (ly:music-property m 'symbol) + (ly:music-property m 'value))) + ((PropertyUnset) + (list 'unset + (ly:music-property m 'symbol))) + ((OverrideProperty) + (list 'push + (ly:music-property m 'symbol) + (ly:music-property m 'grob-property-path) + (ly:music-property m 'grob-value))) + ((RevertProperty) + (list 'pop + (ly:music-property m 'symbol) + (ly:music-property m 'grob-property-path))))) + (case (ly:music-property m 'name) + ((SequentialMusic SimultaneousMusic) + (fold loop mods (ly:music-property m 'elements))) + ((ContextSpeccedMusic) + ;; It is actually rather embarrassing that we have no + ;; reliable way to check for the type of a context-def. + ;; Nor have a Scheme way to add to a context-def. + (let ((sym (ly:music-property m 'context-type))) + (if (eq? sym 'Bottom) + (set! sym bottom)) + (if (module-bound? (current-module) sym) + (module-set! + (current-module) + sym + #{ \context { + $(module-ref (current-module) sym) + $(loop (ly:music-property m 'element) + (ly:make-context-mod)) + } + #}) + (ly:warning music (_f "Cannot find context-def \\~a" + sym))))))) + mods)) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 6335ab65b1..6fd8d4d811 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -614,6 +614,9 @@ automatically when an output definition (a @code{\score} or beatStructure = #'(1 1 1 1) beamExceptions = #'((end . (((1 . 8) . (4 4)) ((1 . 12) . (3 3 3 3))))) + beamWholeMeasure = ##t + beamHalfMeasure = ##f + autoBeaming = ##t autoBeamCheck = #default-auto-beam-check @@ -1121,8 +1124,6 @@ accommodated for typesetting a piece in Petrucci style." \description "Same as @code{Voice} context, except that it is accommodated for typesetting a piece in Kievan style." -% \override Stem #'stencil = ##f - %% Set glyph styles. \override NoteHead #'style = #'kievan \override Rest #'style = #'mensural @@ -1146,6 +1147,8 @@ accommodated for typesetting a piece in Kievan style." \description "Same as @code{Staff} context, except that it is accommodated for typesetting a piece in Kievan style." + \remove "Time_signature_engraver" + %% Choose Kievan tsefaut clef clefGlyph = #"clefs.kievan.do" middleCClefPosition = #0 diff --git a/ly/event-listener.ly b/ly/event-listener.ly index 20615e8c2a..72a3e2407d 100644 --- a/ly/event-listener.ly +++ b/ly/event-listener.ly @@ -36,14 +36,12 @@ %%%% Helper functions -#(define (filename-from-staffname engraver) +#(define (filename-from-staffname context) "Constructs a filename in the form @file{@var{original_filename}-@var{staff_instrument_name}.notes} if the staff has an instrument name. If the staff has no instrument name, it uses "unnamed-staff" for that part of the filename." - (let* ((inst-name (ly:context-property - (ly:translator-context engraver) - 'instrumentName))) + (let* ((inst-name (ly:context-property context 'instrumentName))) (string-concatenate (list (substring (object->string (command-line)) ;; filename without .ly part @@ -79,12 +77,11 @@ after beat? etc.)." (ly:moment-grace-numerator moment) (ly:moment-grace-denominator moment)))))) -#(define (make-output-string-line engraver values) +#(define (make-output-string-line context values) "Constructs a tab-separated string beginning with the -score time (derived from the engraver) and then adding all the +score time (derived from the context) and then adding all the values. The string ends with a newline." - (let* ((context (ly:translator-context engraver)) - (moment (ly:context-current-moment context))) + (let* ((moment (ly:context-current-moment context))) (string-append (string-join (append @@ -96,16 +93,19 @@ values. The string ends with a newline." "\n"))) -#(define (print-line engraver . values) +#(define (print-line context . values) "Prints the list of values (plus the score time) to a file, and -optionally outputs to the console as well." - (let* ((p (open-file (filename-from-staffname engraver) "a"))) +optionally outputs to the console as well. context may be specified +as an engraver for convenience." + (if (ly:translator? context) + (set! context (ly:translator-context context))) + (let* ((p (open-file (filename-from-staffname context) "a"))) ;; for regtest comparison (if (defined? 'EVENT_LISTENER_CONSOLE_OUTPUT) (ly:progress - (make-output-string-line engraver values))) + (make-output-string-line context values))) (display - (make-output-string-line engraver values) + (make-output-string-line context values) p) (close p))) diff --git a/ly/init.ly b/ly/init.ly index 25c2ba0afb..6546ed422a 100644 --- a/ly/init.ly +++ b/ly/init.ly @@ -19,8 +19,6 @@ #(define expect-error #f) #(define output-empty-score-list #f) #(define output-suffix #f) -#(define book-filename #f) -#(define book-output-suffix #f) #(use-modules (scm clip-region)) $(if (ly:get-option 'include-settings) diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 4082ea9aec..3b27212117 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -186,13 +186,13 @@ bendAfter = bookOutputName = #(define-void-function (parser location newfilename) (string?) (_i "Direct output for the current book block to @var{newfilename}.") - (set! book-filename newfilename)) + (set! (paper-variable parser #f 'output-filename) newfilename)) bookOutputSuffix = #(define-void-function (parser location newsuffix) (string?) (_i "Set the output filename suffix for the current book block to @var{newsuffix}.") - (set! book-output-suffix newsuffix)) + (set! (paper-variable parser #f 'output-suffix) newsuffix)) %% \breathe is defined as a music function rather than an event identifier to %% ensure it gets useful input location information: as an event identifier, @@ -984,8 +984,8 @@ a context modification duplicating their effect.") ((OverrideProperty) (list 'push (ly:music-property m 'symbol) - (ly:music-property m 'grob-property-path) - (ly:music-property m 'grob-value))) + (ly:music-property m 'grob-value) + (ly:music-property m 'grob-property-path))) ((RevertProperty) (list 'pop (ly:music-property m 'symbol) diff --git a/make/lilypond-book-vars.make b/make/lilypond-book-vars.make index fdf025bf6c..bb1fc23dfe 100644 --- a/make/lilypond-book-vars.make +++ b/make/lilypond-book-vars.make @@ -4,7 +4,7 @@ LILYPOND_BOOK_COMMAND = LILYPOND_VERSION=$(TOPLEVEL_VERSION) \ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) \ --process='$(LILYPOND_BOOK_PROCESS) \ $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) \ - $(LILYPOND_BOOK_FLAGS) + --redirect-lilypond-output $(LILYPOND_BOOK_FLAGS) HTML_FILES = $(call src-wildcard,*.html) HTMLY_FILES = $(call src-wildcard,*.htmly) diff --git a/make/ly-rules.make b/make/ly-rules.make index 418d1b9f03..fbe81c281a 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -5,7 +5,7 @@ LYS_OUTPUT_OPTION= --lily-output-dir $(LYS_OUTPUT_DIR) LYS_OUTPUT_DIR=$(top-build-dir)/out/lybook-db LILYPOND_BOOK_FLAGS += $(LYS_OUTPUT_OPTION) $(outdir)/%.latex: %.doc $(INIT_LY_SOURCES) $(SCHEME_SOURCES) - LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) $(LILYPOND_BOOK_FLAGS) $< + LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) $(LILYPOND_BOOK_FLAGS) --redirect-lilypond-output $< # This allows -j make option while making sure only one lilypond-book instance diff --git a/make/midi-rules.make b/make/midi-rules.make index a5cee58b96..7b3f149d96 100644 --- a/make/midi-rules.make +++ b/make/midi-rules.make @@ -5,7 +5,7 @@ $(outdir)/%.ly: %.midi $(outdir)/%.midi: %.ly $(LILYPOND_BINARY) touch $(foreach f, $(HEADER_FIELDS), $(outdir)/$*.$f) - $(LILYPOND_BINARY) $(HEADER_FIELDS:%=-H %) -o $(outdir) $< + $(buildscript-dir)/run-and-check "$(LILYPOND_BINARY) $(HEADER_FIELDS:%=-H %) -o $(outdir) $<" "$*.log" cp $< $(outdir) $(outdir)/%-midi.ly: $(outdir)/%.midi $(MIDI2LY) diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index d7450e452b..3e62f0366e 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -98,15 +98,20 @@ bind def dup 0.0 gt { setlinewidth % w h x y - 0 setlinecap - 1 setlinejoin - rmoveto % w h - currentpoint % w h x1 y1 - 4 2 roll % x1 y1 w h - 4 copy - rectfill - rectstroke + 2 copy 0 ne exch 0 ne and + { + 0 setlinecap + 1 setlinejoin + currentpoint % w h x1 y1 + 4 2 roll % x1 y1 w h + 4 copy + rectfill + rectstroke + } { + 1 setlinecap + rlineto stroke + } ifelse } { pop % w h x y rmoveto % w h diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 3cb350867b..85ff3c65a1 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -16,9 +16,9 @@ ;;;; along with LilyPond. If not, see . ;; Determine whether an auto beam should be extended to the right -;; of the current stem. We start anywhere except on the last note -;; of a beat. We end according to the follwing rules, in order -;; of decreasing priority: +;; of the current stem. In general, we start anywhere except on +;; the last note of a beat. We end according to the follwing rules, +;; in order of decreasing priority: ;; ;; 1. end ;; 2. end @@ -61,6 +61,12 @@ (define (beat-end? moment beat-structure) (pair? (member moment beat-structure))) ;; member returns a list if found, not #t + (define (use-special-3-4-rules? fraction base-moment exceptions) + "Should we use special 3/4 time signature beaming rules?" + (and (equal? fraction '(3 . 4)) + (equal? base-moment (ly:make-moment 1 4)) + (null? (assoc-get '(1 . 8) exceptions '())))) + ;; Start of actual auto-beam test routine ;; ;; @@ -79,6 +85,8 @@ '()) beamingfraction test-beam)) (non-grace (ly:make-moment (ly:moment-main-numerator measure-pos) @@ -106,17 +114,35 @@ exception-grouping 0 grouping-moment))) (if (= dir START) - ;; Start rules - (or (not (equal? time-signature-fraction '(3 . 4))) ;; start anywhere if not 3/4 + ;; Start rules -- start anywhere unless 3/4 with default rules + ;; #t if beam is to start + (or (not (use-special-3-4-rules? + time-signature-fraction + base-moment + exceptions)) ;; start anywhere if not default 3/4 (= (ly:moment-main-numerator pos) 0) ;; start at beginning of measure - (not (null? exception-grouping)) ;; don't use special rules if exception - (beat-end? pos beat-endings) ;; are we at start of beat? + (and beam-half-measure + (equal? type '(1 . 8)) + (equal? pos (ly:make-moment 3 8))) ;; start at mid-measure if 1/8 note beam + (beat-end? pos beat-endings) ;; start if at start of beat (and (not (equal? test-beam base-moment)) ;; is beat split? (not (beat-end? (ly:moment-add pos test-beam) beat-endings)))) ;; will this note end the beat - ;; End rules + ;; End rules -- #t if beam is to end (or (= (ly:moment-main-numerator pos) 0) ;; end at measure beginning - (if (null? exception-grouping) - (beat-end? pos beat-endings) ;; no exception, so check beat ending - (member pos exception-moments))))))) ;; check exception rule + (if (use-special-3-4-rules? + time-signature-fraction + base-moment + exceptions) + ;; special rule for default 3/4 beaming + (if (and (equal? type '(1 . 8)) + (or beam-whole-measure + (and beam-half-measure + (not (equal? pos (ly:make-moment 3 8)))))) + #f + (beat-end? pos beat-endings)) + ;; rules for all other cases -- check for applicable exception + (if (null? exception-grouping) + (beat-end? pos beat-endings) ;; no exception, so check beat ending + (member pos exception-moments)))))))) ;; check exception rule diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 43079859c6..e0da636c51 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -141,6 +141,10 @@ apply for the down staff of @code{PianoStaff}. Used by @code{\\autochange}.") (beamExceptions ,list? "An alist of exceptions to autobeam rules that normally end on beats.") + (beamHalfMeasure ,boolean? "Allow a half measure of eighth notes to +be beamed together in 3/4 time?") + (beamWholeMeasure ,boolean? "Allow a whole measure of eighth notes +to be beamed together in 3/4 time?") (beatStructure ,list? "List of @code{baseMoment}s that are combined to make beats.") diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 9673c7b3e4..eb537a8e71 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -157,31 +157,31 @@ (ly:make-score music)) -(define (get-current-filename parser) +(define (get-current-filename parser book) "return any suffix value for output filename allowing for settings by calls to bookOutputName function" - (let ((book-filename (ly:parser-lookup parser 'book-filename))) + (let ((book-filename (paper-variable parser book 'output-filename))) (if (not book-filename) (ly:parser-output-name parser) book-filename))) -(define (get-current-suffix parser) +(define (get-current-suffix parser book) "return any suffix value for output filename allowing for settings by calls to bookoutput function" - (let ((book-output-suffix (ly:parser-lookup parser 'book-output-suffix))) + (let ((book-output-suffix (paper-variable parser book 'output-suffix))) (if (not (string? book-output-suffix)) (ly:parser-lookup parser 'output-suffix) book-output-suffix))) (define-public current-outfile-name #f) ; for use by regression tests -(define (get-outfile-name parser) +(define (get-outfile-name parser book) "return current filename for generating backend output files" ;; user can now override the base file name, so we have to use ;; the file-name concatenated with any potential output-suffix value ;; as the key to out internal a-list - (let* ((base-name (get-current-filename parser)) - (output-suffix (get-current-suffix parser)) + (let* ((base-name (get-current-filename parser book)) + (output-suffix (get-current-suffix parser book)) (alist-key (format #f "~a~a" base-name output-suffix)) (counter-alist (ly:parser-lookup parser 'counter-alist)) (output-count (assoc-get alist-key counter-alist 0)) @@ -209,7 +209,7 @@ bookoutput function" (define (print-book-with parser book process-procedure) (let* ((paper (ly:parser-lookup parser '$defaultpaper)) (layout (ly:parser-lookup parser '$defaultlayout)) - (outfile-name (get-outfile-name parser))) + (outfile-name (get-outfile-name parser book))) (process-procedure book paper layout outfile-name))) (define-public (print-book-with-defaults parser book) @@ -230,6 +230,24 @@ bookoutput function" (else ((ly:parser-lookup parser 'toplevel-score-handler) parser score)))) +(define-public paper-variable + (let + ((get-papers + (lambda (parser book) + (append (if (and book (ly:output-def? (ly:book-paper book))) + (list (ly:book-paper book)) + '()) + (ly:parser-lookup parser '$papers) + (list (ly:parser-lookup parser '$defaultpaper)))))) + (make-procedure-with-setter + (lambda (parser book symbol) + (any (lambda (p) (ly:output-def-lookup p symbol #f)) + (get-papers parser book))) + (lambda (parser book symbol value) + (ly:output-def-set-variable! + (car (get-papers parser book)) + symbol value))))) + (define-public (add-text parser text) (add-score parser (list text))) diff --git a/scm/lily.scm b/scm/lily.scm index ab9e73dbf0..0c20c148b2 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -510,8 +510,10 @@ messages into errors.") )) (define-public lilypond-exported-predicates - `((,ly:box? . "box") + `((,ly:book? . "book") + (,ly:box? . "box") (,ly:context? . "context") + (,ly:context-def? . "context definition") (,ly:context-mod? . "context modification") (,ly:dimension? . "dimension, in staff space") (,ly:dir? . "direction") diff --git a/scm/time-signature-settings.scm b/scm/time-signature-settings.scm index bdabac8873..898eee600a 100644 --- a/scm/time-signature-settings.scm +++ b/scm/time-signature-settings.scm @@ -64,6 +64,7 @@ ;;; NOTE: numerator is kept in beam-type because of ;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8) ;;; for eighth-note triplets. +;;; (define-public default-time-signature-settings '( @@ -82,14 +83,15 @@ ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8)))))))) ;; in 3 4 time: - ;; use defaults, but combine all beats into a unit if possible + ;; use defaults -- no entries necessary ;; - ;; set all beams to end on beats, but 1 8 to beam entire measure - ;; in order to avoid beaming every beam type for the entire measure, we set - ;; triplets back to every beat. + ;; Whole measure beaming is controlled by context property + ;; beamWholeMeasure + ;; Half measure beaming is controlled by context property + ;; beamHalfMeasure + ((3 . 4) . - ((beamExceptions . ((end . (((1 . 8) . (6)) ;1/8 note whole measure - ((1 . 12) . (3 3 3)))))))) ;Anything shorter by beat + ((beamExceptions . ()))) ;; in 3 8 time: ;; beam entire measure together @@ -232,7 +234,6 @@ for @var{time-signature} from @var{time-signature-settings}." "Like the C++ code that executes \\override, but without type checking." (begin - (revert-property-setting context property setting) (ly:context-set-property! context property @@ -263,7 +264,7 @@ a fresh copy of the list-head is made." ;; body of revert-property-setting (let ((current-value (ly:context-property context property))) - (if (> (entry-count current-value setting) 1) + (if (> (entry-count current-value setting) 0) (ly:context-set-property! context property diff --git a/scripts/build/mutopia-index.py b/scripts/build/mutopia-index.py deleted file mode 100644 index 31fa6ac492..0000000000 --- a/scripts/build/mutopia-index.py +++ /dev/null @@ -1,197 +0,0 @@ -#!@PYTHON@ -# mutopia-index.py - -import fnmatch -import getopt -import os -import re -import stat -import sys - -def find (pat, dir): - f = os.popen ('find %s -name "%s"'% (dir, pat)) - lst = [] - for a in f.readlines(): - a = a[:-1] - lst.append (a) - return lst - - -junk_prefix = 'out-www/' - -headertext= r""" - -

LilyPond samples

- - -

You are looking at a page with some LilyPond samples. These files -are also included in the distribution. The output is completely -generated from the source file, without any further touch up. - -

- -The pictures are 90 dpi anti-aliased snapshots of the printed output. -For a good impression of the quality print out the PDF file. -""" - -headertext_nopics= r""" -

No examples were found in this directory. -""" - -# -# FIXME breaks on multiple strings. -# -def read_lilypond_header (fn): - s = open (fn).read () - s = re.sub ('%.*$', '', s) - s = re.sub ('\n', ' ', s) - - dict = {} - m = re.search (r"""\\header\s*{([^}]*)}""", s) - - if m: - s = m.group (1) - else: - return dict - - while s: - m = re.search (r'''\s*(\S+)\s*=\s*"([^"]+)"''', s) - if m == None: - s = '' - else: - s = s[m.end (0):] - left = m.group (1) - right = m.group (2) - - left = re.sub ('"', '', left) - right = re.sub ('"', '', right) - dict[left] = right - - return dict - -def help (): - sys.stdout.write (r'''Usage: mutopia-index [OPTIONS] INFILE OUTFILE -Generate index for mutopia. - -Options: - -h, --help print this help - -o, --output=FILE write output to file - -s, --subdirs=DIR add subdir - --suffix=SUF specify suffix - -''') - sys.exit (0) - -# ugh. -def gen_list (inputs, file_name): - sys.stderr.write ("generating HTML list %s" % file_name) - sys.stderr.write ('\n') - if file_name: - list = open (file_name, 'w') - else: - list = sys.stdout - list.write ('''Rendered Examples - - -''') - - list.write ('\n') - - if inputs: - list.write (headertext) - else: - list.write (headertext_nopics) - - for ex in inputs: - print ex - - (base, ext) = os.path.splitext (ex) - (base, ext2) = os.path.splitext (base) - ext = ext2 + ext - - header = read_lilypond_header (ex) - head = header.get ('title', os.path.basename (base)) - composer = header.get ('composer', '') - desc = header.get ('description', '') - list.write ('


\n') - list.write ('

%s

\n' % head); - if composer: - list.write ('

%s

\n' % composer) - if desc: - list.write ('%s

' % desc) - list.write ('

    \n') - - def list_item (file_name, desc, type, lst = list): - if os.path.isfile (file_name): - lst.write ('
  • %s' - % (re.sub (junk_prefix, '', file_name), desc)) - - # FIXME: include warning if it uses \include - # files. - - size = os.stat (file_name)[stat.ST_SIZE] - kB = (size + 512) / 1024 - if kB: - lst.write (' (%s %d kB)' % (type, kB)) - else: - lst.write (' (%s %d characters)' - % (type, size)) - pictures = ['jpeg', 'png', 'xpm'] - lst.write ('\n') - else: - print "cannot find" , `file_name` - - list_item (base + ext, 'The input', 'ASCII') - - pages_found = 0 - for page in range (1, 100): - f = base + '-page%d.png' % page - - if not os.path.isfile (f): - break - pages_found += 1 - list_item (f, 'See a picture of page %d' % page, 'png') - - if pages_found == 0 and os.path.exists (base + '.png'): - list_item (base + ".png", - 'See a picture', 'png') - - - list_item (base + '.pdf', 'Print', 'PDF') - list_item (base + '.midi', 'Listen', 'MIDI') - list.write ('
\n'); - - list.write ('\n'); - list.close () - -(options, files) = getopt.getopt (sys.argv[1:], - 'ho:', ['help', 'output=']) -outfile = 'examples.html' - -subdirs = [] -for (o, a) in options: - if o == '--help' or o == '-h': - help () - elif o == '--output' or o == '-o': - outfile = a - -dirs = [] -for f in files: - dirs += find ('out-www', f) - -if not dirs: - dirs = ['.'] - -allfiles = [] - -for d in dirs: - allfiles += find ('*.ly', d) - -allfiles = [f for f in allfiles - if not f.endswith ('snippet-map.ly') - and not re.search ('lily-[0-9a-f]+', f) - and 'musicxml' not in f] - -gen_list (allfiles, outfile) diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index 7b5da4a65f..074060627e 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -60,10 +60,10 @@ endif ifneq ($(ISOLANG),) $(XREF_MAPS_DIR)/%.$(ISOLANG).xref-map: $(outdir)/%.texi $(XREF_MAPS_DIR)/%.xref-map - $(buildscript-dir)/extract_texi_filenames $(XREF_MAP_FLAGS) -o $(XREF_MAPS_DIR) --master-map-file=$(XREF_MAPS_DIR)/$*.xref-map $< + $(buildscript-dir)/extract_texi_filenames $(XREF_MAP_FLAGS) -q -o $(XREF_MAPS_DIR) --master-map-file=$(XREF_MAPS_DIR)/$*.xref-map $< else $(XREF_MAPS_DIR)/%.xref-map: $(outdir)/%.texi - $(buildscript-dir)/extract_texi_filenames $(XREF_MAP_FLAGS) -o $(XREF_MAPS_DIR) $< + $(buildscript-dir)/extract_texi_filenames $(XREF_MAP_FLAGS) -q -o $(XREF_MAPS_DIR) $< endif $(outdir)/%.info: %.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(outdir)/weblinks.itexi