8 Commits

Author SHA1 Message Date
tux
d6774670f3 Songinfogenerierung verbessert 2023-10-31 13:31:50 +01:00
tux
260664462d fix custom verse breaks for windows 2023-10-30 23:24:18 +01:00
tux
9de2869750 erlaube Umbrüche in Versen nach angegebenen Texten 2023-10-29 22:54:10 +01:00
tux
f0010c7746 Layoutmodifikationen auch für Strophen nutzen 2023-10-29 16:25:15 +01:00
tux
bedb2c0e22 fix chord name font 2023-10-28 09:34:26 +02:00
tux
33c3d47504 Strophensortierung gefixt 2023-09-25 01:39:55 +02:00
tux
15f37accaa repeats around chords 2023-09-18 18:08:33 +02:00
tux
c26fddd963 Inhaltsverzeichniserzeugung refactored 2023-09-17 18:08:52 +02:00
10 changed files with 144 additions and 148 deletions

View File

@ -1,6 +1,7 @@
\language "deutsch" \language "deutsch"
\include "default_author_style.ly" \include "default_author_style.ly"
\include "default_songinfo_style.ly"
\include "styles.ly" \include "styles.ly"
\include #(ly:format "styles/~a.ly" songStyle) \include #(ly:format "styles/~a.ly" songStyle)

View File

