X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-markup-commands.scm;h=18728e57d9809de9b1865209cfb5e7677103b59d;hb=b38fd63a19190741c0c19faf6a904af82c3f434c;hp=38bf9623dc2167ade13f8b23459c70bbdb1eb842;hpb=54b02666750062788185bd3f99e644d621e348c2;p=lilypond.git diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index 38bf9623dc..18728e57d9 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -60,7 +60,7 @@ ;;; functions that take a markup as their last argument. ;;; ;;; args-signature -;;; the arguments signature, i.e. a list of type predicates which +;;; the arguments signature, i.e., a list of type predicates which ;;; are used to type check the arguments, and also to define the general ;;; argument types (markup, markup-list, scheme) that the command is ;;; expecting. @@ -69,19 +69,19 @@ ;;; ;;; category ;;; for documentation purpose, builtin markup commands are grouped by -;;; category. This can be any symbol. When documentation is generated, +;;; category. This can be any symbol. When documentation is generated, ;;; the symbol is converted to a capitalized string, where hyphens are ;;; replaced by spaces. ;;; ;;; property-bindings ;;; this is used both for documentation generation, and to ease -;;; programming the command itself. It is list of +;;; programming the command itself. It is list of ;;; (property-name default-value) ;;; or (property-name) -;;; elements. Each property is looked-up in the `props' argument, and +;;; elements. Each property is looked-up in the `props' argument, and ;;; the symbol naming the property is bound to its value. ;;; When the property is not found in `props', then the symbol is bound -;;; to the given default value. When no default value is given, #f is +;;; to the given default value. When no default value is given, #f is ;;; used instead. ;;; Thus, using the following property bindings: ;;; ((thickness 0.1) @@ -92,15 +92,15 @@ ;;; ..body..) ;;; When a command `B' internally calls an other command `A', it may ;;; desirable to see in `B' documentation all the properties and -;;; default values used by `A'. In that case, add `A-markup' to the -;;; property-bindings of B. (This is used when generating +;;; default values used by `A'. In that case, add `A-markup' to the +;;; property-bindings of B. (This is used when generating ;;; documentation, but won't create bindings.) ;;; ;;; documentation-string ;;; the command documentation string (used to generate manuals) ;;; ;;; body -;;; the command body. The function is supposed to return a stencil. +;;; the command body. The function is supposed to return a stencil. ;;; ;;; Each markup command definition shall have a documentation string ;;; with description, syntax and example. @@ -270,8 +270,8 @@ the PDF backend. " @cindex referencing page numbers in text -Add a link to the page @var{page-number} around @var{arg}. This only works in -the PDF backend. +Add a link to the page @var{page-number} around @var{arg}. This only works +in the PDF backend. @lilypond[verbatim,quote] \\markup { @@ -292,12 +292,14 @@ the PDF backend. " @cindex referencing page labels in text -Add a link to the page holding label @var{label} around @var{arg}. This +Add a link to the page holding label @var{label} around @var{arg}. This only works in the PDF backend. @lilypond[verbatim,quote] \\markup { - \\with-link #\"label\" { \\italic { This links to the page containing the label... } } + \\with-link #\"label\" { + \\italic { This links to the page containing the label... } + } } @end lilypond" (let* ((arg-stencil (interpret-markup layout props arg)) @@ -860,13 +862,15 @@ Inline an image of music. indent = 0.0\\cm \\context { \\Score - \\override RehearsalMark #'break-align-symbols = - #'(time-signature key-signature) - \\override RehearsalMark #'self-alignment-X = #LEFT + \\override RehearsalMark + #'break-align-symbols = #'(time-signature key-signature) + \\override RehearsalMark + #'self-alignment-X = #LEFT } \\context { \\Staff - \\override TimeSignature #'break-align-anchor-alignment = #LEFT + \\override TimeSignature + #'break-align-anchor-alignment = #LEFT } } } @@ -926,6 +930,7 @@ the use of @code{\\simple} is unnecessary. (define-markup-command (tied-lyric layout props str) (string?) #:category music + #:properties ((word-space)) " @cindex simple text strings with tie characters @@ -938,19 +943,18 @@ Like simple-markup, but use tie characters for @q{~} tilde symbols. @end lilypond" (if (string-contains str "~") (let* - ((parts (string-split str #\~)) - (tie-str (ly:wide-char->utf-8 #x203f)) + ((half-space (/ word-space 2)) + (parts (string-split str #\~)) + (tie-str (markup #:hspace half-space + #:musicglyph "ties.lyric" + #:hspace half-space)) (joined (list-join parts tie-str)) (join-stencil (interpret-markup layout props tie-str)) ) (interpret-markup layout - (prepend-alist-chain - 'word-space - (/ (interval-length (ly:stencil-extent join-stencil X)) -3.5) - props) - (make-line-markup joined))) - ;(map (lambda (s) (interpret-markup layout props s)) parts)) + props + (make-concat-markup joined))) (interpret-markup layout props str))) (define-public empty-markup @@ -1335,9 +1339,10 @@ the line width, where @var{X} is the number of staff spaces. \\header { title = \"My title\" myText = \"Lorem ipsum dolor sit amet, consectetur adipisicing - elit, sed do eiusmod tempor incididunt ut labore et dolore magna - aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut aliquip ex ea commodo consequat.\" + elit, sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat.\" } \\paper { @@ -1678,7 +1683,7 @@ Align @var{arg} in @var{axis} direction to the @var{dir} side. " @cindex setting horizontal text alignment -Set horizontal alignment. If @var{dir} is @code{-1}, then it is +Set horizontal alignment. If @var{dir} is @w{@code{-1}}, then it is left-aligned, while @code{+1} is right. Values in between interpolate alignment accordingly. @@ -1895,6 +1900,29 @@ returns an empty markup. (interpret-markup layout props (list anonymous-with-signature arg)))) (define-markup-command (footnote layout props mkup note) + (markup? markup?) + #:category other + "Have footnote @var{note} act as an annotation to the markup @var{mkup}. + +@lilypond[verbatim,quote] +\\markup { + \\auto-footnote a b + \\override #'(padding . 0.2) + \\auto-footnote c d +} +@end lilypond +The footnote will not be annotated automatically." + (ly:stencil-combine-at-edge + (interpret-markup layout props mkup) + X + RIGHT + (ly:make-stencil + `(footnote (gensym "footnote") #f ,(interpret-markup layout props note)) + '(0 . 0) + '(0 . 0)) + 0.0)) + +(define-markup-command (auto-footnote layout props mkup note) (markup? markup?) #:category other #:properties ((raise 0.5) @@ -1903,11 +1931,12 @@ returns an empty markup. @lilypond[verbatim,quote] \\markup { - \\footnote a b + \\auto-footnote a b \\override #'(padding . 0.2) - \\footnote c d + \\auto-footnote c d } -@end lilypond" +@end lilypond +The footnote will be annotated automatically." (let* ((markup-stencil (interpret-markup layout props mkup)) (auto-numbering (ly:output-def-lookup layout 'footnote-auto-numbering)) @@ -1965,7 +1994,7 @@ returns an empty markup. (ly:stencil-add main-stencil (ly:make-stencil - `(footnote ,footnote-hash ,(interpret-markup layout props note)) + `(footnote ,footnote-hash #t ,(interpret-markup layout props note)) '(0 . 0) '(0 . 0))))) @@ -2515,13 +2544,13 @@ normal text font, no matter what font was used earlier. @lilypond[verbatim,quote] \\markup { \\huge \\bold \\sans \\caps { - Some text with font overrides + huge bold sans caps \\hspace #2 \\normal-text { - Default text, same font-size + huge normal } \\hspace #2 - More text as before + as before } } @end lilypond" @@ -3500,7 +3529,7 @@ a column containing several lines of text. " @cindex referencing page numbers in text -Reference to a page number. @var{label} is the label set on the referenced +Reference to a page number. @var{label} is the label set on the referenced page (using the @code{\\label} command), @var{gauge} a markup used to estimate the maximum width of the page number, and @var{default} the value to display when @var{label} is not found." @@ -3611,8 +3640,10 @@ Patterns are aligned to the @var{dir} markup. \\fill-with-pattern #1.5 #CENTER - left right \\null \"left-aligned :\" - \\override #'(line-width . 50) \\fill-with-pattern #2 #LEFT : left first - \\override #'(line-width . 50) \\fill-with-pattern #2 #LEFT : left second + \\override #'(line-width . 50) + \\fill-with-pattern #2 #LEFT : left first + \\override #'(line-width . 50) + \\fill-with-pattern #2 #LEFT : left second } @end lilypond" (let* ((pattern-x-extent (ly:stencil-extent (interpret-markup layout props pattern) X))