]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/user/internals.itely
* GNUmakefile.in (EXTRA_DIST_FILES): remove VIM stuff.
[lilypond.git] / Documentation / user / internals.itely
index 9be7fb35efb429771dc60801d3cc440c108c5efd..b152463824ba747bf9b40a2ddabe1dbc5deb038c 100644 (file)
@@ -3,7 +3,7 @@
 @c
 @c A menu is needed before every deeper *section nesting of @nodes
 @c Run M-x texinfo-all-menus-update
-@c to automagically fill in these menus
+@c to automatically fill in these menus
 @c before saving changes
 
 
@@ -98,11 +98,11 @@ and explains how they are glued together in LilyPond with the embedded
 Scheme interpreter.
 
 @menu
-* Interpretation context::
-* Scheme integration::
-* Music storage format::
-* Lexical details::
-* Output details::
+* Interpretation context::      
+* Scheme integration::          
+* Music storage format::        
+* Lexical details::             
+* Output details::              
 @end menu
 
 
@@ -110,14 +110,14 @@ Scheme interpreter.
 @section Interpretation context
 
 @menu
-* Creating contexts::
-* Default contexts::
-* Context properties::
-* Context evaluation::
-* Defining contexts::
-* Changing contexts locally::
-* Engravers and performers::
-* Defining new contexts::
+* Creating contexts::           
+* Default contexts::            
+* Context properties::          
+* Context evaluation::          
+* Defining contexts::           
+* Changing contexts locally::   
+* Engravers and performers::    
+* Defining new contexts::       
 @end menu
 
 
