annotate patches/lilypond-guile-2.0.patch @ 6500:2c57f92179f2

guile: more build and mingw patches.
author Jan Nieuwenhuizen <janneke@gnu.org>
date Thu, 17 Mar 2011 21:59:08 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6500
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1 diff --git a/ly/toc-init.ly b/ly/toc-init.ly
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
2 index 488e22b..677bbb0 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
3 --- a/ly/toc-init.ly
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
4 +++ b/ly/toc-init.ly
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
5 @@ -34,26 +34,26 @@
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
6 tocItemWithDotsMarkup = \markup \fill-with-pattern #1 #RIGHT .
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
7 \fromproperty #'toc:text \fromproperty #'toc:page
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
8
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
9 -#(define-markup-list-command (table-of-contents layout props) ()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
10 - ( _i "Outputs the table of contents, using the paper variable
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
11 -@code{tocTitleMarkup} for its title, then the list of lines
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
12 -built using the @code{tocItem} music function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
13 -Usage: @code{\\markuplines \\table-of-contents}" )
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
14 - (cons (interpret-markup layout props
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
15 - (ly:output-def-lookup layout 'tocTitleMarkup))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
16 - (space-lines (chain-assoc-get 'baseline-skip props)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
17 - (map (lambda (toc-item)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
18 - (let ((label (car toc-item))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
19 - (toc-markup (cadr toc-item))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
20 - (text (caddr toc-item)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
21 - (interpret-markup
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
22 - layout
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
23 - (cons (list (cons 'toc:page
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
24 - (markup #:page-ref label "XXX" "?"))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
25 - (cons 'toc:text text))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
26 - props)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
27 - (ly:output-def-lookup layout toc-markup))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
28 - (toc-items)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
29 +%#(define-markup-list-command (table-of-contents layout props) ()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
30 +% ( _i "Outputs the table of contents, using the paper variable
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
31 +%@code{tocTitleMarkup} for its title, then the list of lines
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
32 +%built using the @code{tocItem} music function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
33 +%Usage: @code{\\markuplines \\table-of-contents}" )
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
34 +% (cons (interpret-markup layout props
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
35 +% (ly:output-def-lookup layout 'tocTitleMarkup))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
36 +% (space-lines (chain-assoc-get 'baseline-skip props)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
37 +% (map (lambda (toc-item)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
38 +% (let ((label (car toc-item))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
39 +% (toc-markup (cadr toc-item))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
40 +% (text (caddr toc-item)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
41 +% (interpret-markup
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
42 +% layout
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
43 +% (cons (list (cons 'toc:page
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
44 +% (markup #:page-ref label "XXX" "?"))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
45 +% (cons 'toc:text text))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
46 +% props)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
47 +% (ly:output-def-lookup layout toc-markup))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
48 +% (toc-items)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
49
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
50 tocItem =
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
51 #(define-music-function (parser location text) (markup?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
52 diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
53 index 5de7fdc..c52b953 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
54 --- a/scm/define-markup-commands.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
55 +++ b/scm/define-markup-commands.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
56 @@ -2419,32 +2419,6 @@ normal text font, no matter what font was used earlier.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
57 ;; symbols.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
58 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
59
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
60 -(define-markup-command (musicglyph layout props glyph-name)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
61 - (string?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
62 - #:category music
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
63 - "@var{glyph-name} is converted to a musical symbol; for example,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
64 -@code{\\musicglyph #\"accidentals.natural\"} selects the natural sign from
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
65 -the music font. See @ruser{The Feta font} for a complete listing of
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
66 -the possible glyphs.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
67 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
68 -@lilypond[verbatim,quote]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
69 -\\markup {
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
70 - \\musicglyph #\"f\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
71 - \\musicglyph #\"rests.2\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
72 - \\musicglyph #\"clefs.G_change\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
73 -}
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
74 -@end lilypond"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
75 - (let* ((font (ly:paper-get-font layout
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
76 - (cons '((font-encoding . fetaMusic)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
77 - (font-name . #f))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
78 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
79 - props)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
80 - (glyph (ly:font-get-glyph font glyph-name)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
81 - (if (null? (ly:stencil-expr glyph))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
82 - (ly:warning (_ "Cannot find glyph ~a") glyph-name))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
83 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
84 - glyph))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
85 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
86 (define-markup-command (doublesharp layout props)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
87 ()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
88 #:category music
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
89 @@ -2612,6 +2586,33 @@ Use the filled head if @var{filled} is specified.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
90 props))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
91 name)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
92
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
93 +(define-markup-command (musicglyph layout props glyph-name)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
94 + (string?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
95 + #:category music
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
96 + "@var{glyph-name} is converted to a musical symbol; for example,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
97 +@code{\\musicglyph #\"accidentals.natural\"} selects the natural sign from
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
98 +the music font. See @ruser{The Feta font} for a complete listing of
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
99 +the possible glyphs.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
100 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
101 +@lilypond[verbatim,quote]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
102 +\\markup {
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
103 + \\musicglyph #\"f\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
104 + \\musicglyph #\"rests.2\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
105 + \\musicglyph #\"clefs.G_change\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
106 +}
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
107 +@end lilypond"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
108 + (let* ((font (ly:paper-get-font layout
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
109 + (cons '((font-encoding . fetaMusic)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
110 + (font-name . #f))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
111 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
112 + props)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
113 + (glyph (ly:font-get-glyph font glyph-name)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
114 + (if (null? (ly:stencil-expr glyph))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
115 + (ly:warning (_ "Cannot find glyph ~a") glyph-name))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
116 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
117 + glyph))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
118 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
119 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
120 (define-markup-command (lookup layout props glyph-name)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
121 (string?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
122 #:category other
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
123 @@ -3137,7 +3138,7 @@ and/or @code{extra-offset} properties.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
124 Make a fraction of two markups.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
125 @lilypond[verbatim,quote]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
126 \\markup {
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
127 - π ≈
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
128 + pi is
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
129 \\fraction 355 113
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
130 }
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
131 @end lilypond"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
132 @@ -3575,3 +3576,13 @@ where @var{X} is the number of staff spaces."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
133 (pair? markup-list?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
134 "Like @code{\\override}, for markup lists."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
135 (interpret-markup-list layout (cons (list new-prop) props) args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
136 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
137 +; Draws a circle around markup if (= trigger 0.5)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
138 +(define-markup-command
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
139 + (conditional-circle-markup layout props trigger in-markup)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
140 + (number? markup?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
141 + (interpret-markup layout props
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
142 + (if (eqv? trigger 0.5)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
143 + (markup #:circle (markup in-markup))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
144 + (markup in-markup))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
145 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
146 diff --git a/scm/define-woodwind-diagrams.scm b/scm/define-woodwind-diagrams.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
147 index 29825fd..de28080 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
148 --- a/scm/define-woodwind-diagrams.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
149 +++ b/scm/define-woodwind-diagrams.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
150 @@ -256,15 +256,6 @@ returns @samp{1/3}."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
151
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
152 ;;; Commands for text layout
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
153
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
154 -; Draws a circle around markup if (= trigger 0.5)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
155 -(define-markup-command
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
156 - (conditional-circle-markup layout props trigger in-markup)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
157 - (number? markup?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
158 - (interpret-markup layout props
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
159 - (if (eqv? trigger 0.5)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
160 - (markup #:circle (markup in-markup))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
161 - (markup in-markup))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
162 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
163 ; Makes a list of named-keys
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
164 (define (make-name-keylist input-list key-list font-size)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
165 (map (lambda (x y)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
166 diff --git a/scm/document-identifiers.scm b/scm/document-identifiers.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
167 index ffccf72..9ea707e 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
168 --- a/scm/document-identifiers.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
169 +++ b/scm/document-identifiers.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
170 @@ -22,19 +22,12 @@
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
171 ((name-sym (car music-func-pair))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
172 (music-func (cdr music-func-pair))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
173 (func (ly:music-function-extract music-func))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
174 - (arg-names
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
175 - (map symbol->string
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
176 - (cddr (cadr (procedure-source func)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
177 + (arg-names "")
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
178 (doc (procedure-documentation func))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
179 (sign (object-property func 'music-function-signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
180 (type-names (map type-name sign))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
181
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
182 - (signature-str
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
183 - (string-join
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
184 - (map (lambda (x) (format "@var{~a} (~a)"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
185 - (car x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
186 - (cadr x)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
187 - (zip arg-names type-names)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
188 + (signature-str ""))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
189 (format
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
190 "@item @code{~a}~a~a
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
191 @findex ~a
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
192 diff --git a/scm/document-markup.scm b/scm/document-markup.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
193 index c348e66..b99165b 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
194 --- a/scm/document-markup.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
195 +++ b/scm/document-markup.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
196 @@ -46,10 +46,7 @@
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
197 (f-name (symbol->string (procedure-name func)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
198 (c-name (regexp-substitute/global #f "-markup(-list)?$" f-name 'pre "" 'post))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
199 (sig (object-property func 'markup-signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
200 - (arg-names (let ((arg-list (cadr (procedure-source func))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
201 - (if (list? arg-list)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
202 - (map symbol->string (cddr arg-list))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
203 - (make-list (length sig) "arg"))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
204 + (arg-names (make-list (length sig) "arg"))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
205 (sig-type-names (map type-name sig))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
206 (signature-str
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
207 (string-join
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
208 @@ -79,11 +76,11 @@
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
209 (let* ((category-string (symbol->string category))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
210 (category-name (string-capitalize (regexp-substitute/global #f
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
211 "-" category-string 'pre " " 'post)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
212 - (markup-functions (hash-fold (lambda (markup-function dummy functions)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
213 - (cons markup-function functions))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
214 - '()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
215 - (hashq-ref markup-functions-by-category
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
216 - category))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
217 + (markup-functions (hash-fold (lambda (markup-function dummy functions)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
218 + (cons markup-function functions))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
219 + '()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
220 + (hashq-ref markup-functions-by-category
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
221 + category))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
222 (make <texi-node>
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
223 #:appendix #t
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
224 #:name category-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
225 diff --git a/scm/lily-library.scm b/scm/lily-library.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
226 index 0e2c810..2a5c760 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
227 --- a/scm/lily-library.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
228 +++ b/scm/lily-library.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
229 @@ -746,6 +746,35 @@ Handy for debugging, possibly turned off."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
230
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
231 (reverse matches))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
232
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
233 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
234 +;; Color
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
235 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
236 +(define-public (color? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
237 + (and (list? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
238 + (= 3 (length x))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
239 + (apply eq? #t (map number? x))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
240 + (apply eq? #t (map (lambda (y) (<= 0 y 1)) x))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
241 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
242 +(define-public (rgb-color r g b) (list r g b))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
243 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
244 +; predefined colors
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
245 +(define-public black '(0.0 0.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
246 +(define-public white '(1.0 1.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
247 +(define-public red '(1.0 0.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
248 +(define-public green '(0.0 1.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
249 +(define-public blue '(0.0 0.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
250 +(define-public cyan '(0.0 1.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
251 +(define-public magenta '(1.0 0.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
252 +(define-public yellow '(1.0 1.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
253 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
254 +(define-public grey '(0.5 0.5 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
255 +(define-public darkred '(0.5 0.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
256 +(define-public darkgreen '(0.0 0.5 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
257 +(define-public darkblue '(0.0 0.0 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
258 +(define-public darkcyan '(0.0 0.5 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
259 +(define-public darkmagenta '(0.5 0.0 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
260 +(define-public darkyellow '(0.5 0.5 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
261 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
262 ;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
263 ;; other
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
264
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
265 diff --git a/scm/lily.scm b/scm/lily.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
266 index 203a449..3558ba7 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
267 --- a/scm/lily.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
268 +++ b/scm/lily.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
269 @@ -404,29 +404,28 @@ LilyPond safe mode. The syntax is the same as `define*-public'."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
270 "define-music-callbacks.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
271 "define-music-types.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
272 "define-note-names.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
273 - "output-lib.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
274 "c++.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
275 - "chord-ignatzek-names.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
276 "chord-entry.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
277 - "chord-generic-names.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
278 "stencil.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
279 + "markup-macros.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
280 + "define-markup-commands.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
281 "markup.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
282 "modal-transforms.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
283 + "output-lib.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
284 + "chord-generic-names.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
285 + "chord-ignatzek-names.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
286 "music-functions.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
287 "part-combiner.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
288 "autochange.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
289 "define-music-properties.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
290 "time-signature-settings.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
291 "auto-beam.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
292 + "chord-name.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
293 "bezier-tools.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
294 "parser-ly-from-scheme.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
295 "ly-syntax-constructors.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
296
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
297 "define-context-properties.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
298 - ;; guile 1.9 wants markups defined before referenced
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
299 - "define-markup-commands.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
300 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
301 - "chord-name.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
302 "translation-functions.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
303 "script.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
304 "midi.scm"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
305 diff --git a/scm/markup-macros.scm b/scm/markup-macros.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
306 new file mode 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
307 index 0000000..e1f26e6
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
308 --- /dev/null
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
309 +++ b/scm/markup-macros.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
310 @@ -0,0 +1,479 @@
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
311 +;;;; This file is part of LilyPond, the GNU music typesetter.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
312 +;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
313 +;;;; Copyright (C) 2003--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
314 +;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
315 +;;;; LilyPond is free software: you can redistribute it and/or modify
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
316 +;;;; it under the terms of the GNU General Public License as published by
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
317 +;;;; the Free Software Foundation, either version 3 of the License, or
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
318 +;;;; (at your option) any later version.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
319 +;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
320 +;;;; LilyPond is distributed in the hope that it will be useful,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
321 +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
322 +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
323 +;;;; GNU General Public License for more details.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
324 +;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
325 +;;;; You should have received a copy of the GNU General Public License
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
326 +;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
327 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
328 +"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
329 +Internally markup is stored as lists, whose head is a function.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
330 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
331 + (FUNCTION ARG1 ARG2 ... )
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
332 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
333 +When the markup is formatted, then FUNCTION is called as follows
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
334 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
335 + (FUNCTION GROB PROPS ARG1 ARG2 ... )
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
336 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
337 +GROB is the current grob, PROPS is a list of alists, and ARG1.. are
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
338 +the rest of the arguments.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
339 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
340 +The function should return a stencil (i.e. a formatted, ready to
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
341 +print object).
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
342 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
343 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
344 +To add a markup command, use the define-markup-command utility.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
345 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
346 + (define-markup-command (mycommand layout prop arg1 ...) (arg1-type? ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
347 + \"my command usage and description\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
348 + ...function body...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
349 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
350 +The command is now available in markup mode, e.g.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
351 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
352 + \\markup { .... \\MYCOMMAND #1 argument ... }
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
353 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
354 +" ; "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
355 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
356 +;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
357 +;;; markup definer utilities
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
358 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
359 +;; For documentation purposes
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
360 +;; category -> markup functions
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
361 +(define-public markup-functions-by-category (make-hash-table 150))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
362 +;; markup function -> used properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
363 +(define-public markup-functions-properties (make-weak-key-hash-table 151))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
364 +;; List of markup list functions
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
365 +(define-public markup-list-functions (make-weak-key-hash-table 151))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
366 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
367 +(use-modules (ice-9 optargs))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
368 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
369 +(defmacro*-public define-markup-command
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
370 + (command-and-args signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
371 + #:key (category '()) (properties '())
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
372 + #:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
373 + "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
374 +* Define a COMMAND-markup function after command-and-args and body,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
375 +register COMMAND-markup and its signature,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
376 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
377 +* add COMMAND-markup to markup-functions-by-category,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
378 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
379 +* sets COMMAND-markup markup-signature object property,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
380 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
381 +* define a make-COMMAND-markup function.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
382 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
383 +Syntax:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
384 + (define-markup-command (COMMAND layout props . arguments)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
385 + argument-types
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
386 + [ #:properties properties ]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
387 + \"documentation string\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
388 + ...command body...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
389 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
390 +where:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
391 + `argument-types' is a list of type predicates for arguments
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
392 + `properties' a list of (property default-value) lists
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
393 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
394 +The specified properties are available as let-bound variables in the
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
395 +command body, using the respective `default-value' as fallback in case
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
396 +`property' is not found in `props'. `props' itself is left unchanged:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
397 +if you want defaults specified in that manner passed down into other
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
398 +markup functions, you need to adjust `props' yourself.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
399 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
400 +The autogenerated documentation makes use of some optional
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
401 +specifications that are otherwise ignored:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
402 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
403 +After `argument-types', you may also specify
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
404 + [ #:category category ]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
405 +where:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
406 + `category' is either a symbol or a symbol list specifying the
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
407 + category for this markup command in the docs.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
408 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
409 +As an element of the `properties' list, you may directly use a
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
410 +COMMANDx-markup symbol instead of a `(prop value)' list to indicate
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
411 +that this markup command is called by the newly defined command,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
412 +adding its properties to the documented properties of the new
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
413 +command. There is no protection against circular definitions.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
414 +"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
415 + (let* ((command (car command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
416 + (args (cdr command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
417 + (command-name (string->symbol (format #f "~a-markup" command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
418 + (make-markup-name (string->symbol (format #f "make-~a-markup" command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
419 + (while (and (pair? body) (keyword? (car body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
420 + (set! body (cddr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
421 + `(begin
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
422 + ;; define the COMMAND-markup function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
423 + ,(let* ((documentation (if (string? (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
424 + (list (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
425 + '()))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
426 + (real-body (if (or (null? documentation)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
427 + (null? (cdr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
428 + body (cdr body))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
429 + `(define-public (,command-name ,@args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
430 + ,@documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
431 + (let ,(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
432 + (let ((prop (car prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
433 + (default-value (if (null? (cdr prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
434 + #f
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
435 + (cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
436 + (props (cadr args)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
437 + `(,prop (chain-assoc-get ',prop ,props ,default-value))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
438 + (filter pair? properties))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
439 + ,@real-body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
440 + (set! (markup-command-signature ,command-name) (list ,@signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
441 + ;; Register the new function, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
442 + ,@(map (lambda (category)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
443 + `(hashq-set!
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
444 + (or (hashq-ref markup-functions-by-category ',category)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
445 + (let ((hash (make-weak-key-hash-table 151)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
446 + (hashq-set! markup-functions-by-category ',category
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
447 + hash)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
448 + hash))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
449 + ,command-name #t))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
450 + (if (list? category) category (list category)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
451 + ;; Used properties, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
452 + (hashq-set! markup-functions-properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
453 + ,command-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
454 + (list ,@(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
455 + (cond ((symbol? prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
456 + prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
457 + ((not (null? (cdr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
458 + `(list ',(car prop-spec) ,(cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
459 + (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
460 + `(list ',(car prop-spec)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
461 + (if (pair? args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
462 + properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
463 + (list)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
464 + ;; define the make-COMMAND-markup function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
465 + (define-public (,make-markup-name . args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
466 + (let ((sig (list ,@signature)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
467 + (make-markup ,command-name ,(symbol->string make-markup-name) sig args))))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
468 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
469 +(defmacro*-public define-markup-list-command
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
470 + (command-and-args signature #:key (properties '()) #:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
471 + "Same as `define-markup-command', but defines a command that, when
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
472 +interpreted, returns a list of stencils instead of a single one"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
473 + (let* ((command (car command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
474 + (args (cdr command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
475 + (command-name (string->symbol (format #f "~a-markup-list" command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
476 + (make-markup-name (string->symbol (format #f "make-~a-markup-list" command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
477 + (while (and (pair? body) (keyword? (car body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
478 + (set! body (cddr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
479 + `(begin
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
480 + ;; define the COMMAND-markup-list function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
481 + ,(let* ((documentation (if (string? (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
482 + (list (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
483 + '()))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
484 + (real-body (if (or (null? documentation)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
485 + (null? (cdr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
486 + body (cdr body))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
487 + `(define-public (,command-name ,@args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
488 + ,@documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
489 + (let ,(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
490 + (let ((prop (car prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
491 + (default-value (if (null? (cdr prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
492 + #f
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
493 + (cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
494 + (props (cadr args)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
495 + `(,prop (chain-assoc-get ',prop ,props ,default-value))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
496 + (filter pair? properties))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
497 + ,@real-body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
498 + (set! (markup-command-signature ,command-name) (list ,@signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
499 + ;; add the command to markup-list-function-list, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
500 + (hashq-set! markup-list-functions ,command-name #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
501 + ;; Used properties, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
502 + (hashq-set! markup-functions-properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
503 + ,command-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
504 + (list ,@(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
505 + (cond ((symbol? prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
506 + prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
507 + ((not (null? (cdr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
508 + `(list ',(car prop-spec) ,(cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
509 + (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
510 + `(list ',(car prop-spec)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
511 + (if (pair? args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
512 + properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
513 + (list)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
514 + ;; it's a markup-list command:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
515 + (set-object-property! ,command-name 'markup-list-command #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
516 + ;; define the make-COMMAND-markup-list function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
517 + (define-public (,make-markup-name . args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
518 + (let ((sig (list ,@signature)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
519 + (list (make-markup ,command-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
520 + ,(symbol->string make-markup-name) sig args)))))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
521 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
522 +;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
523 +;;; Utilities for storing and accessing markup commands signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
524 +;;; Examples:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
525 +;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
526 +;;; (set! (markup-command-signature raise-markup) (list number? markup?))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
527 +;;; ==> (#<primitive-procedure number?> #<procedure markup? (obj)>)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
528 +;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
529 +;;; (markup-command-signature raise-markup)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
530 +;;; ==> (#<primitive-procedure number?> #<procedure markup? (obj)>)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
531 +;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
532 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
533 +(define-public (markup-command-signature-ref markup-command)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
534 + "Return markup-command's signature (the 'markup-signature object property)"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
535 + (object-property markup-command 'markup-signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
536 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
537 +(define-public (markup-command-signature-set! markup-command signature)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
538 + "Set markup-command's signature (as object property)"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
539 + (set-object-property! markup-command 'markup-signature signature)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
540 + signature)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
541 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
542 +(define-public markup-command-signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
543 + (make-procedure-with-setter markup-command-signature-ref
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
544 + markup-command-signature-set!))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
545 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
546 +;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
547 +;;; markup type predicates
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
548 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
549 +(define (markup-function? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
550 + (and (markup-command-signature x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
551 + (not (object-property x 'markup-list-command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
552 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
553 +(define (markup-list-function? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
554 + (and (markup-command-signature x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
555 + (object-property x 'markup-list-command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
556 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
557 +(define-public (markup-command-list? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
558 + "Determine if `x' is a markup command list, ie. a list composed of
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
559 +a markup list function and its arguments."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
560 + (and (pair? x) (markup-list-function? (car x))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
561 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
562 +(define-public (markup-list? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
563 + "Return a true value if `x' is a list of markups or markup command lists."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
564 + (define (markup-list-inner? lst)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
565 + (or (null? lst)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
566 + (and (or (markup? (car lst)) (markup-command-list? (car lst)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
567 + (markup-list-inner? (cdr lst)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
568 + (not (not (and (list? arg) (markup-list-inner? arg)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
569 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
570 +(define (markup-argument-list? signature arguments)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
571 + "Typecheck argument list."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
572 + (if (and (pair? signature) (pair? arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
573 + (and ((car signature) (car arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
574 + (markup-argument-list? (cdr signature) (cdr arguments)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
575 + (and (null? signature) (null? arguments))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
576 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
577 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
578 +(define (markup-argument-list-error signature arguments number)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
579 + "return (ARG-NR TYPE-EXPECTED ARG-FOUND) if an error is detected, or
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
580 +#f is no error found.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
581 +"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
582 + (if (and (pair? signature) (pair? arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
583 + (if (not ((car signature) (car arguments)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
584 + (list number (type-name (car signature)) (car arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
585 + (markup-argument-list-error (cdr signature) (cdr arguments) (+ 1 number)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
586 + #f))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
587 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
588 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
589 +;; full recursive typecheck.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
590 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
591 +(define (markup-typecheck? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
592 + (or (string? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
593 + (and (pair? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
594 + (markup-function? (car arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
595 + (markup-argument-list? (markup-command-signature (car arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
596 + (cdr arg)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
597 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
598 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
599 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
600 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
601 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
602 +(define (markup-thrower-typecheck arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
603 + "typecheck, and throw an error when something amiss.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
604 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
605 +Uncovered - cheap-markup? is used."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
606 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
607 + (cond ((string? arg) #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
608 + ((not (pair? arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
609 + (throw 'markup-format "Not a pair" arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
610 + ((not (markup-function? (car arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
611 + (throw 'markup-format "Not a markup function " (car arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
612 + ((not (markup-argument-list? (markup-command-signature (car arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
613 + (cdr arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
614 + (throw 'markup-format "Arguments failed typecheck for " arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
615 + #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
616 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
617 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
618 +;; good enough if you only use make-XXX-markup functions.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
619 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
620 +(define (cheap-markup? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
621 + (or (string? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
622 + (and (pair? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
623 + (markup-function? (car x)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
624 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
625 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
626 +;; replace by markup-thrower-typecheck for more detailed diagnostics.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
627 +;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
628 +(define-public markup? cheap-markup?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
629 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
630 +(define-public (make-markup markup-function make-name signature args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
631 + " Construct a markup object from MARKUP-FUNCTION and ARGS. Typecheck
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
632 +against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
633 +"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
634 + (let* ((arglen (length args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
635 + (siglen (length signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
636 + (error-msg (if (and (> siglen 0) (> arglen 0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
637 + (markup-argument-list-error signature args 1)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
638 + #f)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
639 + (if (or (not (= arglen siglen)) (< siglen 0) (< arglen 0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
640 + (ly:error (string-append make-name ": "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
641 + (_ "Wrong number of arguments. Expect: ~A, found ~A: ~S"))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
642 + siglen arglen args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
643 + (if error-msg
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
644 + (ly:error
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
645 + (string-append
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
646 + make-name ": "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
647 + (_ "Invalid argument in position ~A. Expect: ~A, found: ~S."))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
648 + (car error-msg) (cadr error-msg)(caddr error-msg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
649 + (cons markup-function args))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
650 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
651 +;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
652 +;;; markup constructors
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
653 +;;; lilypond-like syntax for markup construction in scheme.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
654 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
655 +(use-modules (ice-9 receive))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
656 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
657 +(defmacro*-public markup* (#:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
658 + "Same as `markup', for use in a \\notes block."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
659 + `(ly:export (markup ,@body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
660 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
661 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
662 +(define (compile-all-markup-expressions expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
663 + "Return a list of canonical markups expressions, e.g.:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
664 + (#:COMMAND1 arg11 arg12 #:COMMAND2 arg21 arg22 arg23)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
665 + ===>
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
666 + ((make-COMMAND1-markup arg11 arg12)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
667 + (make-COMMAND2-markup arg21 arg22 arg23) ...)"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
668 + (do ((rest expr rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
669 + (markps '() markps))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
670 + ((null? rest) (reverse markps))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
671 + (receive (m r) (compile-markup-expression rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
672 + (set! markps (cons m markps))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
673 + (set! rest r))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
674 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
675 +(define (keyword->make-markup key)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
676 + "Transform a keyword, e.g. #:COMMAND, in a make-COMMAND-markup symbol."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
677 + (string->symbol (string-append "make-" (symbol->string (keyword->symbol key)) "-markup")))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
678 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
679 +(define (compile-markup-expression expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
680 + "Return two values: the first complete canonical markup expression
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
681 + found in `expr', e.g. (make-COMMAND-markup arg1 arg2 ...),
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
682 + and the rest expression."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
683 + (cond ((and (pair? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
684 + (keyword? (car expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
685 + ;; expr === (#:COMMAND arg1 ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
686 + (let ((command (symbol->string (keyword->symbol (car expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
687 + (if (not (pair? (lookup-markup-command command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
688 + (ly:error (_ "Not a markup command: ~A") command))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
689 + (let* ((sig (markup-command-signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
690 + (car (lookup-markup-command command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
691 + (sig-len (length sig)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
692 + (do ((i 0 (1+ i))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
693 + (args '() args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
694 + (rest (cdr expr) rest))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
695 + ((>= i sig-len)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
696 + (values (cons (keyword->make-markup (car expr)) (reverse args)) rest))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
697 + (cond ((eqv? (list-ref sig i) markup-list?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
698 + ;; (car rest) is a markup list
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
699 + (set! args (cons `(list ,@(compile-all-markup-expressions (car rest))) args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
700 + (set! rest (cdr rest)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
701 + (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
702 + ;; pick up one arg in `rest'
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
703 + (receive (a r) (compile-markup-arg rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
704 + (set! args (cons a args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
705 + (set! rest r))))))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
706 + ((and (pair? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
707 + (pair? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
708 + (keyword? (caar expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
709 + ;; expr === ((#:COMMAND arg1 ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
710 + (receive (m r) (compile-markup-expression (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
711 + (values m (cdr expr))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
712 + ((and (pair? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
713 + (string? (car expr))) ;; expr === ("string" ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
714 + (values `(make-simple-markup ,(car expr)) (cdr expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
715 + (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
716 + ;; expr === (symbol ...) or ((funcall ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
717 + (values (car expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
718 + (cdr expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
719 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
720 +(define (compile-all-markup-args expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
721 + "Transform `expr' into markup arguments"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
722 + (do ((rest expr rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
723 + (args '() args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
724 + ((null? rest) (reverse args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
725 + (receive (a r) (compile-markup-arg rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
726 + (set! args (cons a args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
727 + (set! rest r))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
728 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
729 +(define (compile-markup-arg expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
730 + "Return two values: the desired markup argument, and the rest arguments"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
731 + (cond ((null? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
732 + ;; no more args
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
733 + (values '() '()))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
734 + ((keyword? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
735 + ;; expr === (#:COMMAND ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
736 + ;; ==> build and return the whole markup expression
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
737 + (compile-markup-expression expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
738 + ((and (pair? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
739 + (keyword? (caar expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
740 + ;; expr === ((#:COMMAND ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
741 + ;; ==> build and return the whole markup expression(s)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
742 + ;; found in (car expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
743 + (receive (markup-expr rest-expr) (compile-markup-expression (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
744 + (if (null? rest-expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
745 + (values markup-expr (cdr expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
746 + (values `(list ,markup-expr ,@(compile-all-markup-args rest-expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
747 + (cdr expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
748 + ((and (pair? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
749 + (pair? (caar expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
750 + ;; expr === (((foo ...) ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
751 + (values (cons 'list (compile-all-markup-args (car expr))) (cdr expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
752 + (else (values (car expr) (cdr expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
753 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
754 +(define (lookup-markup-command-aux symbol)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
755 + (let ((proc (catch 'misc-error
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
756 + (lambda ()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
757 + (module-ref (current-module) symbol))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
758 + (lambda (key . args) #f))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
759 + (and (procedure? proc) proc)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
760 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
761 +(define-public (lookup-markup-command code)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
762 + (let ((proc (lookup-markup-command-aux
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
763 + (string->symbol (format #f "~a-markup" code)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
764 + (and proc (markup-function? proc)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
765 + (cons proc (markup-command-signature proc)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
766 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
767 +(define-public (lookup-markup-list-command code)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
768 + (let ((proc (lookup-markup-command-aux
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
769 + (string->symbol (format #f "~a-markup-list" code)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
770 + (and proc (markup-list-function? proc)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
771 + (cons proc (markup-command-signature proc)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
772 +
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
773 +;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
774 +;;; used in parser.yy to map a list of markup commands on markup arguments
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
775 +(define-public (map-markup-command-list commands markups)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
776 + "`markups' being a list of markups, eg (markup1 markup2 markup3),
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
777 +and `commands' a list of commands with their scheme arguments, in reverse order,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
778 +eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
779 + ((bold (raise 4 (italic markup1)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
780 + (bold (raise 4 (italic markup2)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
781 + (bold (raise 4 (italic markup3))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
782 +"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
783 + (map-in-order (lambda (arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
784 + (let ((result arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
785 + (for-each (lambda (cmd)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
786 + (set! result (append cmd (list result))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
787 + commands)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
788 + result))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
789 + markups))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
790 diff --git a/scm/markup.scm b/scm/markup.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
791 index 6bd9fd6..f6ba141 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
792 --- a/scm/markup.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
793 +++ b/scm/markup.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
794 @@ -15,227 +15,6 @@
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
795 ;;;; You should have received a copy of the GNU General Public License
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
796 ;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
797
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
798 -"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
799 -Internally markup is stored as lists, whose head is a function.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
800 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
801 - (FUNCTION ARG1 ARG2 ... )
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
802 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
803 -When the markup is formatted, then FUNCTION is called as follows
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
804 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
805 - (FUNCTION GROB PROPS ARG1 ARG2 ... )
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
806 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
807 -GROB is the current grob, PROPS is a list of alists, and ARG1.. are
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
808 -the rest of the arguments.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
809 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
810 -The function should return a stencil (i.e. a formatted, ready to
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
811 -print object).
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
812 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
813 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
814 -To add a markup command, use the define-markup-command utility.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
815 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
816 - (define-markup-command (mycommand layout prop arg1 ...) (arg1-type? ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
817 - \"my command usage and description\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
818 - ...function body...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
819 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
820 -The command is now available in markup mode, e.g.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
821 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
822 - \\markup { .... \\MYCOMMAND #1 argument ... }
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
823 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
824 -" ; "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
825 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
826 -;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
827 -;;; markup definer utilities
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
828 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
829 -;; For documentation purposes
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
830 -;; category -> markup functions
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
831 -(define-public markup-functions-by-category (make-hash-table 150))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
832 -;; markup function -> used properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
833 -(define-public markup-functions-properties (make-weak-key-hash-table 151))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
834 -;; List of markup list functions
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
835 -(define-public markup-list-functions (make-weak-key-hash-table 151))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
836 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
837 -(use-modules (ice-9 optargs))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
838 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
839 -(defmacro*-public define-markup-command
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
840 - (command-and-args signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
841 - #:key (category '()) (properties '())
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
842 - #:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
843 - "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
844 -* Define a COMMAND-markup function after command-and-args and body,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
845 -register COMMAND-markup and its signature,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
846 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
847 -* add COMMAND-markup to markup-functions-by-category,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
848 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
849 -* sets COMMAND-markup markup-signature object property,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
850 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
851 -* define a make-COMMAND-markup function.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
852 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
853 -Syntax:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
854 - (define-markup-command (COMMAND layout props . arguments)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
855 - argument-types
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
856 - [ #:properties properties ]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
857 - \"documentation string\"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
858 - ...command body...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
859 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
860 -where:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
861 - `argument-types' is a list of type predicates for arguments
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
862 - `properties' a list of (property default-value) lists
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
863 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
864 -The specified properties are available as let-bound variables in the
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
865 -command body, using the respective `default-value' as fallback in case
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
866 -`property' is not found in `props'. `props' itself is left unchanged:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
867 -if you want defaults specified in that manner passed down into other
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
868 -markup functions, you need to adjust `props' yourself.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
869 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
870 -The autogenerated documentation makes use of some optional
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
871 -specifications that are otherwise ignored:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
872 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
873 -After `argument-types', you may also specify
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
874 - [ #:category category ]
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
875 -where:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
876 - `category' is either a symbol or a symbol list specifying the
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
877 - category for this markup command in the docs.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
878 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
879 -As an element of the `properties' list, you may directly use a
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
880 -COMMANDx-markup symbol instead of a `(prop value)' list to indicate
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
881 -that this markup command is called by the newly defined command,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
882 -adding its properties to the documented properties of the new
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
883 -command. There is no protection against circular definitions.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
884 -"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
885 - (let* ((command (car command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
886 - (args (cdr command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
887 - (command-name (string->symbol (format #f "~a-markup" command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
888 - (make-markup-name (string->symbol (format #f "make-~a-markup" command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
889 - (while (and (pair? body) (keyword? (car body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
890 - (set! body (cddr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
891 - `(begin
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
892 - ;; define the COMMAND-markup function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
893 - ,(let* ((documentation (if (string? (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
894 - (list (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
895 - '()))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
896 - (real-body (if (or (null? documentation)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
897 - (null? (cdr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
898 - body (cdr body))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
899 - `(define-public (,command-name ,@args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
900 - ,@documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
901 - (let ,(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
902 - (let ((prop (car prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
903 - (default-value (if (null? (cdr prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
904 - #f
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
905 - (cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
906 - (props (cadr args)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
907 - `(,prop (chain-assoc-get ',prop ,props ,default-value))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
908 - (filter pair? properties))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
909 - ,@real-body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
910 - (set! (markup-command-signature ,command-name) (list ,@signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
911 - ;; Register the new function, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
912 - ,@(map (lambda (category)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
913 - `(hashq-set!
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
914 - (or (hashq-ref markup-functions-by-category ',category)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
915 - (let ((hash (make-weak-key-hash-table 151)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
916 - (hashq-set! markup-functions-by-category ',category
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
917 - hash)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
918 - hash))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
919 - ,command-name #t))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
920 - (if (list? category) category (list category)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
921 - ;; Used properties, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
922 - (hashq-set! markup-functions-properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
923 - ,command-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
924 - (list ,@(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
925 - (cond ((symbol? prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
926 - prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
927 - ((not (null? (cdr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
928 - `(list ',(car prop-spec) ,(cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
929 - (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
930 - `(list ',(car prop-spec)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
931 - (if (pair? args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
932 - properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
933 - (list)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
934 - ;; define the make-COMMAND-markup function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
935 - (define-public (,make-markup-name . args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
936 - (let ((sig (list ,@signature)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
937 - (make-markup ,command-name ,(symbol->string make-markup-name) sig args))))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
938 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
939 -(defmacro*-public define-markup-list-command
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
940 - (command-and-args signature #:key (properties '()) #:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
941 - "Same as `define-markup-command', but defines a command that, when
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
942 -interpreted, returns a list of stencils instead of a single one"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
943 - (let* ((command (car command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
944 - (args (cdr command-and-args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
945 - (command-name (string->symbol (format #f "~a-markup-list" command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
946 - (make-markup-name (string->symbol (format #f "make-~a-markup-list" command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
947 - (while (and (pair? body) (keyword? (car body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
948 - (set! body (cddr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
949 - `(begin
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
950 - ;; define the COMMAND-markup-list function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
951 - ,(let* ((documentation (if (string? (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
952 - (list (car body))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
953 - '()))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
954 - (real-body (if (or (null? documentation)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
955 - (null? (cdr body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
956 - body (cdr body))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
957 - `(define-public (,command-name ,@args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
958 - ,@documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
959 - (let ,(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
960 - (let ((prop (car prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
961 - (default-value (if (null? (cdr prop-spec))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
962 - #f
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
963 - (cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
964 - (props (cadr args)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
965 - `(,prop (chain-assoc-get ',prop ,props ,default-value))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
966 - (filter pair? properties))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
967 - ,@real-body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
968 - (set! (markup-command-signature ,command-name) (list ,@signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
969 - ;; add the command to markup-list-function-list, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
970 - (hashq-set! markup-list-functions ,command-name #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
971 - ;; Used properties, for markup documentation
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
972 - (hashq-set! markup-functions-properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
973 - ,command-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
974 - (list ,@(map (lambda (prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
975 - (cond ((symbol? prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
976 - prop-spec)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
977 - ((not (null? (cdr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
978 - `(list ',(car prop-spec) ,(cadr prop-spec)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
979 - (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
980 - `(list ',(car prop-spec)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
981 - (if (pair? args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
982 - properties
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
983 - (list)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
984 - ;; it's a markup-list command:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
985 - (set-object-property! ,command-name 'markup-list-command #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
986 - ;; define the make-COMMAND-markup-list function
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
987 - (define-public (,make-markup-name . args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
988 - (let ((sig (list ,@signature)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
989 - (list (make-markup ,command-name
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
990 - ,(symbol->string make-markup-name) sig args)))))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
991 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
992 -(define-public (make-markup markup-function make-name signature args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
993 - "Construct a markup object from @var{markup-function} and @var{args}.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
994 -Typecheck against @var{signature}, reporting @var{make-name} as the
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
995 -user-invoked function."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
996 - (let* ((arglen (length args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
997 - (siglen (length signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
998 - (error-msg (if (and (> siglen 0) (> arglen 0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
999 - (markup-argument-list-error signature args 1)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1000 - #f)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1001 - (if (or (not (= arglen siglen)) (< siglen 0) (< arglen 0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1002 - (ly:error (string-append make-name ": "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1003 - (_ "Wrong number of arguments. Expect: ~A, found ~A: ~S"))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1004 - siglen arglen args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1005 - (if error-msg
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1006 - (ly:error
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1007 - (string-append
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1008 - make-name ": "
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1009 - (_ "Invalid argument in position ~A. Expect: ~A, found: ~S."))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1010 - (car error-msg) (cadr error-msg)(caddr error-msg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1011 - (cons markup-function args))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1012 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1013 -;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1014 -;;; markup constructors
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1015 -;;; lilypond-like syntax for markup construction in scheme.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1016 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1017 -(use-modules (ice-9 receive))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1018 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1019 (defmacro*-public markup (#:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1020 "The `markup' macro provides a lilypond-like syntax for building markups.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1021
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1022 @@ -258,252 +37,6 @@ Use `markup*' in a \\notemode context."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1023
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1024 (car (compile-all-markup-expressions `(#:line ,body))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1025
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1026 -(defmacro*-public markup* (#:rest body)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1027 - "Same as `markup', for use in a \\notes block."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1028 - `(ly:export (markup ,@body)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1029 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1030 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1031 -(define (compile-all-markup-expressions expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1032 - "Return a list of canonical markups expressions, e.g.:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1033 - (#:COMMAND1 arg11 arg12 #:COMMAND2 arg21 arg22 arg23)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1034 - ===>
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1035 - ((make-COMMAND1-markup arg11 arg12)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1036 - (make-COMMAND2-markup arg21 arg22 arg23) ...)"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1037 - (do ((rest expr rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1038 - (markps '() markps))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1039 - ((null? rest) (reverse markps))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1040 - (receive (m r) (compile-markup-expression rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1041 - (set! markps (cons m markps))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1042 - (set! rest r))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1043 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1044 -(define (keyword->make-markup key)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1045 - "Transform a keyword, e.g. #:COMMAND, in a make-COMMAND-markup symbol."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1046 - (string->symbol (string-append "make-" (symbol->string (keyword->symbol key)) "-markup")))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1047 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1048 -(define (compile-markup-expression expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1049 - "Return two values: the first complete canonical markup expression
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1050 - found in `expr', e.g. (make-COMMAND-markup arg1 arg2 ...),
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1051 - and the rest expression."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1052 - (cond ((and (pair? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1053 - (keyword? (car expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1054 - ;; expr === (#:COMMAND arg1 ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1055 - (let ((command (symbol->string (keyword->symbol (car expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1056 - (if (not (pair? (lookup-markup-command command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1057 - (ly:error (_ "Not a markup command: ~A") command))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1058 - (let* ((sig (markup-command-signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1059 - (car (lookup-markup-command command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1060 - (sig-len (length sig)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1061 - (do ((i 0 (1+ i))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1062 - (args '() args)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1063 - (rest (cdr expr) rest))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1064 - ((>= i sig-len)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1065 - (values (cons (keyword->make-markup (car expr)) (reverse args)) rest))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1066 - (cond ((eqv? (list-ref sig i) markup-list?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1067 - ;; (car rest) is a markup list
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1068 - (set! args (cons `(list ,@(compile-all-markup-expressions (car rest))) args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1069 - (set! rest (cdr rest)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1070 - (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1071 - ;; pick up one arg in `rest'
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1072 - (receive (a r) (compile-markup-arg rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1073 - (set! args (cons a args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1074 - (set! rest r))))))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1075 - ((and (pair? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1076 - (pair? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1077 - (keyword? (caar expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1078 - ;; expr === ((#:COMMAND arg1 ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1079 - (receive (m r) (compile-markup-expression (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1080 - (values m (cdr expr))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1081 - ((and (pair? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1082 - (string? (car expr))) ;; expr === ("string" ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1083 - (values `(make-simple-markup ,(car expr)) (cdr expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1084 - (else
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1085 - ;; expr === (symbol ...) or ((funcall ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1086 - (values (car expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1087 - (cdr expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1088 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1089 -(define (compile-all-markup-args expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1090 - "Transform `expr' into markup arguments"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1091 - (do ((rest expr rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1092 - (args '() args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1093 - ((null? rest) (reverse args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1094 - (receive (a r) (compile-markup-arg rest)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1095 - (set! args (cons a args))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1096 - (set! rest r))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1097 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1098 -(define (compile-markup-arg expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1099 - "Return two values: the desired markup argument, and the rest arguments"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1100 - (cond ((null? expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1101 - ;; no more args
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1102 - (values '() '()))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1103 - ((keyword? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1104 - ;; expr === (#:COMMAND ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1105 - ;; ==> build and return the whole markup expression
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1106 - (compile-markup-expression expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1107 - ((and (pair? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1108 - (keyword? (caar expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1109 - ;; expr === ((#:COMMAND ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1110 - ;; ==> build and return the whole markup expression(s)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1111 - ;; found in (car expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1112 - (receive (markup-expr rest-expr) (compile-markup-expression (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1113 - (if (null? rest-expr)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1114 - (values markup-expr (cdr expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1115 - (values `(list ,markup-expr ,@(compile-all-markup-args rest-expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1116 - (cdr expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1117 - ((and (pair? (car expr))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1118 - (pair? (caar expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1119 - ;; expr === (((foo ...) ...) ...)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1120 - (values (cons 'list (compile-all-markup-args (car expr))) (cdr expr)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1121 - (else (values (car expr) (cdr expr)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1122 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1123 -;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1124 -;;; Utilities for storing and accessing markup commands signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1125 -;;; Examples:
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1126 -;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1127 -;;; (set! (markup-command-signature raise-markup) (list number? markup?))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1128 -;;; ==> (#<primitive-procedure number?> #<procedure markup? (obj)>)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1129 -;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1130 -;;; (markup-command-signature raise-markup)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1131 -;;; ==> (#<primitive-procedure number?> #<procedure markup? (obj)>)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1132 -;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1133 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1134 -(define-public (markup-command-signature-ref markup-command)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1135 - "Return @var{markup-command}'s signature (the @code{'markup-signature}
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1136 -object property)."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1137 - (object-property markup-command 'markup-signature))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1138 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1139 -(define-public (markup-command-signature-set! markup-command signature)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1140 - "Set @var{markup-command}'s signature (as object property)."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1141 - (set-object-property! markup-command 'markup-signature signature)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1142 - signature)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1143 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1144 -(define-public markup-command-signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1145 - (make-procedure-with-setter markup-command-signature-ref
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1146 - markup-command-signature-set!))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1147 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1148 -(define (lookup-markup-command-aux symbol)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1149 - (let ((proc (catch 'misc-error
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1150 - (lambda ()
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1151 - (module-ref (current-module) symbol))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1152 - (lambda (key . args) #f))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1153 - (and (procedure? proc) proc)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1154 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1155 -(define-public (lookup-markup-command code)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1156 - (let ((proc (lookup-markup-command-aux
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1157 - (string->symbol (format #f "~a-markup" code)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1158 - (and proc (markup-function? proc)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1159 - (cons proc (markup-command-signature proc)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1160 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1161 -(define-public (lookup-markup-list-command code)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1162 - (let ((proc (lookup-markup-command-aux
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1163 - (string->symbol (format #f "~a-markup-list" code)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1164 - (and proc (markup-list-function? proc)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1165 - (cons proc (markup-command-signature proc)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1166 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1167 -;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1168 -;;; used in parser.yy to map a list of markup commands on markup arguments
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1169 -(define-public (map-markup-command-list commands markups)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1170 - "@var{markups} being a list of markups, for example
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1171 -@code{(markup1 markup2 markup3)}, and @var{commands} a list of commands with
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1172 -their scheme arguments, in reverse order, for example
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1173 -@code{((italic) (raise 4) (bold))}, map the commands on each markup argument,
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1174 -for example
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1175 -@example
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1176 -((bold (raise 4 (italic markup1)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1177 - (bold (raise 4 (italic markup2)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1178 - (bold (raise 4 (italic markup3))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1179 -@end example"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1180 - (map-in-order (lambda (arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1181 - (let ((result arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1182 - (for-each (lambda (cmd)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1183 - (set! result (append cmd (list result))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1184 - commands)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1185 - result))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1186 - markups))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1187 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1188 -;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1189 -;;; markup type predicates
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1190 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1191 -(define (markup-function? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1192 - (and (markup-command-signature x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1193 - (not (object-property x 'markup-list-command))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1194 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1195 -(define (markup-list-function? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1196 - (and (markup-command-signature x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1197 - (object-property x 'markup-list-command)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1198 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1199 -(define-public (markup-command-list? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1200 - "Determine whether @var{x} is a markup command list, i.e. a list
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1201 -composed of a markup list function and its arguments."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1202 - (and (pair? x) (markup-list-function? (car x))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1203 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1204 -(define-public (markup-list? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1205 - "Return @code{#t} if @var{x} is a list of markups or markup command lists."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1206 - (define (markup-list-inner? lst)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1207 - (or (null? lst)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1208 - (and (or (markup? (car lst)) (markup-command-list? (car lst)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1209 - (markup-list-inner? (cdr lst)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1210 - (not (not (and (list? arg) (markup-list-inner? arg)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1211 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1212 -(define (markup-argument-list? signature arguments)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1213 - "Typecheck argument list."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1214 - (if (and (pair? signature) (pair? arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1215 - (and ((car signature) (car arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1216 - (markup-argument-list? (cdr signature) (cdr arguments)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1217 - (and (null? signature) (null? arguments))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1218 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1219 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1220 -(define (markup-argument-list-error signature arguments number)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1221 - "return (ARG-NR TYPE-EXPECTED ARG-FOUND) if an error is detected, or
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1222 -#f is no error found.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1223 -"
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1224 - (if (and (pair? signature) (pair? arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1225 - (if (not ((car signature) (car arguments)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1226 - (list number (type-name (car signature)) (car arguments))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1227 - (markup-argument-list-error (cdr signature) (cdr arguments) (+ 1 number)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1228 - #f))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1229 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1230 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1231 -;; full recursive typecheck.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1232 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1233 -(define (markup-typecheck? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1234 - (or (string? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1235 - (and (pair? arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1236 - (markup-function? (car arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1237 - (markup-argument-list? (markup-command-signature (car arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1238 - (cdr arg)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1239 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1240 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1241 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1242 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1243 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1244 -(define (markup-thrower-typecheck arg)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1245 - "typecheck, and throw an error when something amiss.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1246 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1247 -Uncovered - cheap-markup? is used."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1248 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1249 - (cond ((string? arg) #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1250 - ((not (pair? arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1251 - (throw 'markup-format "Not a pair" arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1252 - ((not (markup-function? (car arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1253 - (throw 'markup-format "Not a markup function " (car arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1254 - ((not (markup-argument-list? (markup-command-signature (car arg))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1255 - (cdr arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1256 - (throw 'markup-format "Arguments failed typecheck for " arg)))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1257 - #t)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1258 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1259 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1260 -;; good enough if you only use make-XXX-markup functions.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1261 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1262 -(define (cheap-markup? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1263 - (or (string? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1264 - (and (pair? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1265 - (markup-function? (car x)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1266 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1267 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1268 -;; replace by markup-thrower-typecheck for more detailed diagnostics.
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1269 -;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1270 -(define-public markup? cheap-markup?)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1271 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1272 ;; utility
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1273
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1274 (define (markup-join markups sep)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1275 diff --git a/scm/output-lib.scm b/scm/output-lib.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1276 index 27c69fd..5fd9c4c 100644
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1277 --- a/scm/output-lib.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1278 +++ b/scm/output-lib.scm
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1279 @@ -388,37 +388,6 @@ and duration-log @var{log}."
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1280 (make-simple-markup (format "~a" num))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1281 (markup #:fontsize -5 #:note numeratornote UP)))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1282
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1283 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1284 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1285 -;; Color
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1286 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1287 -(define-public (color? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1288 - (and (list? x)
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1289 - (= 3 (length x))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1290 - (apply eq? #t (map number? x))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1291 - (apply eq? #t (map (lambda (y) (<= 0 y 1)) x))))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1292 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1293 -(define-public (rgb-color r g b) (list r g b))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1294 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1295 -; predefined colors
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1296 -(define-public black '(0.0 0.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1297 -(define-public white '(1.0 1.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1298 -(define-public red '(1.0 0.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1299 -(define-public green '(0.0 1.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1300 -(define-public blue '(0.0 0.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1301 -(define-public cyan '(0.0 1.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1302 -(define-public magenta '(1.0 0.0 1.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1303 -(define-public yellow '(1.0 1.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1304 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1305 -(define-public grey '(0.5 0.5 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1306 -(define-public darkred '(0.5 0.0 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1307 -(define-public darkgreen '(0.0 0.5 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1308 -(define-public darkblue '(0.0 0.0 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1309 -(define-public darkcyan '(0.0 0.5 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1310 -(define-public darkmagenta '(0.5 0.0 0.5))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1311 -(define-public darkyellow '(0.5 0.5 0.0))
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1312 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1313 -
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1314 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1315 ;; key signature
2c57f92179f2 guile: more build and mingw patches.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
diff changeset
1316