]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-grob-properties.scm
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / scm / define-grob-properties.scm
index 9695d628b82c1ff6b461e73c3fd6f150455d5be9..09d7187b5cd2b3c3f69cdd485931d6f6c63d9beb 100644 (file)
@@ -2,7 +2,7 @@
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;; 
-;;;; (c) 1998--2005  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; (c) 1998--2006  Han-Wen Nienhuys <hanwen@cs.uu.nl>
 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 
 (define (define-grob-property symbol type? description)
    `(
      (X-offset ,number? "The horizontal amount that this object is moved relative to its X-parent")
      (Y-offset ,number? "The vertical amount that this object is moved
-relative to its X-parent")
-     (self-X-offset ,number? "")
-     (self-Y-offset ,number? "")
+relative to its Y-parent")
      (accidentals ,list? "List of alteration numbers")
+     (after-line-breaking ,boolean? "Dummy property, used to trigger callback for after-line-breaking")
      (alteration-alist ,list? "List of @code{(@var{pitch}
 . @var{accidental})} pairs for key signature.")
      (add-stem-support ,boolean? "If set, the Stem object is included in this script's support") 
@@ -37,6 +36,11 @@ relative to its X-parent")
      (arpeggio-direction ,ly:dir? "If set, put an
 arrow on the arpeggio squiggly line.")
   
+
+     (arrow ,boolean? "Add an arrow to the line.")
+     (arrow-length ,number? "Arrow length.")
+     (arrow-width ,number? "Arrow width.")
+
      (auto-knee-gap ,ly:dimension? "If a gap is found between note heads
 where a horizontal beam fits that is larger than this number, make a kneed beam.")
      (average-spacing-wishes ,boolean? "If set, the spacing wishes are averaged over staves.")
@@ -60,7 +64,7 @@ Choices include @code{curved} and @code{straight}.")
                             "Spacing is based on the shortest notes in a piece. Normally, pieces are spaced as if notes at least as short as this are present.")
      (baseline-skip ,ly:dimension? "Distance between base lines of
  multiple lines of text.")
-     (beam-thickness ,ly:dimension? "thickness, measured in staffspace.")
+     (beam-thickness ,ly:dimension? "thickness, measured in staff-space.")
      (beam-width ,ly:dimension? "width of the tremolo sign.")
      (beamed-stem-shorten ,list? "How much to shorten beamed stems,
 when their direction is forced. It is a list, since the value is different
@@ -107,8 +111,6 @@ tuplet bracket.")
      (break-visibility ,vector? "A vector of 3 booleans, #(end-of-line unbroken begin-of-line).
 #t means visible, #f means killed.")
 
-     (breakable ,boolean? "Can this object appear at a line break,
-like clefs and bar lines?")
      (c0-position ,integer? "An integer indicating the position of
 middle C.")
      (cautionary-style ,symbol? "How to print cautionary
@@ -123,9 +125,12 @@ the slope of the beam.")
 
      (color ,color? "The color of this grob.")
 
-     ;;DOCME
-     (control-points ,list? "List of 4 offsets (number-pairs) that form control points for the  tie/slur shape.")
+     (control-points ,list? "List of offsets (number-pairs) that form
+control points for the tie/slur/bracket shape. For beziers, this
+should list the control points of a 3rd order bezier curve." )
 
+     (connect-to-neighbor ,pair? "Pair of booleans, indicating whether this
+grob looks as a continued break.")
      (damping ,number? "Amount of beam slope damping. 0: no, 1: yes,
 100000: horizontal beams.")
      (dash-period ,number? "the length of one dash + white space. If
@@ -134,13 +139,10 @@ negative, no line is drawn at all.")
      (dash-fraction ,number? "Size of the dashes, relative to
 dash-period. Should be between 0.0 (no line) and 1.0 (continuous
 line).")
-
-     (arrow ,boolean? "Add an arrow to the line.")
-     (arrow-length ,number? "Arrow length.")
-     (arrow-width ,number? "Arrow width.")
-
      
-     (direction ,ly:dir? "Up or down, left or right?")
+     (default-direction ,ly:dir? "Direction determined by note head positions.")
+     (direction ,ly:dir? "#UP or #DOWN, #LEFT or #RIGHT?  (or a numerical value, #UP=1, #DOWN=-1, #LEFT=-1, #RIGHT=1, CENTER=0)")
+
      (dot-color ,symbol? "Color of dots.  Options include 
 @code{black} and @code{white}.")
      (dot-radius ,number? "Radius of dots.")
@@ -161,7 +163,7 @@ edges '(@var{left-text} . @var{right-text}).")
      ;; remove me? 
      (extra-X-extent ,number-pair? "A grob is enlarged in X dimension
 by this much.")
-     (extra-Y-extent ,number-pair? "See @code{extra-Y-extent}.")
+     (extra-Y-extent ,number-pair? "See @code{extra-X-extent}.")
      
      (X-extent ,number-pair? "Hard coded extent in X direction. ")
      (Y-extent ,number-pair? "See @code{X-extent}.")
@@ -228,7 +230,8 @@ of the @code{spacing-increment}.")
 
      (grow-direction ,ly:dir? "Crescendo or decrescendo?")
      (hair-thickness ,number? "Thickness of the thin line in a bar line.")
-     (height ,ly:dimension? "Height of an object in staffspace.")
+     (head-direction ,ly:dir? "Are the note heads left or right in a semitie?")
+     (height ,ly:dimension? "Height of an object in staff-space.")
      (height-limit ,ly:dimension? "Maximum slur height: the longer the
 slur, the closer it is to this height.")
 
@@ -268,8 +271,13 @@ determining ledger lines and stem lengths.")
      (line-break-system-details ,list?
                                "Alist of properties to use when this
 column is the start of a system.")
-     
+
      (line-count ,integer? "The number of staff lines.")
+     (line-positions ,list? "Vertical positions of staff lines.")
+     (line-thickness ,number? "The thickness of the tie/slur contour.")
+     (long-text ,markup? "Text markup.  See @usermanref{Text markup}.")
+     (max-beam-connect ,integer? "Maximum number of beams to connect
+to beams from this stem. Further beams are typeset as beamlets.")
      (measure-length ,ly:moment? "Length of a
 measure. Used in some spacing situations.")
 
@@ -290,7 +298,7 @@ notation for some types of polyphonic music. ")
 and notes or beam.")
      (minimum-X-extent ,number-pair? "Minimum size of an object in X
 dimension, measured in staff space.")
-     (minimum-Y-extent ,number-pair? "See @code{minimum-Y-extent}.")
+     (minimum-Y-extent ,number-pair? "See @code{minimum-X-extent}.")
      (minimum-length ,ly:dimension? "Try to make a spanner at least
 this long. This requires an appropriate callback for the
 @code{springs-and-rods} property.")
@@ -309,26 +317,31 @@ easy-notation note heads.")
 spacing constraints.")
      (no-stem-extend ,boolean? "If set, notes with ledger lines do not
 get stems extending to the middle staff line.")
+     (non-musical ,boolean? "True if the grob belongs in a NonMusicalPaperColumn.")
      (number-type ,symbol? "Type of numbers to use in label.  Choices
 include @code{roman-lower}, @code{roman-upper}, and @code{arabic}.")
-     (number-visibility ,boolean-or-symbol? "Like
-@code{bracket-visibility}, but for the number.")
-
-
-
      (packed-spacing ,boolean? "If set, the notes are spaced as
 tightly as possible.")
      (padding ,ly:dimension? "Add this much extra space between
 objects that are next to each other.")
-     (page-penalty ,number? "Penalty for page break at
-this column.  10000 or more means forbid linebreak, -10000 or less
-means force page break.  Other values influence page breaking decisions
-as a real penalty.")
-     (penalty ,number? "Penalty for line break at
-this column.  10000 or more means forbid line break, -10000 or less
-means force line break.  Other values influence line breaking decisions
-as a real penalty.")
-
+     (page-break-permission ,symbol? "Instructs the page breaker on whether to
+put a page break at this column. Can be 'force, or 'allow.")
+     (page-turn-permission ,symbol? "Instructs the page breaker on whether to
+put a page turn at this column. Can be 'force, or 'allow.")
+     (line-break-permission ,symbol? "Instructs the line breaker on whether to
+put a line break at this column. Can be 'force, or 'allow.")
+     (page-break-penalty ,number? "Penalty for page break at
+this column. This affects the choices of the page breaker; it will avoid a page
+break at a column with a positive penalty and prefer a page break at a column
+with a negative penalty.")
+     (page-turn-penalty ,number? "Penalty for a page turn at this column.
+This affects the choices of the page breaker; it will avoid a page
+turn at a column with a positive penalty and prefer a page turn at a column
+with a negative penalty.")
+     (line-break-penalty ,number? "Penalty for a line break at this column.
+This affects the choices of the line breaker; it will avoid a line
+break at a column with a positive penalty and prefer a line break at a column
+with a negative penalty.")
      (positions ,pair?
                "Pair of staff coordinates @code{(@var{left}
 . @var{right})}, where both @var{left} and @var{right} are in the
@@ -341,6 +354,8 @@ quicker the slur attains it @code{height-limit}.")
      (remove-first ,boolean? "Remove the first staff of a orchestral score?")
      (right-padding ,ly:dimension? "Space to insert between note and
 accidentals.")
+     (rotation ,list? "Number of degrees to rotate this object, and what point
+to rotate around. #'(45 0 0) means rotate 45 degrees around the center of this object.")
      (same-direction-correction ,number? "Optical correction amount
 for stems that are placed in tight configurations. This amount is used
 for stems with the same direction to compensate for note-head to stem distance.")
@@ -355,6 +370,7 @@ Y axis.")
 
      (shorten-pair ,number-pair? "The lengths to shorten a
 text-spanner on both sides, for example a pedal bracket")
+     (clip-edges ,boolean? "Allow outward pointing beamlets at the edges of beams?")
      (common-shortest-duration ,ly:moment?
                               "The most common shortest note length.
 This is used in spacing. Enlarging this will set the score tighter.")
@@ -373,8 +389,6 @@ object.")
      (size ,number? "Size of object, relative to standard size.")
      (slope ,number? "The slope of this object.")
      (slur-padding ,number? "Extra distance between slur and script.")
-     (slur-details ,list?
-                  "An alist of scoring parameters for slur formatting")
      (space-alist ,list? "A table that specifies distances between
 prefatory items, like clef and time-signature. The format is an alist
 of spacing tuples: @code{(@var{break-align-symbol} @var{type}
@@ -388,7 +402,7 @@ duration. Typically, the width of a note head. See also
      (springs-and-rods ,boolean? "Dummy variable for triggering spacing routines.")
      (stacking-dir ,ly:dir? "Stack objects in which direction?")
      (staff-space ,ly:dimension? "Amount of space between staff lines,
-expressed in global staffspace.")
+expressed in global staff-space.")
      (staff-position ,number? "Vertical position, measured in half
 staff spaces, counted from the middle line.")
      
@@ -418,15 +432,16 @@ this property.")
 words. The default RIGHT is for roman text. Arabic or hebrew should
 use LEFT.")
      (thick-thickness ,number? "Bar line thickness, measured in
-@code{linethickness}.")
+@code{line-thickness}.")
      (thickness ,number? "Bar line thickness, measured in
-@code{linethickness}.")
+@code{line-thickness}.")
      (thin-kern ,number? "The space after a hair-line in a bar line.")
 
      (threshold ,number-pair? "(@var{min} . @var{max}), where
 @var{min} and @var{max} are dimensions in staff space.")
      (tie-configuration ,list? "List of (@var{position} . @var{dir})
-pairs, indicating the desired tie configuration.")
+pairs, indicating the desired tie configuration. A non-pair entry in
+the list will cause said tie to be formatted automatically. ")
      (transparent ,boolean? "This makes the grob invisible.")
      (uniform-stretching ,boolean? "If set, items stretch proportional
 to their durations. This looks better in complex polyphonic patterns")
@@ -435,7 +450,6 @@ to their durations. This looks better in complex polyphonic patterns")
 happen?")
      (word-space ,ly:dimension? "space to insert between words in texts.")
      (width ,ly:dimension? "The width of a grob measured in staff space.")
-     (x-gap ,ly:dimension? "The horizontal gap between note head and tie.")
      (zigzag-length ,ly:dimension? "The length of the lines of a
 zigzag, relative to @code{zigzag-width}. A value of 1 gives 60-degree
 zigzags.")
@@ -474,14 +488,15 @@ sizes (like the dynamic @b{p} and @b{f}) on their baselines.")
      (axis-group-parent-Y ,ly:grob? "Containing Y axis group")
      (accidental-grobs ,list? "Alist with (NOTENAME . GROBLIST) entries")
      (adjacent-hairpins ,ly:grob-array? "List of directly neighboring hairpins")
-     (after-line-breaking ,boolean? "Dummy property, used to trigger callback for after-line-breaking")
      (all-elements ,ly:grob-array? "list of all grobs in this line. Its
 function is to protect objects from being garbage collected.")
      (arpeggio ,ly:grob? "pointer to arpeggio object.")
      (beam ,ly:grob? "pointer to the beam, if applicable.")
+     (bracket ,ly:grob? "the bracket for a  number.")
      (direction-source ,ly:grob? "in case side-relative-direction is
 set, which grob to get the direction from .")
      (dot ,ly:grob? "reference to Dots object.")
+     (dots ,ly:grob-array? "multiple Dots objects.")
      (figures ,ly:grob-array? "Figured bass objects for continuation line.")
      (glyph-name ,string? "a name of character within font.")
      (pedal-text ,ly:grob? "Pointer to the text of a mixed-style piano pedal.")
@@ -497,6 +512,7 @@ set, which grob to get the direction from .")
      (bounded-by-me ,ly:grob-array? "list of spanners that have this
 column as start/begin point. Only columns that have grobs or act as
 bounds are spaced.")
+     (circled-tip ,boolean? "Put a circle at start/end of hairpins (al/del niente)")
      (columns ,ly:grob-array? "list of grobs, typically containing
 paper-columns or note-column objects.")
      (conditional-elements ,ly:grob-array? "Internal use only")
@@ -507,13 +523,22 @@ where this is set in.")
      (heads ,ly:grob-array? "List of note heads.")
      (items-worth-living ,ly:grob-array? "A list of interesting items. If
 empty in a particular staff, then that staff is erased.")
-     (details ,list? "alist of parameters for detailed grob behavior.")
+     (details ,list? "alist of parameters for detailed grob behavior.
+
+more information on the allowed parameters can be found by inspecting
+lily/slur-scoring.cc, lily/beam-quanting.cc, and
+lily/tie-formatting-problem.cc.  Setting @code{debug-tie-scoring},
+@code{debug-beam-scoring} or @code{debug-slur-scoring} also provides
+useful clues.
+
+")
      (note-heads ,ly:grob-array? "List of note head grobs")
      (note-head ,ly:grob? "A single note head")
      (side-support-elements ,ly:grob-array? "the support, a list of grobs.")
      (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing objects.")
      (stems ,ly:grob-array? "list of stem objects, corresponding to the notes that the arpeggio has to be before.")
      (tuplets ,ly:grob-array? "list of smaller tuplet brackets")
+     (tuplet-number ,ly:grob? "the number for a bracket.")
 
      (left-neighbors ,ly:grob-array? " List of
 spacing-wish grobs that are close to the current column.
@@ -541,7 +566,6 @@ entries @code{name} and @code{interfaces}.")
 
      ;; TODO: use interface for this!
      (quantized-positions ,number-pair? "Beam positions after quanting.")
-     (chord-tremolo ,boolean? "if set, this beam is a tremolo. ")
      (begin-of-line-visible ,boolean? "Used for marking ChordNames that should only show changes.")
 
      (quantize-position ,boolean? "If set, a vertical alignment is aligned to be within staff spaces.")
@@ -553,7 +577,7 @@ debugging")
      (stem-info ,pair? "caching of stem parameters")
      (note-columns ,pair? "list of NoteColumn grobs.")
 
-;;; add-join would be enough if in Mensural_ligature::brew_ligature_primitive
+;;; add-join would be enough if in ly:mensural-ligature::brew-ligature-primitive
 ;;; the next note could be seen
      (join-right-amount ,number? "")
 
@@ -576,8 +600,10 @@ than a whole rest.")
 
      (spaceable-staves ,ly:grob-array? "Objects to be spaced during page layout.")
 
+     
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; ancient notation
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;;;;;; TODO:
      ;; there are too many properties for ancient notation
      ;; probably neume-types (a list of symbols) would also work.