2 Commits

Author SHA1 Message Date
85c05cec5d Chordpro export 2026-04-14 10:09:40 +02:00
6e528a5328 fix markup tag group trouble accross songs 2026-04-10 14:29:20 +02:00
4 changed files with 26 additions and 53 deletions

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"

View File

@@ -115,7 +115,7 @@
((char=? first-char #\h) ((char=? first-char #\h)
(unless (member chord-str chordpro-h-chords-used) (unless (member chord-str chordpro-h-chords-used)
(set! chordpro-h-chords-used (cons chord-str chordpro-h-chords-used)))) (set! chordpro-h-chords-used (cons chord-str chordpro-h-chords-used))))
;; B/b chords (German B = English Bb) ;; B/b chords (German B = English Bb)
((char=? first-char #\B) ((char=? first-char #\B)
(unless (member chord-str chordpro-b-chords-used) (unless (member chord-str chordpro-b-chords-used)
@@ -123,17 +123,17 @@
((char=? first-char #\b) ((char=? first-char #\b)
(unless (member chord-str chordpro-b-chords-used) (unless (member chord-str chordpro-b-chords-used)
(set! chordpro-b-chords-used (cons chord-str chordpro-b-chords-used)))) (set! chordpro-b-chords-used (cons chord-str chordpro-b-chords-used))))
;; Chords with accidentals (is/es) ;; Chords with accidentals (is/es)
(has-accidental (has-accidental
(unless (member chord-str chordpro-accidental-chords-used) (unless (member chord-str chordpro-accidental-chords-used)
(set! chordpro-accidental-chords-used (cons chord-str chordpro-accidental-chords-used)))) (set! chordpro-accidental-chords-used (cons chord-str chordpro-accidental-chords-used))))
;; Other lowercase chords (minor without B/H/accidentals) ;; Other lowercase chords (minor without B/H/accidentals)
((char-lower-case? first-char) ((char-lower-case? first-char)
(unless (member chord-str chordpro-minor-chords-used) (unless (member chord-str chordpro-minor-chords-used)
(set! chordpro-minor-chords-used (cons chord-str chordpro-minor-chords-used))))) (set! chordpro-minor-chords-used (cons chord-str chordpro-minor-chords-used)))))
;; Always return original ;; Always return original
chord-str))) chord-str)))
@@ -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)
@@ -553,7 +510,7 @@
(when (and (defined? 'chordpro-header-authors) chordpro-header-authors) (when (and (defined? 'chordpro-header-authors) chordpro-header-authors)
(display (format #f "{artist: ~a}\n" (display (format #f "{artist: ~a}\n"
(format-chordpro-authors chordpro-header-authors)))) (format-chordpro-authors chordpro-header-authors))))
;; Write {define:} directives for all used minor chords ;; Write {define:} directives for all used minor chords
(unless (null? chordpro-minor-chords-used) (unless (null? chordpro-minor-chords-used)
(newline) (newline)
@@ -563,7 +520,7 @@
(let ((major-form (german-minor-to-major-form minor-chord))) (let ((major-form (german-minor-to-major-form minor-chord)))
(display (format #f "{define: ~a copy ~a}\n" minor-chord major-form)))) (display (format #f "{define: ~a copy ~a}\n" minor-chord major-form))))
(reverse chordpro-minor-chords-used))) (reverse chordpro-minor-chords-used)))
;; Write {define:} directives for all used B chords (German B = English Bb) ;; Write {define:} directives for all used B chords (German B = English Bb)
(unless (null? chordpro-b-chords-used) (unless (null? chordpro-b-chords-used)
(for-each (for-each
@@ -572,7 +529,7 @@
(let ((bb-form (german-b-to-bb-form b-chord))) (let ((bb-form (german-b-to-bb-form b-chord)))
(display (format #f "{define: ~a copy ~a}\n" b-chord bb-form)))) (display (format #f "{define: ~a copy ~a}\n" b-chord bb-form))))
(reverse chordpro-b-chords-used))) (reverse chordpro-b-chords-used)))
;; Write {define:} directives for all used H chords (German H = English B) ;; Write {define:} directives for all used H chords (German H = English B)
(unless (null? chordpro-h-chords-used) (unless (null? chordpro-h-chords-used)
(for-each (for-each
@@ -581,7 +538,7 @@
(let ((b-form (german-h-to-b-form h-chord))) (let ((b-form (german-h-to-b-form h-chord)))
(display (format #f "{define: ~a copy ~a}\n" h-chord b-form)))) (display (format #f "{define: ~a copy ~a}\n" h-chord b-form))))
(reverse chordpro-h-chords-used))) (reverse chordpro-h-chords-used)))
;; Write {define:} directives for chords with accidentals (is/es -> #/b) ;; Write {define:} directives for chords with accidentals (is/es -> #/b)
(unless (null? chordpro-accidental-chords-used) (unless (null? chordpro-accidental-chords-used)
(for-each (for-each
@@ -590,7 +547,7 @@
(let ((intl-form (german-accidentals-to-international accidental-chord))) (let ((intl-form (german-accidentals-to-international accidental-chord)))
(display (format #f "{define: ~a copy ~a}\n" accidental-chord intl-form)))) (display (format #f "{define: ~a copy ~a}\n" accidental-chord intl-form))))
(reverse chordpro-accidental-chords-used))) (reverse chordpro-accidental-chords-used)))
(newline) (newline)
;; Write each verse in reverse order (they were collected backwards) ;; Write each verse in reverse order (they were collected backwards)

View File

@@ -0,0 +1,13 @@
% 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)
(every (lambda (group) (define-tag-group group)) recorded-groups)
(interpret-markup layout props m))

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
} }
#}) #})