X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-grob-properties.scm;h=d59d4661c92466beb9bafb8c3507435954c828a9;hb=4a28eb71bfc9974f5cf1340c466cb41fd92196bb;hp=74522da880f7757957c173cb23cf28bd184c453d;hpb=0923e4b23adf151bb673bb6727fd9e6a2458d029;p=lilypond.git diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 74522da880..d59d4661c9 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -2,7 +2,7 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 1998--2005 Han-Wen Nienhuys +;;;; (c) 1998--2006 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen (define (define-grob-property symbol type? description) @@ -22,20 +22,11 @@ (apply define-grob-property x)) `( - (X-extent-callback ,procedure? "Procedure that calculates the -extent of this object. If this value is set to @code{#f}, the object -is empty in the X direction. The procedure takes a grob and axis -argument, and returns a number-pair. -") - - (X-offset-callbacks ,list? "A list of functions determining this -objects' position relative to its parent. The last one in the list is -called first. The functions take a grob and axis argument. ") - - (Y-extent-callback ,procedure? "see @code{X-extent-callback}.") - (Y-offset-callbacks ,list? "see @code{X-offset-callbacks}.") - + (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 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") @@ -45,8 +36,14 @@ called first. The functions take a grob and axis argument. ") (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.") (axes ,list? "list of axis numbers. In the case of alignment grobs, this should contain only one number.") @@ -56,7 +53,7 @@ for balloon text.") (balloon-text-offset ,number-pair? "Where to put text relative to balloon.") (balloon-padding ,ly:dimension? "Text to add to help balloon") - (balloon-original-callback ,procedure? "The + (original-stencil ,ly:stencil? "The original stencil drawer to draw the balloon around.") @@ -67,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 @@ -114,17 +111,11 @@ 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 accidentals. Choices are @code{smaller} or @code{parentheses}.") - (callbacks ,list? "An alist of (@var{symbol} . @var{procedure}) -pairs. When the grob property @var{symbol} is requested, -@var{procedure} is invoked. The return value, if it is unequal to -@code{#} is recorded as the value of the property.") (cautionary ,boolean? "Is this a cautionary accidental?") (concaveness ,number? "A beam is concave when its inner stems are closer to the beam than the two outside stems. This number is a @@ -134,11 +125,12 @@ the slope of the beam.") (color ,color? "The color of this grob.") - (context ,ly:context? "Originating context of the 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 @@ -147,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.") @@ -174,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}.") @@ -191,10 +180,7 @@ fret diagram. Options include @code{none}, @code{in-dot}, and @code{below-strin typeset on a Stem. Valid options include @code{()} and @code{mensural}. Additionally, @code{\"no-flag\"} switches off the flag.") - - (strict-note-spacing ,boolean? "If set, unbroken columns -with non-musical material (clefs, barlines, etc.) are not spaced -separately, but put before musical columns.") + (font-family ,symbol? "The font family is the broadest category for selecting text fonts. Options include: @code{sans}, @code{roman} ") (font-encoding ,symbol? "The font encoding is the broadest category for selecting a font. Options include: @code{fetaMusic}, @@ -244,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.") @@ -284,8 +271,11 @@ 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}.") (measure-length ,ly:moment? "Length of a measure. Used in some spacing situations.") @@ -306,7 +296,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.") @@ -325,35 +315,48 @@ 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 staff-space unit of the current staff.") (ratio ,number? "Parameter for slur shape. The higher this number, the quicker the slur attains it @code{height-limit}.") + + (remove-empty ,boolean? "If set, remove group if it contains no +@code{interesting-items}") (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.") (script-priority ,number? "A sorting key that determines in what order a script is within a stack of scripts.") @@ -379,11 +382,10 @@ note that starts here.") "Multiply direction of @code{direction-source} with this to get the direction of this object.") + (side-axis ,number? "Is this object horizontally or vertically next to another 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} @@ -397,7 +399,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.") @@ -412,33 +414,32 @@ stems that are placed in tight configurations. For opposite directions, this amount is the correction for two normal sized stems that overlap completely.") - (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.") + (strict-note-spacing ,boolean? "If set, unbroken columns +with non-musical material (clefs, barlines, etc.) are not spaced +separately, but put before musical columns.") (string-count ,integer? "The number of strings in a fret diagram.") (stroke-style ,string? "set to \"grace\" to turn stroke through flag on.") (style ,symbol? "This setting determines in what style a grob is -typeset. Valid choices depend on the @code{print-function} that is -reading this property.") +typeset. Valid choices depend on the @code{stencil} callback reading +this property.") (text ,markup? "Text markup. See @usermanref{Text markup}.") ;;FIXME -- Should both be the same? (text-direction ,ly:dir? "This controls the ordering of the 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.") - (transparent ,boolean? "This is almost the same as setting -@code{print-function} to @code{#f}, but this retains the dimensions of -this grob, which means that grobs can be erased individually.") +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") (used ,boolean? "If set, this spacing column is kept in the spacing problem") @@ -446,7 +447,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.") @@ -485,14 +485,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.") @@ -508,6 +509,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") @@ -518,13 +520,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. @@ -551,22 +562,19 @@ entries @code{name} and @code{interfaces}.") ;; TODO: use interface for this! - (chord-tremolo ,boolean? "if set, this beam is a tremolo. ") + (quantized-positions ,number-pair? "Beam positions after quanting.") (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.") (quant-score ,string? "Beam quanting score -- can be stored for debugging") (least-squares-dy ,number? "ideal beam slope, without damping.") - (ligature-primitive-callback ,procedure? "callback that brews ligature head.") (stem-info ,pair? "caching of stem parameters") (note-columns ,pair? "list of NoteColumn grobs.") - (position-callbacks ,list? "list of -functions set spanner positions.") - -;;; 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? "") @@ -575,7 +583,7 @@ functions set spanner positions.") ;; [TODO: change this] (primitive ,integer? "Pointer to a ligature primitive, i.e. an item similar to a note head that is part of a ligature. ") - (stencil ,ly:stencil? "Cached output of the print-function.") + (stencil ,ly:stencil? "The symbol to print.") (ideal-distances ,list? "(@var{obj} . (@var{dist} . @var{strength})) pairs.") (minimum-distances ,list? "list of rods, that have the format (@var{obj} . @var{dist}).") @@ -589,8 +597,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.