Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
f477fb2143 |
@ -28,7 +28,6 @@
|
||||
\include "arrows_in_scores.ly"
|
||||
\include "swing_style.ly"
|
||||
\include "inline_score.ly"
|
||||
\include "custom_indentation.ily"
|
||||
|
||||
% reset important variables
|
||||
LAYOUT = \layout { \generalLayout }
|
||||
|
@ -43,7 +43,7 @@ generalLayout = \layout {
|
||||
}
|
||||
\context {
|
||||
\Staff
|
||||
\accidentalStyle modern-voice-cautionary
|
||||
\accidentalStyle modern
|
||||
\consists Merge_rests_engraver
|
||||
}
|
||||
\context {
|
||||
@ -71,7 +71,6 @@ generalLayout = \layout {
|
||||
\override Stem.layer = 2
|
||||
\override Flag.layer = 2
|
||||
\override Beam.layer = 2
|
||||
\override Accidental.layer = 2
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,13 +86,11 @@ secondVoiceStyle = {
|
||||
\override Stem.color = #grey
|
||||
\override Flag.color = #grey
|
||||
\override Beam.color = #grey
|
||||
\override Accidental.color = #grey
|
||||
\override NoteHead.layer = 1
|
||||
\override Dots.layer = 1
|
||||
\override Stem.layer = 1
|
||||
\override Flag.layer = 1
|
||||
\override Beam.layer = 1
|
||||
\override Accidental.layer = 1
|
||||
}
|
||||
|
||||
firstVoiceStyle = {
|
||||
@ -102,7 +99,6 @@ firstVoiceStyle = {
|
||||
\override Stem.color = #black
|
||||
\override Flag.color = #black
|
||||
\override Beam.color = #black
|
||||
\override Accidental.color = #black
|
||||
}
|
||||
|
||||
% Deprecated: einzelne Noten innerhalb von \secondVoiceStyle mit schwarzem statt grauem Kopf
|
||||
@ -216,6 +212,3 @@ dottedExtender = {
|
||||
(cons (cdr x-ext) 0))
|
||||
grob))))
|
||||
}
|
||||
|
||||
melisOff = \set ignoreMelismata = ##t
|
||||
melisOn = \unset ignoreMelismata
|
@ -40,33 +40,30 @@ shiftChords = #(define-music-function (parser location xshift chords) (number? l
|
||||
|
||||
altChord =
|
||||
#(define-music-function (parser location mainchord altchord) (ly:music? ly:music?)
|
||||
(let* ((remove-point-and-click
|
||||
(lambda (grob)
|
||||
(ly:grob-set-property! grob 'cause #f)
|
||||
(ly:text-interface::print grob)))
|
||||
(chord-name (lambda (in-pitches bass inversion context) #{
|
||||
\markup {
|
||||
\translate #'(-0.5 . 0)
|
||||
\score {
|
||||
\chords { \transposable #TRANSPOSITION { #(music-clone mainchord) \klamm #(music-clone altchord) } }
|
||||
\layout {
|
||||
\LAYOUT
|
||||
\context {
|
||||
\ChordNames
|
||||
\override ChordName.extra-spacing-width = #'(0 . 0.3)
|
||||
\override ChordName.stencil = #remove-point-and-click
|
||||
}
|
||||
\context {
|
||||
\Score
|
||||
\override SpacingSpanner.spacing-increment = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}#})))
|
||||
#{
|
||||
\once \set chordNameFunction = #chord-name
|
||||
#mainchord
|
||||
#}))
|
||||
(define (chord-namer in-pitches bass inversion context)
|
||||
#{
|
||||
\markup {
|
||||
\translate #'(-0.5 . 0)
|
||||
\score {
|
||||
\chords { \transposable #TRANSPOSITION { #(music-clone mainchord) \klamm #(music-clone altchord) } }
|
||||
\layout {
|
||||
\LAYOUT
|
||||
\context {
|
||||
\ChordNames
|
||||
\override ChordName.extra-spacing-width = #'(0 . 0.3)
|
||||
}
|
||||
\context {
|
||||
\Score
|
||||
\override SpacingSpanner.spacing-increment = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#})
|
||||
#{
|
||||
\once \set chordNameFunction = #chord-namer
|
||||
#mainchord
|
||||
#})
|
||||
|
||||
% kleine Mollakkorde und Alteration ausgeschrieben
|
||||
#(define (note-name->german-markup-nosym pitch lowercase?)
|
||||
|
@ -1,135 +0,0 @@
|
||||
% https://lsr.di.unimi.it/LSR/Snippet?id=1098
|
||||
%%%%%%%% HEADER %%%%%%%%
|
||||
%
|
||||
% this code was prompted by
|
||||
% https://lists.gnu.org/archive/html/lilypond-user/2019-07/msg00139.html
|
||||
% and offers a pseudoIndent hack suitable for general use
|
||||
|
||||
% keywords:
|
||||
% indent short-indent indentation system line
|
||||
% mid-score temporarily arbitrary individual single just only once
|
||||
% coda margin
|
||||
% mouse's tale acrostic mesostic spine
|
||||
|
||||
%%%%%%%% PSEUDOINDENT FUNCTIONS %%%%%%%%
|
||||
|
||||
% these two functions are for indenting individual systems
|
||||
% - to left-indent a system, apply \pseudoIndent before the music continues
|
||||
% - \pseudoIndents is similar, but lets you also indent on the right
|
||||
% - both provide an option for changing that system's instrument names
|
||||
|
||||
% N.B. these functions
|
||||
% - assume application to non-ragged lines (generally the default)
|
||||
% - include a manual \break to ensure application at line start
|
||||
% - misbehave if called more than once at the same line start
|
||||
|
||||
% the parameters of the (full) pseudoIndents function are:
|
||||
% 1: name-tweaks
|
||||
% usually omitted; accepts replacement \markup for instrument names
|
||||
% as an ordered list; starred elements leave their i-names unchanged.
|
||||
% 2: left-indent
|
||||
% additional left-indentation, in staff-space units; can be negative,
|
||||
% but avoid a total indentation which implies (unsupported) stretching.
|
||||
% 3: right-indent
|
||||
% amount of right-indentation, in staff-space units; can be negative.
|
||||
% - not offered by the (reduced) pseudoIndent function
|
||||
|
||||
|
||||
pseudoIndents = % inline alternative to a new \score, also with right-indent
|
||||
#(define-music-function (name-tweaks left-indent right-indent)
|
||||
((markup-list? '()) number? number?)
|
||||
(define (warn-stretched p1 p2) (ly:input-warning (*location*) (G_
|
||||
" pseudoIndents ~s ~s is stretching staff; expect distorted layout") p1 p2))
|
||||
(let* (
|
||||
(narrowing (+ left-indent right-indent)) ; of staff implied by args
|
||||
|
||||
(set-staffsymbol! (lambda (staffsymbol-grob) ; change staff to new width
|
||||
(let* (
|
||||
(left-bound (ly:spanner-bound staffsymbol-grob LEFT))
|
||||
(left-moment (ly:grob-property left-bound 'when))
|
||||
(capo? (moment<=? left-moment ZERO-MOMENT)) ; in first system of score
|
||||
(layout (ly:grob-layout staffsymbol-grob))
|
||||
(lw (ly:output-def-lookup layout 'line-width)) ; debugging info
|
||||
(indent (ly:output-def-lookup layout (if capo? 'indent 'short-indent)))
|
||||
(old-stil (ly:staff-symbol::print staffsymbol-grob))
|
||||
(staffsymbol-x-ext (ly:stencil-extent old-stil X))
|
||||
;; >=2.19.16's first system has old-stil already narrowed [2]
|
||||
;; compensate for this (ie being not pristine) when calculating
|
||||
;; - old leftmost-x (its value is needed when setting so-called 'width)
|
||||
;; - the new width and position (via local variable narrowing_)
|
||||
(ss-t (ly:staff-symbol-line-thickness staffsymbol-grob))
|
||||
(pristine? (<= 0 (car staffsymbol-x-ext) ss-t)) ; would expect half
|
||||
(leftmost-x (+ indent (if pristine? 0 narrowing)))
|
||||
(narrowing_ (if pristine? narrowing 0)) ; uses 0 if already narrowed
|
||||
(old-width (+ (interval-length staffsymbol-x-ext) ss-t))
|
||||
(new-width (- old-width narrowing_))
|
||||
(new-rightmost-x (+ leftmost-x new-width)) ; and set! this immediately
|
||||
(junk (ly:grob-set-property! staffsymbol-grob 'width new-rightmost-x))
|
||||
(in-situ-stil (ly:staff-symbol::print staffsymbol-grob))
|
||||
(new-stil (ly:stencil-translate-axis in-situ-stil narrowing_ X))
|
||||
;(new-stil (stencil-with-color new-stil red)) ; for when debugging
|
||||
(new-x-ext (ly:stencil-extent new-stil X)))
|
||||
(ly:grob-set-property! staffsymbol-grob 'stencil new-stil)
|
||||
(ly:grob-set-property! staffsymbol-grob 'X-extent new-x-ext)
|
||||
)))
|
||||
|
||||
(set-X-offset! (lambda (margin-grob) ; move grob across to line start
|
||||
(let* (
|
||||
(old (ly:grob-property-data margin-grob 'X-offset))
|
||||
(new (lambda (grob) (+ (if (procedure? old) (old grob) old) narrowing))))
|
||||
(ly:grob-set-property! margin-grob 'X-offset new))))
|
||||
|
||||
(tweak-text! (lambda (i-name-grob mkup) ; tweak both instrumentname texts
|
||||
(if (and (markup? mkup) (not (string=? (markup->string mkup) "*")))
|
||||
(begin
|
||||
(ly:grob-set-property! i-name-grob 'long-text mkup)
|
||||
(ly:grob-set-property! i-name-grob 'text mkup)
|
||||
)))) ; else retain existing text
|
||||
|
||||
(install-narrowing (lambda (leftedge-grob) ; on staves, + adapt left margin
|
||||
(let* (
|
||||
(sys (ly:grob-system leftedge-grob))
|
||||
(all-grobs (ly:grob-array->list (ly:grob-object sys 'all-elements)))
|
||||
(grobs-named (lambda (name)
|
||||
(filter (lambda (x) (eq? name (grob::name x))) all-grobs)))
|
||||
(first-leftedge-grob (list-ref (grobs-named 'LeftEdge) 0))
|
||||
(relsys-x-of (lambda (g) (ly:grob-relative-coordinate g sys X)))
|
||||
(leftedge-x (relsys-x-of first-leftedge-grob))
|
||||
(leftedged? (lambda (g) (= (relsys-x-of g) leftedge-x)))
|
||||
(leftedged-ss (filter leftedged? (grobs-named 'StaffSymbol))))
|
||||
(if (eq? leftedge-grob first-leftedge-grob) ; ignore other leftedges [1]
|
||||
(begin
|
||||
(for-each set-staffsymbol! leftedged-ss)
|
||||
(for-each set-X-offset! (grobs-named 'SystemStartBar))
|
||||
(for-each set-X-offset! (grobs-named 'InstrumentName))
|
||||
(for-each tweak-text! (grobs-named 'InstrumentName) name-tweaks)
|
||||
))))))
|
||||
|
||||
(if (negative? narrowing) (warn-stretched left-indent right-indent))
|
||||
#{ % and continue anyway
|
||||
% ensure that these overrides are applied only at begin-of-line
|
||||
\break % (but this does not exclude unsupported multiple application)
|
||||
% give the spacing engine notice regarding the loss of width for music
|
||||
\once \override Score.LeftEdge.X-extent = #(cons narrowing narrowing)
|
||||
% discard line start region of staff and reassemble left-margin elements
|
||||
\once \override Score.LeftEdge.after-line-breaking = #install-narrowing
|
||||
% shift the system to partition the narrowing between left and right
|
||||
\overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
|
||||
.X-offset #(- right-indent)
|
||||
% prevent a leftmost barnumber entering a stretched staff
|
||||
\once \override Score.BarNumber.horizon-padding = #(max 1 (- 1 narrowing))
|
||||
#}))
|
||||
|
||||
pseudoIndent = % for changing just left-indent
|
||||
#(define-music-function (name-tweaks left-indent)
|
||||
((markup-list? '()) number?)
|
||||
#{
|
||||
\pseudoIndents $name-tweaks $left-indent 0
|
||||
#})
|
||||
|
||||
% [1] versions <2.19.1 can have end-of-line leftedges too
|
||||
% - these were eliminated in issue 3761
|
||||
% [2] versions >=2.19.16: the first system behaves differently from the rest
|
||||
% - a side effect of issue 660 ?
|
||||
% [3] versions >=2.23.0: LeftEdge's position may well differ in Y (but not in X)
|
||||
% - a side effect of issue 6084 ?
|
@ -2,6 +2,7 @@
|
||||
poetPrefix = "Worte:"
|
||||
composerPrefix = "Weise:"
|
||||
compositionPrefix = "Satz:"
|
||||
adaptionPrefix = "Bearbeitung:"
|
||||
poetAndComposerEqualPrefix = "Worte und Weise:"
|
||||
voicePrefix = "Stimme:"
|
||||
versePrefix = "Strophe:"
|
||||
|
@ -21,13 +21,11 @@
|
||||
|
||||
#(define (find-author-id-with-part-numbers contributionType authors)
|
||||
(if authors
|
||||
(sort-list
|
||||
(filter-map (lambda (authordata)
|
||||
(let ((contributionNumbers (filter-map (lambda (contribution) (if (and (list? contribution) (equal? contributionType (car contribution))) (cadr contribution) #f)) (cdr authordata)))
|
||||
(authorId (car authordata)))
|
||||
(if (null? contributionNumbers) #f (cons authorId (sort-list contributionNumbers <)))
|
||||
)) authors)
|
||||
(lambda (a b) (< (cadr a) (cadr b))))
|
||||
(filter-map (lambda (authordata)
|
||||
(let ((contributionNumbers (filter-map (lambda (contribution) (if (and (list? contribution) (equal? contributionType (car contribution))) (cadr contribution) #f)) (cdr authordata)))
|
||||
(authorId (car authordata)))
|
||||
(if (null? contributionNumbers) #f (cons authorId contributionNumbers))
|
||||
)) authors)
|
||||
(list)))
|
||||
|
||||
#(define-markup-command (print-songinfo layout props) ()
|
||||
@ -77,20 +75,22 @@
|
||||
(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)
|
||||
)
|
||||
|
||||
(define (render-partial-contribution-group prefixLookup authorData)
|
||||
(if (null? authorData)
|
||||
""
|
||||
(let ((firstAuthorContributions (cdar authorData)))
|
||||
(receive (authorDataSame authorDataOther)
|
||||
(partition (lambda (authorEntry) (equal? (cdr authorEntry) firstAuthorContributions)) authorData)
|
||||
(join-present (list
|
||||
(string-append
|
||||
(render-contribution-group (numbered-contribution-prefix firstAuthorContributions prefixLookup) (map car authorDataSame))
|
||||
" "
|
||||
(render-partial-contribution-group prefixLookup authorDataOther)
|
||||
) " ")))))
|
||||
))))
|
||||
)
|
||||
|
||||
(define (join-present items joiner)
|
||||
(string-join (filter (lambda (item) (and (string? item) (not (string-null? (string-trim-both item))))) items) joiner)
|
||||
)
|
||||
|
||||
(define (poet-and-composer-from-authors authors)
|
||||
(if authors
|
||||
@ -102,14 +102,16 @@
|
||||
(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))
|
||||
(adaptionIds (find-author-ids-by 'adaption 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 (chain-assoc-get 'header:year_adaption props #f))
|
||||
)
|
||||
(if (and (equal? poetIds composerIds) (null? translatorIds) (null? versePoetData) (null? verseComposerData) (null? voiceComposerData) (null? compositionIds) (null? bridgeIds) (null? interludeIds))
|
||||
(if (and (equal? poetIds composerIds) (null? translatorIds) (null? versePoetData) (null? verseComposerData) (null? voiceComposerData) (null? compositionIds) (null? adaptionIds) (null? bridgeIds) (null? interludeIds))
|
||||
(list
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'poetAndComposerEqualPrefix) poetIds)
|
||||
@ -133,7 +135,7 @@
|
||||
) ", ")
|
||||
) "; ")
|
||||
))
|
||||
(if (and (null? composerIds) (null? compositionIds) (null? verseComposerData) (null? voiceComposerData) (null? bridgeIds) (null? interludeIds)) #f
|
||||
(if (and (null? composerIds) (null? compositionIds) (null? adaptionIds) (null? verseComposerData) (null? voiceComposerData) (null? bridgeIds) (null? interludeIds)) #f
|
||||
(string-append
|
||||
(ly:output-def-lookup layout 'composerPrefix)
|
||||
" "
|
||||
@ -148,6 +150,10 @@
|
||||
(render-contribution-group (ly:output-def-lookup layout 'compositionPrefix) compositionIds)
|
||||
year_composition
|
||||
) ", ")
|
||||
(join-present (list
|
||||
(render-contribution-group (ly:output-def-lookup layout 'adaptionPrefix) adaptionIds)
|
||||
year_adaption
|
||||
) ", ")
|
||||
(render-contribution-group (ly:output-def-lookup layout 'bridgePrefix) bridgeIds)
|
||||
(render-contribution-group (ly:output-def-lookup layout 'interludePrefix) interludeIds)
|
||||
) "; ")
|
||||
|
@ -279,10 +279,11 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
(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))
|
||||
(adaptionIds (find-author-ids-by 'adaption authors))
|
||||
(bridgeIds (find-author-ids-by 'bridge authors))
|
||||
(interludeIds (find-author-ids-by 'interlude authors)))
|
||||
(delete-duplicates
|
||||
(append poetIds translatorIds (map car versePoetData) composerIds (map car verseComposerData) (map car voiceComposerData) compositionIds bridgeIds interludeIds))
|
||||
(append poetIds translatorIds (map car versePoetData) composerIds (map car verseComposerData) (map car voiceComposerData) compositionIds adaptionIds bridgeIds interludeIds))
|
||||
))
|
||||
(let*
|
||||
(
|
||||
@ -358,7 +359,7 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
(songvars (cdr song))
|
||||
(page-number (number->string (assoc-get (assq-ref songvars 'label) labelPageTable)))
|
||||
(extractedheadervars (extract-and-check-vars-from-header (assq-ref songvars 'header)
|
||||
'(title starttext alttitle categorytitle categories authors year_text year_melody year_translation year_composition infotext translation pronunciation copyright source)))
|
||||
'(title starttext alttitle categorytitle categories authors year_text year_melody year_translation year_composition year_adaption infotext translation pronunciation copyright source)))
|
||||
(headervar-or-empty (lambda (varsym)
|
||||
(let ((extracted (assq-ref extractedheadervars varsym)))
|
||||
(if extracted extracted ""))))
|
||||
@ -370,6 +371,7 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
(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))
|
||||
(adaptionIds (find-author-ids-by 'adaption authors))
|
||||
(bridgeIds (find-author-ids-by 'bridge authors))
|
||||
(interludeIds (find-author-ids-by 'interlude authors)))
|
||||
(map csv-escape
|
||||
@ -387,11 +389,12 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
(headervar-or-empty 'categories)
|
||||
(format-authors (append poetIds (map car versePoetData)))
|
||||
(format-authors translatorIds)
|
||||
(format-authors (append composerIds compositionIds bridgeIds interludeIds (map car voiceComposerData) (map car verseComposerData)))
|
||||
(format-authors (append composerIds compositionIds adaptionIds bridgeIds interludeIds (map car voiceComposerData) (map car verseComposerData)))
|
||||
(headervar-or-empty 'year_text)
|
||||
(headervar-or-empty 'year_melody)
|
||||
(headervar-or-empty 'year_translation)
|
||||
(headervar-or-empty 'year_composition)
|
||||
(headervar-or-empty 'year_adaption)
|
||||
(headervar-or-empty 'copyright)
|
||||
(headervar-or-empty 'source)
|
||||
(format-info-paragraphs (headervar-or-empty 'infotext))
|
||||
@ -416,6 +419,7 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
|
||||
"year_melody"
|
||||
"year_translation"
|
||||
"year_composition"
|
||||
"year_adaption"
|
||||
"copyright"
|
||||
"source"
|
||||
"infotext"
|
||||
|
Loading…
x
Reference in New Issue
Block a user