@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
@helpusNeed
-@helpusTasks
+@helpusSimple
-@helpusProjects
+@helpusAdvanced
@node Overview of work flow
@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
@end macro
-@macro helpusTasks
+@macro helpusSimple
@subheading Simple tasks
-No source code or compiling required!
+@strong{No programming skills} required!
@itemize
@item
@end itemize
+@end macro
+
+
+@macro helpusAdvanced
@subheading Advanced tasks
These jobs generally require that you have the source code and can
@end macro
-
+@ignore
@macro helpusProjects
@subheading Projects
@end macro
+@end ignore
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
\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}}
% 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"
#(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 {
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.
"
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.
% 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
%%% 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}.
;; 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
(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
"
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
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
"
doctitlede = "Silben im Gesangstext formatieren"
+
%% Translation of GIT committish: d9d1da30361a0bcaea1ae058eb1bc8dd3a5b2e4c
texidocfr = "
Le mode markup permet d'individualiser la mise en forme de certaines syllabes.
"
doctitleit = "Modello per inno"
+
%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
texidocde = "
"
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
% 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
#(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)
"
doctitlees = "Partcombine y autoBeamOff"
+
%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
texidocde = "
"
doctitlede = "Partcombine und autoBeamOff"
+
%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
texidocfr = "
La fonction @code{\\autoBeamOff} dans le cadre d'un
"
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"
\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
"
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é
\version "2.14.0"
\header {
-%%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
+%%% Translation of GIT committish: ea0b270e14781707ab52683acddf9302bbe337f3
texidoces = "
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Yoshiki Sawada
@*
@end ifnothtml
@*
+@end ifnothtml
@ifhtml
@html
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #68ff28">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Federico Bruni
@*
@ifnothtml
Luca Rossetto Casel
@end ifnothtml
+@tab Francisco Vila
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Valentin Villenave
+@*
+Jean-Charles Malahieude
+@*
+
+@ifhtml
+
+@html
+<small>Jean-Charles Malahieude</small>
+@end html
+@end ifhtml
+@ifnothtml
+Jean-Charles Malahieude
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small>John Mandereau</small>
+@end html
+@end ifhtml
+@ifnothtml
+John Mandereau
+@end ifnothtml
@*
@ifhtml
@ifhtml
@html
-<span style="background-color: #68ff28">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@item
1.3 Expressive marks
@end ifnothtml
@*
+@end ifnothtml
@ifhtml
@html
@end html
@end ifhtml
@ifnothtml
-translated
+not translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
-@tab Yoshiki Sawada
+@tab Francisco Vila
@*
@ifhtml
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<small>Jean-Charles Malahieude</small>
@end html
@end ifhtml
@ifnothtml
-translated
+Jean-Charles Malahieude
@end ifnothtml
@*
@tab Francisco Vila
@*
+@end ifnothtml
@ifhtml
@html
@ifhtml
@html
-<small>John Mandereau</small>
+<small>Luca Rossetto Casel</small>
@end html
@end ifhtml
@ifnothtml
-John Mandereau
+Luca Rossetto Casel
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #d0f0f8">not translated</span>
@end html
@end ifhtml
@ifnothtml
-translated
+not translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<small>John Mandereau</small>
@end html
@end ifhtml
@ifnothtml
-translated
+John Mandereau
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<small></small>
@end html
@end ifhtml
@ifnothtml
@tab Francisco Vila
@*
+@end ifnothtml
@ifhtml
@html
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #d0f0f8">not translated</span>
@end html
@end ifhtml
@ifnothtml
-translated
+not translated
@end ifnothtml
@*
@ifnothtml
Luca Rossetto Casel
@end ifnothtml
+@item
+2.6 Wind instruments
+@*
+(319)
+@tab Till Paala
@*
@ifhtml
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
-@tab Yoshiki Sawada
+@tab Francisco Vila
@*
@ifhtml
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<small>Jean-Charles Malahieude</small>
@end html
@end ifhtml
@ifnothtml
-translated
+Jean-Charles Malahieude
@end ifnothtml
@*
@ifnothtml
up to date
@end ifnothtml
-@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<small></small>
@end html
@end ifhtml
@ifnothtml
-translated
-@end ifnothtml
-@*
+@end ifnothtml
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+translated
@end ifnothtml
@tab Jean-Charles Malahieude
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
1.8 Text
@end html
@end ifhtml
@ifnothtml
-translated
-@end ifnothtml
-@*
-@ifhtml
-
-@html
-<span style="background-color: #1fff1f">up to date</span>
-@end html
-@end ifhtml
-@ifnothtml
-up to date
@end ifnothtml
-@tab Francisco Vila
-@*
-
@ifhtml
@html
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #d587ff"></span>
@end html
@end ifhtml
@ifnothtml
-up to date
+
@end ifnothtml
@tab Francisco Vila
@*
@divClass{column-left-top}
@divClass{keep-bullets}
-@helpusTasks
+@helpusSimple
@divEnd
@divEnd
@divClass{column-right-top}
-@helpusProjects
+@helpusAdvanced
@divEnd
@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
@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}
$(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
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
--- /dev/null
+\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.
+}
--- /dev/null
+\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 }
+ }
+}
\new Staff{
\relative c' {
- \overrideTimeSignatureSettings
+ \overrideTimeSignatureSettings
#'(4 . 4) % time signature fraction
#'(1 . 4) % base moment fraction
#'(1 1 1 1) % beatStructure
#'(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
\override Staff.StaffSymbol #'line-positions = #'(-4 -2 1 5)
\mus
}
+
+ \new Staff {
+ \stopStaff
+ \mus
+ }
>>
Book *b = unsmob_book (book);
return b->scores_;
}
+
+#include "ly-smobs.icc"
+
+IMPLEMENT_TYPE_P (Book, "ly:book?");
return ell;
}
+#include "ly-smobs.icc"
+
+IMPLEMENT_TYPE_P (Context_def, "ly:context-def?");
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);
#include "output-def.hh"
#include "paper-score.hh"
#include "staff-symbol-referencer.hh"
+#include "staff-symbol.hh"
#include "stencil.hh"
#include "grob.hh"
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;
/*
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<Real> linepos = Staff_symbol::line_positions (staff);
+ std::sort(linepos.begin(), linepos.end());
+ std::vector<Real>::const_iterator it
+ = std::lower_bound(linepos.begin(), linepos.end(), pos);
+ if (it != linepos.end())
+ {
+ pos = (int)ceil(*it);
+ }
+ }
amount = ss * 0.5 * pos;
}
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 ());
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.15.6"
+\version "2.15.31"
RemoveEmptyStaves = \with {
\remove "Axis_group_engraver"
\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))
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
\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
\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
%%%% 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
(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
"\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)))
#(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)
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,
((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)
$(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)
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
$(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)
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
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
;; 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 <type>
;; 2. end <greater type>
(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
;;
;;
'())
beaming<?))
(function (if (= dir START) 'begin 'end))
+ (beam-whole-measure (get 'beamWholeMeasure #t))
+ (beam-half-measure (get 'beamHalfMeasure #f))
(type (moment->fraction test-beam))
(non-grace (ly:make-moment
(ly:moment-main-numerator measure-pos)
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
@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.")
(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))
(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)
(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)))
))
(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")
;;; 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
'(
((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
"Like the C++ code that executes \\override, but without type
checking."
(begin
- (revert-property-setting context property setting)
(ly:context-set-property!
context
property
;; 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
+++ /dev/null
-#!@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"""
-
-<h1>LilyPond samples</h1>
-
-
-<p>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.
-
-<p>
-
-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"""
-<p>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 ('''<html><head><title>Rendered Examples</title>
-<style type="text/css">
-hr { border:0; height:1; color: #000000; background-color: #000000; }\n
-</style>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-</head>''')
-
- list.write ('<body bgcolor=white>\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 ('<hr>\n')
- list.write ('<h1>%s</h1>\n' % head);
- if composer:
- list.write ('<h2>%s</h2>\n' % composer)
- if desc:
- list.write ('%s<p>' % desc)
- list.write ('<ul>\n')
-
- def list_item (file_name, desc, type, lst = list):
- if os.path.isfile (file_name):
- lst.write ('<li><a href="%s">%s</a>'
- % (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 ('</ul>\n');
-
- list.write ('</body></html>\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)
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