From 4c17bf85e10538541e4c4d31d3e4c88afa1649d3 Mon Sep 17 00:00:00 2001 From: Valentin Villenave Date: Sat, 6 Dec 2008 20:03:35 +0100 Subject: [PATCH] Reorganizing definition files --- definitions/common.ly | 15 - definitions/functions.ly | 300 +----------------- definitions/markup.ly | 37 --- definitions/mesures.ly | 34 ++ definitions/paper.ly | 80 ++++- definitions/text-functions.ly | 720 +++++++++++++++++------------------------- definitions/titling.ly | 275 ++++++++-------- full_score.ly | 24 +- texte/decoupage.ly | 11 +- vocal_score.ly | 82 +---- voix/contralto.ly | 26 +- 11 files changed, 609 insertions(+), 995 deletions(-) rewrite definitions/text-functions.ly (97%) diff --git a/definitions/common.ly b/definitions/common.ly index 844435e..1b5eacb 100755 --- a/definitions/common.ly +++ b/definitions/common.ly @@ -5,16 +5,7 @@ % % %------------------------------------------------------------------% -%%%%%%%%%%%%%%%%%%%%%%%%%% Common Layout %%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Paper size -----------------------------------------------------% -% #(set-default-paper-size "a4" 'landscape) - -%% Page breaking --------------------------------------------------% -#(define page-breaking ly:minimal-breaking) - -%% Staff size -----------------------------------------------------% -#(set-global-staff-size 14) %% Time Signatures layouts ----------------------------------------% @@ -41,12 +32,6 @@ middleTimeSig = { \override TimeSig.VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 5) } -PianoDynamics = { - \override Dynamics.TimeSignature #'font-size = #1 - \override Dynamics.VerticalAxisGroup #'minimum-Y-extent = #'(-1.5 . 1.5 ) -} - - %%%%%%%%%%%%%%%%%%%% Functions initialization %%%%%%%%%%%%%%%%%%%%%% diff --git a/definitions/functions.ly b/definitions/functions.ly index caf5113..4f3b1ee 100755 --- a/definitions/functions.ly +++ b/definitions/functions.ly @@ -73,16 +73,6 @@ PercuDeuxMains= { \clef bass $gauche } >> #}) -harmo = -#(define-music-function (parser location chord result) (ly:music? ly:music?) - #{ << \oneVoice $chord \\ { \voiceTwo %FIXME: ties could look better. - \override NoteHead #'stencil = #ly:text-interface::print - \override NoteHead #'text = \markup { \null \musicglyph #"noteheads.s2"} - \once \override NoteHead #'text = \markup {\null \override #'(direction . 1) - \dir-column {\musicglyph #"noteheads.s2" \teeny \musicglyph #"eight"}} - \override Stem #'stencil = ##f $result - \revert Stem #'stencil \revert NoteHead #'stencil } >> #}) - showAnyway = #(define-music-function (parser location music) (ly:music?) #{ @@ -95,6 +85,16 @@ showAnyway = %% Articulation shortcuts -----------------------------------------% +harmo = +#(define-music-function (parser location chord result) (ly:music? ly:music?) + #{ << \oneVoice $chord \\ { \voiceTwo %FIXME: ties could look better. + \override NoteHead #'stencil = #ly:text-interface::print + \override NoteHead #'text = \markup { \null \musicglyph #"noteheads.s2"} + \once \override NoteHead #'text = \markup {\null \override #'(direction . 1) + \dir-column {\musicglyph #"noteheads.s2" \teeny \musicglyph #"eight"}} + \override Stem #'stencil = ##f $result + \revert Stem #'stencil \revert NoteHead #'stencil } >> #}) + % Are these really needed? #(define (make-script x) (make-music 'ArticulationEvent @@ -218,6 +218,10 @@ plak = %% Music shortcuts ------------------------------------------------% +sk = \set Score.skipTypesetting = ##t + +unsk = \set Score.skipTypesetting = ##f + % This might not be needed #(define (octave-up noteevent) (let* ((pitch (ly:music-property noteevent 'pitch)) @@ -253,6 +257,7 @@ plak = oct = #(define-music-function (parser location mus) (ly:music?) (octavize mus)) + %%%%%%%%%%%%%%%%%%%%%%%% Layout Functions %%%%%%%%%%%%%%%%%%%%%%%%%% @@ -325,278 +330,3 @@ oneStemUp = { \once \override Stem #'direction = #UP } -sk = \set Score.skipTypesetting = ##t - -unsk = \set Score.skipTypesetting = ##f - -%%%%%%%%%%%%%%%%%%%%%%%%%% In-score Text %%%%%%%%%%%%%%%%%%%%%%%%%%% - - -#(define-markup-command (vspace layout props amount) (number?) - (let ((amount (* amount 3.0))) - (if (> amount 0) - (ly:make-stencil "" (cons -1 1) (cons 0 amount)) - (ly:make-stencil "" (cons -1 1) (cons amount amount))))) - -#(define-public (rounded-whiteout-stencil stencil blot) - (let* - ((x-ext (ly:stencil-extent stencil X)) - (y-ext (ly:stencil-extent stencil Y))) - (ly:stencil-add - (stencil-with-color (ly:round-filled-box x-ext y-ext blot) - white) - stencil))) - -#(define-markup-command (rounded-whiteout layout props radius arg) - (number? markup?) - (rounded-whiteout-stencil (interpret-markup layout props arg) radius)) - - -%% Expressive indications -----------------------------------------% - -#(define-markup-command (indic layout props arg) (markup?) - (interpret-markup layout props - (markup #:rounded-whiteout 1 #:small #:italic arg))) - -% because of the use of a music-function, -% non-predefined composite dynamics have to be entered *before* -% the affected beat (unlike standard or predefined dynamics). -cmb = -#(define-music-function (parser location dyn str) (string? string?) - (make-music 'SequentialMusic 'elements - (list - (make-music 'OverrideProperty - 'symbol 'DynamicText - 'grob-property-path (list 'self-alignment-X) - 'grob-value -0.6 'once #t) - (make-music 'AbsoluteDynamicEvent - 'text - (markup #:dynamic dyn - #:hspace .5 - #:text #:medium #:upright str))))) - -bmc = -#(define-music-function (parser location str dyn) (string? string?) - (make-music 'SequentialMusic 'elements - (list - (make-music 'OverrideProperty - 'symbol 'DynamicText - 'grob-property-path (list 'self-alignment-X) - 'grob-value -0.6 'once #t) - (make-music 'AbsoluteDynamicEvent - 'text - (markup #:text #:medium #:upright str - #:hspace .5 - #:dynamic dyn))))) - -%%% This function was provided by Graham Percival. -#(define (make-dynamic-extra dynamic string) - (make-music - 'AbsoluteDynamicEvent - 'tweaks - ;; calculate centering for text - (list (cons (quote X-offset) - (+ -0.5 (* -0.5 (string-length dynamic))))) - 'text - (markup - ;; uncomment next line for debugging - ;;#:box - #:line( - dynamic - #:hspace -0.3 - #:normal-text #:italic string)) - )) - -#(define (make-extra-dynamic string dynamic) - (make-music - 'AbsoluteDynamicEvent - 'tweaks - ;; calculate centering for text - (list (cons (quote X-offset) - (+ -0.5 (* -0.5 (string-length dynamic))))) - 'text - (markup - ;; uncomment next line for debugging - ;;#:box - #:line( - #:normal-text #:italic string - #:hspace -0.3 - #:dynamic dynamic)) - )) - -ffsubito = #(make-dynamic-extra "ff" "subito") -fsubito = #(make-dynamic-extra "f" "subito") -mfsubito = #(make-dynamic-extra "mf" "subito") -fmolto = #(make-dynamic-extra "f" "molto") -psempre = #(make-dynamic-extra "p" "sempre") -ppsempre = #(make-dynamic-extra "pp" "sempre") -mfsempre = #(make-dynamic-extra "mf" "sempre") -mpsostenuto = #(make-dynamic-extra "mp" "sostenuto") -psubito = #(make-dynamic-extra "p" "subito") -pdolce = #(make-dynamic-extra "p" "dolce") -psubito = #(make-dynamic-extra "p" "subito") -ppsubito = #(make-dynamic-extra "pp" "subito") -mfleggiero = #(make-dynamic-extra "mf" "leggiero") -piuf = #(make-extra-dynamic "più" "f") -pocof = #(make-extra-dynamic "poco" "f") - -nind = -#(define-music-function (parser location texte) -(string? ) -(make-dynamic-script - (markup #:text #:indic texte))) - -ten = -#(define-music-function (parser location music) (ly:music?) - (if - (equal? (ly:music-property music 'name) 'EventChord) - (set! (ly:music-property music 'elements) - (append (ly:music-property music 'elements) - (list (make-music 'TextScriptEvent 'text - (markup #:translate (cons 4 0) - #:indic "(ten.)")))))) - music) - -ind = -#(define-music-function (parser location text music) (string? ly:music?) - (if - (equal? (ly:music-property music 'name) 'EventChord) - (set! (ly:music-property music 'elements) - (append (ly:music-property music 'elements) - (list (make-music 'TextScriptEvent 'direction 1 - 'text (markup #:indic text)))))) - music) - -pizz = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"pizz." $music #}) - -arco = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"arco" $music #}) - -flaut = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"flautando" $music #}) - -simile = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"simile" $music #}) - -loco = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"loco" $music #}) - -ordin = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"(ordin.)" $music #}) - -meno = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"meno" $music #}) - -jet = -#(define-music-function (parser location music) (ly:music?) -#{ \ind #"jeté" $music #}) - -#(define (make-txt-span music t) - (set! (ly:music-property music 'elements) - (append (ly:music-property music 'elements) - (list (make-music 'TextSpanEvent - 'span-direction t)))) - music) - -%% The two following functions are deprecated. Better code follows below. -startTxt = -#(define-music-function (parser location texte music ) (string? ly:music?) -#{ \override TextSpanner #'bound-details #'left #'text = - \markup { \bold $texte } - $(make-txt-span music -1)#}) - -stopTxt = -#(define-music-function (parser location music) (ly:music?) - (make-txt-span music 1)) - -#(define (make-text-span txt) -"Make a TextSpanner that begins with the given STR." - (let* ((m (make-music 'TextSpanEvent - 'span-direction -1)) - (details (assoc-get 'bound-details - (assoc-get 'TextSpanner - all-grob-descriptions))) - (left-details (assoc-get 'left - details))) - (ly:music-set-property! m 'tweaks - (acons 'bound-details - (acons 'left - (acons 'text txt - left-details) - details) - (ly:music-property m 'tweaks))) - m)) - -startText= -#(define-music-function (location parser txt) (string?) -(make-text-span txt)) - -stopText= #(make-music 'TextSpanEvent 'span-direction 1) - -rit = #(make-text-span "rit.") - -%% Tempo indications ----------------------------------------------% -#(define-markup-command (mvt layout props arg) (markup?) - (interpret-markup layout props - (markup #:huge #:bold arg))) - -%%%%%%%%%%%%%%%%%%%%%%%%%% Text Functions %%%%%%%%%%%%%%%%%%%%%%%%%% - -%% Lyrics formatting ----------------------------------------------% - -freeStyleOn = { -\override Lyrics . LyricExtender #'stencil = ##f } - -freeStyleOff = { -\revert Lyrics . LyricExtender #'stencil } - -leftSyl = { -\once \override LyricText #'self-alignment-X = #0.9 } - -dash = { - \once \override LyricHyphen #'minimum-distance = #4 - \once \override LyricHyphen #'length = #2 - \once \override LyricHyphen #'thickness = #1.2 -} - -ital = { -\once \override LyricText #'font-shape = #'italic } - -smallcaps = { -\override LyricText #'font-shape = #'caps } - -normal = { -\revert LyricText #'font-shape } - - -%% Scenography formatting ---------------------------------------% -long = { -\once \override TextScript #'extra-spacing-width = #'(0 . 0) -\once \override TextScript #'infinite-spacing-height = ##t -} - -#(define-markup-command (did layout props text) (markup?) - (interpret-markup layout props - (markup #:override '(line-width . 40) - #:override '(box-padding . 1) - #:override '(corner-radius . 2) - #:rounded-box #:sans #:italic #:small #:justify-string text))) - -#(define-markup-command (init-did layout props text) (markup?) - (interpret-markup layout props - (markup - ; #:override (cons 'line-width (* 1 (chain-assoc-get 'line-width props))) - #:fill-line ( - #:override '(line-width . 60) - #:override '(box-padding . 1.5) - #:override '(corner-radius . 2) - #:rounded-box #:sans #:italic #:small #:justify-string text)))) - diff --git a/definitions/markup.ly b/definitions/markup.ly index fda53e0..de0e119 100755 --- a/definitions/markup.ly +++ b/definitions/markup.ly @@ -7,43 +7,6 @@ %%% The following functions were provided by %%% Nicolas Sceaux -%%% -%%% Markup commands -%%% =============== -%%% \vspace -%%% like \hspace, but for vertical space -%%% -%%% \smallCaps -%%% like built-in \smallCaps, but dealing with accented letters -%%% -%%% \when-property -%%% if symbol is find in properties, interpret the markup -%%% otherwise, return an empty stencil -%%% -%%% \line-width-ratio -%%% interpret markup with a line-width set to current line-width * ratio -%%% -%%% \copyright -%%% build a copyight line, using the maintainer and copyrightYear -%%% header variables. -%%% -%%% \wordwrap-center -%%% like wordwrap, but center align the lines -%%% -%%% Markup lines commands -%%% ===================== -%%% \wordwrap-center-lines -%%% make a markup list composed centered lines of text. - - - - -#(define-markup-command (vspace layout props amount) (number?) - "This produces a invisible object taking vertical space." - (let ((amount (* amount 3.0))) - (if (> amount 0) - (ly:make-stencil "" (cons -1 1) (cons 0 amount)) - (ly:make-stencil "" (cons -1 1) (cons amount amount))))) #(define-markup-command (copyright layout props) () (let* ((maintainer (chain-assoc-get 'header:maintainer props)) diff --git a/definitions/mesures.ly b/definitions/mesures.ly index 47e6275..55d78b4 100755 --- a/definitions/mesures.ly +++ b/definitions/mesures.ly @@ -895,6 +895,40 @@ EntracteMesures = { \time 4/4 R1*2 \time 3/4 R2.*2 \bar "||" \time 4/4 R1*14 \bar "||" + \time 3/4 + \tempo "Andante tranquillo" 4 = 66 + R2.*5 + \time 2/4 R2 + \time 3/4 R2. + \time 4/4 R1 + \time 3/4 R2. + \time 2/4 R2 + \time 2/2 + \tempo "poco a poco accellerando..." + R1*5 + \time 3/4 R1.*4 + \time 2/2 R1 + \time 3/4 R2. + \tempo "A Tempo" 4 = 66 + R2.*9 + \tempo "Un poco più mosso" 4 = 80 + R2.*5 + \time 4/4 + \tempo "Andantino" 4 = 92 + R1 + \time 2/4 R2 + \time 4/4 R1 + \time 2/4 R2 + \time 4/4 R1 + \time 2/4 R2 + \time 4/4 R1 + \time 3/4 R2. + \time 3/2 + \tempo "Largo non troppo" 2 = 52 + R1.*18 + \time 2/2 R1*2 + \time 3/4 R2. + \time 2/4 R2 \bar "|." } ActeDeuxSceneUnMesures = { diff --git a/definitions/paper.ly b/definitions/paper.ly index a684721..f67fc74 100755 --- a/definitions/paper.ly +++ b/definitions/paper.ly @@ -5,9 +5,22 @@ % % %------------------------------------------------------------------% + +%%%%%%%%%%%%%%%%%%%%%%%%%% Common Layout %%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Paper size -----------------------------------------------------% +% #(set-default-paper-size "a4" 'landscape) + +%% Page breaking --------------------------------------------------% +#(define page-breaking ly:minimal-breaking) + +%% Staff size -----------------------------------------------------% +#(set-global-staff-size 14) + + %%%%%%%%%%%%%%%%%%%%%%%%%%% Paper Layout %%%%%%%%%%%%%%%%%%%%%%%%%%% -includePaper = \paper { +\paper { %% Page variables -------------------------------------------------% page-limit-inter-system-space = ##t page-limit-inter-system-space-factor = 1.4 @@ -33,6 +46,71 @@ includePaper = \paper { %FIXME: this doesn't work well. %systemSeparatorMarkup = \slashSeparator + +%% Titles and Table of Contents -----------------------------------% + + bookTitleMarkup = \markup { + \vspace #20 + \override #'(baseline-skip . 3.5) + \column { + \combine + \column { + \fill-line { + \fontsize #5 \sans \fromproperty #'header:libretto + \null + } + \vspace #4 + \line { \fontsize #15 \transparent "A" } + \vspace #4 + \fill-line { + \null + \fontsize #5 \sans \fromproperty #'header:composer + } + } + \column { + \line { \fontsize #5 " " } + \vspace #4 + \fill-line { + \fontsize #15 \sans \fromproperty #'header:title + } + \fill-line { + \fontsize #2 \sans \fromproperty #'header:subtitle + } + } + \vspace #4 + \fill-line { + \fromproperty #'header:illustration + } + } + } + oddFooterMarkup = \markup { + \column { + \fill-line { + %% Copyright header field only on first page. + \on-the-fly #first-page + \fontsize #2 \sans \rounded-box\fromproperty #'header:scoretype + } + \vspace #1 + \fill-line { + \on-the-fly #first-page + \fontsize #1 \sans \fromproperty #'header:copyright + } + + \fill-line { + %% Tagline header field only on last page. + \on-the-fly #last-page \fromproperty #'header:tagline + } + } + } + scoreTitleMarkup = \markup { + \column { + \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 } + \fill-line { + \fontsize #6 \fromproperty #'header:piece + } + } + } + %%-----------------------------------------------------------------% } diff --git a/definitions/text-functions.ly b/definitions/text-functions.ly dissimilarity index 97% index fb171aa..8575965 100755 --- a/definitions/text-functions.ly +++ b/definitions/text-functions.ly @@ -1,422 +1,298 @@ - -%% vertical space skip -#(define-markup-command (vspace layout props amount) (number?) - "This produces a invisible object taking vertical space." - (let ((amount (* amount 3.0))) - (if (> amount 0) - (ly:make-stencil "" (cons -1 1) (cons 0 amount)) - (ly:make-stencil "" (cons -1 1) (cons amount amount))))) - -#(define-markup-command (when-property layout props symbol markp) (symbol? markup?) - (if (chain-assoc-get symbol props) - (interpret-markup layout props markp) - (ly:make-stencil '() '(1 . -1) '(1 . -1)))) - -#(define-markup-command (custom-copyright layout props) () - (let* ((maintainer (chain-assoc-get 'header:maintainer props)) - (this-year (+ 1900 (tm:year (gmtime (current-time))))) - (year (string->number (or (chain-assoc-get 'header:copyrightYear props) - (number->string this-year))))) - (interpret-markup layout props - (markup "Copyright ©" - (if (= year this-year) - (format #f "~a" this-year) - (format #f "~a-~a" year this-year)) - maintainer)))) - -#(define-markup-list-command (paragraphe paper props text) (markup-list?) - (let ((indentation (markup #:pad-to-box (cons 0 3) (cons 0 0) #:null))) - (interpret-markup-list paper props - (make-override-lines-markup-list '(baseline-skip . 0) - (make-justified-lines-markup-list (cons indentation text)))))) - -#(define-markup-list-command (columns paper props text) (markup-list?) - (interpret-markup-list paper props - (make-override-lines-markup-list '(baseline-skip . 1) - (make-column-lines-markup-list text)))) - -#(define-markup-command (boxed-justify layout props text) (markup-list?) - (interpret-markup layout props - (make-override-markup '(box-padding . 1) - (make-box-markup - (make-column-markup - (make-justified-lines-markup-list text)))))) - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Utility markups - -%% vertical space skip -#(define-markup-command (vspace layout props amount) (number?) - "This produces a invisible object taking vertical space." - (let ((amount (* amount 3.0))) - (if (> amount 0) - (ly:make-stencil "" (cons -1 1) (cons 0 amount)) - (ly:make-stencil "" (cons -1 1) (cons amount amount))))) - -#(define-markup-command (when-property layout props symbol markp) (symbol? markup?) - (if (chain-assoc-get symbol props) - (interpret-markup layout props markp) - (ly:make-stencil '() '(1 . -1) '(1 . -1)))) - -#(define-markup-command (line-width-ratio layout props width-ratio arg) (number? markup?) - (interpret-markup layout props - (markup #:override (cons 'line-width (* width-ratio (chain-assoc-get 'line-width props))) - arg))) - -%%% Guile does not deal with accented letters -#(use-modules (ice-9 regex)) -%%;; actually defined below, in a closure -#(define-public string-upper-case #f) -#(define accented-char-upper-case? #f) -#(define accented-char-lower-case? #f) - -%%;; an accented character is seen as two characters by guile -#(let ((lower-case-accented-string "éèêëáà âäíìîïóòôöúùûüçœæ") - (upper-case-accented-string "ÉÈÊËÃ�ÀÂÄÃ�ÌÎÃ�ÓÒÔÖÚÙÛÜÇŒÆ")) - (define (group-by-2 chars result) - (if (or (null? chars) (null? (cdr chars))) - (reverse! result) - (group-by-2 (cddr chars) - (cons (string (car chars) (cadr chars)) - result)))) - (let ((lower-case-accented-chars - (group-by-2 (string->list lower-case-accented-string) (list))) - (upper-case-accented-chars - (group-by-2 (string->list upper-case-accented-string) (list)))) - (set! string-upper-case - (lambda (str) - (define (replace-chars str froms tos) - (if (null? froms) - str - (replace-chars (regexp-substitute/global #f (car froms) str - 'pre (car tos) 'post) - (cdr froms) - (cdr tos)))) - (string-upcase (replace-chars str - lower-case-accented-chars - upper-case-accented-chars)))) - (set! accented-char-upper-case? - (lambda (char1 char2) - (member (string char1 char2) upper-case-accented-chars string=?))) - (set! accented-char-lower-case? - (lambda (char1 char2) - (member (string char1 char2) lower-case-accented-chars string=?))))) - -#(define-markup-command (smallCaps layout props text) (markup?) - "Turn @code{text}, which should be a string, to small caps. -@example -\\markup \\small-caps \"Text between double quotes\" -@end example" - (define (string-list->markup strings lower) - (let ((final-string (string-upper-case - (apply string-append (reverse strings))))) - (if lower - (markup #:fontsize -2 final-string) - final-string))) - (define (make-small-caps rest-chars currents current-is-lower prev-result) - (if (null? rest-chars) - (make-concat-markup (reverse! (cons (string-list->markup - currents current-is-lower) - prev-result))) - (let* ((ch1 (car rest-chars)) - (ch2 (and (not (null? (cdr rest-chars))) (cadr rest-chars))) - (this-char-string (string ch1)) - (is-lower (char-lower-case? ch1)) - (next-rest-chars (cdr rest-chars))) - (cond ((and ch2 (accented-char-lower-case? ch1 ch2)) - (set! this-char-string (string ch1 ch2)) - (set! is-lower #t) - (set! next-rest-chars (cddr rest-chars))) - ((and ch2 (accented-char-upper-case? ch1 ch2)) - (set! this-char-string (string ch1 ch2)) - (set! is-lower #f) - (set! next-rest-chars (cddr rest-chars)))) - (if (or (and current-is-lower is-lower) - (and (not current-is-lower) (not is-lower))) - (make-small-caps next-rest-chars - (cons this-char-string currents) - is-lower - prev-result) - (make-small-caps next-rest-chars - (list this-char-string) - is-lower - (if (null? currents) - prev-result - (cons (string-list->markup - currents current-is-lower) - prev-result))))))) - (interpret-markup layout props - (if (string? text) - (make-small-caps (string->list text) (list) #f (list)) - text))) - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Title page -%%% -\paper { - bookTitleMarkup = \markup \when-property #'header:title \column { - \vspace #6 - \fill-line { \fontsize #8 \italic \fromproperty #'header:composer } - \vspace #1 - \fill-line { \fontsize #8 \italic \fromproperty #'header:poet } - \vspace #6 - \fill-line { \fontsize #10 \fromproperty #'header:title } - \vspace #6 - \fill-line { \postscript #"-20 0 moveto 40 0 rlineto stroke" } - \vspace #6 - \fill-line { \fontsize #5 \fromproperty #'header:date } - \vspace #1 - \fill-line { - \when-property #'header:arrangement \column { - \vspace #5 - \fill-line { \fontsize #3 \fromproperty #'header:arrangement } - } - } - } - scoreTitleMarkup = \markup \null -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Table of contents -%%% -#(define-markup-command (paper-prop layout props name default) - (symbol? markup?) - "Get the value of a \\paper property, or defaults to some value" - (let ((val (ly:output-def-lookup layout name))) - (interpret-markup layout props (if (markup? val) - val - default)))) -\paper { - tocTitleMarkup = \markup \column { - \vspace #2 - \fontsize #6 \fill-line { \paper-prop #'tocTitle "TABLE OF CONTENTS" } - \vspace #2 - } - tocPieceMarkup = \markup \fill-line { - \line-width-ratio #0.7 \fill-line { - \line { \fromproperty #'toc:text } - \fromproperty #'toc:page - } - } - tocSectionMarkup = \markup \italic \column { - \fill-line { \fromproperty #'toc:text } - } - tocChapterMarkup = \markup \large \italic \column { - \vspace #1 - \fontsize #2 \fill-line { \fromproperty #'toc:text } - \vspace #1 - } -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Markup commands for page headers -%%% -#(define-public add-odd-page-header-text #f) -#(define-public add-even-page-header-text #f) -#(define header-markup-aux #f) -#(let ((odd-label-header-table (list)) - (odd-page-header-table (list)) - (even-label-header-table (list)) - (even-page-header-table (list))) - (set! header-markup-aux - (lambda (layout props odd) - (define (page-text page-number table) - (if (null? table) - "" - (let* ((elment (car table)) - (p (car elment)) - (text (cadr elment)) - (display-1st (caddr elment))) - (cond ((and (= page-number p) (not display-1st)) #f) - ((>= page-number p) text) - (else (page-text page-number (cdr table))))))) - (ly:make-stencil - `(delay-stencil-evaluation - ,(delay (ly:stencil-expr - (begin - (if (or (and odd (null? odd-page-header-table)) - (and (not odd) (null? even-page-header-table))) - (let ((page-header-table (list))) - (for-each (lambda (label-header) - (let* ((label (car label-header)) - (text-disp (cdr label-header)) - (table (ly:output-def-lookup layout 'label-page-table)) - (label-page (and (list? table) (assoc label table))) - (page-number (and label-page (cdr label-page))) - (prev-value (and page-number (assoc page-number page-header-table)))) - (if (not prev-value) - (set! page-header-table (cons (cons page-number text-disp) - page-header-table)) - (set! page-header-table - (assoc-set! page-header-table - page-number - (list (car text-disp) (caddr prev-value))))))) - (reverse (if odd odd-label-header-table even-label-header-table))) - (if odd - (set! odd-page-header-table page-header-table) - (set! even-page-header-table page-header-table)))) - (interpret-markup layout props - (let* ((page-number (chain-assoc-get 'page:page-number props -1)) - (text (page-text page-number (if odd odd-page-header-table even-page-header-table))) - (text-markup (markup #:italic (or text ""))) - (page-number-markup (number->string page-number))) - (cond ((or (= 1 page-number) (not text)) (markup #:null)) - (odd (markup #:fill-line (#:null text-markup page-number-markup))) - (else (markup #:fill-line (page-number-markup text-markup #:null)))))))))) - (cons 0 0) - (ly:stencil-extent (interpret-markup layout props "XXX") Y)))) - (set! add-odd-page-header-text - (lambda (parser text display-1st) - (let ((label (gensym "header"))) - (set! odd-label-header-table - (cons (list label text display-1st) - odd-label-header-table)) - (collect-music-for-book parser - (make-music 'Music - 'page-marker #t - 'page-label label))))) - (set! add-even-page-header-text - (lambda (parser text display-1st) - (let ((label (gensym "header"))) - (set! even-label-header-table - (cons (list label text display-1st) - even-label-header-table)) - (collect-music-for-book parser - (make-music 'Music - 'page-marker #t - 'page-label label)))))) - -#(define-markup-command (odd-header layout props) () - (header-markup-aux layout props #t)) - -#(define-markup-command (even-header layout props) () - (header-markup-aux layout props #f)) - -\paper { - evenHeaderMarkup = \markup \even-header - oddHeaderMarkup = \markup \odd-header -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Utilities for adding (no-)page breaks, toplevel markups -%%% -#(define (add-page-break parser) - (collect-music-for-book parser - (make-music 'Music - 'page-marker #t - 'line-break-permission 'force - 'page-break-permission 'force))) - -#(define (add-no-page-break parser) - (collect-music-for-book parser - (make-music 'Music - 'page-marker #t - 'page-break-permission 'forbid))) - -#(define (add-toplevel-markup parser text) - (collect-scores-for-book parser (list text))) - -#(define (add-toc-item parser markup-symbol text) - (collect-music-for-book parser - (add-toc-item! markup-symbol text))) - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Rehearsal numbers -%%% -#(define-public rehearsal-number #f) -#(define-public increase-rehearsal-major-number #f) -#(let ((major-number 0) - (minor-number 0)) - (set! increase-rehearsal-major-number - (lambda () - (set! major-number (1+ major-number)) - (set! minor-number 0))) - (set! rehearsal-number - (lambda () - (set! minor-number (1+ minor-number)) - (format #f "~a-~a" major-number minor-number)))) - -#(define-public (add-rehearsal-number parser) - (collect-scores-for-book parser - (list (markup #:huge #:bold (rehearsal-number))))) - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Commands -%%% - -#(use-modules (srfi srfi-39)) -#(define *book-title* (make-parameter "")) -#(define *use-rehearsal-numbers* (make-parameter #f)) - -useRehearsalNumbers = -#(define-music-function (parser location use-numbers) (boolean?) - (*use-rehearsal-numbers* use-numbers) - (make-music 'Music 'void #t)) - -bookTitle = -#(define-music-function (parser location title) (string?) - (*book-title* title) - (make-music 'Music 'void #t)) - -chapter = -#(define-music-function (parser location title) (string?) - (increase-rehearsal-major-number) - (add-page-break parser) - (add-toc-item parser 'tocChapterMarkup title) - (add-even-page-header-text parser (string-upper-case (*book-title*)) #f) - (add-odd-page-header-text parser (string-upper-case title) #f) - (add-toplevel-markup parser (markup #:chapter-title (string-upper-case title))) - (add-no-page-break parser) - (make-music 'Music 'void #t)) - -section = -#(define-music-function (parser location title) (string?) - (add-toc-item parser 'tocSectionMarkup title) - (add-toplevel-markup parser (markup #:section-title (string-upper-case title))) - (add-no-page-break parser) - (make-music 'Music 'void #t)) - -piece = -#(define-music-function (parser location title) (markup?) - (add-toc-item parser 'tocPieceMarkup title) - (add-no-page-break parser) - (if (*use-rehearsal-numbers*) - (add-toplevel-markup parser (markup #:rehearsal-number (rehearsal-number)))) - (add-no-page-break parser) - (make-music 'Music 'void #t)) - -titledPiece = -#(define-music-function (parser location title) (markup?) - (add-toc-item parser 'tocPieceMarkup title) - (if (*use-rehearsal-numbers*) - (add-toplevel-markup parser - (markup #:piece-title-with-number (rehearsal-number) (string-upper-case title))) - (add-toplevel-markup parser (markup #:piece-title (string-upper-case title)))) - (add-no-page-break parser) - (make-music 'Music 'void #t)) - -#(define-markup-command (chapter-title layout props title) (markup?) - (interpret-markup layout props - (markup #:column (#:vspace 3 - #:pad-markup 3 #:fill-line (#:fontsize 5 title))))) - -#(define-markup-command (section-title layout props title) (markup?) - (interpret-markup layout props - (markup #:column (#:vspace 1 - #:fill-line (#:fontsize 3 title) - #:vspace 1)))) - -#(define-markup-command (piece-title layout props title) (markup?) - (interpret-markup layout props - (markup #:fill-line (#:override '(line-width . 80) title)))) - -#(define-markup-command (rehearsal-number layout props number) (markup?) - (interpret-markup layout props - (markup #:huge #:bold number))) - -#(define-markup-command (piece-title-with-number layout props number title) - (markup? markup?) - (interpret-markup layout props - (markup #:rehearsal-number number - #:hspace 1 - #:huge title))) +%------------------------------------------------------------------% +% Opéra Libre -- text-functions.ly % +% % +% (c) Valentin Villenave, 2008 % +% % +%------------------------------------------------------------------% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%% Definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%% Graphic fine-tuning --------------------------------------------% + +#(define-markup-command (vspace layout props amount) (number?) + (let ((amount (* amount 3.0))) + (if (> amount 0) + (ly:make-stencil "" (cons -1 1) (cons 0 amount)) + (ly:make-stencil "" (cons -1 1) (cons amount amount))))) + +#(define-public (rounded-whiteout-stencil stencil blot) + (let* + ((x-ext (ly:stencil-extent stencil X)) + (y-ext (ly:stencil-extent stencil Y))) + (ly:stencil-add + (stencil-with-color (ly:round-filled-box x-ext y-ext blot) + white) + stencil))) + +#(define-markup-command (rounded-whiteout layout props radius arg) + (number? markup?) + (rounded-whiteout-stencil (interpret-markup layout props arg) radius)) + +%% Expressive indications -----------------------------------------% + +#(define-markup-command (indic layout props arg) (markup?) + (interpret-markup layout props + (markup #:rounded-whiteout 1 #:small #:italic arg))) + +%% Dynamics -------------------------------------------------------% + +%%% This function was provided by Graham Percival. +#(define (make-dynamic-extra dynamic string) + (make-music + 'AbsoluteDynamicEvent + 'tweaks + ;; calculate centering for text + (list (cons (quote X-offset) + (+ -0.5 (* -0.5 (string-length dynamic))))) + 'text + (markup + ;; uncomment next line for debugging + ;;#:box + #:line( + dynamic + #:hspace -0.3 + #:normal-text #:italic string)) + )) + +#(define (make-extra-dynamic string dynamic) + (make-music + 'AbsoluteDynamicEvent + 'tweaks + ;; calculate centering for text + (list (cons (quote X-offset) + (+ -0.5 (* -0.5 (string-length dynamic))))) + 'text + (markup + ;; uncomment next line for debugging + ;;#:box + #:line( + #:normal-text #:italic string + #:hspace -0.3 + #:dynamic dynamic)) + )) + +%%%%%%%%%%%%%%%%%%%%%%%%%% In-score Text %%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%% Composite Dynamics ---------------------------------------------% + +% because of the use of a music-function, +% non-predefined composite dynamics have to be entered *before* +% the affected beat (unlike standard or predefined dynamics). +cmb = +#(define-music-function (parser location dyn str) (string? string?) + (make-music 'SequentialMusic 'elements + (list + (make-music 'OverrideProperty + 'symbol 'DynamicText + 'grob-property-path (list 'self-alignment-X) + 'grob-value -0.6 'once #t) + (make-music 'AbsoluteDynamicEvent + 'text + (markup #:dynamic dyn + #:hspace .5 + #:text #:medium #:upright str))))) + +bmc = +#(define-music-function (parser location str dyn) (string? string?) + (make-music 'SequentialMusic 'elements + (list + (make-music 'OverrideProperty + 'symbol 'DynamicText + 'grob-property-path (list 'self-alignment-X) + 'grob-value -0.6 'once #t) + (make-music 'AbsoluteDynamicEvent + 'text + (markup #:text #:medium #:upright str + #:hspace .5 + #:dynamic dyn))))) + +%% Predefined commands + +ffsubito = #(make-dynamic-extra "ff" "subito") +fsubito = #(make-dynamic-extra "f" "subito") +mfsubito = #(make-dynamic-extra "mf" "subito") +fmolto = #(make-dynamic-extra "f" "molto") +psempre = #(make-dynamic-extra "p" "sempre") +ppsempre = #(make-dynamic-extra "pp" "sempre") +mfsempre = #(make-dynamic-extra "mf" "sempre") +mpsostenuto = #(make-dynamic-extra "mp" "sostenuto") +psubito = #(make-dynamic-extra "p" "subito") +pdolce = #(make-dynamic-extra "p" "dolce") +psubito = #(make-dynamic-extra "p" "subito") +ppsubito = #(make-dynamic-extra "pp" "subito") +mfleggiero = #(make-dynamic-extra "mf" "leggiero") +piuf = #(make-extra-dynamic "più" "f") +pocof = #(make-extra-dynamic "poco" "f") + + +%% Text indications -----------------------------------------------% + +ind = +#(define-music-function (parser location text music) (string? ly:music?) + (if + (equal? (ly:music-property music 'name) 'EventChord) + (set! (ly:music-property music 'elements) + (append (ly:music-property music 'elements) + (list (make-music 'TextScriptEvent 'direction 1 + 'text (markup #:indic text)))))) + music) + +nind = +#(define-music-function (parser location texte) +(string? ) +(make-dynamic-script + (markup #:text #:indic texte))) + +%% Predefined commands + +ten = +#(define-music-function (parser location music) (ly:music?) + (if + (equal? (ly:music-property music 'name) 'EventChord) + (set! (ly:music-property music 'elements) + (append (ly:music-property music 'elements) + (list (make-music 'TextScriptEvent 'text + (markup #:translate (cons 4 0) + #:indic "(ten.)")))))) + music) + + +pizz = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"pizz." $music #}) + +arco = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"arco" $music #}) + +flaut = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"flautando" $music #}) + +simile = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"simile" $music #}) + +loco = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"loco" $music #}) + +ordin = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"(ordin.)" $music #}) + +meno = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"meno" $music #}) + +jet = +#(define-music-function (parser location music) (ly:music?) +#{ \ind #"jeté" $music #}) + + +%% Text Spanners --------------------------------------------------% + +#(define (make-txt-span music t) + (set! (ly:music-property music 'elements) + (append (ly:music-property music 'elements) + (list (make-music 'TextSpanEvent + 'span-direction t)))) + music) + +%% The two following functions are deprecated. Better code follows below. +startTxt = +#(define-music-function (parser location texte music ) (string? ly:music?) +#{ \override TextSpanner #'bound-details #'left #'text = + \markup { \bold $texte } + $(make-txt-span music -1)#}) + +stopTxt = +#(define-music-function (parser location music) (ly:music?) + (make-txt-span music 1)) + +#(define (make-text-span txt) +"Make a TextSpanner that begins with the given STR." + (let* ((m (make-music 'TextSpanEvent + 'span-direction -1)) + (details (assoc-get 'bound-details + (assoc-get 'TextSpanner + all-grob-descriptions))) + (left-details (assoc-get 'left + details))) + (ly:music-set-property! m 'tweaks + (acons 'bound-details + (acons 'left + (acons 'text txt + left-details) + details) + (ly:music-property m 'tweaks))) + m)) + +startText= +#(define-music-function (location parser txt) (string?) +(make-text-span txt)) + +stopText= #(make-music 'TextSpanEvent 'span-direction 1) + +%% Predefined commands + +rit = #(make-text-span "rit.") + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Other Text %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%% Lyrics formatting ----------------------------------------------% + +freeStyleOn = { +\override Lyrics . LyricExtender #'stencil = ##f } + +freeStyleOff = { +\revert Lyrics . LyricExtender #'stencil } + +leftSyl = { +\once \override LyricText #'self-alignment-X = #0.9 } + +dash = { + \once \override LyricHyphen #'minimum-distance = #4 + \once \override LyricHyphen #'length = #2 + \once \override LyricHyphen #'thickness = #1.2 +} + +ital = { +\once \override LyricText #'font-shape = #'italic } + +smallcaps = { +\override LyricText #'font-shape = #'caps } + +normal = { +\revert LyricText #'font-shape } + + +%% Scenography formatting ---------------------------------------% +long = { +\once \override TextScript #'extra-spacing-width = #'(0 . 0) +\once \override TextScript #'infinite-spacing-height = ##t +} + +#(define-markup-command (did layout props text) (markup?) + (interpret-markup layout props + (markup #:override '(line-width . 40) + #:override '(box-padding . 1) + #:override '(corner-radius . 2) + #:rounded-box #:sans #:italic #:small #:justify-string text))) + +#(define-markup-command (init-did layout props text) (markup?) + (interpret-markup layout props + (markup + ; #:override (cons 'line-width (* 1 (chain-assoc-get 'line-width props))) + #:fill-line ( + #:override '(line-width . 60) + #:override '(box-padding . 1.5) + #:override '(corner-radius . 2) + #:rounded-box #:sans #:italic #:small #:justify-string text)))) + diff --git a/definitions/titling.ly b/definitions/titling.ly index a20db43..20a9e9c 100755 --- a/definitions/titling.ly +++ b/definitions/titling.ly @@ -8,87 +8,6 @@ %%% The following functions were provided by %%% Nicolas Sceaux %%% -%%% Options -%%% ======= -%%% use-rehearsal-numbers -%%% If #t, add rehearsal numbers to piece titles. -%%% -%%% Scheme functions -%%% ================ -%%% (add-toplevel-markup parser text) -%%% add a markup at current point. -%%% -%%% (add-toc-item parser markup-symbol text) -%%% add an item in the table of content, using markup style -%%% `markup-symbol' and `text', referencing the page occuring -%%% at current point. -%%% -%%% (rehearsal-number) -%%% return a new x.y rehearsal number. -%%% -%%% (increase-rehearsal-major-number) -%%% increase the major part of rehearsal numbers (ie the x in x.y) -%%% and reset the minor part. -%%% -%%% Markup commands -%%% =============== -%%% -%%% \act -%%% Markup command to be used for act titles -%%% -%%% \scene <title> -%%% Markup command to be used for scene titles -%%% -%%% \title <title> -%%% Markup command to be used for piece titles -%%% -%%% \scene-desription <markup> -%%% Markup command to be used for entering a scene description. -%%% -%%% Table of contexts \paper variables -%%% ================================== -%%% -%%% tocTitle -%%% a string used as the table of contents title -%%% -%%% tocPieceMarkup -%%% markup used for pieces -%%% -%%% tocSceneMarkup -%%% markup used for scene titles -%%% -%%% tocActMarkup -%%% markup used for act titles -%%% -%%% Music functions -%%% =============== -%%% Piece titling: -%%% -%%% \pieceToc <title-markup> -%%% add a piece title in the table of contents. -%%% -%%% \pieceTocTitle <title-string> -%%% add the piece title in the table of contents and at current -%%% point of the book (upper cased). -%%% -%%% \pieceTitle <title-string> -%%% add the upper cased piece title at the current point of the book. -%%% -%%% \pieceTocAndTitle <toc-markup> <title-markup> -%%% add a piece title in the table of content, and a different -%%% title at the current point of the book. -%%% -%%% Sectionning: -%%% -%%% \opusTitle <title-string> -%%% -%%% \ouverture <title-string> -%%% \act <title-string> -%%% \scene <title-string> -%%% \sceneDescription <description-markup> -%%% -%%% \actEnd -%%% Print an act end text. @@ -478,93 +397,155 @@ sceneDescription = } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Title page %%% \paper { bookTitleMarkup = \markup \when-property #'header:title \column { - \vspace #9 - \fill-line { \fontsize #11 \italic \fromproperty #'header:composer } + \vspace #6 + \fill-line { \fontsize #8 \italic \fromproperty #'header:composer } \vspace #1 - \fill-line { \fontsize #11 \italic \fromproperty #'header:poet } - \vspace #9 - \fill-line { \fontsize #13 \fromproperty #'header:title } - \vspace #9 + \fill-line { \fontsize #8 \italic \fromproperty #'header:poet } + \vspace #6 + \fill-line { \fontsize #10 \fromproperty #'header:title } + \vspace #6 \fill-line { \postscript #"-20 0 moveto 40 0 rlineto stroke" } - \vspace #9 - \fill-line { \fontsize #6 \fromproperty #'header:date } + \vspace #6 + \fill-line { \fontsize #5 \fromproperty #'header:date } \vspace #1 - \on-the-fly #(lambda (layout props arg) - (if (*part*) - (interpret-markup layout props - (markup #:fill-line (#:column (#:vspace 6 - #:fill-line (#:fontsize 6 (*part-name*)))))) - empty-stencil)) \fill-line { \when-property #'header:arrangement \column { - \vspace #6 + \vspace #5 \fill-line { \fontsize #3 \fromproperty #'header:arrangement } } } } + scoreTitleMarkup = \markup \null } - -\layout { - - - \context { - \Score - \override BarNumber #'padding = #2 - \override InstrumentName #'space-alist = #'((left-edge extra-space . 2.0)) - \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch - \accepts "StaffGroupNoBar" - skipBars = ##t - } - \context { - \StaffGroup - \name StaffGroupNoBar - \description "Like StaffGroup, but without spanbar" - \remove "Span_bar_engraver" - \accepts "StaffGroupNoBracket" - \accepts "InnerStaffGroup" - \accepts "InnerChoirStaff" - } - \context { - \StaffGroup - \name StaffGroupNoBracket - \description "Like StaffGroup, but without brackets" - \remove "System_start_delimiter_engraver" - } - \context { - \ChoirStaff - \consists "Instrument_name_engraver" +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Table of contents +%%% +#(define-markup-command (paper-prop layout props name default) + (symbol? markup?) + "Get the value of a \\paper property, or defaults to some value" + (let ((val (ly:output-def-lookup layout name))) + (interpret-markup layout props (if (markup? val) + val + default)))) +\paper { + tocTitleMarkup = \markup \column { + \vspace #2 + \fontsize #6 \fill-line { \paper-prop #'tocTitle "TABLE OF CONTENTS" } + \vspace #2 } - \context { - \Staff - \name Staff - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) - %% Figured bass - figuredBassAlterationDirection = #RIGHT - \override BassFigureAlignment #'stacking-dir = #UP - \override BassFigureAlignmentPositioning #'direction = #DOWN + tocPieceMarkup = \markup \fill-line { + \line-width-ratio #0.7 \fill-line { + \line { \fromproperty #'toc:text } + \fromproperty #'toc:page + } } - RemoveEmptyStaffContext = \context { - \Staff - \remove "Axis_group_engraver" - \consists "Hara_kiri_engraver" - \override Beam #'auto-knee-gap = #'() - \override VerticalAxisGroup #'remove-empty = ##t - \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) + tocSectionMarkup = \markup \italic \column { + \fill-line { \fromproperty #'toc:text } } - \context { - \Staff - \name SmallStaff - \description "Staff with small notes" - fontSize = #-2 - \override StaffSymbol #'staff-space = #(magstep -2) + tocChapterMarkup = \markup \large \italic \column { + \vspace #1 + \fontsize #2 \fill-line { \fromproperty #'toc:text } + \vspace #1 } } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Markup commands for page headers +%%% +#(define-public add-odd-page-header-text #f) +#(define-public add-even-page-header-text #f) +#(define header-markup-aux #f) +#(let ((odd-label-header-table (list)) + (odd-page-header-table (list)) + (even-label-header-table (list)) + (even-page-header-table (list))) + (set! header-markup-aux + (lambda (layout props odd) + (define (page-text page-number table) + (if (null? table) + "" + (let* ((elment (car table)) + (p (car elment)) + (text (cadr elment)) + (display-1st (caddr elment))) + (cond ((and (= page-number p) (not display-1st)) #f) + ((>= page-number p) text) + (else (page-text page-number (cdr table))))))) + (ly:make-stencil + `(delay-stencil-evaluation + ,(delay (ly:stencil-expr + (begin + (if (or (and odd (null? odd-page-header-table)) + (and (not odd) (null? even-page-header-table))) + (let ((page-header-table (list))) + (for-each (lambda (label-header) + (let* ((label (car label-header)) + (text-disp (cdr label-header)) + (table (ly:output-def-lookup layout 'label-page-table)) + (label-page (and (list? table) (assoc label table))) + (page-number (and label-page (cdr label-page))) + (prev-value (and page-number (assoc page-number page-header-table)))) + (if (not prev-value) + (set! page-header-table (cons (cons page-number text-disp) + page-header-table)) + (set! page-header-table + (assoc-set! page-header-table + page-number + (list (car text-disp) (caddr prev-value))))))) + (reverse (if odd odd-label-header-table even-label-header-table))) + (if odd + (set! odd-page-header-table page-header-table) + (set! even-page-header-table page-header-table)))) + (interpret-markup layout props + (let* ((page-number (chain-assoc-get 'page:page-number props -1)) + (text (page-text page-number (if odd odd-page-header-table even-page-header-table))) + (text-markup (markup #:italic (or text ""))) + (page-number-markup (number->string page-number))) + (cond ((or (= 1 page-number) (not text)) (markup #:null)) + (odd (markup #:fill-line (#:null text-markup page-number-markup))) + (else (markup #:fill-line (page-number-markup text-markup #:null)))))))))) + (cons 0 0) + (ly:stencil-extent (interpret-markup layout props "XXX") Y)))) + (set! add-odd-page-header-text + (lambda (parser text display-1st) + (let ((label (gensym "header"))) + (set! odd-label-header-table + (cons (list label text display-1st) + odd-label-header-table)) + (collect-music-for-book parser + (make-music 'Music + 'page-marker #t + 'page-label label))))) + (set! add-even-page-header-text + (lambda (parser text display-1st) + (let ((label (gensym "header"))) + (set! even-label-header-table + (cons (list label text display-1st) + even-label-header-table)) + (collect-music-for-book parser + (make-music 'Music + 'page-marker #t + 'page-label label)))))) + +#(define-markup-command (odd-header layout props) () + (header-markup-aux layout props #t)) + +#(define-markup-command (even-header layout props) () + (header-markup-aux layout props #f)) + +\paper { + evenHeaderMarkup = \markup \even-header + oddHeaderMarkup = \markup \odd-header +} + + + \header { maintainer = "Valentin Villenave" maintainerEmail = "v.villenave@gmail.com" diff --git a/full_score.ly b/full_score.ly index a5d530e..916ef84 100644 --- a/full_score.ly +++ b/full_score.ly @@ -13,12 +13,11 @@ \include "italiano.ly" -\include "./definitions/common.ly" \include "./definitions/functions.ly" +\include "./definitions/text-functions.ly" +\include "./definitions/graphics.ly" \include "./definitions/paper.ly" \include "./definitions/layout.ly" -\include "./definitions/markup.ly" -\include "./definitions/graphics.ly" \include "./texte/decoupage.ly" \include "./texte/personnages.ly" @@ -54,13 +53,6 @@ %%%%%%%%%%%%%%%%%% Paper and layout declarations %%%%%%%%%%%%%%%%%%% -\paper { - \includePaper - bookTitleMarkup = \NiceBookTitleMarkup - oddFooterMarkup = \NiceOddFooterMarkup - scoreTitleMarkup = \NiceScoreTitleMarkup -} - \layout { \includeLayout } @@ -1021,13 +1013,17 @@ ActeDeuxSceneDeux = { illustration = \Couronne scoretype = \FullScore copyright = \Copyright - } % + } + \pageBreak + \markup \BigNotice + \pageBreak + %{ \score { \Prologue \header { piece = \PrologueTitre } - } %{ + } % \score { \Ouverture \header { @@ -1081,13 +1077,13 @@ ActeDeuxSceneDeux = { \header { piece = \Separateur } - } % + } %} \score { \InterludeTrois \header { piece = \Interlude } - } % + } %{ \score { \ActeUnSceneQuatre \header { diff --git a/texte/decoupage.ly b/texte/decoupage.ly index bedf3b2..495b77e 100755 --- a/texte/decoupage.ly +++ b/texte/decoupage.ly @@ -6,7 +6,7 @@ %------------------------------------------------------------------% -OperaTitre= "Affaire Étrangère" +OperaTitre= "Affaire étrangère" OperaSousTitre= "Opéra en deux actes" OperaLivret= "Lewis Trondheim" OperaPartition= "Valentin Villenave" @@ -15,7 +15,7 @@ Copyright = "Lewis Trondheim et Valentin Villenave, 2008." BigNotice = \markup { \override #'(box-padding . 1.0) - \translate #'(-4 . -160) \fill-line { + \translate #'(-4 . -190) \fill-line { \box \center-column { \justify { © Lewis Trondheim et Valentin Villenave, 2008, @@ -27,9 +27,12 @@ BigNotice = \markup { Cette partition est publiée suivant les termes de la \with-url #"http://valentin.villenave.net/opera" \line { Licence Opéra Libre,} - version 0.2 ou ultérieure. Vous pouvez la copier, + version 0.2 ou ultérieure, (dont le texte intégral est + consultable dans le code source ou à + l'adresse \with-url #"http://valentin.villenave.net/opera" + \line { valentin.villenave.net/opera }). Vous pouvez la copier, la modifier et la jouer - librement ; dans sa version actuelle, + librement. Dans sa version actuelle, cette licence n'autorise aucun usage commercial de l'histoire ou des personnages. Veuillez contacter l'un des auteurs si vous souhaitez en faire un tel usage. diff --git a/vocal_score.ly b/vocal_score.ly index 67d86e4..f28134e 100644 --- a/vocal_score.ly +++ b/vocal_score.ly @@ -14,12 +14,11 @@ \include "italiano.ly" -\include "./definitions/common.ly" \include "./definitions/functions.ly" +\include "./definitions/text-functions.ly" +\include "./definitions/graphics.ly" \include "./definitions/paper.ly" \include "./definitions/layout.ly" -\include "./definitions/markup.ly" -\include "./definitions/graphics.ly" \include "./texte/decoupage.ly" \include "./texte/personnages.ly" @@ -40,77 +39,22 @@ %%%%%%%%%%%%%%%%%% Paper and layout declarations %%%%%%%%%%%%%%%%%%% -\paper { - \includePaper - bookTitleMarkup = \markup { - \vspace #20 - \override #'(baseline-skip . 3.5) - \column { - \combine - \column { - \fill-line { - \fontsize #5 \sans \fromproperty #'header:libretto - \null - } - \vspace #4 - \line { \fontsize #15 " " } - \vspace #4 - \fill-line { - \null - \fontsize #5 \sans \fromproperty #'header:composer - } - } - \column { - \line { \fontsize #5 " " } - \vspace #4 - \fill-line { - \fontsize #15 \sans \italic \fromproperty #'header:title - } - \fill-line { - \fontsize #2 \sans \fromproperty #'header:subtitle - } - } - \vspace #4 - \fill-line { - \fromproperty #'header:illustration - } - } - } - oddFooterMarkup = \markup { - \column { - \fill-line { - %% Copyright header field only on first page. - \on-the-fly #first-page - \fontsize #2 \sans \rounded-box\fromproperty #'header:scoretype - } - \vspace #1 - \fill-line { - \on-the-fly #first-page - \fontsize #1 \sans \fromproperty #'header:copyright - } - - \fill-line { - %% Tagline header field only on last page. - \on-the-fly #last-page \fromproperty #'header:tagline - } - } -} - scoreTitleMarkup = \markup { \column { - \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 } - \fill-line { - \fontsize #6 \fromproperty #'header:piece - } - } +\layout { + \includeLayout } +#(ly:set-option 'point-and-click #f) - %% FIXME : a bug to be reported. - systemSeparatorMarkup = "" -} -\layout { - \includeLayout +%%%% FIXME: Remove this + +PianoDynamics = { + \override Dynamics.TimeSignature #'font-size = #1 + \override Dynamics.VerticalAxisGroup #'minimum-Y-extent = #'(-1.5 . 1.5 ) } + + + %%%%%%%%%%%%%%%%%% Scene-by-scene music inclusion %%%%%%%%%%%%%%%%%% Prologue = { diff --git a/voix/contralto.ly b/voix/contralto.ly index d46dd28..988c0a4 100755 --- a/voix/contralto.ly +++ b/voix/contralto.ly @@ -109,7 +109,31 @@ ActeUnSceneQuatreContralto = { \Contralto } } -EntracteContralto = { +EntracteContralto = { \Contralto + \relative { + R2*9 R1*38 R2. R1 + R1*2 R2.*2 R2 R1 R2.*2 R1*2 R2.*2 R1*2 R2.*2 R1*2 R2.*2 R1*2 R2.*2 + R1*14 + R2.-\fermataMarkup + + fad4 red8 r r4 R2. fad4 red8 r r4 R2. | R2 fad4 red8 r r4 | + r fad red8 r r4 | r2 fad8 red r2 | + r2 r4 r8 fad | R1 fad4 red8 r r2 | + R1*2 r2 fad4 red8 r r2 | + r2 r4 fad red8 r r4 | + si8 si4 si si si8 r si si si | + si8 si4 si si si8 r si si si | + si8 si4 si8 si si4 si8 | R2. + + %%% A tempo %%% + la2.~ la~ la~ la2 r4 | R2.*4 R2.-\fermataMarkup | + + %%% Poco più %%% + la2.~ la~ la~ la2 r4 | R2.-\fermataMarkup | + + %%% Andantino %%% + la'1 la4 mi8 r | + } } ActeDeuxSceneUnContralto= { \Contralto -- 2.11.4.GIT