6 Commits

Author SHA1 Message Date
tux 9b1297f675 fix tag group usage in markups 2026-06-04 00:05:42 +02:00
zuk aed11a70a7 Add meloref to author system 2026-05-12 10:42:14 +02:00
zuk 92a129f346 Fix double melody year in songinfo 2026-05-03 22:22:59 +02:00
zuk bb940b2a3b Fix transposeGlobal: Make additional transpositions possible 2026-04-22 11:45:57 +02:00
tux 997f757cd6 Chordpro export 2026-04-18 16:47:22 +02:00
tux 6e528a5328 fix markup tag group trouble accross songs 2026-04-10 14:29:20 +02:00
8 changed files with 55 additions and 60 deletions
+1
View File
@@ -40,6 +40,7 @@
\include "chord_settings.ily" \include "chord_settings.ily"
\include "chordpro.ily" \include "chordpro.ily"
\include "transposition.ily" \include "transposition.ily"
\include "markup_tag_groups_hack.ily"
\include "verses_with_chords.ily" \include "verses_with_chords.ily"
\include "arrows_in_scores.ily" \include "arrows_in_scores.ily"
\include "swing_style.ily" \include "swing_style.ily"
+2 -45
View File
@@ -218,7 +218,7 @@
#(define chordpro-accidental-chords-used '()) #(define chordpro-accidental-chords-used '())
%% Configuration and metadata (set by layout_bottom.ily or song file) %% Configuration and metadata (set by layout_bottom.ily or song file)
#(define chordpro-export-enabled #t) #(define chordpro-export-enabled #f)
#(define chordpro-current-filename "output") #(define chordpro-current-filename "output")
#(define chordpro-header-title "Untitled") #(define chordpro-header-title "Untitled")
#(define chordpro-header-authors #f) #(define chordpro-header-authors #f)
@@ -486,50 +486,7 @@
(cons (list (car pending-syllable) (cadr pending-syllable) #f (caddr pending-syllable)) (cons (list (car pending-syllable) (cadr pending-syllable) #f (caddr pending-syllable))
chordpro-syllables-collected)) chordpro-syllables-collected))
(set! pending-syllable #f)) (set! pending-syllable #f))
)))))
;; Write debug output (overwrite each time, final version will be complete)
(with-output-to-file "/tmp/chordpro_debug.txt"
(lambda ()
(display (format #f "ChordPro: Collected ~a syllables, ~a chords (unfiltered), ~a breaks, ~a verses\n"
(length chordpro-syllables-collected)
(length chordpro-chords-collected)
(length chordpro-breaks-collected)
chordpro-current-verse-index))
(display "All syllables:\n")
(for-each
(lambda (syl)
(display (format #f " V~a: '~a' hyphen=~a at ~a\n"
(cadddr syl) (cadr syl) (if (caddr syl) "YES" "NO") (car syl))))
(reverse chordpro-syllables-collected))
(newline)
(display "Breaks:\n")
(for-each
(lambda (brk)
(display (format #f " V~a at ~a\n" (cdr brk) (car brk))))
(reverse chordpro-breaks-collected))
(newline)
(display "All chords (after visibility filtering):\n")
(for-each
(lambda (chord)
(display (format #f " V~a: ~a at ~a\n"
(caddr chord) (cadr chord) (car chord))))
(reverse chordpro-chords-collected))
(newline)
(display "Stanza numbers:\n")
(for-each
(lambda (stanza-entry)
(display (format #f " V~a: '~a' (type: ~a, real: ~a)\n"
(car stanza-entry) (cadr stanza-entry) (caddr stanza-entry) (cadddr stanza-entry))))
(reverse chordpro-stanza-numbers))
(newline)
(display "Inline texts (repStart/repStop etc.):\n")
(for-each
(lambda (inline-entry)
(display (format #f " V~a: '~a' at ~a (dir: ~a)\n"
(cadr inline-entry) (caddr inline-entry) (car inline-entry) (cadddr inline-entry))))
(reverse chordpro-inline-texts-collected)))))
))))
%% Helper functions to format and write ChordPro %% Helper functions to format and write ChordPro
#(define (chordpro-write-from-engraver-data num-verses) #(define (chordpro-write-from-engraver-data num-verses)
@@ -7,6 +7,7 @@
poetAndComposerEqualPrefix = "Worte und Weise:" poetAndComposerEqualPrefix = "Worte und Weise:"
voicePrefix = "Stimme:" voicePrefix = "Stimme:"
versePrefix = "Strophe:" versePrefix = "Strophe:"
refPrefix = "Refrain:"
translationAuthorPrefix = "Übersetzung:" translationAuthorPrefix = "Übersetzung:"
translationPrefix = "Übersetzung:" translationPrefix = "Übersetzung:"
pronunciationPrefix = "Aussprache:" pronunciationPrefix = "Aussprache:"
@@ -39,6 +40,7 @@
(versePoetData '()) (versePoetData '())
(composerIds '()) (composerIds '())
(verseComposerData '()) (verseComposerData '())
(refComposerIds '())
(voiceComposerData '()) (voiceComposerData '())
(compositionIds '()) (compositionIds '())
(adaptionTextIds '()) (adaptionTextIds '())
@@ -48,6 +50,7 @@
(year_text #f) (year_text #f)
(year_translation #f) (year_translation #f)
(year_melody #f) (year_melody #f)
(year_melody_meloref #f)
(year_composition #f) (year_composition #f)
(year_adaption_text #f) (year_adaption_text #f)
(year_adaption_music #f) (year_adaption_music #f)
@@ -60,12 +63,14 @@
(adaptionTextPrefix "") (adaptionTextPrefix "")
(adaptionMusicPrefix "") (adaptionMusicPrefix "")
(bridgePrefix "") (bridgePrefix "")
(interludePrefix "")) (interludePrefix "")
(refPrefix ""))
(if (and (if (and
(equal? poetIds composerIds) (equal? poetIds composerIds)
(null? translatorIds) (null? translatorIds)
(null? versePoetData) (null? versePoetData)
(null? verseComposerData) (null? verseComposerData)
(null? refComposerIds)
(null? voiceComposerData) (null? voiceComposerData)
(null? compositionIds) (null? compositionIds)
(null? adaptionTextIds) (null? adaptionTextIds)
@@ -104,6 +109,7 @@
(null? compositionIds) (null? compositionIds)
(null? adaptionMusicIds) (null? adaptionMusicIds)
(null? verseComposerData) (null? verseComposerData)
(null? refComposerIds)
(null? voiceComposerData) (null? voiceComposerData)
(null? bridgeIds) (null? bridgeIds)
(null? interludeIds)) #f (null? interludeIds)) #f
@@ -116,6 +122,10 @@
year_melody year_melody
) ", ") ) ", ")
(render-partial-contribution-group 'versePrefix verseComposerData) (render-partial-contribution-group 'versePrefix verseComposerData)
(join-present (list
(render-contribution-group refPrefix refComposerIds)
year_melody_meloref
) ", ")
(render-partial-contribution-group 'voicePrefix voiceComposerData) (render-partial-contribution-group 'voicePrefix voiceComposerData)
(join-present (list (join-present (list
(render-contribution-group compositionPrefix compositionIds) (render-contribution-group compositionPrefix compositionIds)
@@ -101,6 +101,7 @@
#:versePoetData (find-author-id-with-part-numbers 'verse authors) #:versePoetData (find-author-id-with-part-numbers 'verse authors)
#:composerIds (find-author-ids-by 'melody authors) #:composerIds (find-author-ids-by 'melody authors)
#:verseComposerData (find-author-id-with-part-numbers 'meloverse authors) #:verseComposerData (find-author-id-with-part-numbers 'meloverse authors)
#:refComposerIds (find-author-ids-by 'meloref authors)
#:voiceComposerData (find-author-id-with-part-numbers 'voice authors) #:voiceComposerData (find-author-id-with-part-numbers 'voice authors)
#:compositionIds (find-author-ids-by 'composition authors) #:compositionIds (find-author-ids-by 'composition authors)
#:adaptionTextIds (find-author-ids-by 'adaption_text authors) #:adaptionTextIds (find-author-ids-by 'adaption_text authors)
@@ -110,6 +111,7 @@
#:year_text (chain-assoc-get 'header:year_text props #f) #:year_text (chain-assoc-get 'header:year_text props #f)
#:year_translation (chain-assoc-get 'header:year_translation props #f) #:year_translation (chain-assoc-get 'header:year_translation props #f)
#:year_melody (chain-assoc-get 'header:year_melody props #f) #:year_melody (chain-assoc-get 'header:year_melody props #f)
#:year_melody_meloref (chain-assoc-get 'header:year_melody_meloref props #f)
#:year_composition (chain-assoc-get 'header:year_composition 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_text (chain-assoc-get 'header:year_adaption_text props #f)
#:year_adaption_music (chain-assoc-get 'header:year_adaption_music props #f) #:year_adaption_music (chain-assoc-get 'header:year_adaption_music props #f)
@@ -123,7 +125,7 @@
#:adaptionMusicPrefix (ly:output-def-lookup layout 'adaptionMusicPrefix) #:adaptionMusicPrefix (ly:output-def-lookup layout 'adaptionMusicPrefix)
#:bridgePrefix (ly:output-def-lookup layout 'bridgePrefix) #:bridgePrefix (ly:output-def-lookup layout 'bridgePrefix)
#:interludePrefix (ly:output-def-lookup layout 'interludePrefix) #:interludePrefix (ly:output-def-lookup layout 'interludePrefix)
) #:refPrefix (ly:output-def-lookup layout 'refPrefix))
(list #f #f) (list #f #f)
) )
) )
@@ -143,7 +145,7 @@
(translation (chain-assoc-get 'header:translation props #f)) (translation (chain-assoc-get 'header:translation props #f))
(pronunciation (chain-assoc-get 'header:pronunciation props #f)) (pronunciation (chain-assoc-get 'header:pronunciation props #f))
(year_text (if (string? (car poet-and-composers)) #f (chain-assoc-get 'header:year_text props #f))) (year_text (if (string? (car poet-and-composers)) #f (chain-assoc-get 'header:year_text props #f)))
(year_melody (if (string? (car poet-and-composers)) #f (chain-assoc-get 'header:year_melody props #f)))) (year_melody (if (string? (cadr poet-and-composers)) #f (chain-assoc-get 'header:year_melody props #f))))
(markup (markup
#:override (cons 'songinfo:poet-maybe-with-composer #:override (cons 'songinfo:poet-maybe-with-composer
(if (and poet-maybe-with-composer (not (and (string? poet-maybe-with-composer) (string-null? poet-maybe-with-composer)))) poet-maybe-with-composer #f)) (if (and poet-maybe-with-composer (not (and (string? poet-maybe-with-composer) (string-null? poet-maybe-with-composer)))) poet-maybe-with-composer #f))
@@ -0,0 +1,16 @@
% We have to record the tag groups for markup, so we use the right tag groups during markup interpretiton.
recordedTagGroups = #'()
tagGroup =
#(define-void-function (tags) (symbol-list?)
(let ((err (define-tag-group tags)))
(if err (ly:parser-error err (*location*))
(set! recordedTagGroups (cons tags recordedTagGroups)))))
#(define-markup-command (handle-tag-groups layout props recorded-groups m) (list? markup?)
(resetTagGroups)
(for-each
(lambda (group)
(define-tag-group group))
recorded-groups)
(interpret-markup layout props m))
+6 -1
View File
@@ -2,7 +2,12 @@ TRANSPOSITION = #(cons #f #f)
transposeGlobal = transposeGlobal =
#(define-void-function (from to) (ly:pitch? ly:pitch?) #(define-void-function (from to) (ly:pitch? ly:pitch?)
(set! TRANSPOSITION (cons from to))) (if (not (car TRANSPOSITION))
(set! TRANSPOSITION (cons from to))
(let ((current_to (cdr TRANSPOSITION))
(interval (ly:pitch-diff to from)))
(set! TRANSPOSITION (cons (car TRANSPOSITION)
(ly:pitch-transpose current_to interval))))))
transposable = transposable =
#(define-music-function (fromto music) (pair? ly:music?) #(define-music-function (fromto music) (pair? ly:music?)
+4 -2
View File
@@ -283,13 +283,14 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
(versePoetData (find-author-id-with-part-numbers 'verse authors)) (versePoetData (find-author-id-with-part-numbers 'verse authors))
(composerIds (find-author-ids-by 'melody authors)) (composerIds (find-author-ids-by 'melody authors))
(verseComposerData (find-author-id-with-part-numbers 'meloverse authors)) (verseComposerData (find-author-id-with-part-numbers 'meloverse authors))
(refComposerIds (find-author-ids-by 'meloref authors))
(voiceComposerData (find-author-id-with-part-numbers 'voice authors)) (voiceComposerData (find-author-id-with-part-numbers 'voice authors))
(compositionIds (find-author-ids-by 'composition authors)) (compositionIds (find-author-ids-by 'composition authors))
(adaptionIds (find-author-ids-by 'adaption authors)) (adaptionIds (find-author-ids-by 'adaption authors))
(bridgeIds (find-author-ids-by 'bridge authors)) (bridgeIds (find-author-ids-by 'bridge authors))
(interludeIds (find-author-ids-by 'interlude authors))) (interludeIds (find-author-ids-by 'interlude authors)))
(delete-duplicates (delete-duplicates
(append poetIds translatorIds (map car versePoetData) composerIds (map car verseComposerData) (map car voiceComposerData) compositionIds adaptionIds bridgeIds interludeIds)) (append poetIds translatorIds (map car versePoetData) composerIds (map car verseComposerData) refComposerIds (map car voiceComposerData) compositionIds adaptionIds bridgeIds interludeIds))
)) ))
(let* (let*
( (
@@ -377,6 +378,7 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
(versePoetData (find-author-id-with-part-numbers 'verse authors)) (versePoetData (find-author-id-with-part-numbers 'verse authors))
(composerIds (find-author-ids-by 'melody authors)) (composerIds (find-author-ids-by 'melody authors))
(verseComposerData (find-author-id-with-part-numbers 'meloverse authors)) (verseComposerData (find-author-id-with-part-numbers 'meloverse authors))
(refComposerIds (find-author-ids-by 'meloref authors))
(voiceComposerData (find-author-id-with-part-numbers 'voice authors)) (voiceComposerData (find-author-id-with-part-numbers 'voice authors))
(compositionIds (find-author-ids-by 'composition authors)) (compositionIds (find-author-ids-by 'composition authors))
(adaptionTextIds (find-author-ids-by 'adaption_text authors)) (adaptionTextIds (find-author-ids-by 'adaption_text authors))
@@ -398,7 +400,7 @@ headerToTOC = #(define-music-function (parser location header label) (ly:book? s
(headervar-or-empty 'categories) (headervar-or-empty 'categories)
(format-authors (append poetIds adaptionTextIds (map car versePoetData))) (format-authors (append poetIds adaptionTextIds (map car versePoetData)))
(format-authors translatorIds) (format-authors translatorIds)
(format-authors (append composerIds compositionIds adaptionMusicIds bridgeIds interludeIds (map car voiceComposerData) (map car verseComposerData))) (format-authors (append composerIds compositionIds adaptionMusicIds bridgeIds interludeIds (map car voiceComposerData) (map car verseComposerData) refComposerIds))
(headervar-or-empty 'year_text) (headervar-or-empty 'year_text)
(headervar-or-empty 'year_melody) (headervar-or-empty 'year_melody)
(headervar-or-empty 'year_translation) (headervar-or-empty 'year_translation)
+2
View File
@@ -18,6 +18,7 @@ TEXT = \markuplist {
\override #`(verselayout . ,verselayout) \override #`(verselayout . ,verselayout)
\override #`(verse-chords . ,#{ \chords { \verseChords } #}) \override #`(verse-chords . ,#{ \chords { \verseChords } #})
\override #`(verse-reference-voice . ,#{ \global \firstVoice #}) \override #`(verse-reference-voice . ,#{ \global \firstVoice #})
\handle-tag-groups \recordedTagGroups
\TEXT \TEXT
} }
@@ -29,6 +30,7 @@ TEXT = \markuplist {
\override #`(verselayout . ,verselayout) \override #`(verselayout . ,verselayout)
\override #`(verse-chords . ,#{ \chords { \verseChords } #}) \override #`(verse-chords . ,#{ \chords { \verseChords } #})
\override #`(verse-reference-voice . ,#{ \global \firstVoice #}) \override #`(verse-reference-voice . ,#{ \global \firstVoice #})
\handle-tag-groups \recordedTagGroups
#text #text
} }
#}) #})