@@ -293,7 +293,7 @@ current bar number on the standard output during the compile:
     \applycontext
       #(lambda (x)
          (format #t "\nWe were called in barnumber ~a.\n"
-          (ly:get-context-property x 'currentBarNumber)))
+          (ly:context-property x 'currentBarNumber)))
 @end example
 
 
@@ -376,7 +376,7 @@ and without a @code{Clef_engraver}.
 @refbugs
 
 The command @code{\with} has no effect on contexts that already
-exist. Neither can it be used for @internalsref{Score} contexts.
+exist. 
 
 
 @node Engravers and performers
@@ -402,14 +402,14 @@ engraver. The syntax for these operations is
 \remove @var{engravername}
 @end example
 
-@cindex \consists
-@cindex \remove
+@cindex @code{\consists}
+@cindex @code{\remove}
 
 @noindent
 Here @var{engravername} is a string, the name of an engraver in the
 system. In the following example, the @code{Clef_engraver} is removed
 from the Staff context. The result is a staff without a clef, where
-the central C is at its default position, the center line:
+the middle C is at its default position, the center line:
 
 @lilypond[verbatim,raggedright]
 \score {
@@ -514,10 +514,9 @@ When it is installed, the following link should take you to its manual
 @end ifinfo
 
 @menu
-* Inline Scheme::
-* Input variables and Scheme::
-* Scheme datatypes::
-* Assignments::
+* Inline Scheme::               
+* Input variables and Scheme::  
+* Assignments::                 
 @end menu
 
 @node Inline Scheme
@@ -602,55 +601,6 @@ written as
 
 
 
-@node Scheme datatypes
-@subsection Scheme datatypes
-
-Scheme is used to glue together different program modules. To aid this
-glue function, many LilyPond specific object types can be passed as
-Scheme value.
-
-The following list are all LilyPond specific types, that
-can exist during parsing:
-@table @code
-@item Duration
-@item Input
-@item Moment
-@item Music
-@item Event
-In C++ terms, an @code{Event} is a subtype of @code{Music}. However,
-both have different functions in the syntax.
-@item Music_output_def
-@item Pitch
-@item Score
-@item Translator_def
-@end table
-
-
-During a run, transient objects are also created and destroyed.
-
-@table @code
-@item Grob: short for `Graphical object'.
-@item Scheme_hash_table
-@item Music_iterator
-
-@item Stencil: Device-independent page output object,
-including dimensions.
-
-@item Syllable_group
-
-@item Spring_smob
-
-@item Translator: An object that produces audio objects or Grobs.
-It may be accessed with @code{\applyoutput}.
-
-@item Font_metric: An object representing a font.
-@end table
-
-Many functions are defined to manipulate these data structures. They
-are all listed and documented in the internals manual, see
-@internalsref{All scheme functions}.
-
-
 @node Assignments
 @subsection Assignments
 @cindex Assignments
@@ -680,7 +630,7 @@ foo = \foo * 2.0
 @end example
 
 When a variable is referenced in LilyPond syntax, the information it
-points to is copied.  For this reason, an variable reference must
+points to is copied.  For this reason, a variable reference must
 always be the first item in a block.
 
 @example
@@ -709,9 +659,9 @@ through the Scheme interpreter, so music expressions may be
 manipulated using Scheme functions.
 
 @menu
-* Music expressions::
-* Internal music representation::
-* Manipulating music expressions::
+* Music expressions::           
+* Internal music representation::  
+* Manipulating music expressions::  
 @end menu
 
 @node Music expressions
@@ -763,7 +713,7 @@ In principle, the way in which you nest sequential and simultaneous to
 produce music is not relevant.  In the following example, three chords
 are expressed in two different ways:
 
-@lilypond[fragment,verbatim,center,quote]
+@lilypond[fragment,verbatim,center]
 \notes \context Voice {
   <<a c'>> <<b d'>> <<c' e'>>
   << { a b c' } { c' d' e' } >>
@@ -854,15 +804,15 @@ The syntax for @code{\apply} is
 This means that the scheme function @var{func} is called with
 @var{music} as its argument.  The return value of @var{func} is the
 result of the entire expression.  @var{func} may read and write music
-properties using the functions @code{ly:get-mus-property} and
-@code{ly:set-mus-property!}.
+properties using the functions @code{ly:music-property} and
+@code{ly:music-set-property!}.
 
 An example is a function that reverses the order of elements in
 its argument:
 @lilypond[verbatim,raggedright]
   #(define (rev-music-1 m)
-     (ly:set-mus-property! m 'elements (reverse
-       (ly:get-mus-property m 'elements)))
+     (ly:music-set-property! m 'elements (reverse
+       (ly:music-property m 'elements)))
      m)
   \score { \notes \apply #rev-music-1 { c4 d4 } }
 @end lilypond
@@ -887,12 +837,12 @@ back. Then it recurses, both on @code{elements} and @code{element}
 children.
 @example
 #(define (reverse-music music)
-  (let* ((elements (ly:get-mus-property music 'elements))
-         (child (ly:get-mus-property music 'element))
+  (let* ((elements (ly:music-property music 'elements))
+         (child (ly:music-property music 'element))
          (reversed (reverse elements)))
 
     ; set children
-    (ly:set-mus-property! music 'elements reversed)
+    (ly:music-set-property! music 'elements reversed)
 
     ; recurse
     (if (ly:music? child) (reverse-music child))
@@ -951,19 +901,16 @@ lyrics, notes and markups.  Strings can be concatenated with the
 @node Output details
 @section Output details
 
-LilyPond's default output format is @TeX{}.  Using the option @option{-f}
+The default output format is La@TeX{}, which should be run
+through La@TeX{}.  Using the option @option{-f}
 (or @option{--format}) other output formats can be selected also, but
 currently none of them work reliably.
 
-At the beginning of the output file, various global parameters are defined.
-It also contains a large @code{\special} call to define PostScript routines
-to draw items not representable with @TeX{}, mainly slurs and ties.  A DVI
-driver must be able to understand such embedded PostScript, or the output
-will be rendered incompletely.
-
-Then the file @file{lilyponddefs.tex} is loaded to define the macros used
-in the code which follows.  @file{lilyponddefs.tex} includes various other
-files, partially depending on the global parameters.
+At the beginning of the output file, various global parameters are
+defined.  Then the file @file{lilyponddefs.tex} is loaded to define
+the macros used in the code which follows.  @file{lilyponddefs.tex}
+includes various other files, partially depending on the global
+parameters.
 
 Now the music is output system by system (a `system' consists of all
 staves belonging together).  From @TeX{}'s point of view, a system is an
@@ -973,7 +920,6 @@ vertically on the baseline of the text.  Between systems,
 The horizontal dimension of the @code{\hbox} is given by the
 @code{linewidth} parameter from LilyPond's @code{\paper} block.
 
-
 After the last system LilyPond emits a stronger variant of
 @code{\interscoreline} only if the macro
 @code{\lilypondpaperlastpagefill} is not defined (flushing the systems
@@ -990,9 +936,6 @@ macro @code{\lilypondscoreshift}:
 @noindent
 where @code{\baselineskip} is the distance from one text line to the next.
 
-The code produced by LilyPond should be run through La@TeX{}, not
-plain @TeX{}.
-
 Here an example how to embed a small LilyPond file @code{foo.ly} into
 running La@TeX{} text without using the @code{lilypond-book} script
 (@pxref{lilypond-book manual}):
@@ -1014,12 +957,9 @@ right here.
 The file @file{foo.tex} has been simply produced with
 
 @example
-lilypond foo.ly
+  lilypond-bin foo.ly
 @end example
 
-It is important to set the @code{indent} parameter to zero in the
-@code{\paper} block of @file{foo.ly}.
-
 The call to @code{\lineskip} assures that there is enough vertical space
 between the LilyPond box and the surrounding text lines.