/usr/share/lilypond/2.16.2/scm/markup.scm is in lilypond-data 2.16.2-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | ;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
;;;; Copyright (C) 2003--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; the Free Software Foundation, either version 3 of the License, or
;;;; (at your option) any later version.
;;;;
;;;; LilyPond is distributed in the hope that it will be useful,
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;;; GNU General Public License for more details.
;;;;
;;;; You should have received a copy of the GNU General Public License
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
(defmacro*-public markup (#:rest body)
"The `markup' macro provides a lilypond-like syntax for building markups.
- #:COMMAND is used instead of \\COMMAND
- #:line ( ... ) is used instead of \\line { ... }
- etc.
Example:
\\markup { foo
\\raise #0.2 \\hbracket \\bold bar
\\override #'(baseline-skip . 4)
\\bracket \\column { baz bazr bla }
}
<==>
(markup \"foo\"
#:raise 0.2 #:hbracket #:bold \"bar\"
#:override '(baseline-skip . 4)
#:bracket #:column (\"baz\" \"bazr\" \"bla\"))"
(car (compile-all-markup-expressions `(#:line ,body))))
;; utility
(define (markup-join markups sep)
"Return line-markup of MARKUPS, joining them with markup SEP"
(if (pair? markups)
(make-line-markup (list-insert-separator markups sep))
empty-markup))
(define-public interpret-markup ly:text-interface::interpret-markup)
(define-public (interpret-markup-list layout props markup-list)
(let ((stencils (list)))
(for-each (lambda (m)
(set! stencils
(if (markup-command-list? m)
(append! (reverse! (apply (car m) layout props (cdr m)))
stencils)
(cons (interpret-markup layout props m) stencils))))
markup-list)
(reverse! stencils)))
(define-public (prepend-alist-chain key val chain)
(cons (acons key val (car chain)) (cdr chain)))
(define-public (stack-stencil-line space stencils)
"DOCME"
(if (and (pair? stencils)
(ly:stencil? (car stencils)))
(if (and (pair? (cdr stencils))
(ly:stencil? (cadr stencils)))
(let* ((tail (stack-stencil-line space (cdr stencils)))
(head (car stencils))
(xoff (+ space (interval-length (ly:stencil-extent head X)))))
(ly:stencil-add head
(ly:stencil-translate-axis tail xoff X)))
(car stencils))
(ly:make-stencil '() '(0 . 0) '(0 . 0))))
;;; convert a full markup object to an approximate pure string representation
(define-public (markup->string m . argscopes)
(let* ((scopes (if (pair? argscopes) (car argscopes) '())))
;; markup commands with one markup argument, formatting ignored
(define markups-first-argument '(list
bold-markup box-markup caps-markup dynamic-markup finger-markup
fontCaps-markup huge-markup italic-markup large-markup larger-markup
medium-markup normal-size-sub-markup normal-size-super-markup
normal-text-markup normalsize-markup number-markup roman-markup
sans-markup simple-markup small-markup smallCaps-markup smaller-markup
sub-markup super-markup teeny-markup text-markup tiny-markup
typewriter-markup underline-markup upright-markup bracket-markup
circle-markup hbracket-markup parenthesize-markup rounded-box-markup
center-align-markup center-column-markup column-markup dir-column-markup
fill-line-markup justify-markup justify-string-markup left-align-markup
left-column-markup line-markup right-align-markup right-column-markup
vcenter-markup wordwrap-markup wordwrap-string-markup ))
;; markup commands with markup as second argument, first argument
;; specifies some formatting and is ignored
(define markups-second-argument '(list
abs-fontsize-markup fontsize-markup magnify-markup lower-markup
pad-around-markup pad-markup-markup pad-x-markup raise-markup
halign-markup hcenter-in-markup rotate-markup translate-markup
translate-scaled-markup with-url-markup scale-markup ))
;; helper functions to handle string cons like string lists
(define (markup-cons->string-cons c scopes)
(if (not (pair? c)) (markup->string c scopes)
(cons (markup->string (car c) scopes) (markup-cons->string-cons (cdr c) scopes))))
(define (string-cons-join c)
(if (not (pair? c)) c
(string-join (list (car c) (string-cons-join (cdr c))) "")))
(cond
((string? m) m)
((null? m) "")
((not (pair? m)) "")
;; handle \concat (string-join without spaces)
((and (pair? m) (equal? (car m) concat-markup))
(string-cons-join (markup-cons->string-cons (cadr m) scopes)) )
;; markup functions with the markup as first arg
((member (car m) (primitive-eval markups-first-argument))
(markup->string (cadr m) scopes))
;; markup functions with markup as second arg
((member (car m) (primitive-eval markups-second-argument))
(markup->string (cddr m) scopes))
;; fromproperty-markup reads property values from the header block:
((equal? (car m) fromproperty-markup)
(let* ((varname (symbol->string (cadr m)))
;; cut off the header: prefix from the variable name:
(newvarname (if (string-prefix? "header:" varname) (substring varname 7) varname))
(var (string->symbol newvarname))
(mod (make-module 1)))
;; Prevent loops by temporarily clearing the variable we have just looked up
(module-define! mod var "")
(markup->string (ly:modules-lookup scopes var) (cons mod scopes))))
;; ignore all other markup functions
((markup-function? (car m)) "")
;; handle markup lists
((list? m)
(string-join (map (lambda (mm) (markup->string mm scopes)) m) " "))
(else "ERROR, unable to extract string from markup"))))
|