@end lilypond"
(let* ((thick (ly:output-def-lookup layout 'line-thickness))
(underline-thick (* thickness thick))
- (markup (interpret-markup layout props arg))
- (x1 (car (ly:stencil-extent markup X)))
- (x2 (cdr (ly:stencil-extent markup X)))
+ (m (interpret-markup layout props arg))
+ (x1 (car (ly:stencil-extent m X)))
+ (x2 (cdr (ly:stencil-extent m X)))
(y (* thick (- offset)))
(line (make-line-stencil underline-thick x1 y x2 y)))
- (ly:stencil-add markup line)))
+ (ly:stencil-add m line)))
(define-markup-command (box layout props arg)
(markup?)
@end lilypond"
(interpret-markup layout props str))
+(define-markup-command (first-visible layout props args)
+ (markup-list?)
+ #:category other
+ "Use the first markup in @var{args} that yields a non-empty stencil
+and ignore the rest.
+
+@lilypond[verbatim,quote]
+\\markup {
+ \\first-visible {
+ \\fromproperty #'header:composer
+ \\italic Unknown
+ }
+}
+@end lilypond"
+ (define (false-if-empty stencil)
+ (if (ly:stencil-empty? stencil) #f stencil))
+ (or
+ (any
+ (lambda (m)
+ (if (markup? m)
+ (false-if-empty (interpret-markup layout props m))
+ (any false-if-empty (interpret-markup-list layout props (list m)))))
+ args)
+ empty-stencil))
+
(define-public empty-markup
(make-simple-markup ""))
"Perform simple wordwrap, return stencil of each line."
(define space (if justify
;; justify only stretches lines.
- (* 0.7 base-space)
- base-space))
+ (* 0.7 base-space)
+ base-space))
(define (stencil-len s)
(interval-end (ly:stencil-extent s X)))
(define (maybe-shift line)
(define-markup-command (abs-fontsize layout props size arg)
(number? markup?)
#:category font
- "Use @var{size} as the absolute font size to display @var{arg}.
+ "Use @var{size} as the absolute font size (in points) to display @var{arg}.
Adjusts @code{baseline-skip} and @code{word-space} accordingly.
@lilypond[verbatim,quote]
}
}
@end lilypond"
- (let* ((markup (interpret-markup layout props arg))
+ (let* ((m (interpret-markup layout props arg))
(scaled-width (* size width))
(scaled-thickness
(* (chain-assoc-get 'line-thickness props 0.1)
(* (/ 4 3.0) scaled-width)))
(padding (chain-assoc-get 'padding props half-thickness)))
(parenthesize-stencil
- markup half-thickness scaled-width angularity padding)))
+ m half-thickness scaled-width angularity padding)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Reference to a page number. @var{label} is the label set on the referenced
page (using the @code{\\label} command), @var{gauge} a markup used to estimate
the maximum width of the page number, and @var{default} the value to display
-when @var{label} is not found."
+when @var{label} is not found.
+
+(If the current book or bookpart is set to use roman numerals for page numbers,
+the reference will be formatted accordingly -- in which case the @var{gauge}'s
+width may require additional tweaking.)"
(let* ((gauge-stencil (interpret-markup layout props gauge))
(x-ext (ly:stencil-extent gauge-stencil X))
(y-ext (ly:stencil-extent gauge-stencil Y)))
(page-number (if (list? table)
(assoc-get label table)
#f))
- (page-markup (if page-number (format #f "~a" page-number) default))
+ (number-type (ly:output-def-lookup layout 'page-number-type))
+ (page-markup (if page-number
+ (number-format number-type page-number)
+ default))
(page-stencil (interpret-markup layout props page-markup))
(gap (- (interval-length x-ext)
(interval-length (ly:stencil-extent page-stencil X)))))