]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/user/programming-interface.itely
lilypond-book robustness: ensure EOL at the end of @verbatim
[lilypond.git] / Documentation / user / programming-interface.itely
index ba9fdc95e56b8e235a7767ef3153af738f4b9857..2d28412eabf138715b88cfcdfe1d2fec21d176e7 100644 (file)
@@ -7,7 +7,7 @@
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.11.61"
+@c \version "2.12.0"
 
 @node Interfaces for programmers
 @chapter Interfaces for programmers
@@ -17,13 +17,13 @@ not familiar with Scheme, you may wish to read our
 @rlearning{Scheme tutorial}.
 
 @menu
-* Music functions::             
-* Programmer interfaces::       
-* Building complicated functions::  
-* Markup programmer interface::  
-* Contexts for programmers::    
+* Music functions::
+* Programmer interfaces::
+* Building complicated functions::
+* Markup programmer interface::
+* Contexts for programmers::
 * Scheme procedures as properties::
-* Using Scheme code instead of \tweak::  
+* Using Scheme code instead of \tweak::
 * Difficult tweaks::
 @end menu
 
@@ -34,13 +34,13 @@ not familiar with Scheme, you may wish to read our
 This section discusses how to create music functions within LilyPond.
 
 @menu
-* Overview of music functions::  
-* Simple substitution functions::  
-* Paired substitution functions::  
-* Mathematics in functions::    
-* Void functions::              
-* Functions without arguments::  
-* Overview of available music functions::  
+* Overview of music functions::
+* Simple substitution functions::
+* Paired substitution functions::
+* Mathematics in functions::
+* Void functions::
+* Functions without arguments::
+* Overview of available music functions::
 @end menu
 
 @node Overview of music functions
@@ -132,18 +132,18 @@ custosNote = #(define-music-function (parser location note)
 Multiple variables may be used,
 
 @lilypond[quote,verbatim,ragged-right]
-tempoMark = #(define-music-function (parser location padding marktext)
-                                    (number? string?)
+tempoPadded = #(define-music-function (parser location padding tempotext)
+  (number? string?)
 #{
-  \once \override Score . RehearsalMark #'padding = $padding
-  \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
-  \mark \markup { \bold $marktext }
+  \once \override Score.MetronomeMark #'padding = $padding
+  \tempo \markup { \bold $tempotext }
 #})
 
 \relative c'' {
-c2 e
-\tempoMark #3.0 #"Allegro"
-g c
+  \tempo \markup { "Low tempo" }
+  c4 d e f g1
+  \tempoPadded #4.0 #"High tempo"
+  g4 f e d c1
 }
 @end lilypond
 
@@ -297,8 +297,8 @@ This section contains information about mixing LilyPond
 and Scheme.
 
 @menu
-* Input variables and Scheme::  
-* Internal music representation::  
+* Input variables and Scheme::
+* Internal music representation::
 @end menu
 
 
@@ -360,7 +360,7 @@ traLaLa = { c'4 d'4 }
 { \twice }
 @end lilypond
 
-Due to parser lookahead
+@c Due to parser lookahead
 
 In this example, the assignment happens after parser has verified that
 nothing interesting happens after @code{traLaLa = @{ ... @}}.  Without
@@ -374,8 +374,9 @@ wrapping a Scheme value in the function @code{ly:export}, a Scheme
 value is interpreted as if it were entered in LilyPond syntax.
 Instead of defining @code{\twice}, the example above could also have
 been written as
+
 @example
-@dots{}
+...
 @{ #(ly:export (make-sequential-music (list newLa))) @}
 @end example
 
@@ -438,7 +439,7 @@ under @rinternals{Music properties}.
 A compound music expression is a music object that contains other
 music objects in its properties.  A list of objects can be stored in
 the @code{elements} property of a music object, or a single @q{child}
-music object in the @code{element} object.  For example,
+music object in the @code{element} property.  For example,
 @rinternals{SequentialMusic} has its children in @code{elements},
 and @rinternals{GraceMusic} has its single argument in
 @code{element}.  The body of a repeat is stored in the @code{element}
@@ -465,6 +466,9 @@ to create complicated music functions.
 @subsection Displaying music expressions
 
 @cindex internal storage
+@cindex displaying music expressions
+@cindex internal representation, displaying
+@cindex displayMusic
 @funindex \displayMusic
 
 When writing a music function it is often instructive to inspect how
@@ -849,10 +853,10 @@ Markups are implemented as special Scheme functions which produce a
 Stencil object given a number of arguments.
 
 @menu
-* Markup construction in Scheme::  
-* How markups work internally::  
-* New markup command definition::  
-* New markup list command definition::  
+* Markup construction in Scheme::
+* How markups work internally::
+* New markup command definition::
+* New markup list command definition::
 @end menu
 
 
@@ -1181,7 +1185,7 @@ indented.  The indent width is taken from the @code{props} argument.
 @example
 #(define-markup-list-command (paragraph layout props args) (markup-list?)
    (let ((indent (chain-assoc-get 'par-indent props 2)))
-     (interpret-markup-list layout props 
+     (interpret-markup-list layout props
        (make-justified-lines-markup-list (cons (make-hspace-markup indent)
                                                args)))))
 @end example
@@ -1222,8 +1226,8 @@ This new markup list command can be used as follows:
 @section Contexts for programmers
 
 @menu
-* Context evaluation::          
-* Running a function on all layout objects::  
+* Context evaluation::
+* Running a function on all layout objects::
 @end menu
 
 @node Context evaluation
@@ -1287,13 +1291,16 @@ this is a @rinternals{NoteHead} object.
 Here is a function to use for @code{\applyOutput}; it blanks
 note-heads on the center-line:
 
-@example
-(define (blanker grob grob-origin context)
- (if (and (memq (ly:grob-property grob 'interfaces)
-                note-head-interface)
-          (eq? (ly:grob-property grob 'staff-position) 0))
-     (set! (ly:grob-property grob 'transparent) #t)))
-@end example
+@lilypond[quote,verbatim,ragged-right]
+#(define (blanker grob grob-origin context)
+   (if (and (memq 'note-head-interface (ly:grob-interfaces grob))
+            (eq? (ly:grob-property grob 'staff-position) 0))
+       (set! (ly:grob-property grob 'transparent) #t)))
+
+\relative {
+  e4 g8 \applyOutput #'Voice #blanker b d2
+}
+@end lilypond
 
 
 @node Scheme procedures as properties
@@ -1321,7 +1328,7 @@ In this case, the procedure is executed as soon as the value of the
 property is requested during the formatting process.
 
 Most of the typesetting engine is driven by such callbacks.
-Properties that typically use callbacks include  
+Properties that typically use callbacks include
 
 @table @code
 @item stencil
@@ -1498,7 +1505,7 @@ and @code{PaperColumn}.  They can be changed with the
 @end example
 
 Note, however, that @code{\override}, applied to
-@code{NoteMusicalPaperColumn} and @code{PaperColumn}, still works as
+@code{NonMusicalPaperColumn} and @code{PaperColumn}, still works as
 expected within @code{\context} blocks.
 
 @end itemize