X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Ftoc-init.ly;h=ad7c64b72c5e421876ed74796e6a9ca37ba57921;hb=2c894ac3f60274f9fdd0bf2593cfb856c5c7b13f;hp=dda4f31ab4d13250336decea7f2c3e57c87485e6;hpb=38d7d319eabc906e82fb42002678c6d42a23b6f7;p=lilypond.git diff --git a/ly/toc-init.ly b/ly/toc-init.ly index dda4f31ab4..ad7c64b72c 100644 --- a/ly/toc-init.ly +++ b/ly/toc-init.ly @@ -1,4 +1,4 @@ -\version "2.12.0" +\version "2.19.22" %% defined later, in a closure #(define-public (add-toc-item! markup-symbol text) @@ -7,53 +7,59 @@ #f) #(let ((toc-item-list (list))) + (call-after-session (lambda () (set! toc-item-list '()))) (set! add-toc-item! - (lambda (markup-symbol text) - (let ((label (gensym "toc"))) - (set! toc-item-list - (cons (list label markup-symbol text) - toc-item-list)) - (make-music 'EventChord - 'page-marker #t - 'page-label label - 'elements (list (make-music 'LabelEvent - 'page-label label)))))) + (lambda (markup-symbol text) + (let ((label (gensym "toc"))) + (set! toc-item-list + (cons (list label markup-symbol text) + toc-item-list)) + (make-music 'EventChord + 'page-marker #t + 'page-label label + 'elements (list (make-music 'LabelEvent + 'page-label label)))))) (set! toc-items (lambda () - (reverse toc-item-list)))) + (reverse toc-item-list)))) \paper { tocTitleMarkup = \markup \huge \column { \fill-line { \null "Table of Contents" \null } - \hspace #1 + \null } tocItemMarkup = \markup \fill-line { \fromproperty #'toc:text \fromproperty #'toc:page } } +tocItemWithDotsMarkup = \markup \fill-with-pattern #1 #RIGHT . + \fromproperty #'toc:text \fromproperty #'toc:page + #(define-markup-list-command (table-of-contents layout props) () + #:properties ((baseline-skip)) ( _i "Outputs the table of contents, using the paper variable @code{tocTitleMarkup} for its title, then the list of lines built using the @code{tocItem} music function -Usage: @code{\\markuplines \\table-of-contents}" ) +Usage: @code{\\markuplist \\table-of-contents}" ) (cons (interpret-markup layout props - (ly:output-def-lookup layout 'tocTitleMarkup)) - (space-lines (chain-assoc-get 'baseline-skip props) - (map (lambda (toc-item) - (let ((label (car toc-item)) - (toc-markup (cadr toc-item)) - (text (caddr toc-item))) - (interpret-markup - layout - (cons (list (cons 'toc:page - (markup #:page-ref label "XXX" "?")) - (cons 'toc:text text)) - props) - (ly:output-def-lookup layout toc-markup)))) - (toc-items))))) + (ly:output-def-lookup layout 'tocTitleMarkup)) + (space-lines baseline-skip + (map (lambda (toc-item) + (let ((label (car toc-item)) + (toc-markup (cadr toc-item)) + (text (caddr toc-item))) + (interpret-markup + layout + (cons (list (cons 'toc:page + (markup #:with-link label #:page-ref label "XXX" "?")) + (cons 'toc:text (markup #:with-link label text)) + (cons 'toc:label label)) + props) + (ly:output-def-lookup layout toc-markup)))) + (toc-items))))) -tocItem = -#(define-music-function (parser location text) (markup?) +tocItem = +#(define-music-function (text) (markup?) "Add a line to the table of content, using the @code{tocItemMarkup} paper variable markup" (add-toc-item! 'tocItemMarkup text))