X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fgregorian.ly;h=e4d34f6e4c9bb37f1b02e7ccb444279f2623ba23;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=f2b6e55bfccac9add9c20af937e3ae60445933cf;hpb=e344ae579fa1d81fc6c6f3049494697872fd39f9;p=lilypond.git diff --git a/ly/gregorian.ly b/ly/gregorian.ly index f2b6e55bfc..e4d34f6e4c 100644 --- a/ly/gregorian.ly +++ b/ly/gregorian.ly @@ -3,12 +3,12 @@ $Id$ %} -\version "2.10.0" +\version "2.19.22" % % Declare memorable shortcuts for special unicode characters % that are used in chant notation. -% +% % unicode 0132 (latin capital ligature IJ) IJ = \lyricmode { IJ } @@ -22,122 +22,118 @@ iij = \lyricmode { iij } % Given some music that represents lyrics, add a prefix to the first % lyric event. % -% TODO: Robustify this function. For example, this function works -% correctly for "\versus { some lyrics }", but it barfs with a wrong type -% argument error for e.g. "\versus some lyrics". -% #(define (add-prefix-to-lyrics prefix music) - (make-music - 'SequentialMusic - 'elements (append - (cons - (let* ((elems (car (ly:music-property music 'elements))) - (props (ly:music-mutable-properties elems)) - (events (filter (lambda (x) - (equal? (car x) 'elements)) - props)) - (first-evt (cadar events)) - (first-syllable (ly:prob-property first-evt 'text)) - (first-duration (ly:prob-property first-evt 'duration))) - (make-music - 'LyricEvent - 'duration first-duration - 'text (string-append prefix first-syllable))) - (cdr (ly:music-property music 'elements)))))) + (let ((found? #f)) + (map-some-music + (lambda (m) + (if found? m + (and (music-is-of-type? m 'lyric-event) + (begin + (set! (ly:music-property m 'text) + (string-append prefix (ly:music-property m 'text))) + (set! found? #t) + m)))) + music))) % Add unicode 2123 (versicle) as prefix to lyrics. versus = -#(define-music-function (parser location music) (ly:music?) +#(define-music-function (music) (ly:music?) (add-prefix-to-lyrics "℣" music)) % Add unicode 211F (response) as prefix to lyrics. responsum = -#(define-music-function (parser location music) (ly:music?) +#(define-music-function (music) (ly:music?) (add-prefix-to-lyrics "℟" music)) % % Declare head prefix shortcuts. % virga = - \once \override NoteHead #'virga = ##t + \once \override NoteHead.virga = ##t stropha = - \once \override NoteHead #'stropha = ##t + \once \override NoteHead.stropha = ##t inclinatum = - \once \override NoteHead #'inclinatum = ##t + \once \override NoteHead.inclinatum = ##t auctum = - \once \override NoteHead #'auctum = ##t + \once \override NoteHead.auctum = ##t descendens = - \once \override NoteHead #'descendens = ##t + \once \override NoteHead.descendens = ##t ascendens = - \once \override NoteHead #'ascendens = ##t + \once \override NoteHead.ascendens = ##t pes = - \once \override NoteHead #'pes-or-flexa = ##t + \once \override NoteHead.pes-or-flexa = ##t flexa = - \once \override NoteHead #'pes-or-flexa = ##t + \once \override NoteHead.pes-or-flexa = ##t oriscus = - \once \override NoteHead #'oriscus = ##t + \once \override NoteHead.oriscus = ##t quilisma = - \once \override NoteHead #'quilisma = ##t + \once \override NoteHead.quilisma = ##t deminutum = - \once \override NoteHead #'deminutum = ##t + \once \override NoteHead.deminutum = ##t linea = - \once \override NoteHead #'linea = ##t + \once \override NoteHead.linea = ##t cavum = - \once \override NoteHead #'cavum = ##t + \once \override NoteHead.cavum = ##t % % Declare divisiones shortcuts. % virgula = { - \once \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rcomma") - \once \override BreathingSign #'font-size = #-2 + \once \override BreathingSign.text = #(make-musicglyph-markup "scripts.rcomma") + \once \override BreathingSign.font-size = #-2 % Workaround: add padding. Correct fix would be spacing engine handle this. - \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0) + \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5) \breathe } caesura = { - \once \override BreathingSign #'text = #(make-musicglyph-markup "scripts.rvarcomma") - \once \override BreathingSign #'font-size = #-2 + \once \override BreathingSign.text = #(make-musicglyph-markup "scripts.rvarcomma") + \once \override BreathingSign.font-size = #-2 % Workaround: add padding. Correct fix would be spacing engine handle this. - \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0) + \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5) \breathe } divisioMinima = { - \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-minima + \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima % Workaround: add padding. Correct fix would be spacing engine handle this. - \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0) + \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5) \breathe } divisioMaior = { - \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maior - \once \override BreathingSign #'Y-offset = #0 + \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maior + \once \override BreathingSign.Y-offset = #0 % Workaround: add padding. Correct fix would be spacing engine handle this. - \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0) + \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5) \breathe } divisioMaxima = { - \once \override BreathingSign #'stencil = #ly:breathing-sign::divisio-maxima - \once \override BreathingSign #'Y-offset = #0 + \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-maxima + \once \override BreathingSign.Y-offset = #0 % Workaround: add padding. Correct fix would be spacing engine handle this. - \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0) + \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5) \breathe } finalis = { - \once \override BreathingSign #'stencil = #ly:breathing-sign::finalis - \once \override BreathingSign #'Y-offset = #0 + \once \override BreathingSign.stencil = #ly:breathing-sign::finalis + \once \override BreathingSign.Y-offset = #0 % Workaround: add padding. Correct fix would be spacing engine handle this. - \once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0) + \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0) + \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5) \breathe } @@ -149,15 +145,13 @@ accentus = #(make-articulation "accentus") ictus = #(make-articulation "ictus") semicirculus = #(make-articulation "semicirculus") circulus = #(make-articulation "circulus") -episemInitium = \startTextSpan -episemFinis = \stopTextSpan % % \augmentum increases the dot-count value of all note heads to which % it is applied by one. % augmentum = -#(define-music-function (parser location expr) (ly:music?) +#(define-music-function (expr) (ly:music?) (shift-duration-log expr 0 1)) % @@ -167,25 +161,25 @@ augmentum = #(define (make-ligature music) (make-music 'SequentialMusic - 'elements (append - (cons - (make-music 'EventChord - 'elements (list - (make-span-event 'LigatureEvent START))) - (ly:music-property music 'elements)) - (list - (make-music 'EventChord - 'elements (list - (make-span-event 'LigatureEvent STOP))))))) + 'elements (append + (cons + (make-music 'EventChord + 'elements (list + (make-span-event 'LigatureEvent START))) + (ly:music-property music 'elements)) + (list + (make-music 'EventChord + 'elements (list + (make-span-event 'LigatureEvent STOP))))))) ligature = #(define-music-function - (location music) (ly:music?) - (make-ligature music)) + (location music) (ly:music?) + (make-ligature music)) %#(define (make-script x) % (make-music 'ArticulationEvent % 'articulation-type x)) -% +% %#(define (add-script m x) % (if % (equal? (ly:music-property m 'name) 'EventChord) @@ -206,10 +200,10 @@ ligature = #(define-music-function % `(define-music-function (location music) (ly:music?) % (make-music 'SequentialMusic % 'elements (list 'LigatureStartEvent -% (ly:music-deep-copy ,start) +% (ly:music-deep-copy ,start) % music % (ly:music-deep-copy ,stop) -% 'LigatureStopEvent)))) +% 'LigatureStopEvent)))) %climacus = #(def-climacus-function startSequentialMusic stopSequentialMusic) % @@ -224,57 +218,53 @@ ligature = #(define-music-function \layout { indent = 0.0 - %%% TODO: should raggedright be the default? + %%% TODO: should ragged-right be the default? %ragged-right = ##t ragged-last = ##t - %%% FIXME: line-thickness should be set here to a slightly - %%% thicker value as the default; but we can not set it here, - %%% since neither \staff-space nor #staff-space is yet defined - %%% when lily comes across the following line. - %line-thickness = \staff-space / 7.0 + line-thickness = #(/ (ly:output-def-lookup $defaultpaper 'staff-space) 7.0) \context { - \VaticanaStaff - \override StaffSymbol #'color = #red - \override LedgerLineSpanner #'color = #red + \VaticanaStaff + \override StaffSymbol.color = #red + \override LedgerLineSpanner.color = #red } \context { - \Score - \remove "Bar_number_engraver" - - %%% - %%% FIXME: Musicologically seen, timing should be set to #f. - %%% Unfortunately, setting it to #f will result in no - %%% line-breakable items being created, such that the whole - %%% music will end up in a single line. Therefore, we - %%% currently set it to #t, until the ligature code is fixed - %%% to automatically insert breakable items. - %%% - timing = ##t - - %%% - %%% FIXME: Setting barAlways to #t would fix the above - %%% "timing = ##t" problem, but, surprisingly, it increases - %%% the space between ligatures. Hence, we set it to #f. - %%% - barAlways = ##f - - \override SpacingSpanner #'packed-spacing = ##t - - %%% - %%% TODO: Play around with the following SpacingSpanner - %%% settings to yield better spacing between ligatures. - %%% - %%% FIXME: setting #'spacing-increment to a small value - %%% causes tons of "programming error: adding reverse spring, - %%% setting to unit" messages. - %%% - %\override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 4) - %\override SpacingSpanner #'shortest-duration-space = #0 - %\override SpacingSpanner #'average-spacing-wishes = ##f - %\override SpacingSpanner #'spacing-increment = #0.0 - %\override SpacingSpanner #'uniform-stretching = ##t + \Score + \remove "Bar_number_engraver" + + %%% + %%% FIXME: Musicologically seen, timing should be set to #f. + %%% Unfortunately, setting it to #f will result in no + %%% line-breakable items being created, such that the whole + %%% music will end up in a single line. Therefore, we + %%% currently set it to #t, until the ligature code is fixed + %%% to automatically insert breakable items. + %%% + timing = ##t + + %%% + %%% FIXME: Setting barAlways to #t would fix the above + %%% "timing = ##t" problem, but, surprisingly, it increases + %%% the space between ligatures. Hence, we set it to #f. + %%% + barAlways = ##f + + \override SpacingSpanner.packed-spacing = ##t + + %%% + %%% TODO: Play around with the following SpacingSpanner + %%% settings to yield better spacing between ligatures. + %%% + %%% FIXME: setting #'spacing-increment to a small value + %%% causes tons of "programming error: adding reverse spring, + %%% setting to unit" messages. + %%% + %\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/4) + %\override SpacingSpanner.shortest-duration-space = #0 + %\override SpacingSpanner.average-spacing-wishes = ##f + %\override SpacingSpanner.spacing-increment = #0.0 + %\override SpacingSpanner.uniform-stretching = ##t } } @@ -288,24 +278,24 @@ ligature = #(define-music-function neumeDemoLayout = \layout { interscoreline = 1 \context { - \Score - \remove "Bar_number_engraver" + \Score + \remove "Bar_number_engraver" } \context { - \Staff - \remove "Clef_engraver" - \remove "Key_engraver" - \override StaffSymbol #'transparent = ##t - \remove "Time_signature_engraver" - \remove "Bar_engraver" - \override VerticalAxisGroup #'minimum-Y-extent = ##f + \Staff + \remove "Clef_engraver" + \remove "Key_engraver" + \hide StaffSymbol + \remove "Time_signature_engraver" + \remove "Bar_engraver" + \override VerticalAxisGroup.staff-staff-spacing = #'() } \context { - \Voice - \remove Ligature_bracket_engraver - \consists Vaticana_ligature_engraver - \override NoteHead #'style = #'vaticana.punctum - \override Stem #'transparent = ##t + \Voice + \remove "Ligature_bracket_engraver" + \consists "Vaticana_ligature_engraver" + \override NoteHead.style = #'vaticana.punctum + \hide Stem } }