@ -8,6 +8,16 @@ klamm = #(define-music-function (parser location chords) (ly:music?)
\set chordNameFunction = #ignatzek-chord-names \set chordNameFunction = #ignatzek-chord-names
#}) #})
repeats-around-chords =
#(define-music-function (parser location chords) (ly:music?)
#{
\once \set noChordSymbol = \markup { \normal-text \repStart }
r4
$chords
\once \set noChordSymbol = \markup { \normal-text \repStop }
r4
#})
bchord = bchord =
#(define-music-function (parser location chords) (ly:music?) #(define-music-function (parser location chords) (ly:music?)
#{ #{
@ -71,7 +81,7 @@ generalLayout = \layout {
\semiGermanChords \semiGermanChords
\override ChordName.font-size = \songScoreChordFontSize \override ChordName.font-size = \songScoreChordFontSize
\override ChordName.font-series = \songChordFontSeries \override ChordName.font-series = \songChordFontSeries
\override ChordName.font-family = #'sans \override ChordName.font-family = #'serif
chordNameLowercaseMinor = ##t chordNameLowercaseMinor = ##t
chordChanges = ##t chordChanges = ##t
% eigenen chordRootNamer damit F# = Fis und Gb = Ges (also alteration ausgeschrieben) % eigenen chordRootNamer damit F# = Fis und Gb = Ges (also alteration ausgeschrieben)
@ -84,14 +94,6 @@ generalLayout = \layout {
} }
} }
verseChordLayout = \layout {
\generalLayout
\context {
\ChordNames
\override ChordName.font-size = \songTextChordFontSize
}
}
% Akkord mit Bunddiagramm anzeigen % Akkord mit Bunddiagramm anzeigen
#(define-markup-command (fret-chord layout props fret chord) (string? string?) #(define-markup-command (fret-chord layout props fret chord) (string? string?)
(interpret-markup layout props (interpret-markup layout props

33
default_songinfo_style.ly Normal file
View File

@ -0,0 +1,33 @@
\paper {
songinfoMarkup =
#(make-on-the-fly-markup
(lambda (layout props m)
(let ((blockwidth (* (chain-assoc-get 'header:songinfo-size-factor props 0.9) (ly:output-def-lookup layout 'line-width)))
(between-poet-and-composer-markup (chain-assoc-get 'header:between-poet-and-composer-markup props (make-hspace-markup 3)))
(poet-maybe-with-composer (chain-assoc-get 'songinfo:poet-maybe-with-composer props #f))
(composer (chain-assoc-get 'songinfo:composer props #f))
(copyright (chain-assoc-get 'songinfo:copyright props #f))
(infotext (chain-assoc-get 'songinfo:infotext props #f))
(translation (chain-assoc-get 'songinfo:translation props #f))
(spelling (chain-assoc-get 'songinfo:spelling props #f))
(year_text (chain-assoc-get 'songinfo:year_text props #f))
(year_melody (chain-assoc-get 'songinfo:year_melody props #f)))
(interpret-markup layout props
(markup
#:override '(baseline-skip . 3.0)
#:override `(line-width . ,blockwidth)
#:fontsize songInfoFontSize
#:sans
(make-justify-markup (list
(if poet-maybe-with-composer (markup
(if year_text (make-concat-markup (list poet-maybe-with-composer ", " year_text)) poet-maybe-with-composer) between-poet-and-composer-markup) "")
(if composer (if year_melody (make-concat-markup (list composer ", " year_melody)) composer) "")
(make-justify-string-markup (string-append
(if copyright (string-append "© " copyright) "")
(if infotext (string-append "\n\n" infotext) "")
(if translation (string-append "\n\nÜbersetzung: " translation) "")
(if spelling (string-append "\n\nAussprache: " spelling) "")
))))))))
(make-null-markup)
)
}

View File

@ -33,32 +33,33 @@
(composerId (chain-assoc-get 'header:composerId props (if songId (songinfo-from songId "composer") #f))) (composerId (chain-assoc-get 'header:composerId props (if songId (songinfo-from songId "composer") #f)))
(poet-and-composer-same (equal? poetId composerId))) (poet-and-composer-same (equal? poetId composerId)))
(let ( (let (
(blockwidth (* (chain-assoc-get 'header:songinfo-size-factor props 0.9) (ly:output-def-lookup layout 'line-width))) (infotext (chain-assoc-get 'header:infotext props (chain-assoc-get 'header:songinfo props #f)))
(infotext (chain-assoc-get 'header:songinfo props #f)) (poet-maybe-with-composer (chain-assoc-get 'header:poet props (if poetId (if poet-and-composer-same (format-poet-and-composer poetId) (format-poet poetId)) #f)))
(poet (chain-assoc-get 'header:poet props (if poetId (if poet-and-composer-same (format-poet-and-composer poetId) (format-poet poetId)) #f)))
(composer (chain-assoc-get 'header:composer props (if (and composerId (not poet-and-composer-same)) (format-composer composerId) #f))) (composer (chain-assoc-get 'header:composer props (if (and composerId (not poet-and-composer-same)) (format-composer composerId) #f)))
(poet-and-composer-stacked (chain-assoc-get 'header:poet-and-composer-stacked props songInfoPoetAndComposerStacked)) (copyright (chain-assoc-get 'header:copyright props #f))
(between-poet-and-composer-markup (chain-assoc-get 'header:between-poet-and-composer-markup props (make-hspace-markup 3))) (translation (chain-assoc-get 'header:translation props #f))
(copyright (chain-assoc-get 'header:copyright props #f))) (spelling (chain-assoc-get 'header:spelling props #f))
(markup #:override '(baseline-skip . 3.0) ( (year_text (chain-assoc-get 'header:year_text props #f))
make-fontsize-markup songInfoFontSize (year_melody (chain-assoc-get 'header:year_melody props #f)))
(make-sans-markup (markup
;%\override #'(line-width . 92) \wordwrap-field #symbol #:override (cons 'songinfo:poet-maybe-with-composer
(make-column-markup (list (if (and poet-maybe-with-composer (not (and (string? poet-maybe-with-composer) (string-null? poet-maybe-with-composer)))) poet-maybe-with-composer #f))
(make-line-markup #:override (cons 'songinfo:composer
(list (if (and composer (not (and (string? composer) (string-null? composer)))) composer #f))
(if (and poet (not (and (string? poet) (string-null? poet)))) (markup poet between-poet-and-composer-markup) "") #:override (cons 'songinfo:copyright
(if (and composer (not poet-and-composer-stacked)) composer "")) (if (and copyright (not (and (string? copyright) (string-null? copyright)))) copyright #f))
) #:override (cons 'songinfo:infotext
(if (and composer poet-and-composer-stacked) (make-line-markup (list composer)) "") (if (and infotext (not (and (string? infotext) (string-null? infotext)))) infotext #f))
(make-override-markup `(line-width . ,blockwidth) (make-justify-string-markup (string-append #:override (cons 'songinfo:translation
(if (and copyright (not (and (string? copyright) (string-null? copyright)))) (ly:format "© ~a\n\n" copyright) "") (if (and translation (not (and (string? translation) (string-null? translation)))) translation #f))
(if infotext infotext "") #:override (cons 'songinfo:spelling
))) (if (and spelling (not (and (string? spelling) (string-null? spelling)))) spelling #f))
))) #:override (cons 'songinfo:year_text
) (if (and year_text (not (and (string? year_text) (string-null? year_text)))) year_text #f))
) #:override (cons 'songinfo:year_melody
)) (if (and year_melody (not (and (string? year_melody) (string-null? year_melody)))) year_melody #f))
(ly:output-def-lookup layout 'songinfoMarkup)
)))
(make-null-markup))) (make-null-markup)))
) )

View File

@ -3,6 +3,15 @@
MUSIC = { \transposable \MUSIC } MUSIC = { \transposable \MUSIC }
verselayout = \layout {
\LAYOUT
\context {
\ChordNames
\override ChordName.font-size = \songTextChordFontSize
}
}
TEXT = \markuplist { \override #`(verselayout . verselayout) \TEXT }
% nur Output wenn noStandaloneOutput auf false steht % nur Output wenn noStandaloneOutput auf false steht
output = #(if (not noStandaloneOutput) output = #(if (not noStandaloneOutput)
#{ #{

View File

@ -9,7 +9,6 @@ songTextChordAlignment = #'left
songScoreChordFontSize = 3 songScoreChordFontSize = 3
songTextChordFontSize = 2 songTextChordFontSize = 2
songTextLineHeigth = 5.5 songTextLineHeigth = 5.5
songInfoPoetAndComposerStacked = ##f
songTocColumns = 3 songTocColumns = 3
globalSize = 15 globalSize = 15
lyricSize = 1.6 lyricSize = 1.6

View File

@ -9,7 +9,6 @@ songTextChordAlignment = #'center
songScoreChordFontSize = 0 songScoreChordFontSize = 0
songTextChordFontSize = \songScoreChordFontSize songTextChordFontSize = \songScoreChordFontSize
songTextLineHeigth = 5 songTextLineHeigth = 5
songInfoPoetAndComposerStacked = ##f
songTocColumns = 3 songTocColumns = 3
globalSize = 15 globalSize = 15
lyricSize = 1.6 lyricSize = 1.6

View File

@ -9,7 +9,6 @@ songTextChordAlignment = #'left
songScoreChordFontSize = 2 songScoreChordFontSize = 2
songTextChordFontSize = 2 songTextChordFontSize = 2
songTextLineHeigth = 5.3 songTextLineHeigth = 5.3
songInfoPoetAndComposerStacked = ##t
songTocColumns = 2 songTocColumns = 2
globalSize = 14 globalSize = 14
lyricSize = 1.6 lyricSize = 1.6

View File

@ -171,21 +171,6 @@
(cdr revlist))))))))) (cdr revlist)))))))))
\paper { \paper {
indexTitleMarkup = \markup \column {
\fontsize #5 \sans \bold \fill-line { \null \fromproperty #'index:text \null }
\vspace #.5
\justify {
Da die allermeisten Lieder unter verschiedenen Namen bekannt sind,
wollen wir euch ein Inhaltsverzeichnis an die Hand geben, mit dem ihr hoffentlich auf verschiedene Arten fündig werdet.
Die Liedtitel, die auch die Überschriften sind, findet ihr normal gedruckt.
Alle weiteren Alternativtitel oder Liedanfänge sind zur Unterscheidung kursiv gedruckt.
}
\vspace #1
}
categoryTitleMarkup = \markup \column {
\fontsize #5 \sans \bold \fill-line { \null \fromproperty #'index:text \null }
\vspace #1
}
indexItemMarkup = \markup \with-link-symbol-ref #'index:label { indexItemMarkup = \markup \with-link-symbol-ref #'index:label {
\index-item-with-pattern \index-item-with-pattern
} }
@ -199,29 +184,7 @@
} }
} }
%{
#(define-markup-list-command (index layout props) ()
( _i "Outputs an alphabetical sorted index, using the paper
variable @code{indexTitleMarkup} for its title, then the list of
lines built using the @code{indexItem} music function
Usage: @code{\\markuplines \\index}" )
(cons (interpret-markup layout (cons (list (cons 'index:text "Inhaltsverzeichnis")) props)
(ly:output-def-lookup layout 'indexTitleMarkup))
(space-lines (chain-assoc-get 'baseline-skip props)
(map (lambda (index-item)
(let ((label (car index-item))
(index-markup (cadr index-item))
(text (caddr index-item)))
(interpret-markup
layout
(cons (list (cons 'index:page
(markup #:page-ref label "XXX" "?"))
(cons 'index:text text)
(cons 'index:label label))
props)
(ly:output-def-lookup layout index-markup))))
(index-items)))))
%}
#(define (prepare-item-markup items layout) #(define (prepare-item-markup items layout)
(map (lambda (index-item) (map (lambda (index-item)
(let ((label (car index-item)) (let ((label (car index-item))
@ -233,33 +196,18 @@
(ly:output-def-lookup layout index-markup)))) (ly:output-def-lookup layout index-markup))))
(items))) (items)))
#(define-markup-list-command (index-in-columns-with-title layout props index-type title-markup) (symbol? markup?)
#(define-markup-list-command (colindex layout props) () ( _i "Outputs index alphabetical sorted or in categories" )
( _i "Outputs an alphabetical sorted index, using the paper (let ((items (case index-type
variable @code{indexTitleMarkup} for its title, then the list of ((alphabetical) index-items)
lines built using the @code{indexItem} music function ((categories) category-index-items)))
Usage: @code{\\markuplines \\index}" ) (title (interpret-markup layout props title-markup)))
(let ((title (interpret-markup layout (cons (list (cons 'index:text "Inhaltsverzeichnis")) props) (cons title
(ly:output-def-lookup layout 'indexTitleMarkup)))) (interpret-markup-list layout props
(cons title (make-columnlayout-markup-list songTocColumns 2
(interpret-markup-list layout props (let ((h (- (ly:output-def-lookup layout 'paper-height) 12)))
(make-columnlayout-markup-list songTocColumns 2 (cons (- h (interval-length (ly:stencil-extent title Y))) h))
(let ((h (- (ly:output-def-lookup layout 'paper-height) 12))) (prepare-item-markup items layout))))))
(cons (- h (interval-length (ly:stencil-extent title Y))) h))
(prepare-item-markup index-items layout))))))
#(define-markup-list-command (categoryindex layout props) ()
( _i "Outputs categorized song titles" )
(if (null-list? (category-index-items))
(list)
(let ((title (interpret-markup layout (cons (list (cons 'index:text "Inhaltsverzeichnis nach Kategorien")) props)
(ly:output-def-lookup layout 'categoryTitleMarkup))))
(cons title
(interpret-markup-list layout props
(make-columnlayout-markup-list songTocColumns 2
(let ((h (- (ly:output-def-lookup layout 'paper-height) 12)))
(cons (- h (interval-length (ly:stencil-extent title Y))) h))
(prepare-item-markup category-index-items layout)))))))
indexItem = indexItem =
#(define-music-function (parser location sorttext text) (string? markup?) #(define-music-function (parser location sorttext text) (string? markup?)
@ -271,18 +219,6 @@ indexSection =
"Add a section line to the alphabetical index, using @code{indexSectionMarkup} paper variable markup. This can be used to divide the alphabetical index into different sections, for example one section for each first letter." "Add a section line to the alphabetical index, using @code{indexSectionMarkup} paper variable markup. This can be used to divide the alphabetical index into different sections, for example one section for each first letter."
(add-index-item! 'indexSectionMarkup text sorttext)) (add-index-item! 'indexSectionMarkup text sorttext))
%{
addTitleToTOC = #(define-music-function (parser location title) (string?)
#{
\indexItem #title \markup { #title }
#})
addAltTitleToTOC = #(define-music-function (parser location title) (string?)
#{
\indexItem #title \markup { \italic #title }
#})
%}
#(define (extract-var-from-module module sym) #(define (extract-var-from-module module sym)
(let ((variableref (assoc-ref module sym))) (let ((variableref (assoc-ref module sym)))
(if variableref (variable-ref variableref) #f)) (if variableref (variable-ref variableref) #f))

View File

@ -5,7 +5,7 @@
#{ \markup { \column { #{ \markup { \column {
$(let ((verse-markup-string ( $(let ((verse-markup-string (
string-append "\\line { " string-append "\\line { "
(ly:regex-replace (ly:make-regex "\n") text " } \\line { ") (ly:regex-replace (ly:make-regex "\r?\n") text " } \\line { ")
" \\size-box-to-box ##f ##t \"\" \"Agj\" }" ))) " \\size-box-to-box ##f ##t \"\" \"Agj\" }" )))
(ly:parser-include-string verse-markup-string)) (ly:parser-include-string verse-markup-string))
}}#} }}#}
@ -66,17 +66,18 @@
% Text über Text mittig darstellen % Text über Text mittig darstellen
#(define-markup-command (textup layout props text uptext) (markup? markup?) #(define-markup-command (textup layout props text uptext) (markup? markup?)
"Markup über Text mittig darstellen." "Markup über Text mittig darstellen."
(let ((verselayout (chain-assoc-get 'verselayout props generalLayout)))
(interpret-markup layout props (interpret-markup layout props
#{\markup { #{\markup {
\size-box-to-box-style-dependent ##t ##f \size-box-to-box-style-dependent ##t ##f
\general-align #X #LEFT \override #`(direction . ,UP) \override #'(baseline-skip . 1.0) \dir-column \chord-alignment-style-dependent { \general-align #X #LEFT \override #`(direction . ,UP) \override #'(baseline-skip . 1.0) \dir-column \chord-alignment-style-dependent {
\pad-to-box #'(0 . 0) #'(0 . 2.0) { #text } \pad-to-box #'(0 . 0) #'(0 . 2.0) { #text }
\size-box-to-box ##f ##t #uptext \score { \chords { g4:m a } \layout { \generalLayout } } \size-box-to-box ##f ##t #uptext \score { \chords { g4:m a } \layout { \verselayout } }
} }
#text #text
} }
#} #}
)) )))
#(define-markup-command (anchor-x-between layout props arga argb) #(define-markup-command (anchor-x-between layout props arga argb)
(markup? markup?) (markup? markup?)
@ -88,43 +89,60 @@
#(define-markup-command (stanza-raw layout props arg) #(define-markup-command (stanza-raw layout props arg)
(markup?) (markup?)
(let ((verselayout (chain-assoc-get 'verselayout props generalLayout)))
(interpret-markup layout props (interpret-markup layout props
(if (and (string? arg) (string-null? arg)) (if (and (string? arg) (string-null? arg))
" " " "
#{\markup #{\markup
\score { \new Lyrics { \lyricmode { \set stanza = #arg "" } } \layout { \generalLayout } } \score { \new Lyrics { \lyricmode { \set stanza = #arg "" } } \layout { \verselayout } }
#} #}
))) ))))
#(define-markup-command (stanza layout props arg) #(define-markup-command (stanza layout props arg)
(markup?) (markup?)
(interpret-markup layout props (interpret-markup layout props
(make-size-box-to-box-markup #f #t (make-stanza-raw-markup arg) (make-stanza-raw-markup "x")))) (make-size-box-to-box-markup #f #t (make-stanza-raw-markup arg) (make-stanza-raw-markup "x"))))
#(define (handle-custom-newlines custom-verse-breaks text)
(if (null? custom-verse-breaks)
text
(let make-custom-linebreaks
((break-words custom-verse-breaks)
(newtext (ly:regex-replace (ly:make-regex "\r?\n") text " ")))
(if (null? break-words)
newtext
(make-custom-linebreaks
(cdr break-words)
(ly:regex-replace
(ly:make-regex (string-append "(" (ly:regex-replace (ly:make-regex "(.)") (car break-words) "(?:\\(?" 1 "| *,[^,)]+\\)" 1 ")") "(?: *,[^,)]+\\))?)(.*)$"))
newtext
1 "\n" 2))))))
% Kompletten Vers mit Akkorden % Kompletten Vers mit Akkorden
#(define-markup-command (chordverse layout props stanza verse) (markup? string?) #(define-markup-command (chordverse layout props stanza verse) (markup? string?)
#:properties ((intraverse-vspace 0)) #:properties ((intraverse-vspace 0)(custom-verse-breaks '()))
"Vers mit Akkorden" "Vers mit Akkorden"
(let* ((fromto (chain-assoc-get 'transposition props #f)) (let* ((fromto (chain-assoc-get 'transposition props #f))
(transp (if fromto (transp (if fromto
(string-append "\\transpose " (car fromto) " " (cdr fromto)) (string-append "\\transpose " (car fromto) " " (cdr fromto))
""))) ""))
(verselayout (chain-assoc-get 'verselayout props generalLayout)))
(interpret-markup layout props (interpret-markup layout props
(markup #:override `(baseline-skip . ,(+ intraverse-vspace songTextLineHeigth)) #:anchor-x-between #:stanza stanza (markup #:override `(baseline-skip . ,(+ intraverse-vspace songTextLineHeigth)) #:anchor-x-between #:stanza stanza
(make-wrap-newline-markup (make-wrap-newline-markup
(ly:regex-replace (ly:make-regex "\\(( *)([^,()]*)( *),([^)]*)\\)") (ly:regex-replace (ly:make-regex "\\(( *)([^,()]*)( *),([^)]*)\\)")
(ly:regex-replace (ly:make-regex "(([^ \n]*\\([^()]*,[^()]+\\)[^ \n(]*)+)") verse " \\concat { " 1 " } ") (ly:regex-replace (ly:make-regex "(([^ \n]*\\([^()]*,[^()]+\\)[^ \n(]*)+)") (handle-custom-newlines custom-verse-breaks verse) " \\concat { " 1 " } ")
"\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { \\transposable " transp " \\chords { s4 " 4 " } \\layout { \\verseChordLayout } }") "\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { \\transposable " transp " \\chords { s4 " 4 " } \\layout { \\verselayout } }")
) )
)))) ))))
% Kompletter Vers aus dem Akkorde entfernt werden % Kompletter Vers aus dem Akkorde entfernt werden
#(define-markup-command (nochordverse layout props stanza verse) (markup? string?) #(define-markup-command (nochordverse layout props stanza verse) (markup? string?)
#:properties ((intraverse-vspace 0)) #:properties ((intraverse-vspace 0)(custom-verse-breaks '()))
"Vers ohne Akkorde" "Vers ohne Akkorde"
(interpret-markup layout props (interpret-markup layout props
(markup #:override `(baseline-skip . ,(+ intraverse-vspace 3.0)) #:anchor-x-between #:stanza stanza (markup #:override `(baseline-skip . ,(+ intraverse-vspace 3.0)) #:anchor-x-between #:stanza stanza
#:wrap-newline (ly:regex-replace (ly:make-regex "\\(([^,]*),([^)]*)\\)") verse 1) #:wrap-newline (ly:regex-replace (ly:make-regex "\\(([^,]*),([^)]*)\\)") (handle-custom-newlines custom-verse-breaks verse) 1)
) )
) )
) )
@ -142,26 +160,25 @@
(verse-hspace 1) (verse-hspace 1)
(verse-ordering-horizontal #f)) (verse-ordering-horizontal #f))
"Gruppiere Strophen in einem Markup auf Wunsch spaltenweise" "Gruppiere Strophen in einem Markup auf Wunsch spaltenweise"
(let ((h (make-hash-table verse-cols)) (define (add-markup-between-elements reverses markup-between elements)
(index 0) ((if reverses fold fold-right) (lambda (element filled-list)
(column-item-count (ceiling (/ (length versegroup) verse-cols)))) (cons element (if (null? filled-list) '() (cons markup-between filled-list))))
(for-each (lambda (el) '() elements))
(let ((i (if verse-ordering-horizontal (let* ((column-item-count (ceiling (/ (length versegroup) verse-cols)))
(modulo index verse-cols) (column-data (make-list verse-cols)))
(floor (/ index column-item-count))))) (let columnize-list ((index 0) (items versegroup))
(hashv-set! h i (cons el (hashv-ref h i (list)))) (set! index (+ index 1)))) (if (not (null? items))
versegroup) (let* ((column-index (if verse-ordering-horizontal
(interpret-markup layout props (modulo index verse-cols)
(make-fill-line-markup (cons (make-verseformat-markup (make-line-markup (floor (/ index column-item-count))))
(reverse (hash-fold (lambda (key value l) (column-markups (list-ref column-data column-index)))
(cons (make-column-markup (list-set! column-data column-index (cons (car items) column-markups))
(fold (lambda (v verses) (columnize-list (+ index 1) (cdr items)))))
(cons v (if (null? verses) (interpret-markup layout props
verses (make-fill-line-markup (list (make-verseformat-markup (make-line-markup
(cons (make-vspace-markup verse-vspace) verses)))) (add-markup-between-elements #f
(list) value)) (make-hspace-markup verse-hspace)
(if (null-list? l) (map (lambda (column-markups)
l (make-column-markup
(cons (make-hspace-markup verse-hspace) l)))) (add-markup-between-elements #t (make-vspace-markup verse-vspace) column-markups)))
(list) h)))) column-data)))))))))
(list))))))