Les Horaces : suggestion nuances 2-4
[nenuvar.git] / common / titling.ily
blob93f5539e8b0a262c8d70c38eef3e27929ef11b7e
1 %%% titling.ily -- commands for defining titles
2 %%%
3 %%% Author: Nicolas Sceaux <nicolas.sceaux@free.fr>
4 %%%
5 %%% Options
6 %%% =======
7 %%%   use-rehearsal-numbers
8 %%%     If #t, add rehearsal numbers to piece titles.
9 %%%
10 %%% Scheme functions
11 %%% ================
12 %%%
13 %%%   (add-page-break parser)
14 %%%     add a page break at the current point.
15 %%%
16 %%%   (add-no-page-break parser)
17 %%%     forbid page break at current point.
18 %%%
19 %%%   (add-toplevel-markup parser text)
20 %%%     add a markup at current point.
21 %%%
22 %%%   (add-toc-item parser markup-symbol text [rehearsal-number])
23 %%%     add an item in the table of content, using markup style
24 %%%     `markup-symbol' and `text', referencing the page occuring
25 %%%     at current point.  Argument `rehearsal-number' is optional
26 %%%
27 %%%   (rehearsal-number)
28 %%%     return a new x.y rehearsal number.
29 %%%
30 %%%   (increase-rehearsal-major-number)
31 %%%     increase the major part of rehearsal numbers (ie the x in x.y)
32 %%%     and reset the minor part.
33 %%%
34 %%% Markup commands
35 %%% ===============
36 %%%
37 %%%   \act <title>
38 %%%     Markup command to be used for act titles
39 %%%
40 %%%   \scene <title>
41 %%%     Markup command to be used for scene titles
42 %%%
43 %%%   \title <title>
44 %%%     Markup command to be used for piece titles
45 %%%
46 %%%   \scene-desription <markup>
47 %%%     Markup command to be used for entering a scene description.
48 %%%
49 %%% Table of contexts \paper variables
50 %%% ==================================
51 %%%
52 %%%   tocTitle
53 %%%     a string used as the table of contents title
54 %%%
55 %%%   tocPieceMarkup
56 %%%     markup used for pieces
57 %%%
58 %%%   tocSceneMarkup
59 %%%     markup used for scene titles
60 %%%
61 %%%   tocActMarkup
62 %%%     markup used for act titles
63 %%%
64 %%% Music functions
65 %%% ===============
66 %%% Piece titling:
67 %%%
68 %%%   \pieceToc <title-markup>
69 %%%     add a piece title in the table of contents.
70 %%%
71 %%%   \pieceTocTitle <title-string>
72 %%%     add the piece title in the table of contents and at current 
73 %%%     point of the book (upper cased).
74 %%%
75 %%%   \pieceTitle <title-string>
76 %%%     add the upper cased piece title at the current point of the book.
77 %%%
78 %%%   \pieceTocAndTitle <toc-markup> <title-markup>
79 %%%     add a piece title in the table of content, and a different
80 %%%     title at the current point of the book.
81 %%%
82 %%% Sectionning:
83 %%%
84 %%%   \opusTitle <title-string>
85 %%%
86 %%%   \ouverture <title-string>
87 %%%   \act <title-string>
88 %%%   \scene <title-string>
89 %%%   \sceneDescription <description-markup>
90 %%%
91 %%%   \actEnd
92 %%%     Print an act end text.
93 %%%
94 %%% Dependencies
95 %%% ============
96 \include "common/fancy-headers.ily"
97 \include "common/markup.ily"
99 %%%
100 %%% Utilities for adding (no-)page breaks and toplevel markups
103 #(define-public (add-page-break parser)
104   (add-music parser 
105    (make-music 'Music
106                'page-marker #t
107                'line-break-permission 'force
108                'page-break-permission 'force)))
110 #(define-public (add-no-page-break parser)
111   (add-music parser 
112    (make-music 'Music
113                'page-marker #t
114                'page-break-permission 'forbid)))
116 #(define-public (add-no-page-turn parser)
117   (add-music parser 
118    (make-music 'Music
119                'page-marker #t
120                'page-turn-permission 'forbid)))
122 #(define-public (add-page-turn parser)
123   (add-music parser 
124    (make-music 'Music
125                'page-marker #t
126                'line-break-permission 'force
127                'page-break-permission 'force
128                'page-turn-permission 'force)))
130 #(define-public (add-allow-page-turn parser)
131   (add-music parser 
132    (make-music 'Music
133                'page-marker #t
134                'line-break-permission 'force
135                'page-turn-permission 'allow)))
137 #(define-public (add-toplevel-markup parser text)
138   (add-text parser text))
140 #(define-public (add-toc-item parser markup-symbol text . rest)
141   (add-music parser
142    (apply add-toc-item! markup-symbol text rest)))
145 %%% Rehearsal numbers
148 #(define-public rehearsal-number #f)
149 #(define-public increase-rehearsal-major-number #f)
150 #(let ((major-number 0)
151        (minor-number 0))
152   (set! increase-rehearsal-major-number
153         (lambda ()
154           (set! major-number (1+ major-number))
155           (set! minor-number 0)))
156   (set! rehearsal-number 
157         (lambda ()
158           (set! minor-number (1+ minor-number))
159           (format #f "~a-~a" major-number minor-number))))
162 %%% Markup commands
165 #(define-markup-command (lead-sheet layout props arg) (markup?)
166   (interpret-markup layout props
167                     (if (*part*)
168                         empty-markup
169                         arg)))
171 #(define-markup-command (rehearsal-number layout props text) (string?)
172    (interpret-markup layout props
173      (markup #:huge #:bold text)))
175 #(define-markup-command (rehearsal-number-toc layout props num text) (string? markup?)
176   #:properties ((rehearsal-number-gauge "8-88")
177                 (rehearsal-number-align RIGHT)
178                 (line-width #f))
179   (let* ((line-width (or line-width (ly:output-def-lookup layout 'line-width)))
180          (gauge-stencil (interpret-markup layout props rehearsal-number-gauge))
181          (x-ext (ly:stencil-extent gauge-stencil X))
182          (y-ext (ly:stencil-extent gauge-stencil Y))
183          (num-stencil (interpret-markup layout props num))
184          (gap (max 0 (- (interval-length x-ext)
185                         (interval-length (ly:stencil-extent num-stencil X)))))
186          (gap-stencil1 (ly:make-stencil "" (cons 0 gap) '(0 . 0)))
187          (gap-stencil2 (ly:make-stencil "" (cons 0 1) '(0 . 0)))
188          (text-stencil (interpret-markup layout
189                                          (cons `((line-width . ,(- line-width 1 gap)))
190                                                props)
191                                          text)))
192     (interpret-markup layout props
193                       (if (= rehearsal-number-align LEFT)
194                           (markup #:concat (; num padding space text
195                                             #:stencil num-stencil
196                                             #:stencil gap-stencil1
197                                             #:stencil gap-stencil2
198                                             #:stencil text-stencil))
199                           (markup #:concat (; padding num space text
200                                             #:stencil gap-stencil1
201                                             #:stencil num-stencil
202                                             #:stencil gap-stencil2
203                                             #:stencil text-stencil))))))
205 #(define-markup-command (act layout props arg) (markup?)
206   (interpret-markup layout props
207     (if (*part*)
208         (markup #:pad-markup 2 #:fill-line (#:fontsize 6 arg))
209         (markup #:column (#:vspace 3
210                           #:pad-markup 3 #:fill-line (#:fontsize 6 arg))))))
212 #(define-markup-command (scene layout props arg) (markup?)
213   (interpret-markup layout props
214     (if (*part*)
215         (markup #:pad-markup 0.5 #:fill-line (#:fontsize 4 arg))
216         (markup #:column (#:vspace 1
217                           #:fill-line (#:fontsize 4 arg)
218                           #:vspace 1)))))
220 #(define-markup-command (scene-description layout props arg) (markup?)
221   (interpret-markup layout props
222     (if (*part*)
223         empty-markup
224         (markup #:column (#:fill-line (#:override '(line-width . 80)
225                                        #:fontsize 2 arg)
226                           #:vspace 1)))))
228 #(define-markup-command (title layout props arg) (markup?)
229   (interpret-markup layout props
230    (markup #:fill-line (#:override '(line-width . 80)
231                         #:fontsize 2 arg))))
233 #(define-markup-command (small-title layout props arg) (markup?)
234   (interpret-markup layout props
235    (markup #:fill-line (#:override '(line-width . 80)
236                         #:fontsize 0 #:italic arg))))
239 %%% Table of contents
241 #(define-markup-command (paper-prop layout props name default)
242   (symbol? markup?)
243   "Get the value of a \\paper property, or defaults to some value"
244   (let ((val (ly:output-def-lookup layout name)))
245     (interpret-markup layout props (if (markup? val)
246                                       val
247                                       default))))
248 \paper {
249   tocTitleMarkup = \markup \column {
250     \vspace #2
251     \fontsize #6 \fill-line { \paper-prop #'tocTitle "TABLE OF CONTENTS" }
252     \vspace #2
253   }
254   tocPieceMarkup = \markup \fill-line {
255     \line-width-ratio #(if (< (*staff-size*) 18) 0.7 0.8) \fill-line {
256       \line { \fromproperty #'toc:text }
257       \fromproperty #'toc:page
258     }
259   }
260   tocBoldPieceMarkup = \markup \fill-line {
261     \line-width-ratio #(if (< (*staff-size*) 18) 0.7 0.8) \fill-line {
262       \line { \bold \fromproperty #'toc:text }
263       \bold \fromproperty #'toc:page
264     }
265   }
266   tocSceneMarkup = \markup \italic \column {
267     \fill-line { \fromproperty #'toc:text }
268   }
269   tocActMarkup = \markup \large \italic \column {
270     \vspace #1
271     \fontsize #2 \fill-line { \fromproperty #'toc:text }
272     \vspace #1
273   }
277 %%% Music functions
280 tocItem =
281 #(define-music-function (parser location title) (markup?)
282    (add-toc-item parser 'tocPieceMarkup title)
283    (make-music 'Music 'void #t))
285 %%% Pieces
286 pieceToc =
287 #(define-music-function (parser location title) (markup?)
288   (let ((rehearsal (rehearsal-number)))
289     (add-toc-item parser 'tocPieceMarkup title rehearsal)
290     (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
291         (if (eqv? #t (ly:get-option 'urtext))
292             (begin
293               (add-toplevel-markup
294                parser
295                (markup #:rehearsal-number rehearsal))
296               (add-no-page-break parser))
297             (begin
298               (add-toplevel-markup
299                parser
300                (markup #:rehearsal-number rehearsal #:hspace 1 #:huge title))
301               (add-no-page-break parser))))
302     (make-music 'Music 'void #t)))
304 pieceTocCond =
305 #(define-music-function (parser location condition title) (boolean? markup?)
306    (if condition
307        (let ((rehearsal (rehearsal-number)))
308          (add-toc-item parser 'tocPieceMarkup title rehearsal)
309          (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
310              (if (eqv? #t (ly:get-option 'urtext))
311                  (begin
312                    (add-toplevel-markup
313                     parser
314                     (markup #:rehearsal-number rehearsal))
315                    (add-no-page-break parser))
316                  (begin
317                    (add-toplevel-markup
318                     parser
319                     (markup #:rehearsal-number rehearsal #:hspace 1 #:huge title))
320                    (add-no-page-break parser))))))
321    (make-music 'Music 'void #t))
323 pieceTocNb =
324 #(define-music-function (parser location number title) (string? markup?)
325    (add-toc-item parser 'tocPieceMarkup title number)
326    (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
327         (if (eqv? #t (ly:get-option 'urtext))
328             (begin
329               (add-toplevel-markup parser
330                                    (markup #:rehearsal-number number))
331               (add-no-page-break parser))
332             (begin
333               (add-toplevel-markup parser
334                                    (markup #:rehearsal-number number
335                                            #:hspace 1
336                                            #:huge title))
337               (add-no-page-break parser))))
338    (make-music 'Music 'void #t))
340 pieceTocAndTitleNb =
341 #(define-music-function (parser location number title toc-title)
342      (markup? markup? markup?)
343    (add-toc-item parser 'tocPieceMarkup toc-title number)
344    (add-toplevel-markup parser 
345       (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
346           (markup #:rehearsal-number number
347                   #:hspace 1
348                   #:huge title)
349           (markup #:title title)))
350    (add-no-page-break parser)
351    (make-music 'Music 'void #t))
353 pieceTocAndTitleNbCond =
354 #(define-music-function (parser location condition number title toc-title)
355      (boolean? markup? markup? markup?)
356    (if condition
357        (begin
358          (add-toc-item parser 'tocPieceMarkup toc-title number)
359          (add-toplevel-markup
360           parser 
361           (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
362               (markup #:rehearsal-number number
363                       #:hspace 1
364                       #:huge title)
365               (markup #:title title)))
366          (add-no-page-break parser)))
367    (make-music 'Music 'void #t))
369 inMusicPieceToc =
370 #(define-music-function (parser location title) (markup?)
371   (let ((rehearsal (rehearsal-number)))
372     (add-toc-item! 'tocPieceMarkup title rehearsal)))
374 pieceTocTitle =
375 #(define-music-function (parser location title) (string?)
376   (let ((rehearsal (rehearsal-number)))
377     (add-toc-item parser 'tocPieceMarkup title rehearsal)
378     (add-toplevel-markup parser 
379       (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
380           (markup #:rehearsal-number rehearsal
381                   #:hspace 1
382                   #:huge title)
383           (markup #:title (string-upper-case title))))
384     (add-no-page-break parser)
385     (make-music 'Music 'void #t)))
387 pieceTocTitleCond =
388 #(define-music-function (parser location condition title) (boolean? string?)
389    (if condition
390        (let ((rehearsal (rehearsal-number)))
391          (add-toc-item parser 'tocPieceMarkup title rehearsal)
392          (add-toplevel-markup
393           parser 
394           (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
395               (markup #:rehearsal-number rehearsal
396                       #:hspace 1
397                       #:huge (string-upper-case title))
398               (markup #:title (string-upper-case title))))
399          (add-no-page-break parser)))
400     (make-music 'Music 'void #t))
402 pieceTocTitleNb =
403 #(define-music-function (parser location number title) (string? markup?)
404    (add-toc-item parser 'tocPieceMarkup title number)
405    (add-toplevel-markup parser 
406                         (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
407                             (markup #:rehearsal-number number
408                                     #:hspace 1
409                                     #:huge title)
410                             (markup #:title (if (string? title)
411                                                (string-upper-case title)
412                                                title))))
413    (add-no-page-break parser)
414    (make-music 'Music 'void #t))
416 pieceTitle =
417 #(define-music-function (parser location title) (string?)
418   (let ((rehearsal (rehearsal-number)))
419     (add-toplevel-markup parser 
420       (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
421           (markup #:rehearsal-number rehearsal
422                   #:hspace 1
423                   #:huge (string-upper-case title))
424           (markup #:title (string-upper-case title))))
425     (add-no-page-break parser)
426     (make-music 'Music 'void #t)))
428 pieceSimpleTitle =
429 #(define-music-function (parser location title) (string?)
430   (add-toplevel-markup parser 
431    (markup #:title (string-upper-case title)))
432   (add-no-page-break parser)
433   (make-music 'Music 'void #t))
435 pieceSTitle =
436 #(define-music-function (parser location title) (markup?)
437   (let ((rehearsal (rehearsal-number)))
438     (add-toplevel-markup parser 
439       (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
440           (markup #:rehearsal-number rehearsal
441                   #:hspace 1
442                   #:huge title)
443           (markup #:small-title title)))
444     (add-no-page-break parser)
445     (make-music 'Music 'void #t)))
447 pieceTocAndTitle =
448 #(define-music-function (parser location title toc-title) (markup? markup?)
449   (let ((rehearsal (rehearsal-number)))
450     (add-toc-item parser 'tocPieceMarkup toc-title rehearsal)
451     (add-toplevel-markup parser 
452       (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
453           (markup #:rehearsal-number rehearsal
454                   #:hspace 1
455                   #:huge title)
456           (markup #:title title)))
457     (add-no-page-break parser)
458     (make-music 'Music 'void #t)))
460 pieceNoTitle =
461 #(define-music-function (parser location) ()
462   (let ((rehearsal (rehearsal-number)))
463     (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
464         (begin
465          (add-toplevel-markup parser (markup #:rehearsal-number rehearsal))
466          (add-no-page-break parser)))
467     (make-music 'Music 'void #t)))
469 %%% Sections
470 #(use-modules (srfi srfi-39))
471 #(define-public *opus-title* (make-parameter ""))
472 #(define-public *act-title* (make-parameter ""))
474 %% Editorial notes
475 notesSection =
476 #(define-music-function (parser location title) (markup?)
477   (add-page-break parser)
478   (add-toc-item parser 'tocPieceMarkup title)
479   (add-even-page-header-text parser (string-upper-case (*opus-title*)) #f)
480   (*act-title* title)
481   (add-odd-page-header-text
482     parser
483     (format #f "~a" (string-upper-case (*act-title*)))
484     #f)
485   (make-music 'Music 'void #t))
487 opusTitle =
488 #(define-music-function (parser location title) (string?)
489    (*opus-title* (if (*part*)
490                              (string-append title ", " (*part-name*))
491                              title))
492    (make-music 'Music 'void #t))
494 ouverture =
495 #(define-music-function (parser location title) (string?)
496   (let ((rehearsal (rehearsal-number)))
497     ;(add-page-break parser)
498     (add-toc-item parser 'tocPieceMarkup title rehearsal)
499     (add-even-page-header-text parser (string-upper-case (*opus-title*)) #f)
500     (add-odd-page-header-text parser (string-upper-case title) #f)
501     (add-toplevel-markup parser (markup #:act (string-upper-case title)))
502     (add-no-page-break parser)
503     (if (eqv? #t (ly:get-option 'use-rehearsal-numbers))
504         (begin
505          (add-toplevel-markup parser (markup #:rehearsal-number rehearsal))
506          (add-no-page-break parser))))
507   (make-music 'Music 'void #t))
509 act =
510 #(define-music-function (parser location act-title) (string?)
511   (increase-rehearsal-major-number)
512   ;(add-page-break parser)
513   (add-toc-item parser 'tocActMarkup act-title)
514   (add-even-page-header-text parser (string-upper-case (*opus-title*)) #f)
515   (*act-title* act-title)
516   (add-odd-page-header-text
517     parser
518     (format #f "~a" (string-upper-case (*act-title*)))
519     #f)
520   (add-toplevel-markup parser
521     (markup #:act (string-upper-case act-title)))
522   (add-no-page-break parser)
523   (make-music 'Music 'void #t))
525 actNoMarkup =
526 #(define-music-function (parser location act-title) (string?)
527   (increase-rehearsal-major-number)
528   (add-toc-item parser 'tocActMarkup act-title)
529   (add-even-page-header-text parser (string-upper-case (*opus-title*)) #f)
530   (*act-title* act-title)
531   (add-odd-page-header-text
532     parser
533     (format #f "~a" (string-upper-case (*act-title*)))
534     #f)
535   (make-music 'Music 'void #t))
537 actn =
538 #(define-music-function (parser location act-title) (string?)
539   ;(add-page-break parser)
540   (add-toc-item parser 'tocActMarkup act-title)
541   (add-even-page-header-text parser (string-upper-case (*opus-title*)) #f)
542   (*act-title* act-title)
543   (add-odd-page-header-text
544     parser
545     (format #f "~a" (string-upper-case (*act-title*)))
546     #f)
547   (add-toplevel-markup parser
548     (markup #:act (string-upper-case act-title)))
549   (add-no-page-break parser)
550   (make-music 'Music 'void #t))
552 actnNoMarkup =
553 #(define-music-function (parser location title) (string?)
554   (add-toc-item parser 'tocActMarkup title)
555   (add-even-page-header-text parser (string-upper-case (*opus-title*)) #f)
556   (*act-title* title)
557   (add-odd-page-header-text
558     parser
559     (format #f "~a" (string-upper-case (*act-title*)))
560     #f)
561   (make-music 'Music 'void #t))
563 actEnd =
564 #(define-music-function (parser location text) (markup?)
565   (add-no-page-break parser)
566   (add-toplevel-markup parser (markup #:fontsize 4 #:fill-line (text)))
567   (add-no-page-break parser)
568   (add-toplevel-markup parser (markup #:null))
569   (make-music 'Music 'void #t))
571 scene =
572 #(define-music-function (parser location title toc-title) (string? markup?)
573   (add-toc-item parser 'tocSceneMarkup (if (and (string? toc-title)
574                                                 (string-null? toc-title))
575                                            (string-upper-case title)
576                                            toc-title))
577   (add-odd-page-header-text
578     parser
579     (format #f "~a, ~a."
580            (string-upper-case (*act-title*))
581            (string-upper-case title))
582     #t)
583   (add-toplevel-markup parser
584     (markup #:scene (string-upper-case title)))
585   (add-no-page-break parser)
586   (make-music 'Music 'void #t))
588 sceneNoMarkup =
589 #(define-music-function (parser location title toc-title) (string? markup?)
590   (add-toc-item parser 'tocSceneMarkup (if (and (string? toc-title)
591                                                 (string-null? toc-title))
592                                            (string-upper-case title)
593                                            toc-title))
594   (add-odd-page-header-text
595     parser
596     (format #f "~a, ~a."
597            (string-upper-case (*act-title*))
598            (string-upper-case title))
599     #t)
600   (make-music 'Music 'void #t))
602 inMusicScene =
603 #(define-music-function (parser location title toc-title) (string? markup?)
604    (add-toc-item parser 'tocSceneMarkup toc-title)
605    (let ((label-music (make-music 'SimultaneousMusic
606                         'elements (list (in-music-add-odd-page-header-text
607                                           (format #f "~a, ~a."
608                                             (string-upper-case (*act-title*))
609                                             (string-upper-case title))
610                                           #t)))))
611      #{ $label-music
612         \once \override Score . RehearsalMark #'font-size = #0
613         \once \override Score . RehearsalMark #'self-alignment-X = #LEFT
614         \mark \markup \fontsize #4 $(string-upper-case title) #}))
616 inMusicSceneDescCond =
617 #(define-music-function (parser location cond title toc-title description)
618      (boolean? string? markup? markup?)
619    (if cond
620        (begin
621          (add-toc-item parser 'tocSceneMarkup toc-title)
622          (let ((label-music
623                 (make-music
624                  'SimultaneousMusic
625                  'elements (list (in-music-add-odd-page-header-text
626                                   (format #f "~a, ~a."
627                                           (string-upper-case (*act-title*))
628                                           (string-upper-case title))
629                                   #t))))
630                (description-markup (if (*part*)
631                                        empty-markup
632                                        (markup #:fontsize 2 description))))
633            #{ $label-music
634               \once \override Score . RehearsalMark #'font-size = #0
635               \once \override Score . RehearsalMark #'self-alignment-X = #LEFT
636               \mark \markup \left-align \center-column {
637                 \fontsize #4 $(string-upper-case title)
638                 \vspace #1
639                 $description-markup
640               } #}))
641        (make-music 'Music 'void #t)))
643 inMusicSceneDesc =
644 #(define-music-function (parser location title description) (string? markup?)
645    (let ((label-music (make-music 'SimultaneousMusic
646                         'elements (list (in-music-add-odd-page-header-text
647                                           (format #f "~a, ~a."
648                                             (string-upper-case (*act-title*))
649                                             (string-upper-case title))
650                                           #t)
651                                         (add-toc-item! 'tocSceneMarkup title ""))))
652          (description-markup (if (*part*)
653                                  empty-markup
654                                  (markup #:fontsize 2 description))))
655      #{ $label-music
656         \once \override Score . RehearsalMark #'font-size = #0
657         \once \override Score . RehearsalMark #'self-alignment-X = #LEFT
658         \mark \markup \left-align \center-column {
659           \fontsize #4 $(string-upper-case title)
660           \vspace #1
661           $description-markup
662         } #}))
664 sceneDescription =
665 #(define-music-function (parser location description) (markup?)
666    (if (not (*part*))
667        (begin
668          (add-toplevel-markup parser
669                               (markup #:scene-description description))
670          (add-no-page-break parser)))
671    (make-music 'Music 'void #t))
673 sceneDescriptionBottom =
674 #(define-music-function (parser location description) (markup?)
675   (add-toplevel-markup parser
676    (markup #:scene-description description))
677   (add-allow-page-turn parser)
678   (make-music 'Music 'void #t))
680 %%% Conditionnal page breaks
681 partPageBreak =
682 #(define-music-function (parser location parts) (list?)
683   (if (memq (*part*) parts)
684       (add-page-break parser))
685   (make-music 'Music 'void #t))
687 partNoPageBreak =
688 #(define-music-function (parser location parts) (list?)
689   (if (memq (*part*) parts)
690       (add-no-page-break parser))
691   (make-music 'Music 'void #t))
693 partBlankPageBreak =
694 #(define-music-function (parser location parts) (list?)
695   (if (memq (*part*) parts)
696       (begin
697        (add-page-break parser)
698        (add-toplevel-markup parser (markup #:null))
699        (add-page-break parser)))
700   (make-music 'Music 'void #t))
702 partNoPageTurn =
703 #(define-music-function (parser location parts) (list?)
704   (if (or (and (symbol? (*part*)) (null? parts))
705           (memq (*part*) parts))
706       (add-no-page-turn parser))
707   (make-music 'Music 'void #t))
709 partPageTurn =
710 #(define-music-function (parser location parts) (list?)
711   (if (memq (*part*) parts)
712       (add-page-turn parser))
713   (make-music 'Music 'void #t))
716 markupCond =
717 #(define-music-function (parser location condition markp) (boolean? markup?)
718    (if condition
719        (add-toplevel-markup parser markp))
720    (make-music 'Music 'void #t))