Compare commits
14 Commits
410b8b4b4f
...
filter-aut
| Author | SHA1 | Date | |
|---|---|---|---|
| 782b8d3fd7 | |||
| 71c8c0385c | |||
| f075946777 | |||
| a0de02126c | |||
| 7ece3b9c10 | |||
| 7fc99e8883 | |||
| b3feb3aa6d | |||
| 7b166f6fc3 | |||
| 9c437d0f06 | |||
| a52f993678 | |||
| bbd6d44455 | |||
| f68e2f10ae | |||
| 463d61fbd9 | |||
| 2d14a5b632 |
@@ -56,3 +56,5 @@ TEXT_PAGES = #f
|
||||
verseChords = {}
|
||||
firstVoice = {}
|
||||
global = {}
|
||||
|
||||
\resetTagGroups
|
||||
|
||||
@@ -29,6 +29,11 @@
|
||||
(if (null? stanzanumbers)
|
||||
refString
|
||||
(ly:format refStringWithNumbers (string-join (map (lambda (stanzanumber) (ly:format "~a" stanzanumber)) stanzanumbers) ", ")))))
|
||||
bridgeMarkupFormatter = #(lambda (layout props stanzanumbers)
|
||||
(interpret-markup layout props
|
||||
(if (null? stanzanumbers)
|
||||
bridgeString
|
||||
(ly:format bridgeStringWithNumbers (string-join (map (lambda (stanzanumber) (ly:format "~a" stanzanumber)) stanzanumbers) ", ")))))
|
||||
}
|
||||
|
||||
generalLayout = \layout {
|
||||
@@ -79,6 +84,11 @@ generalLayout = \layout {
|
||||
}
|
||||
}
|
||||
|
||||
#(define (customized-layout base-layout)
|
||||
(let
|
||||
((custom-size (ly:output-def-lookup base-layout 'size #f)))
|
||||
(if custom-size (layout-set-staff-size custom-size))))
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%% kleine Helferlein:
|
||||
|
||||
@@ -139,10 +149,11 @@ override-stanza =
|
||||
(stanza-style (ly:assoc-get 'style (ly:context-grob-definition context 'StanzaNumber)))
|
||||
(roman-format (lambda (stanzanumber) (format #f "~@r" stanzanumber))))
|
||||
(ly:context-set-property! context 'stanza
|
||||
(number-formater
|
||||
(if (eq? stanza-style 'roman)
|
||||
(map roman-format stanzanumbers)
|
||||
stanzanumbers)))))
|
||||
(make-pad-left-markup 1
|
||||
(number-formater
|
||||
(if (eq? stanza-style 'roman)
|
||||
(map roman-format stanzanumbers)
|
||||
stanzanumbers))))))
|
||||
|
||||
#(define (stanza . stanzanumbers)
|
||||
#{
|
||||
@@ -171,6 +182,23 @@ ref =
|
||||
#}
|
||||
)
|
||||
|
||||
bridge =
|
||||
#(define-music-function (stanzanumbers lyrics) ((number-list? (list)) ly:music?)
|
||||
#{ \lyricmode {
|
||||
\once \override StanzaNumber.details.custom-realstanza = ##t % set this to signal that there is a real stanza and no repeat signs
|
||||
\applyContext
|
||||
#(lambda (context)
|
||||
(handle-stanza-numbers context stanzanumbers
|
||||
(lambda (numbers)
|
||||
(make-on-the-fly-markup
|
||||
(lambda (layout props m)
|
||||
((ly:output-def-lookup layout 'bridgeMarkupFormatter) layout props numbers))
|
||||
(make-null-markup)))))
|
||||
#lyrics
|
||||
}
|
||||
#}
|
||||
)
|
||||
|
||||
% prints a repStart Sign as stanza if the tag 'repeats is kept.
|
||||
% if there was a stanza already set by the stanza function with StanzaNumber.details.custom-realstanza = ##t we set that also as stanza.
|
||||
repStartWithTag = \lyricmode {
|
||||
@@ -194,7 +222,7 @@ repStopWithTag = \lyricmode {
|
||||
\tag #'repeats {
|
||||
\once \override StanzaNumber.font-series = #'normal
|
||||
\once \override StanzaNumber.direction = 1
|
||||
\set stanza = \markup { \repStop }
|
||||
\set stanza = \markup { \pad-x-right #1 \repStop }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,4 +305,18 @@ rufWithMarkup =
|
||||
#})
|
||||
ruf =
|
||||
#(define-music-function (text) (string?)
|
||||
(rufWithMarkup (make-ruf-style-markup text)))
|
||||
(rufWithMarkup (make-ruf-style-markup text)))
|
||||
|
||||
underlineOn =
|
||||
#(define-music-function () ()
|
||||
#{
|
||||
\override LyricText.stencil =
|
||||
#(lambda (grob)
|
||||
(grob-interpret-markup grob (make-underline-markup (ly:grob-property grob 'text))))
|
||||
#})
|
||||
|
||||
underlineOff =
|
||||
#(define-music-function () ()
|
||||
#{
|
||||
\revert LyricText.stencil
|
||||
#})
|
||||
|
||||
@@ -80,41 +80,8 @@ capoTranspose =
|
||||
(ly:make-pitch 0 0)
|
||||
chords))
|
||||
|
||||
% kleine Mollakkorde und Alteration ausgeschrieben
|
||||
#(define (note-name->german-markup-nosym pitch lowercase?)
|
||||
(define (pitch-alteration-semitones pitch) (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))
|
||||
(define (accidental->markup alteration name)
|
||||
(if (= alteration 0)
|
||||
(make-line-markup (list empty-markup))
|
||||
(if (= alteration FLAT)
|
||||
(if (equal? name "B")
|
||||
""
|
||||
; (make-line-markup (list (make-hspace-markup 0.2)
|
||||
; (make-tiny-markup (make-raise-markup 1.2
|
||||
; (make-musicglyph-markup (assoc-get alteration standard-alteration-glyph-name-alist ""))))
|
||||
; ))
|
||||
(if (or (equal? name "E") (equal? name "A")) "s" "es"))
|
||||
"is")
|
||||
))
|
||||
(define (conditional-string-downcase str condition)
|
||||
(if condition (string-downcase str) str))
|
||||
|
||||
(let* ((name (ly:pitch-notename pitch))
|
||||
(alt-semitones (pitch-alteration-semitones pitch))
|
||||
(n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
|
||||
(cons 7 (+ 0 alt-semitones))
|
||||
(cons name alt-semitones))))
|
||||
(make-line-markup
|
||||
(list
|
||||
(make-simple-markup
|
||||
(conditional-string-downcase
|
||||
(vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
|
||||
lowercase?))
|
||||
(accidental->markup (/ (cdr n-a) 2) (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a)) ))))
|
||||
)
|
||||
|
||||
% additional bass notes should get uppercased
|
||||
#(define (bassnote-name->german-markup-nosym pitch lowercase?)(note-name->german-markup-nosym pitch #f))
|
||||
#(define (bassnote-name->german-markup-nosym pitch lowercase?)((chord-name:name-markup 'deutsch) pitch #f))
|
||||
|
||||
defaultChordPrintings = {
|
||||
<c g>-\markup { \super "5" }
|
||||
@@ -157,15 +124,15 @@ generalLayout = \layout {
|
||||
\generalLayout
|
||||
\context {
|
||||
\ChordNames
|
||||
\semiGermanChords
|
||||
\override ChordName.font-size = \songScoreChordFontSize
|
||||
\override ChordName.font-series = \songChordFontSeries
|
||||
\override ChordName.font-family = #'serif
|
||||
chordNameLowercaseMinor = ##t
|
||||
chordChanges = ##t
|
||||
% eigenen chordRootNamer damit F# = Fis und Gb = Ges (also alteration ausgeschrieben)
|
||||
chordRootNamer = #note-name->german-markup-nosym
|
||||
chordRootNamer = #(chord-name:name-markup 'deutsch)
|
||||
chordNoteNamer = #bassnote-name->german-markup-nosym
|
||||
additionalPitchPrefix = ""
|
||||
|
||||
majorSevenSymbol = "maj7"
|
||||
chordNameExceptions = \chordNameExceptions
|
||||
}
|
||||
@@ -214,4 +181,4 @@ Ignoring_newline_chord_changes_engraver =
|
||||
((chord-name-interface this-engraver grob source-engraver)
|
||||
(when (and (ly:context-property ctx 'chordChanges #f) (ly:grob-property grob 'begin-of-line-visible #f))
|
||||
(ly:grob-suicide! grob)
|
||||
)))))
|
||||
)))))
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
poetPrefix = "Worte:"
|
||||
composerPrefix = "Weise:"
|
||||
compositionPrefix = "Satz:"
|
||||
adaptionTextPrefix = "Bearbeitung Text:"
|
||||
adaptionMusicPrefix = "Bearbeitung Musik:"
|
||||
adaptionTextPrefix = "Bearbeitung:"
|
||||
adaptionMusicPrefix = "Bearbeitung:"
|
||||
poetAndComposerEqualPrefix = "Worte und Weise:"
|
||||
voicePrefix = "Stimme:"
|
||||
versePrefix = "Strophe:"
|
||||
@@ -12,6 +12,7 @@
|
||||
pronunciationPrefix = "Aussprache:"
|
||||
interludePrefix = "Zwischenspiel:"
|
||||
bridgePrefix = "Bridge:"
|
||||
author-joiner = #(lambda (author-list) (string-join author-list ", "))
|
||||
|
||||
authorFormat =
|
||||
#(lambda (noDetails name trail_name birth_year death_year organization)
|
||||
@@ -31,6 +32,105 @@
|
||||
""
|
||||
)))
|
||||
|
||||
authorContributionFormat =
|
||||
#(lambda* (render-contribution-group render-partial-contribution-group #:key
|
||||
(poetIds '())
|
||||
(translatorIds '())
|
||||
(versePoetData '())
|
||||
(composerIds '())
|
||||
(verseComposerData '())
|
||||
(voiceComposerData '())
|
||||
(compositionIds '())
|
||||
(adaptionTextIds '())
|
||||
(adaptionMusicIds '())
|
||||
(bridgeIds '())
|
||||
(interludeIds '())
|
||||
(year_text #f)
|
||||
(year_translation #f)
|
||||
(year_melody #f)
|
||||
(year_composition #f)
|
||||
(year_adaption_text #f)
|
||||
(year_adaption_music #f)
|
||||
(poetAndComposerEqualPrefix "")
|
||||
(poetPrefix "")
|
||||
(composerPrefix "")
|
||||
(translationAuthorPrefix "")
|
||||
(pronunciationPrefix "")
|
||||
(compositionPrefix "")
|
||||
(adaptionTextPrefix "")
|
||||
(adaptionMusicPrefix "")
|
||||
(bridgePrefix "")
|
||||
(interludePrefix ""))
|
||||
(if (and
|
||||
(equal? poetIds composerIds)
|
||||
(null? translatorIds)
|
||||
(null? versePoetData)
|
||||
(null? verseComposerData)
|
||||
(null? voiceComposerData)
|
||||
(null? compositionIds)
|
||||
(null? adaptionTextIds)
|
||||
(null? adaptionMusicIds)
|
||||
(null? bridgeIds)
|
||||
(null? interludeIds))
|
||||
(list
|
||||
(join-present (list
|
||||
(render-contribution-group poetAndComposerEqualPrefix poetIds)
|
||||
(if (equal? year_text year_melody) year_text (join-present (list year_text year_melody) "/"))
|
||||
) ", ")
|
||||
#f)
|
||||
(list
|
||||
(if (and (null? poetIds) (null? versePoetData) (null? translatorIds)) #f
|
||||
(string-append
|
||||
poetPrefix
|
||||
" "
|
||||
(join-present (list
|
||||
(join-present (list
|
||||
(render-contribution-group "" poetIds)
|
||||
year_text
|
||||
) ", ")
|
||||
(render-partial-contribution-group 'versePrefix versePoetData)
|
||||
(join-present (list
|
||||
(render-contribution-group adaptionTextPrefix adaptionTextIds)
|
||||
year_adaption_text
|
||||
) ", ")
|
||||
(join-present (list
|
||||
(render-contribution-group translationAuthorPrefix translatorIds)
|
||||
year_translation
|
||||
) ", ")
|
||||
) "; ")
|
||||
))
|
||||
(if (and
|
||||
(null? composerIds)
|
||||
(null? compositionIds)
|
||||
(null? adaptionMusicIds)
|
||||
(null? verseComposerData)
|
||||
(null? voiceComposerData)
|
||||
(null? bridgeIds)
|
||||
(null? interludeIds)) #f
|
||||
(string-append
|
||||
composerPrefix
|
||||
" "
|
||||
(join-present (list
|
||||
(join-present (list
|
||||
(render-contribution-group "" composerIds)
|
||||
year_melody
|
||||
) ", ")
|
||||
(render-partial-contribution-group 'versePrefix verseComposerData)
|
||||
(render-partial-contribution-group 'voicePrefix voiceComposerData)
|
||||
(join-present (list
|
||||
(render-contribution-group compositionPrefix compositionIds)
|
||||
year_composition
|
||||
) ", ")
|
||||
(join-present (list
|
||||
(render-contribution-group adaptionMusicPrefix adaptionMusicIds)
|
||||
year_adaption_music
|
||||
) ", ")
|
||||
(render-contribution-group bridgePrefix bridgeIds)
|
||||
(render-contribution-group interludePrefix interludeIds)
|
||||
) "; ")
|
||||
)))))
|
||||
|
||||
|
||||
songinfoMarkup =
|
||||
#(make-on-the-fly-markup
|
||||
(lambda (layout props m)
|
||||
@@ -45,13 +145,15 @@
|
||||
(year_melody (chain-assoc-get 'songinfo:year_melody props #f))
|
||||
(poet-with-year (if (and poet-maybe-with-composer year_text) (string-append poet-maybe-with-composer ", " year_text) poet-maybe-with-composer))
|
||||
(composer-with-year (if (and composer year_melody) (string-append composer ", " year_melody) composer))
|
||||
(concat-markupped-strings (lambda (text)
|
||||
(ly:regex-replace (ly:make-regex "(\\S+)(\\\\\\w+(?:\\s+\\[^\\{\\s]*|\\s*\\{[^\\}]*\\}))(\\S*)") text "\\concat {" 1 "\\line {" 2 "}" 3 "}")))
|
||||
(string-with-paragraphs->markuplist (lambda (prefix text)
|
||||
(if text
|
||||
(apply append
|
||||
(map
|
||||
(lambda (paragraph)
|
||||
(make-wordwrap-internal-markup-list #t
|
||||
#{ \markuplist { $(ly:parser-include-string paragraph) } #}))
|
||||
#{ \markuplist { $(ly:parser-include-string (concat-markupped-strings paragraph)) } #}))
|
||||
(ly:regex-split (ly:make-regex "\r?\n[ \t\r\n]*\n[ \t\r\n]*") (string-append prefix text))))
|
||||
'())))
|
||||
(poet-and-composer-markup-list
|
||||
@@ -75,4 +177,4 @@
|
||||
)))))
|
||||
(make-null-markup)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ lyricSize = 1.6
|
||||
stanzaFormat = "~a."
|
||||
refString = "Ref.:"
|
||||
refStringWithNumbers = "Ref. ~a:"
|
||||
bridgeString = "Bridge:"
|
||||
bridgeStringWithNumbers = "Bridge ~a:"
|
||||
% hübsche Wiederholungszeichen für den Liedtext
|
||||
repStart = "𝄆"
|
||||
repStop = "𝄇"
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
(lambda (a b) (< (cadr a) (cadr b))))
|
||||
(list)))
|
||||
|
||||
#(define (join-present items joiner)
|
||||
(string-join (filter (lambda (item) (and (string? item) (not (string-null? (string-trim-both item))))) items) joiner))
|
||||
|
||||
#(define-markup-command (print-songinfo layout props) ()
|
||||
(define (songinfo-from songId key)
|
||||
(let ((song (if (defined? 'SONG_DATA) (assoc-ref SONG_DATA songId) #f)))
|
||||
@@ -74,11 +77,7 @@
|
||||
(define (render-contribution-group contributionPrefix authorIds)
|
||||
(if (null? authorIds)
|
||||
""
|
||||
(string-append contributionPrefix " " (string-join (format-authors authorIds) ", ")))
|
||||
)
|
||||
|
||||
(define (join-present items joiner)
|
||||
(string-join (filter (lambda (item) (and (string? item) (not (string-null? (string-trim-both item))))) items) joiner)
|
||||
(string-append contributionPrefix " " ((ly:output-def-lookup layout 'author-joiner) (format-authors authorIds))))
|
||||
)
|
||||
|
||||
(define (render-partial-contribution-group prefixLookup authorData)
|
||||
@@ -94,93 +93,37 @@
|
||||
|
||||
(define (poet-and-composer-from-authors authors)
|
||||
(if authors
|
||||
(let (
|
||||
(poetIds (find-author-ids-by 'text authors))
|
||||
(translatorIds (find-author-ids-by 'translation authors))
|
||||
(versePoetData (find-author-id-with-part-numbers 'verse authors))
|
||||
(composerIds (find-author-ids-by 'melody authors))
|
||||
(verseComposerData (find-author-id-with-part-numbers 'meloverse authors))
|
||||
(voiceComposerData (find-author-id-with-part-numbers 'voice authors))
|
||||
(compositionIds (find-author-ids-by 'composition authors))
|
||||
(adaptionTextIds (find-author-ids-by 'adaption_text authors))
|
||||
(adaptionMusicIds (find-author-ids-by 'adaption_music authors))
|
||||
(bridgeIds (find-author-ids-by 'bridge authors))
|
||||
(interludeIds (find-author-ids-by 'interlude authors))
|
||||
(year_text (chain-assoc-get 'header:year_text props #f))
|
||||
(year_translation (chain-assoc-get 'header:year_translation props #f))
|
||||
(year_melody (chain-assoc-get 'header:year_melody props #f))
|
||||
(year_composition (chain-assoc-get 'header:year_composition props #f))
|
||||
(year_adaption_text (chain-assoc-get 'header:year_adaption_text props #f))
|
||||
(year_adaption_music (chain-assoc-get 'header:year_adaption_music props #f))
|
||||
)
|
||||
(if (and
|
||||
(equal? poetIds composerIds)
|
||||
(null? translatorIds)
|
||||
(null? versePoetData)
|
||||
(null? verseComposerData)
|
||||
(null? voiceComposerData)
|
||||
(null? compositionIds)
|
||||
(null? adaptionTextIds)
|
||||
(null? adaptionMusicIds)
|
||||
(null? bridgeIds)
|
||||
(null? interludeIds))
|
||||
(list
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'poetAndComposerEqualPrefix) poetIds)
|
||||
(if (equal? year_text year_melody) year_text (join-present (list year_text year_melody) "/"))
|
||||
) ", ")
|
||||
#f)
|
||||
(list
|
||||
(if (and (null? poetIds) (null? versePoetData) (null? translatorIds)) #f
|
||||
(string-append
|
||||
(ly:output-def-lookup layout 'poetPrefix)
|
||||
" "
|
||||
(join-present (list
|
||||
(join-present (list
|
||||
(render-contribution-group "" poetIds)
|
||||
year_text
|
||||
) ", ")
|
||||
(render-partial-contribution-group 'versePrefix versePoetData)
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'translationAuthorPrefix) translatorIds)
|
||||
year_translation
|
||||
) ", ")
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'adaptionTextPrefix) adaptionTextIds)
|
||||
year_adaption_text
|
||||
) ", ")
|
||||
) "; ")
|
||||
))
|
||||
(if (and
|
||||
(null? composerIds)
|
||||
(null? compositionIds)
|
||||
(null? adaptionMusicIds)
|
||||
(null? verseComposerData)
|
||||
(null? voiceComposerData)
|
||||
(null? bridgeIds)
|
||||
(null? interludeIds)) #f
|
||||
(string-append
|
||||
(ly:output-def-lookup layout 'composerPrefix)
|
||||
" "
|
||||
(join-present (list
|
||||
(join-present (list
|
||||
(render-contribution-group "" composerIds)
|
||||
year_melody
|
||||
) ", ")
|
||||
(render-partial-contribution-group 'versePrefix verseComposerData)
|
||||
(render-partial-contribution-group 'voicePrefix voiceComposerData)
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'compositionPrefix) compositionIds)
|
||||
year_composition
|
||||
) ", ")
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'adaptionMusicPrefix) adaptionMusicIds)
|
||||
year_adaption_music
|
||||
) ", ")
|
||||
(render-contribution-group (ly:output-def-lookup layout 'bridgePrefix) bridgeIds)
|
||||
(render-contribution-group (ly:output-def-lookup layout 'interludePrefix) interludeIds)
|
||||
) "; ")
|
||||
)))))
|
||||
((ly:output-def-lookup layout 'authorContributionFormat)
|
||||
render-contribution-group
|
||||
render-partial-contribution-group
|
||||
#:poetIds (find-author-ids-by 'text authors)
|
||||
#:translatorIds (find-author-ids-by 'translation authors)
|
||||
#:versePoetData (find-author-id-with-part-numbers 'verse authors)
|
||||
#:composerIds (find-author-ids-by 'melody authors)
|
||||
#:verseComposerData (find-author-id-with-part-numbers 'meloverse authors)
|
||||
#:voiceComposerData (find-author-id-with-part-numbers 'voice authors)
|
||||
#:compositionIds (find-author-ids-by 'composition authors)
|
||||
#:adaptionTextIds (find-author-ids-by 'adaption_text authors)
|
||||
#:adaptionMusicIds (find-author-ids-by 'adaption_music authors)
|
||||
#:bridgeIds (find-author-ids-by 'bridge authors)
|
||||
#:interludeIds (find-author-ids-by 'interlude authors)
|
||||
#:year_text (chain-assoc-get 'header:year_text props #f)
|
||||
#:year_translation (chain-assoc-get 'header:year_translation props #f)
|
||||
#:year_melody (chain-assoc-get 'header:year_melody props #f)
|
||||
#:year_composition (chain-assoc-get 'header:year_composition props #f)
|
||||
#:year_adaption_text (chain-assoc-get 'header:year_adaption_text props #f)
|
||||
#:year_adaption_music (chain-assoc-get 'header:year_adaption_music props #f)
|
||||
#:poetAndComposerEqualPrefix (ly:output-def-lookup layout 'poetAndComposerEqualPrefix)
|
||||
#:poetPrefix (ly:output-def-lookup layout 'poetPrefix)
|
||||
#:composerPrefix (ly:output-def-lookup layout 'composerPrefix)
|
||||
#:translationAuthorPrefix (ly:output-def-lookup layout 'translationAuthorPrefix)
|
||||
#:pronunciationPrefix (ly:output-def-lookup layout 'pronunciationPrefix)
|
||||
#:compositionPrefix (ly:output-def-lookup layout 'compositionPrefix)
|
||||
#:adaptionTextPrefix (ly:output-def-lookup layout 'adaptionTextPrefix)
|
||||
#:adaptionMusicPrefix (ly:output-def-lookup layout 'adaptionMusicPrefix)
|
||||
#:bridgePrefix (ly:output-def-lookup layout 'bridgePrefix)
|
||||
#:interludePrefix (ly:output-def-lookup layout 'interludePrefix)
|
||||
)
|
||||
(list #f #f)
|
||||
)
|
||||
)
|
||||
@@ -270,4 +213,4 @@
|
||||
\line { \page-number-to-pdf-label \null }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
swing = \mark \markup {
|
||||
swing = \textMark \markup {
|
||||
\line \general-align #Y #DOWN {
|
||||
\score {
|
||||
\new Staff \with {
|
||||
@@ -47,7 +47,7 @@ swing = \mark \markup {
|
||||
}
|
||||
}
|
||||
|
||||
swingOff = \mark \markup {
|
||||
swingOff = \textMark \markup {
|
||||
\line \general-align #Y #DOWN {
|
||||
\score {
|
||||
\new Staff \with {
|
||||
@@ -99,7 +99,7 @@ swingOff = \mark \markup {
|
||||
\include "swing.ly"
|
||||
|
||||
swingMusic =
|
||||
#(define-music-function (parser location music) (ly:music?)
|
||||
#(define-music-function (music) (ly:music?)
|
||||
(define (partial-duration-length m)
|
||||
(let ((name (ly:music-property m 'name))
|
||||
(es (ly:music-property m 'elements))
|
||||
@@ -118,4 +118,4 @@ swingMusic =
|
||||
#{
|
||||
\swing
|
||||
\applySwingWithOffset 8 #'(2 1) #(partial-duration-length music) #music
|
||||
#})
|
||||
#})
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#(define-markup-command (bookTitleMarkupCustom layout props)()
|
||||
(interpret-markup layout
|
||||
(prepend-alist-chain 'songfilename (chain-assoc-get 'header:songfilename props "") props)
|
||||
(interpret-markup layout props
|
||||
(make-column-markup
|
||||
(list
|
||||
(make-vspace-markup (chain-assoc-get 'header:titletopspace props 0))
|
||||
@@ -38,23 +37,24 @@
|
||||
;'(0 . 0) '(0 . 0)
|
||||
)))
|
||||
|
||||
#(define-markup-command (title-with-category-images layout props right)(boolean?)
|
||||
(interpret-markup layout props
|
||||
#(define-markup-command (build-full-title layout props right)(boolean?)
|
||||
(interpret-markup layout (prepend-alist-chain 'songfilename (chain-assoc-get 'header:songfilename props "") props)
|
||||
(let* ((title (chain-assoc-get 'header:title props ""))
|
||||
(starttext (chain-assoc-get 'header:starttext props #f))
|
||||
(pdfbookmark (if starttext (string-append starttext " | " title) title)))
|
||||
(pdfbookmark (if starttext (string-append starttext " | " title) title))
|
||||
(title-markup (ly:output-def-lookup layout (if right 'oddTitleLineMarkup 'evenTitleLineMarkup))))
|
||||
(if title
|
||||
(if right
|
||||
#{\markup { \title-to-pdf-toc #pdfbookmark \fill-line \general-align #Y #UP { \null \bookTitleMarkupCustom \category-images } } #}
|
||||
#{\markup { \title-to-pdf-toc #pdfbookmark \fill-line \general-align #Y #UP { \category-images \bookTitleMarkupCustom \null } } #})
|
||||
#{ \markup { " " } #})
|
||||
(markup #:title-to-pdf-toc pdfbookmark title-markup)
|
||||
make-null-markup)
|
||||
)))
|
||||
|
||||
\paper {
|
||||
bookTitleMarkup = \markup \null
|
||||
scoreTitleMarkup = \markup \null
|
||||
oddHeaderMarkup = \markup { \if \on-first-page-of-part \title-with-category-images ##t }
|
||||
evenHeaderMarkup = \markup { \if \on-first-page-of-part \title-with-category-images ##f }
|
||||
oddHeaderMarkup = \markup { \if \on-first-page-of-part \build-full-title ##t }
|
||||
evenHeaderMarkup = \markup { \if \on-first-page-of-part \build-full-title ##f }
|
||||
oddTitleLineMarkup = \markup { \fill-line \general-align #Y #UP { \null \bookTitleMarkupCustom \category-images } }
|
||||
evenTitleLineMarkup = \markup { \fill-line \general-align #Y #UP { \category-images \bookTitleMarkupCustom \null } }
|
||||
defaultTitleMarkup = \markup {
|
||||
\override #'(baseline-skip . 3.5)
|
||||
\center-column {
|
||||
@@ -63,4 +63,4 @@
|
||||
\smaller \bold \fromproperty #'header:subsubtitle
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
\size-box-to-box-style-dependent ##t ##f
|
||||
\general-align #X #LEFT \override #`(direction . ,UP) \override #'(baseline-skip . 1) \dir-column \chord-alignment-style-dependent {
|
||||
\pad-to-box #'(0 . 0) #`(0 . ,(- verse-text-chord-distance 0.8)) { #text }
|
||||
\size-box-to-box ##f ##t #uptext \score { \chords { g4:m a } \layout { $verselayout } }
|
||||
\size-box-to-box ##f ##t #uptext \score { \chords { g4:m a } \layout { $verselayout #(customized-layout verselayout) } }
|
||||
}
|
||||
#text
|
||||
}
|
||||
@@ -89,7 +89,7 @@
|
||||
(if (and (string? arg) (string-null? arg))
|
||||
" "
|
||||
#{\markup
|
||||
\score { \new Lyrics { \lyricmode { #(if (ly:music? arg) arg #{ \set stanza = #arg #}) "" } } \layout { $verselayout } }
|
||||
\score { \new Lyrics { \lyricmode { #(if (ly:music? arg) arg #{ \set stanza = #arg #}) "" } } \layout { $verselayout #(customized-layout verselayout) } }
|
||||
#}
|
||||
)))
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
(make-wrap-newline-markup
|
||||
(ly:regex-replace (ly:make-regex "\\(( *)([^,()]*)( *),([^)]*)\\)")
|
||||
(ly:regex-replace (ly:make-regex "(([^ \n]*\\([^()]*,[^()]+\\)[^ \n(]*)+)") (handle-custom-newlines custom-verse-breaks verse) " \\concat { " 1 " } ")
|
||||
"\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { " transp " \\chords { s4 " 4 " } \\layout { $verselayout } }")
|
||||
"\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { " transp " \\chords { s4 " 4 " } \\layout { $verselayout #(customized-layout verselayout) } }")
|
||||
)
|
||||
))))
|
||||
|
||||
@@ -203,23 +203,9 @@
|
||||
|
||||
#(define-markup-command (pad-left layout props amount arg)
|
||||
(number? markup?)
|
||||
(let* ((m (interpret-markup layout props arg))
|
||||
(x (ly:stencil-extent m X))
|
||||
(y (ly:stencil-extent m Y)))
|
||||
(ly:stencil-translate
|
||||
(ly:make-stencil (ly:stencil-expr m)
|
||||
(cons (- (car x) amount) (cdr x))
|
||||
y)
|
||||
`(,amount . 0))))
|
||||
|
||||
#(define-markup-command (pad-right layout props amount arg)
|
||||
(number? markup?)
|
||||
(let* ((m (interpret-markup layout props arg))
|
||||
(x (ly:stencil-extent m X))
|
||||
(y (ly:stencil-extent m Y)))
|
||||
(ly:make-stencil (ly:stencil-expr m)
|
||||
(cons (car x) (+ (cdr x) amount))
|
||||
y)))
|
||||
(interpret-markup layout props (make-pad-x-left-markup amount arg))
|
||||
`(,amount . 0)))
|
||||
|
||||
#(define-markup-command (score-equal-height-with-indents layout props lines)
|
||||
(markup-list?)
|
||||
@@ -250,9 +236,103 @@
|
||||
(let ((text (ly:grob-property grob 'text)))
|
||||
|
||||
(grob-interpret-markup grob (if (string? text)
|
||||
(make-pad-right-markup -0.1 (make-tied-lyric-markup text))
|
||||
(make-pad-x-right-markup -0.1 (make-tied-lyric-markup text))
|
||||
text))))
|
||||
|
||||
Chord_lyrics_spacing_engraver =
|
||||
#(lambda (ctx)
|
||||
(let ((last-lyric-syllable #f)
|
||||
(lyric-width-since-last-chord 0)
|
||||
(music-columns-for-last-syllable 0)
|
||||
(last-printed-chord #f)
|
||||
(chord-width-since-last-lyric 0)
|
||||
(lyrics-seen-since-break #f)
|
||||
(have-a-rest #f)
|
||||
(stanza #f)
|
||||
(place-at-right-edge
|
||||
(lambda (grob anchor padding)
|
||||
(let ((anchor-width (interval-length (ly:grob-extent anchor anchor X))))
|
||||
(ly:grob-set-parent! grob X anchor)
|
||||
(ly:grob-set-property! grob 'X-offset (+ padding anchor-width))
|
||||
))))
|
||||
(make-engraver
|
||||
(listeners
|
||||
((multi-measure-rest-event engraver event)
|
||||
(set! have-a-rest #t)
|
||||
)
|
||||
((rest-event engraver event)
|
||||
(set! have-a-rest #t)
|
||||
)
|
||||
((lyric-event engraver event)
|
||||
(set! have-a-rest #f)
|
||||
(set! music-columns-for-last-syllable 0)
|
||||
)
|
||||
((break-event engraver event)
|
||||
(set! last-lyric-syllable #f)
|
||||
(set! lyric-width-since-last-chord 0)
|
||||
(set! music-columns-for-last-syllable 0)
|
||||
(set! last-printed-chord #f)
|
||||
(set! chord-width-since-last-lyric 0)
|
||||
(set! lyrics-seen-since-break #f)
|
||||
))
|
||||
(acknowledgers
|
||||
((musical-paper-column-interface this-engraver grob source-engraver)
|
||||
(set! music-columns-for-last-syllable (+ 1 music-columns-for-last-syllable))
|
||||
)
|
||||
((lyric-syllable-interface this-engraver grob source-engraver)
|
||||
(let ((syllable-width (interval-length (ly:grob-extent grob grob X))))
|
||||
(set! lyric-width-since-last-chord (+ lyric-width-since-last-chord syllable-width))
|
||||
)
|
||||
(if (> chord-width-since-last-lyric 0)
|
||||
(if lyrics-seen-since-break
|
||||
(ly:grob-set-property! grob 'extra-spacing-width
|
||||
(cons (- chord-width-since-last-lyric) (cdr (ly:grob-property grob 'extra-spacing-width '(0 . 0)))))
|
||||
(if last-printed-chord
|
||||
(let ((gap-for-starting-rest 2.0))
|
||||
(if stanza (ly:grob-set-property! stanza 'padding (+ 1 gap-for-starting-rest)))
|
||||
(ly:grob-set-parent! grob X last-printed-chord)
|
||||
(ly:grob-set-property! grob 'X-offset gap-for-starting-rest)
|
||||
)))
|
||||
)
|
||||
(set! last-lyric-syllable grob)
|
||||
(set! chord-width-since-last-lyric 0)
|
||||
(set! lyrics-seen-since-break #t)
|
||||
)
|
||||
((chord-name-interface this-engraver grob source-engraver)
|
||||
(if (not (and
|
||||
(boolean? (ly:grob-property grob 'begin-of-line-visible))
|
||||
(ly:grob-property grob 'begin-of-line-visible)
|
||||
lyrics-seen-since-break))
|
||||
(let* ((last-printed-chord-width (if last-printed-chord (interval-length (ly:grob-extent last-printed-chord last-printed-chord X)) 0))
|
||||
(chord-overwidth (- last-printed-chord-width lyric-width-since-last-chord))
|
||||
(chord-gap 0.5))
|
||||
(if have-a-rest
|
||||
(let ((chord-width (interval-length (ly:grob-extent grob grob X))))
|
||||
(if last-lyric-syllable
|
||||
(if (and last-printed-chord (> chord-overwidth 0))
|
||||
(place-at-right-edge grob last-printed-chord chord-gap)
|
||||
(place-at-right-edge grob last-lyric-syllable 0))
|
||||
(if last-printed-chord
|
||||
(place-at-right-edge grob last-printed-chord chord-gap)))
|
||||
(set! chord-width-since-last-lyric (+ chord-width-since-last-lyric chord-width chord-gap))
|
||||
))
|
||||
(if (and last-lyric-syllable last-printed-chord (> chord-overwidth 0))
|
||||
(ly:grob-set-property! last-lyric-syllable 'extra-spacing-width
|
||||
(cons (car (ly:grob-property last-lyric-syllable 'extra-spacing-width '(0 . 0))) (+ chord-gap chord-overwidth)))
|
||||
)
|
||||
(set! lyric-width-since-last-chord (* (if last-lyric-syllable (interval-length (ly:grob-extent last-lyric-syllable last-lyric-syllable X)) 0) (- 1 (/ 1.0 music-columns-for-last-syllable))))
|
||||
(set! last-printed-chord grob)
|
||||
(set! last-lyric-syllable #f)
|
||||
)
|
||||
(ly:grob-set-property! grob 'X-extent '(+inf.0 . -inf.0))
|
||||
)
|
||||
)
|
||||
((stanza-number-interface this-engraver grob source-engraver)
|
||||
(set! stanza grob)
|
||||
)
|
||||
)
|
||||
)))
|
||||
|
||||
#(define-markup-command (chordlyrics layout props lyrics) (ly:music?)
|
||||
#:properties ((verse-chords #{#})
|
||||
(verse-reference-voice #{#})
|
||||
@@ -273,6 +353,7 @@
|
||||
>>
|
||||
\layout {
|
||||
$verselayout
|
||||
#(customized-layout verselayout)
|
||||
ragged-right = ##t
|
||||
\context {
|
||||
\Lyrics
|
||||
@@ -293,15 +374,18 @@
|
||||
\context {
|
||||
\Score
|
||||
\override PaperColumn.keep-inside-line = ##f
|
||||
% \override SpacingSpanner.strict-note-spacing = ##t
|
||||
% \override SpacingSpanner.strict-note-spacing = ##t
|
||||
\override SpacingSpanner.uniform-stretching = ##t
|
||||
\override SpacingSpanner.spacing-increment = 0
|
||||
% \override SpacingSpanner.packed-spacing = ##t
|
||||
\consists \Chord_lyrics_spacing_engraver
|
||||
\remove Bar_number_engraver
|
||||
\remove Mark_engraver
|
||||
\remove Jump_engraver
|
||||
\remove Volta_engraver
|
||||
\remove Parenthesis_engraver
|
||||
\remove Metronome_mark_engraver
|
||||
\remove Text_mark_engraver
|
||||
}
|
||||
\context {
|
||||
\Staff
|
||||
@@ -325,14 +409,6 @@
|
||||
\remove Note_heads_engraver
|
||||
\remove Script_engraver
|
||||
}
|
||||
\context {
|
||||
\NullVoice
|
||||
\consists Rest_engraver
|
||||
\omit Rest
|
||||
\undo \omit NoteHead
|
||||
\hide NoteHead
|
||||
\override NoteHead.X-extent = #'(0 . 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -287,8 +287,11 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
(compositionIds (find-author-ids-by 'composition authors))
|
||||
(adaptionIds (find-author-ids-by 'adaption authors))
|
||||
(bridgeIds (find-author-ids-by 'bridge authors))
|
||||
(interludeIds (find-author-ids-by 'interlude authors)))
|
||||
(delete-duplicates
|
||||
(interludeIds (find-author-ids-by 'interlude authors))
|
||||
(realAuthorIds (map car AUTHOR_DATA)))
|
||||
(lset-intersection
|
||||
equal?
|
||||
realAuthorIds
|
||||
(append poetIds translatorIds (map car versePoetData) composerIds (map car verseComposerData) (map car voiceComposerData) compositionIds adaptionIds bridgeIds interludeIds))
|
||||
))
|
||||
(let*
|
||||
@@ -441,6 +444,6 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
; we use a delayed stencil to have all the page references available
|
||||
(ly:make-stencil
|
||||
`(delay-stencil-evaluation
|
||||
,(delay (let* ((table (ly:output-def-lookup layout 'label-page-table)))
|
||||
,(delay (let* ((table (ly:output-def-lookup layout 'label-absolute-page-table)))
|
||||
(generate-toc-csv (if (list? table) table '()))
|
||||
empty-stencil)))))
|
||||
|
||||
@@ -2,9 +2,7 @@ MUSIC = { \transposable #TRANSPOSITION \MUSIC }
|
||||
|
||||
LAYOUT = \layout {
|
||||
\LAYOUT
|
||||
#(let
|
||||
((custom-size (ly:output-def-lookup LAYOUT 'size #f)))
|
||||
(if custom-size (layout-set-staff-size custom-size)))
|
||||
#(customized-layout LAYOUT)
|
||||
}
|
||||
|
||||
verselayout = \layout {
|
||||
|
||||
Reference in New Issue
Block a user