]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-grob-properties.scm
Merge branch 'master' into lilypond/translation
[lilypond.git] / scm / define-grob-properties.scm
1 ;;;; This file is part of LilyPond, the GNU music typesetter.
2 ;;;;
3 ;;;; Copyright (C) 1998--2011  Han-Wen Nienhuys <hanwen@xs4all.nl>
4 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
5 ;;;;
6 ;;;; LilyPond is free software: you can redistribute it and/or modify
7 ;;;; it under the terms of the GNU General Public License as published by
8 ;;;; the Free Software Foundation, either version 3 of the License, or
9 ;;;; (at your option) any later version.
10 ;;;;
11 ;;;; LilyPond is distributed in the hope that it will be useful,
12 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ;;;; GNU General Public License for more details.
15 ;;;;
16 ;;;; You should have received a copy of the GNU General Public License
17 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18
19 (define (define-grob-property symbol type? description)
20   (if (not (equal? (object-property symbol 'backend-doc) #f))
21       (ly:error (_ "symbol ~S redefined") symbol))
22
23   (set-object-property! symbol 'backend-type? type?)
24   (set-object-property! symbol 'backend-doc description)
25   symbol)
26
27 ;; put this in an alist?
28 (define-public all-user-grob-properties
29   (map
30    (lambda (x)
31      (apply define-grob-property x))
32
33    `(
34 ;;
35 ;; a
36 ;;
37      (add-stem-support ,boolean? "If set, the @code{Stem} object is
38 included in this script's support.")
39      (after-line-breaking ,boolean? "Dummy property, used to trigger
40 callback for @code{after-line-breaking}.")
41      (align-dir ,ly:dir? "Which side to align? @w{@code{-1}}: left side,
42 @code{0}: around center of width, @code{1}: right side.")
43      (allow-loose-spacing ,boolean? "If set, column can be detached
44 from main spacing.")
45      (allow-span-bar ,boolean? "If false, no inter-staff bar line will
46 be created below this bar line.")
47      (alteration ,number? "Alteration numbers for accidental.")
48      (alteration-alist ,list? "List of @code{(@var{pitch}
49 . @var{accidental})} pairs for key signature.")
50      (annotation ,string? "Annotate a grob for debug purposes.")
51      (annotation-balloon ,boolean? "Print the balloon around an annotation.")
52      (annotation-line ,boolean? "Print the line from an annotation to the
53 grob that it annotates.")
54      (arpeggio-direction ,ly:dir? "If set, put an arrow on the
55 arpeggio squiggly line.")
56      (arrow-length ,number? "Arrow length.")
57      (arrow-width ,number? "Arrow width.")
58      (auto-knee-gap ,ly:dimension? "If a gap is found between note
59 heads where a horizontal beam fits that is larger than this number,
60 make a kneed beam.")
61      (automatically-numbered ,boolean? "Should a footnote be automatically
62 numbered?")
63      (average-spacing-wishes ,boolean? "If set, the spacing wishes are
64 averaged over staves.")
65      (avoid-note-head ,boolean? "If set, the stem of a chord does not
66 pass through all note heads, but starts at the last note head.")
67      (avoid-slur ,symbol? "Method of handling slur collisions.
68 Choices are @code{inside}, @code{outside}, @code{around}, and
69 @code{ignore}.  @code{inside} adjusts the slur if needed to keep the
70 grob inside the slur.  @code{outside} moves the grob vertically to the
71 outside of the slur.  @code{around} moves the grob vertically to the
72 outside of the slur only if there is a collision.  @code{ignore} does
73 not move either.  In grobs whose notational significance depends on
74 vertical position (such as accidentals, clefs, etc.), @code{outside}
75 and @code{around} behave like @code{ignore}.")
76      (axes ,list? "List of axis numbers.  In the case of alignment
77 grobs, this should contain only one number.")
78
79
80 ;;
81 ;; b
82 ;;
83      (base-shortest-duration ,ly:moment? "Spacing is based on the
84 shortest notes in a piece.  Normally, pieces are spaced as if notes at
85 least as short as this are present.")
86      (baseline-skip ,ly:dimension? "Distance between base lines of
87 multiple lines of text.")
88      (beam-thickness ,ly:dimension? "Beam thickness, measured in
89 @code{staff-space} units.")
90      (beam-width ,ly:dimension? "Width of the tremolo sign.")
91      (beamed-stem-shorten ,list? "How much to shorten beamed stems,
92 when their direction is forced.  It is a list, since the value is
93 different depending on the number of flags and beams.")
94      (beaming ,pair? "Pair of number lists.  Each number list
95 specifies which beams to make.  @code{0}@tie{}is the central beam,
96 @code{1}@tie{}is the next beam toward the note, etc.  This information
97 is used to determine how to connect the beaming patterns from stem to
98 stem inside a beam.")
99      (beamlet-default-length ,pair? "A pair of numbers.  The first
100 number specifies the default length of a beamlet that sticks out of
101 the left hand side of this stem; the second number specifies the
102 default length of the beamlet to the right.  The actual length of a
103 beamlet is determined by taking either the default length or the
104 length specified by @code{beamlet-max-length-proportion}, whichever is
105 smaller.")
106      (beamlet-max-length-proportion ,pair? "The maximum length of a
107 beamlet, as a proportion of the distance between two adjacent stems.")
108      (before-line-breaking ,boolean? "Dummy property, used to trigger
109 a callback function.")
110      (between-cols ,pair? "Where to attach a loose column to.")
111      (bound-details ,list? "An alist of properties for determining
112 attachments of spanners to edges.")
113      (bound-padding ,number? "The amount of padding to insert around
114 spanner bounds.")
115      (bracket-flare ,number-pair? "A pair of numbers specifying how
116 much edges of brackets should slant outward.  Value @code{0.0} means
117 straight edges.")
118      (bracket-visibility ,boolean-or-symbol? "This controls the
119 visibility of the tuplet bracket.  Setting it to false prevents
120 printing of the bracket.  Setting the property to @code{if-no-beam}
121 makes it print only if there is no beam associated with this tuplet
122 bracket.")
123      (break-align-anchor ,number? "Grobs aligned to this break-align
124 grob will have their X-offsets shifted by this number.  In bar lines,
125 for example, this is used to position grobs relative to the (visual)
126 center of the bar line.")
127      (break-align-anchor-alignment ,number? "Read by
128 @code{ly:break-aligned-interface::calc-extent-aligned-anchor} for
129 aligning an anchor to a grob's extent.")
130      (break-align-orders ,vector? "Defines the order in which
131 prefatory matter (clefs, key signatures) appears.  The format is a
132 vector of length@tie{}3, where each element is one order for
133 end-of-line, middle of line, and start-of-line, respectively.  An
134 order is a list of symbols.
135
136 For example, clefs are put after key signatures by setting
137
138 @example
139 \\override Score.BreakAlignment #'break-align-orders =
140   #(make-vector 3 '(span-bar
141                     breathing-sign
142                     staff-bar
143                     key
144                     clef
145                     time-signature))
146 @end example")
147      (break-align-symbol ,symbol? "This key is used for aligning and
148 spacing breakable items.")
149      (break-align-symbols ,list? "A list of symbols that determine
150 which break-aligned grobs to align this to.  If the grob selected by
151 the first symbol in the list is invisible due to break-visibility, we
152 will align to the next grob (and so on).  Choices are @code{left-edge},
153 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{staff-bar},
154 @code{key-cancellation}, @code{key-signature}, @code{time-signature},
155 and @code{custos}.")
156      (break-overshoot ,number-pair? "How much does a broken spanner
157 stick out of its bounds?")
158      (break-visibility ,vector? "A vector of 3@tie{}booleans,
159 @code{#(@var{end-of-line} @var{unbroken} @var{begin-of-line})}.
160 @code{#t} means visible, @code{#f} means killed.")
161      (breakable ,boolean? "Allow breaks here.")
162
163
164 ;;
165 ;; c
166 ;;
167      (c0-position ,integer? "An integer indicating the position of
168 middle@tie{}C.")
169      (circled-tip ,boolean? "Put a circle at start/@/end of
170 hairpins (al/@/del niente).")
171      (clip-edges ,boolean? "Allow outward pointing beamlets at the
172 edges of beams?")
173      (collapse-height ,ly:dimension? "Minimum height of system start
174 delimiter.  If equal or smaller, the bracket/@/brace/@/line is removed.")
175      (collision-interfaces ,list? "A list of interfaces for which
176 automatic beam-collision resolution is run.")
177      (collision-voice-only ,boolean? "Does automatic beam collsion apply
178 only to the voice in which the beam was created?")
179      (color ,color? "The color of this grob.")
180      (common-shortest-duration ,ly:moment? "The most common shortest
181 note length.  This is used in spacing.  Enlarging this sets the score
182 tighter.")
183      (concaveness ,number? "A beam is concave if its inner stems are
184 closer to the beam than the two outside stems.  This number is a
185 measure of the closeness of the inner stems.  It is used for damping
186 the slope of the beam.")
187      (connect-to-neighbor ,pair? "Pair of booleans, indicating whether
188 this grob looks as a continued break.")
189      (control-points ,list? "List of offsets (number pairs) that form
190 control points for the tie, slur, or bracket shape.  For B@'eziers,
191 this should list the control points of a third-order B@'ezier curve.")
192
193 ;;
194 ;; d
195 ;;
196      (damping ,number? "Amount of beam slope damping.")
197      (dash-definition ,pair? "List of @code{dash-elements} defining the
198 dash structure.  Each @code{dash-element} has a starting t value,
199 an ending t-value, a @code{dash-fraction}, and a @code{dash-period}.")
200      (dash-fraction ,number? "Size of the dashes, relative to
201 @code{dash-period}.  Should be between @code{0.0} (no line) and
202 @code{1.0} (continuous line).")
203      (dash-period ,number? "The length of one dash together with
204 whitespace.  If negative, no line is drawn at all.")
205      (default-direction ,ly:dir? "Direction determined by note head
206 positions.")
207      (default-staff-staff-spacing ,list? "The settings to use for
208 @code{staff-staff-spacing} when it is unset, for ungrouped staves
209 and for grouped staves that do not have the relevant
210 @code{StaffGrouper} property set (@code{staff-staff-spacing} or
211 @code{staffgroup-staff-spacing}).")
212      (details ,list? "Alist of parameters for detailed grob behavior.
213 More information on the allowed parameters for a grob can be found by
214 looking at the top of the Internals Reference page for each interface
215 having a @code{details} property.")
216      (digit-names ,vector? "Names for string finger digits.")
217      (direction ,ly:dir? "If @code{side-axis} is @code{0} (or
218 @code{X}), then this property determines whether the object is placed
219 @code{LEFT}, @code{CENTER} or @code{RIGHT} with respect to the
220 other object.  Otherwise, it determines whether the object is placed
221 @code{UP}, @code{CENTER} or @code{DOWN}.  Numerical values may also
222 be used: @code{UP}=@code{1}, @code{DOWN}=@w{@code{-1}},
223 @code{LEFT}=@w{@code{-1}}, @code{RIGHT}=@code{1},
224 @code{CENTER}=@code{0}.")
225      (dot-count ,integer? "The number of dots.")
226      (dot-negative-kern ,number? "The space to remove between a dot
227 and a slash in percent repeat glyphs.  Larger values bring the two
228 elements closer together.")
229      (dot-placement-list ,list? "List consisting of
230 @code{(@var{description} @var{string-number} @var{fret-number}
231 @var{finger-number})} entries used to define fret diagrams.")
232      (duration-log ,integer? "The 2-log of the note head duration,
233 i.e., @code{0} = whole note, @code{1} = half note, etc.")
234
235
236 ;;
237 ;; e
238 ;;
239      (eccentricity ,number? "How asymmetrical to make a slur.
240 Positive means move the center to the right.")
241      (edge-height ,pair? "A pair of numbers specifying the heights of
242 the vertical edges: @code{(@var{left-height} . @var{right-height})}.")
243      (edge-text ,pair? "A pair specifying the texts to be set at the
244 edges: @code{(@var{left-text} . @var{right-text})}.")
245      (elements-filtered ,boolean? "Callback to filter an element list.")
246      (round-up-exceptions ,list? "A list of pairs where car is the numerator
247 and cdr the denominator of a moment.  Each pair in this list means that
248 the multi-measure rests of the corresponding length will be rounded up to
249 the longer rest.  See @var{round-up-to-longer-rest}.")
250      (expand-limit ,integer? "Maximum number of measures expanded in
251 church rests.")
252      ;; remove me?
253      (extra-dy ,number? "Slope glissandi this much extra.")
254      (extra-offset ,number-pair? "A pair representing an offset.  This
255 offset is added just before outputting the symbol, so the typesetting
256 engine is completely oblivious to it.  The values are measured in
257 @code{staff-space} units of the staff's @code{StaffSymbol}.")
258      (extra-spacing-height ,number-pair? "In the horizontal spacing
259 problem, we increase the height of each item by this amount (by adding
260 the @q{car} to the bottom of the item and adding the @q{cdr} to the
261 top of the item).  In order to make a grob infinitely high (to prevent
262 the horizontal spacing problem from placing any other grobs above or
263 below this grob), set this to @code{(-inf.0 . +inf.0)}.")
264      (extra-spacing-width ,number-pair? "In the horizontal spacing
265 problem, we pad each item by this amount (by adding the @q{car} on the
266 left side of the item and adding the @q{cdr} on the right side of the
267 item).  In order to make a grob take up no horizontal space at all,
268 set this to @code{(+inf.0 . -inf.0)}.")
269      (extra-X-extent ,number-pair? "A grob is enlarged in
270 X@tie{}dimension by this much.")
271      (extra-Y-extent ,number-pair? "A grob is enlarged in
272 Y@tie{}dimension by this much.")
273
274
275 ;;
276 ;; f
277 ;;
278      (flag-count ,number? "The number of tremolo beams.")
279      (font-encoding ,symbol? "The font encoding is the broadest
280 category for selecting a font.  Currently, only lilypond's system
281 fonts (Emmentaler) are using this property.  Available
282 values are @code{fetaMusic} (Emmentaler), @code{fetaBraces},
283 @code{fetaText} (Emmentaler).")
284      (font-family ,symbol? "The font family is the broadest category
285 for selecting text fonts.  Options include: @code{sans},
286 @code{roman}.")
287      (font-name ,string? "Specifies a file name (without extension) of
288 the font to load.  This setting overrides selection using
289 @code{font-family}, @code{font-series} and @code{font-shape}.")
290      (font-series ,symbol? "Select the series of a font.  Choices
291 include @code{medium}, @code{bold}, @code{bold-narrow}, etc.")
292      (font-shape ,symbol? "Select the shape of a font.  Choices
293 include @code{upright}, @code{italic}, @code{caps}.")
294      (font-size ,number? "The font size, compared to the
295 @q{normal}@tie{}size.  @code{0}@tie{}is style-sheet's normal size,
296 @w{@code{-1}} is smaller, @code{+1} is bigger.  Each step of@tie{}1 is
297 approximately 12% larger; 6@tie{}steps are exactly a factor@tie{}2
298 larger.  Fractional values are allowed.")
299      (footnote-text ,markup? "A footnote for the grob.")
300      (force-hshift ,number? "This specifies a manual shift for notes
301 in collisions.  The unit is the note head width of the first voice
302 note.  This is used by @rinternals{note-collision-interface}.")
303      (fraction ,number-pair? "Numerator and denominator of a time
304 signature object.")
305      (french-beaming ,boolean? "Use French beaming style for this
306 stem.  The stem stops at the innermost beams.")
307      (fret-diagram-details ,list? "An alist of detailed grob
308 properties for fret diagrams.  Each alist entry consists of a
309 @code{(@var{property} .  @var{value})} pair.  The properties which can
310 be included in @code{fret-diagram-details} include the following:
311
312 @itemize @bullet
313 @item
314 @code{barre-type} -- Type of barre indication used.  Choices include
315 @code{curved}, @code{straight}, and @code{none}.  Default
316 @code{curved}.
317 @item
318 @code{capo-thickness} -- Thickness of capo indicator, in multiples of
319 fret-space.  Default value@tie{}0.5.
320 @item
321 @code{dot-color} -- Color of dots.  Options include @code{black} and
322 @code{white}.  Default @code{black}.
323 @item
324 @code{dot-label-font-mag} -- Magnification for font used to label fret
325 dots.  Default value@tie{}1.
326 @item
327 @code{dot-position} -- Location of dot in fret space.  Default 0.6 for
328 dots without labels, 0.95-@code{dot-radius} for dots with labels.
329 @item
330 @code{dot-radius} -- Radius of dots, in terms of fret spaces.  Default
331 value 0.425 for labeled dots, 0.25 for unlabeled dots.
332 @item
333 @code{finger-code} -- Code for the type of fingering indication used.
334 Options include @code{none}, @code{in-dot}, and @code{below-string}.
335 Default @code{none} for markup fret diagrams, @code{below-string} for
336 @code{FretBoards} fret diagrams.
337 @item
338 @code{fret-count} -- The number of frets.  Default@tie{}4.
339 @item
340 @code{fret-label-custom-format} -- The format string to be used label
341 the lowest fret number, when @code{number-type} equals to
342 @code{custom}.  Default@tie{}\"~a\".
343 @item
344 @code{fret-label-font-mag} -- The magnification of the font used to
345 label the lowest fret number.  Default@tie{}0.5.
346 @item
347 @code{fret-label-vertical-offset} -- The offset of the fret label from
348 the center of the fret in direction parallel to strings.
349 Default@tie{}0.
350 @item
351 @code{label-dir} -- Side to which the fret label is attached.
352 @w{@code{-1}}, @code{LEFT}, or @code{DOWN} for left or down; @code{1},
353 @code{RIGHT}, or @code{UP} for right or up.  Default @code{RIGHT}.
354 @item
355 @code{mute-string} -- Character string to be used to indicate muted
356 string.  Default @code{\"x\"}.
357 @item
358 @code{number-type} -- Type of numbers to use in fret label.  Choices
359 include @code{roman-lower}, @code{roman-upper}, @code{arabic} and
360 @code{custom}.  In the later case, the format string is supplied by
361 the @code{fret-label-custom-format} property.
362 Default @code{roman-lower}.
363 @item
364 @code{open-string} -- Character string to be used to indicate open
365 string.  Default @code{\"o\"}.
366 @item
367 @code{orientation} -- Orientation of fret-diagram.  Options include
368 @code{normal}, @code{landscape}, and @code{opposing-landscape}.
369 Default @code{normal}.
370 @item
371 @code{string-count} -- The number of strings.  Default@tie{}6.
372 @item
373 @code{string-label-font-mag} -- The magnification of the font used to
374 label fingerings at the string, rather than in the dot.  Default value
375 0.6 for @code{normal} orientation, 0.5 for @code{landscape} and
376 @code{opposing-landscape}.
377 @item
378 @code{string-thickness-factor} -- Factor for changing thickness of
379 each string in the fret diagram.  Thickness of string @var{k} is given
380 by @code{thickness}
381 * (1+@code{string-thickness-factor})@tie{}^ (@var{k}-1).
382 Default@tie{}0.
383 @item
384 @code{top-fret-thickness} -- The thickness of the top fret line, as a
385 multiple of the standard thickness.  Default value@tie{}3.
386 @item
387 @code{xo-font-magnification} -- Magnification used for mute and open
388 string indicators.  Default value@tie{}0.5.
389 @item
390 @code{xo-padding} -- Padding for open and mute indicators from top
391 fret.  Default value 0.25.
392 @end itemize")
393      ;; ugh: double, change.
394      (full-length-padding ,number? "How much padding to use at the
395 right side of a full-length tuplet bracket.")
396      (full-length-to-extent ,boolean? "Run to the extent of the column
397 for a full-length tuplet bracket.")
398      (full-measure-extra-space ,number? "Extra space that is allocated
399 at the beginning of a measure with only one note.  This property is
400 read from the NonMusicalPaperColumn that begins the measure.")
401      (full-size-change ,boolean? "Don't make a change clef smaller.")
402
403
404 ;;
405 ;; g
406 ;;
407      (gap ,ly:dimension? "Size of a gap in a variable symbol.")
408      (gap-count ,integer? "Number of gapped beams for tremolo.")
409      (glissando-skip ,boolean? "Should this @code{NoteHead} be skipped
410 by glissandi?")
411      (glyph ,string? "A string determining what @q{style} of glyph is
412 typeset.  Valid choices depend on the function that is reading this
413 property.")
414      (glyph-name ,string? "The glyph name within the font.")
415      (glyph-name-alist ,list? "An alist of key-string pairs.")
416      (graphical ,boolean? "Display in graphical (vs. text) form.")
417      (grow-direction ,ly:dir? "Crescendo or decrescendo?")
418
419
420 ;;
421 ;; h
422 ;;
423      (hair-thickness ,number? "Thickness of the thin line in a bar
424 line.")
425      (harp-pedal-details ,list? "An alist of detailed grob properties
426 for harp pedal diagrams.  Each alist entry consists of a
427 @code{(@var{property} . @var{value})} pair.  The properties which can
428 be included in harp-pedal-details include the following:
429
430 @itemize @bullet
431 @item
432 @code{box-offset} -- Vertical shift of the center of flat/@/sharp pedal
433 boxes above/@/below the horizontal line.  Default value@tie{}0.8.
434 @item
435 @code{box-width} -- Width of each pedal box.  Default value@tie{}0.4.
436 @item
437 @code{box-height} -- Height of each pedal box.  Default value@tie{}1.0.
438 @item
439 @code{space-before-divider} -- Space between boxes before the first
440 divider (so that the diagram can be made symmetric).  Default
441 value@tie{}0.8.
442 @item
443 @code{space-after-divider} -- Space between boxes after the first
444 divider.  Default value@tie{}0.8.
445 @item
446 @code{circle-thickness} -- Thickness (in unit of the line-thickness)
447 of the ellipse around circled pedals.  Default value@tie{}0.5.
448 @item
449 @code{circle-x-padding} -- Padding in X direction of the ellipse
450 around circled pedals.  Default value 0.15.
451 @item
452 @code{circle-y-padding} -- Padding in Y direction of the ellipse
453 around circled pedals.  Default value@tie{}0.2.
454 @end itemize")
455      (head-direction ,ly:dir? "Are the note heads left or right in a
456 semitie?")
457      (height ,ly:dimension? "Height of an object in @code{staff-space}
458 units.")
459      (height-limit ,ly:dimension? "Maximum slur height: The longer the
460 slur, the closer it is to this height.")
461      (hide-tied-accidental-after-break ,boolean? "If set, an accidental
462 that appears on a tied note after a line break will not be displayed.")
463      (horizontal-shift ,integer? "An integer that identifies ranking
464 of @code{NoteColumn}s for horizontal shifting.  This is used by
465 @rinternals{note-collision-interface}.")
466      (horizontal-skylines ,ly:skyline-pair? "Two skylines, one to the
467 left and one to the right of this grob.")
468
469
470 ;;
471 ;; i
472 ;;
473      (ignore-collision ,boolean? "If set, don't do note collision
474 resolution on this @code{NoteColumn}.")
475      (implicit ,boolean? "Is this an implicit bass figure?")
476      (inspect-index ,integer? "If debugging is set, set beam and slur
477 configuration to this index, and print the respective scores.")
478      (inspect-quants ,number-pair? "If debugging is set, set beam and
479 slur quants to this position, and print the respective scores.")
480
481
482 ;;
483 ;; k
484 ;;
485      (keep-inside-line ,boolean? "If set, this column cannot have
486 objects sticking into the margin.")
487      (kern ,ly:dimension? "Amount of extra white space to add.  For
488 bar lines, this is the amount of space after a thick line.")
489      (knee ,boolean? "Is this beam kneed?")
490      (knee-spacing-correction ,number? "Factor for the optical
491 correction amount for kneed beams.  Set between @code{0} for no
492 correction and @code{1} for full correction.")
493
494
495 ;;
496 ;; l
497 ;;
498      (labels ,list? "List of labels (symbols) placed on a column.")
499      (layer ,integer? "An integer which determines the order of printing
500 objects.  Objects with the lowest value of layer are drawn first, then
501 objects with progressively higher values are drawn, so objects with
502 higher values overwrite objects with lower values.  By default most
503 objects are assigned a layer value of 1.")
504      (ledger-extra ,ly:dimension? "Extra distance from staff line to draw ledger
505 lines for.")
506      (ledger-line-thickness ,number-pair? "The thickness of ledger
507 lines.  It is the sum of 2@tie{}numbers: The first is the factor for
508 line thickness, and the second for staff space.  Both contributions
509 are added.")
510      (ledger-positions ,list? "Repeating pattern for the vertical positions
511 of ledger lines.  Bracketed groups are always shown together.")
512      (left-bound-info ,list? "An alist of properties for determining
513 attachments of spanners to edges.")
514      (left-padding ,ly:dimension? "The amount of space that is put
515 left to an object (e.g., a lyric extender).")
516      (length ,ly:dimension? "User override for the stem length of
517 unbeamed stems.")
518      (length-fraction ,number? "Multiplier for lengths.  Used for
519 determining ledger lines and stem lengths.")
520      (line-break-penalty ,number? "Penalty for a line break at this
521 column.  This affects the choices of the line breaker; it avoids a
522 line break at a column with a positive penalty and prefers a line
523 break at a column with a negative penalty.")
524      (line-break-permission ,symbol? "Instructs the line breaker on
525 whether to put a line break at this column.  Can be @code{force} or
526 @code{allow}.")
527      (line-break-system-details ,list? "An alist of properties to use
528 if this column is the start of a system.")
529      (line-count ,integer? "The number of staff lines.")
530      (line-positions ,list? "Vertical positions of staff lines.")
531      (line-thickness ,number? "The thickness of the tie or slur
532 contour.")
533      (long-text ,markup? "Text markup.  See @ruser{Formatting text}.")
534
535
536 ;;
537 ;; m
538 ;;
539      (max-beam-connect ,integer? "Maximum number of beams to connect
540 to beams from this stem.  Further beams are typeset as beamlets.")
541      (max-stretch ,number? "The maximum amount that this
542 @code{VerticalAxisGroup} can be vertically stretched (for example, in
543 order to better fill a page).")
544      (measure-count ,integer? "The number of measures for a
545 multi-measure rest.")
546      (measure-length ,ly:moment? "Length of a measure.  Used in some
547 spacing situations.")
548      (merge-differently-dotted ,boolean? "Merge note heads in
549 collisions, even if they have a different number of dots.  This is
550 normal notation for some types of polyphonic music.
551
552 @code{merge-differently-dotted} only applies to opposing stem
553 directions (i.e., voice 1 &@tie{}2).")
554      (merge-differently-headed ,boolean? "Merge note heads in
555 collisions, even if they have different note heads.  The smaller of
556 the two heads is rendered invisible.  This is used in polyphonic
557 guitar notation.  The value of this setting is used by
558 @rinternals{note-collision-interface}.
559
560 @code{merge-differently-headed} only applies to opposing stem
561 directions (i.e., voice 1 &@tie{}2).")
562      (minimum-distance ,ly:dimension? "Minimum distance between rest
563 and notes or beam.")
564      (minimum-length ,ly:dimension? "Try to make a spanner at least
565 this long, normally in the horizontal direction.  This requires an
566 appropriate callback for the @code{springs-and-rods} property.  If
567 added to a @code{Tie}, this sets the minimum distance between
568 noteheads.")
569      (minimum-length-fraction ,number? "Minimum length of ledger line
570 as fraction of note head size.")
571      (minimum-space ,ly:dimension? "Minimum distance that the victim
572 should move (after padding).")
573      (minimum-X-extent ,number-pair? "Minimum size of an object in
574 X@tie{}dimension, measured in @code{staff-space} units.")
575      (minimum-Y-extent ,number-pair? "Minimum size of an object in
576 Y@tie{}dimension, measured in @code{staff-space} units.")
577
578
579 ;;
580 ;; n
581 ;;
582      (neutral-direction ,ly:dir? "Which direction to take in the
583 center of the staff.")
584      (neutral-position ,number? "Position (in half staff spaces) where
585 to flip the direction of custos stem.")
586      (next ,ly:grob? "Object that is next relation (e.g., the lyric
587 syllable following an extender).")
588      (no-alignment ,boolean? "If set, don't place this grob in a
589 @code{VerticalAlignment}; rather, place it using its own
590 @code{Y-offset} callback.")
591      (no-ledgers ,boolean? "If set, don't draw ledger lines on this
592 object.")
593      (no-stem-extend ,boolean? "If set, notes with ledger lines do not
594 get stems extending to the middle staff line.")
595      (non-break-align-symbols ,list? "A list of symbols that determine
596 which NON-break-aligned interfaces to align this to.")
597      (non-default ,boolean? "Set for manually specified clefs.")
598      (non-musical ,boolean? "True if the grob belongs to a
599 @code{NonMusicalPaperColumn}.")
600      (nonstaff-nonstaff-spacing ,list? "The spacing alist
601 controlling the distance between the current non-staff line and
602 the next non-staff line in the direction of @code{staff-affinity},
603 if both are on the same side of the related staff, and
604 @code{staff-affinity} is either @code{UP} or @code{DOWN}.  See
605 @code{staff-staff-spacing} for a description of the alist
606 structure.")
607      (nonstaff-relatedstaff-spacing ,list? "The spacing alist
608 controlling the distance between the current non-staff line and
609 the nearest staff in the direction of @code{staff-affinity}, if
610 there are no non-staff lines between the two, and
611 @code{staff-affinity} is either @code{UP} or @code{DOWN}.  If
612 @code{staff-affinity} is @code{CENTER}, then
613 @code{nonstaff-relatedstaff-spacing} is used for the nearest
614 staves on @emph{both} sides, even if other non-staff lines appear
615 between the current one and either of the staves.  See
616 @code{staff-staff-spacing} for a description of the alist
617 structure.")
618      (nonstaff-unrelatedstaff-spacing ,list? "The spacing alist
619 controlling the distance between the current non-staff line and
620 the nearest staff in the opposite direction from
621 @code{staff-affinity}, if there are no other non-staff lines
622 between the two, and @code{staff-affinity} is either @code{UP} or
623 @code{DOWN}.  See @code{staff-staff-spacing} for a description of
624 the alist structure.")
625      (normalized-endpoints ,pair? "Represents left and right placement
626 over the total spanner, where the width of the spanner is normalized
627 between 0 and 1.")
628      (note-names ,vector? "Vector of strings containing names for
629 easy-notation note heads.")
630
631
632 ;;
633 ;; o
634 ;;
635      (outside-staff-horizontal-padding ,number? "By default, an
636 outside-staff-object can be placed so that is it very close to another
637 grob horizontally.  If this property is set, the outside-staff-object
638 is raised so that it is not so close to its neighbor.")
639      (outside-staff-padding ,number? "The padding to place between
640 this grob and the staff when spacing according to
641 @code{outside-staff-priority}.")
642      (outside-staff-priority ,number? "If set, the grob is positioned
643 outside the staff in such a way as to avoid all collisions.  In case
644 of a potential collision, the grob with the smaller
645 @code{outside-staff-priority} is closer to the staff.")
646
647
648 ;;
649 ;; p
650 ;;
651      (packed-spacing ,boolean? "If set, the notes are spaced as
652 tightly as possible.")
653      (padding ,ly:dimension? "Add this much extra space between
654 objects that are next to each other.")
655      (padding-pairs ,list? "An alist mapping @code{(@var{name}
656 . @var{name})} to distances.")
657      (page-break-penalty ,number? "Penalty for page break at this
658 column.  This affects the choices of the page breaker; it avoids a
659 page break at a column with a positive penalty and prefers a page
660 break at a column with a negative penalty.")
661      (page-break-permission ,symbol? "Instructs the page breaker on
662 whether to put a page break at this column.  Can be @code{force} or
663 @code{allow}.")
664      (page-turn-penalty ,number? "Penalty for a page turn at this
665 column.  This affects the choices of the page breaker; it avoids a
666 page turn at a column with a positive penalty and prefers a page turn
667 at a column with a negative penalty.")
668      (page-turn-permission ,symbol? "Instructs the page breaker on
669 whether to put a page turn at this column.  Can be @code{force} or
670 @code{allow}.")
671      (parenthesized ,boolean? "Parenthesize this grob.")
672      (positions ,number-pair? "Pair of staff coordinates
673 @code{(@var{left} . @var{right})}, where both @var{left} and
674 @var{right} are in @code{staff-space} units of the current staff.  For
675 slurs, this value selects which slur candidate to use; if extreme
676 positions are requested, the closest one is taken.")
677      (prefer-dotted-right ,boolean? "For note collisions, prefer to
678 shift dotted up-note to the right, rather than shifting just the
679 dot.")
680
681
682 ;;
683 ;; r
684 ;;
685      (ratio ,number? "Parameter for slur shape.  The higher this
686 number, the quicker the slur attains its @code{height-limit}.")
687      (remove-empty ,boolean? "If set, remove group if it contains no
688 interesting items.")
689      (remove-first ,boolean? "Remove the first staff of an orchestral
690 score?")
691      (replacement-alist ,list? "Alist of strings.
692 The key is a string of the pattern to be replaced.  The value is a
693 string of what should be displayed.  Useful for ligatures.")
694      (restore-first ,boolean? "Print a natural before the
695 accidental.")
696      (rhythmic-location ,rhythmic-location? "Where (bar number,
697 measure position) in the score.")
698      (right-bound-info ,list? "An alist of properties for determining
699 attachments of spanners to edges.")
700      (right-padding ,ly:dimension? "Space to insert on the right side
701 of an object (e.g., between note and its accidentals).")
702      (rotation ,list? "Number of degrees to rotate this object, and
703 what point to rotate around.  For example, @code{'(45 0 0)} rotates
704 by 45 degrees around the center of this object.")
705      (round-up-to-longer-rest ,boolean? "Displays the longer multi-measure
706 rest when the length of a measure is between two values of
707 @code{usable-duration-logs}.  For example, displays a breve instead of a whole
708 in a 3/2 measure.")
709
710
711 ;;
712 ;; s
713 ;;
714      (same-direction-correction ,number? "Optical correction amount
715 for stems that are placed in tight configurations.  This amount is
716 used for stems with the same direction to compensate for note head to
717 stem distance.")
718      (script-priority ,number? "A sorting key that determines in what
719 order a script is within a stack of scripts.")
720      (self-alignment-X ,number? "Specify alignment of an object.  The
721 value @w{@code{-1}} means left aligned, @code{0}@tie{}centered, and
722 @code{1}@tie{}right-aligned in X@tie{}direction.  Other numerical
723 values may also be specified.")
724      (self-alignment-Y ,number? "Like @code{self-alignment-X} but for
725 the Y@tie{}axis.")
726      (shorten-pair ,number-pair? "The lengths to shorten a
727 text-spanner on both sides, for example a pedal bracket.  Positive
728 values shorten the text-spanner, while negative values lengthen it.")
729      (shortest-duration-space ,ly:dimension? "Start with this much
730 space for the shortest duration.  This is expressed in
731 @code{spacing-increment} as unit.  See also
732 @rinternals{spacing-spanner-interface}.")
733      (shortest-playing-duration ,ly:moment? "The duration of the
734 shortest note playing here.")
735      (shortest-starter-duration ,ly:moment? "The duration of the
736 shortest note that starts here.")
737      (side-axis ,number? "If the value is @code{X} (or
738 equivalently@tie{}@code{0}), the object is placed horizontally next to
739 the other object.  If the value is @code{Y} or@tie{}@code{1}, it is
740 placed vertically.")
741      (side-relative-direction ,ly:dir? "Multiply direction of
742 @code{direction-source} with this to get the direction of this
743 object.")
744      (simple-Y ,boolean? "Should the Y placement of a spanner
745 disregard changes in system heights?")
746      (size ,number? "Size of object, relative to standard size.")
747      (skyline-horizontal-padding ,number? "For determining the
748 vertical distance between two staves, it is possible to have a
749 configuration which would result in a tight interleaving of grobs from
750 the top staff and the bottom staff.  The larger this parameter is, the
751 farther apart the staves are placed in such a configuration.")
752      (skyline-vertical-padding ,number? "The amount by which the left
753 and right skylines of a column are padded vertically, beyond the
754 @code{Y-extent}s and @code{extra-spacing-height}s of the constituent
755 grobs in the column.  Increase this to prevent interleaving of grobs
756 from adjacent columns.")
757      (slash-negative-kern ,number? "The space to remove between
758 slashes in percent repeat glyphs.  Larger values bring the two
759 elements closer together.")
760      (slope ,number? "The slope of this object.")
761      (slur-padding ,number? "Extra distance between slur and script.")
762      (space-alist ,list? "A table that specifies distances between
763 prefatory items, like clef and time-signature.  The format is an alist
764 of spacing tuples: @code{(@var{break-align-symbol} @var{type}
765 . @var{distance})}, where @var{type} can be the symbols
766 @code{minimum-space} or @code{extra-space}.")
767      (space-to-barline ,boolean? "If set, the distance between a note
768 and the following non-musical column will be measured to the bar line
769 instead of to the beginning of the non-musical column.  If there is a
770 clef change followed by a bar line, for example, this means that we
771 will try to space the non-musical column as though the clef is not
772 there.")
773      (spacing-increment ,number? "Add this much space for a doubled
774 duration.  Typically, the width of a note head.  See also
775 @rinternals{spacing-spanner-interface}.")
776      (spacing-pair ,pair? "A pair of alignment symbols which set an object's
777 spacing relative to its left and right @code{BreakAlignment}s.
778
779 For example, a @code{MultiMeasureRest} will ignore prefatory items at its
780 bounds (i.e., clefs, key signatures and time signatures) using the following
781 override:
782
783 @example
784 \\override MultiMeasureRest
785   #'spacing-pair = #'(staff-bar . staff-bar)
786 @end example")
787      (spanner-id ,string? "An identifier to distinguish concurrent spanners.")
788      (springs-and-rods ,boolean? "Dummy variable for triggering
789 spacing routines.")
790      (stacking-dir ,ly:dir? "Stack objects in which direction?")
791      (staff-affinity ,ly:dir? "The direction of the staff to use
792 for spacing the current non-staff line.  Choices are @code{UP},
793 @code{DOWN}, and @code{CENTER}.  If @code{CENTER}, the non-staff
794 line will be placed equidistant between the two nearest staves on
795 either side, unless collisions or other spacing constraints
796 prevent this.  Setting @code{staff-affinity} for a staff causes it
797 to be treated as a non-staff line.  Setting @code{staff-affinity}
798 to @code{#f} causes a non-staff line to be treated as a staff.")
799      (staff-padding ,ly:dimension? "Maintain this much space between
800 reference points and the staff.  Its effect is to align objects of
801 differing sizes (like the dynamics @b{p} and @b{f}) on their
802 baselines.")
803      (staff-position ,number? "Vertical position, measured in half
804 staff spaces, counted from the middle line.")
805      (staff-space ,ly:dimension? "Amount of space between staff lines,
806 expressed in global @code{staff-space}.")
807      (staff-staff-spacing ,list? "When applied to a staff-group's
808 @code{StaffGrouper} grob, this spacing alist controls the distance
809 between consecutive staves within the staff-group.  When applied
810 to a staff's @code{VerticalAxisGroup} grob, it controls the
811 distance between the staff and the nearest staff below it in the
812 same system, replacing any settings inherited from the
813 @code{StaffGrouper} grob of the containing staff-group, if there
814 is one.  This property remains in effect even when non-staff lines
815 appear between staves.  The alist can contain the following keys:
816
817 @itemize
818
819 @item
820 @code{basic-distance} -- the vertical distance, measured in
821 staff-spaces, between the reference points of the two items when
822 no collisions would result, and no stretching or compressing is in
823 effect.
824
825 @item
826 @code{minimum-distance} -- the smallest allowable vertical
827 distance, measured in staff-spaces, between the reference points
828 of the two items, when compressing is in effect.
829
830 @item
831 @code{padding} -- the minimum required amount of unobstructed
832 vertical whitespace between the bounding boxes (or skylines) of
833 the two items, measured in staff-spaces.
834
835 @item
836 @code{stretchability} -- a unitless measure of the dimension's
837 relative propensity to stretch.  If zero, the distance will not
838 stretch (unless collisions would result).
839
840 @end itemize")
841      (staffgroup-staff-spacing ,list? "The spacing alist
842 controlling the distance between the last staff of the current
843 staff-group and the staff just below it in the same system, even
844 if one or more non-staff lines exist between the two staves.  If
845 the @code{staff-staff-spacing} property of the staff's
846 @code{VerticalAxisGroup} grob is set, that is used instead.  See
847 @code{staff-staff-spacing} for a description of the alist
848 structure.")
849      (stem-attachment ,number-pair? "An @code{(@var{x} . @var{y})}
850 pair where the stem attaches to the notehead.")
851      (stem-begin-position ,number? "User override for the
852 begin position of a stem.")
853      ;;[TODO: doco]
854      (stem-spacing-correction ,number? "Optical correction amount for
855 stems that are placed in tight configurations.  For opposite
856 directions, this amount is the correction for two normal sized stems
857 that overlap completely.")
858      (stemlet-length ,number? "How long should be a stem over a
859 rest?")
860      (stencil ,ly:stencil? "The symbol to print.")
861      (stencils ,list? "Multiple stencils, used as intermediate
862 value.")
863      (strict-grace-spacing ,boolean? "If set, main notes are spaced
864 normally, then grace notes are put left of the musical columns for the
865 main notes.")
866      (strict-note-spacing ,boolean? "If set, unbroken columns with
867 non-musical material (clefs, bar lines, etc.) are not spaced
868 separately, but put before musical columns.")
869      (stroke-style ,string? "Set to @code{\"grace\"} to turn stroke
870 through flag on.")
871      (style ,symbol? "This setting determines in what style a grob is
872 typeset.  Valid choices depend on the @code{stencil} callback reading
873 this property.")
874
875
876 ;;
877 ;; t
878 ;;
879      (text ,markup? "Text markup.  See @ruser{Formatting text}.")
880 ;;FIXME -- Should both be the same?
881      (text-direction ,ly:dir? "This controls the ordering of the
882 words.  The default @code{RIGHT} is for roman text.  Arabic or Hebrew
883 should use @code{LEFT}.")
884      (thick-thickness ,number? "Bar line thickness, measured in
885 @code{line-thickness}.")
886      (thickness ,number? "Line thickness, generally measured in
887 @code{line-thickness}.")
888      (thin-kern ,number? "The space after a hair-line in a bar line.")
889      (tie-configuration ,list? "List of @code{(@var{position} .
890 @var{dir})} pairs, indicating the desired tie configuration, where
891 @var{position} is the offset from the center of the staff in staff
892 space and @var{dir} indicates the direction of the tie
893 (@code{1}=>up, @w{@code{-1}}=>down, @code{0}=>center).  A non-pair entry
894 in the list causes the corresponding tie to be formatted
895 automatically.")
896      (to-barline ,boolean? "If true, the spanner will stop at the bar
897 line just before it would otherwise stop.")
898      (toward-stem-shift ,number? "Amount by which scripts are shifted
899 toward the stem if their direction coincides with the stem direction.
900 @code{0.0} means keep the default position (centered on the note
901 head), @code{1.0} means centered on the stem.  Interpolated values are
902 possible.")
903      (transparent ,boolean? "This makes the grob invisible.")
904
905
906 ;;
907 ;; u
908 ;;
909      (uniform-stretching ,boolean? "If set, items stretch
910 proportionally to their durations.  This looks better in complex
911 polyphonic patterns.")
912      (used ,boolean? "If set, this spacing column is kept in the
913 spacing problem.")
914      (usable-duration-logs ,list? "List of @code{duration-log}s that
915 can be used in typesetting the grob.")
916
917
918 ;;
919 ;; v
920 ;;
921      (vertical-skylines ,ly:skyline-pair? "Two skylines, one above and
922 one below this grob.")
923
924
925 ;;
926 ;; w
927 ;;
928      (when ,ly:moment? "Global time step associated with this column
929 happen?")
930      (whiteout ,boolean? "If true, the grob is printed over a white
931 background to white-out underlying material, if the grob is visible.
932  Usually #f by default.")
933      (width ,ly:dimension? "The width of a grob measured in staff
934 space.")
935      (word-space ,ly:dimension? "Space to insert between words in
936 texts.")
937
938
939 ;;
940 ;; x
941 ;;
942      (X-extent ,number-pair? "Hard coded extent in X@tie{}direction.")
943      (X-offset ,number? "The horizontal amount that this object is
944 moved relative to its X-parent.")
945      (X-positions ,number-pair? "Pair of X staff coordinates of a spanner
946 in the form @code{(@var{left} . @var{right})}, where both @var{left} and
947 @var{right} are in @code{staff-space} units of the current staff.")
948
949
950 ;;
951 ;; y
952 ;;
953      (Y-extent ,number-pair? "Hard coded extent in Y@tie{}direction.")
954      (Y-offset ,number? "The vertical amount that this object is moved
955 relative to its Y-parent.")
956
957 ;;
958 ;; z
959 ;;
960      (zigzag-length ,ly:dimension? "The length of the lines of a
961 zigzag, relative to @code{zigzag-width}.  A value of@tie{}@code{1}
962 gives 60-degree zigzags.")
963      (zigzag-width ,ly:dimension? "The width of one zigzag squiggle.
964 This number is adjusted slightly so that the glissando line can be
965 constructed from a whole number of squiggles.")
966      )))
967
968
969 ;;;;;;;;;;;;;;;;
970 ;;   INTERNAL
971
972
973 (define (define-internal-grob-property symbol type? description)
974   (define-grob-property symbol type? description)
975   (set-object-property! symbol 'backend-internal #t)
976   symbol
977   )
978
979
980 (define-public all-internal-grob-properties
981   (map
982    (lambda (x)
983      (apply define-internal-grob-property x))
984
985    `(
986      ;;;;;;;;;;;;;;;;
987      ;; grobs & grob arrays.  (alphabetical)
988      (accidental-grob ,ly:grob? "The accidental for this note.")
989      (accidental-grobs ,list? "An alist with @code{(@var{notename} .
990 @var{groblist})} entries.")
991      (adjacent-spanners ,ly:grob-array? "An array of directly neighboring
992 dynamic spanners.")
993      (all-elements ,ly:grob-array? "An array of all grobs in this line.  Its
994 function is to protect objects from being garbage collected.")
995      (arpeggio ,ly:grob? "A pointer to an @code{Arpeggio} object.")
996      (axis-group-parent-X ,ly:grob? "Containing X@tie{}axis group.")
997      (axis-group-parent-Y ,ly:grob? "Containing Y@tie{}axis group.")
998
999      (bars ,ly:grob-array? "An array of bar line pointers.")
1000      (beam ,ly:grob? "A pointer to the beam, if applicable.")
1001      (bound-alignment-interfaces ,list "Interfaces to be used
1002 for positioning elements that align with a column.")
1003      (bounded-by-me ,ly:grob-array? "An array of spanners that have this
1004 column as start/@/begin point.  Only columns that have grobs or act as
1005 bounds are spaced.")
1006      (bracket ,ly:grob? "The bracket for a number.")
1007
1008      (columns ,ly:grob-array? "An array of grobs, typically containing
1009 @code{PaperColumn} or @code{NoteColumn} objects.")
1010      (conditional-elements ,ly:grob-array? "Internal use only.")
1011      (covered-grobs ,ly:grob-array? "Grobs that could potentially collide
1012 with a beam.")
1013
1014      (direction-source ,ly:grob? "In case @code{side-relative-direction} is
1015 set, which grob to get the direction from.")
1016      (display-cautionary ,boolean? "Should the grob be displayed as a cautionary grob?")
1017      (dot ,ly:grob? "A reference to a @code{Dots} object.")
1018      (dots ,ly:grob-array? "Multiple @code{Dots} objects.")
1019
1020      (elements ,ly:grob-array? "An array of grobs; the type is depending on
1021 the grob where this is set in.")
1022      (encompass-objects ,ly:grob-array? "Objects that a slur should avoid
1023 in addition to notes and stems.")
1024
1025      (figures ,ly:grob-array? "Figured bass objects for continuation line.")
1026      (flag ,ly:grob? "A pointer to a @code{Flag} object.")
1027
1028      (glissando-index ,integer? "The index of a glissando in its note
1029 column.")
1030      (grace-spacing ,ly:grob? "A run of grace notes.")
1031
1032      (heads ,ly:grob-array? "An array of note heads.")
1033
1034      (items-worth-living ,ly:grob-array? "An array of interesting items.  If
1035 empty in a particular staff, then that staff is erased.")
1036
1037      (keep-alive-with ,ly:grob-array? "An array of other
1038 @code{VerticalAxisGroup}s.  If any of them are alive, then we will stay alive.")
1039
1040      (left-items ,ly:grob-array? "DOCME")
1041      (left-neighbor ,ly:grob? "The right-most column that has a spacing-wish
1042 for this column.")
1043
1044      (normal-stems ,ly:grob-array? "An array of visible stems.")
1045      (note-columns ,ly:grob-array? "An array of @code{NoteColumn} grobs.")
1046      (note-head ,ly:grob? "A single note head.")
1047      (note-heads ,ly:grob-array? "An array of note head grobs.")
1048      (pedal-text ,ly:grob? "A pointer to the text of a mixed-style piano
1049 pedal.")
1050      (pure-relevant-grobs ,ly:grob-array? "All the grobs (items and spanners)
1051 that are relevant for finding the @code{pure-Y-extent}")
1052      (pure-relevant-items ,ly:grob-array? "A subset of elements that are
1053 relevant for finding the @code{pure-Y-extent}.")
1054      (pure-relevant-spanners ,ly:grob-array? "A subset of elements that are
1055 relevant for finding the @code{pure-Y-extent}.")
1056      (pure-Y-common ,ly:grob? "A cache of the
1057 @code{common_refpoint_of_array} of the @code{elements} grob set.")
1058
1059      (rest ,ly:grob? "A pointer to a @code{Rest} object.")
1060      (rest-collision ,ly:grob? "A rest collision that a rest is in.")
1061      (rests ,ly:grob-array? "An array of rest objects.")
1062      (right-items ,ly:grob-array? "DOCME")
1063      (right-neighbor ,ly:grob? "See @code{left-neighbor}.")
1064
1065      (side-support-elements ,ly:grob-array? "The side support, an array of
1066 grobs.")
1067      (slur ,ly:grob? "A pointer to a @code{Slur} object.")
1068      (spacing ,ly:grob? "The spacing spanner governing this section.")
1069      (spacing-wishes ,ly:grob-array? "An array of note spacing or staff spacing
1070 objects.")
1071      (span-start ,boolean? "Is the note head at the start of a spanner?")
1072      (spanner-broken ,boolean? "Indicates whether spanner
1073 alignment should be broken after the current spanner.")
1074      (spanner-placement ,ly:dir? "The place of an annotation on a spanner.
1075 @code{LEFT} is for the first spanner, and @code{RIGHT} is for the last.
1076 @code{CENTER} will place it on the broken spanner that falls closest to the
1077 center of the length of the entire spanner, although this behavior is
1078 unpredictable in situations with lots of rhythmic diversity.  For predictable
1079 results, use @code{LEFT} and @code{RIGHT}.")
1080      (staff-grouper ,ly:grob? "The staff grouper we belong to.")
1081      (staff-symbol ,ly:grob? "The staff symbol grob that we are in.")
1082      (stem ,ly:grob? "A pointer to a @code{Stem} object.")
1083      (stems ,ly:grob-array? "An array of stem objects.")
1084
1085      (tie ,ly:grob? "A pointer to a @code{Tie} object.")
1086      (tremolo-flag ,ly:grob? "The tremolo object on a stem.")
1087      (tuplet-number ,ly:grob? "The number for a bracket.")
1088      (tuplets ,ly:grob-array? "An array of smaller tuplet brackets.")
1089      (X-common ,ly:grob? "Common reference point for axis group.")
1090      (Y-common ,ly:grob? "See @code{X-common}.")
1091
1092      ;;;;;;;;;;;;;;;;
1093      ;; other
1094      (adjacent-pure-heights ,pair? "A pair of vectors.  Used by a
1095 @code{VerticalAxisGroup} to cache the @code{Y-extent}s of different column
1096 ranges.")
1097
1098      (bar-extent ,number-pair? "The Y-extent of the actual bar line.
1099 This may differ from @code{Y-extent} because it does not include the dots in
1100 a repeat bar line.")
1101      (begin-of-line-visible ,boolean? "Set to make @code{ChordName} or
1102 @code{FretBoard} be visible only at beginning of line or at
1103 chord changes.")
1104
1105      (cause ,scheme? "Any kind of causation objects (i.e., music, or perhaps
1106 translator) that was the cause for this grob.")
1107      (cross-staff ,boolean? "For a beam or a stem, this is true if we
1108 depend on inter-staff spacing.")
1109
1110      (delta-position ,number? "The vertical position difference.")
1111
1112      (font ,ly:font-metric? "A cached font metric object.")
1113      (forced ,boolean? "Manually forced accidental.")
1114
1115      (head-width ,ly:dimension? "The width of this ligature head.")
1116
1117      (ideal-distances ,list? "@code{(@var{obj} . (@var{dist} .
1118 @var{strength}))} pairs.")
1119      (important-column-ranks ,vector? "A cache of columns that contain
1120 @code{items-worth-living} data.")
1121      (interfaces ,list? "A list of symbols indicating the interfaces
1122 supported by this object.  It is initialized from the @code{meta} field.")
1123
1124      (least-squares-dy ,number? "The ideal beam slope, without damping.")
1125
1126      (maybe-loose ,boolean? "Used to mark a breakable column that is
1127 loose if and only if it is in the middle of a line.")
1128      (meta ,list? "Provide meta information.  It is an alist with the
1129 entries @code{name} and @code{interfaces}.")
1130      (minimum-distances ,list? "A list of rods that have the format
1131 @code{(@var{obj} . @var{dist})}.")
1132
1133      (positioning-done ,boolean? "Used to signal that a positioning element
1134 did its job.  This ensures that a positioning is only done once.")
1135      (pure-Y-extent ,number-pair? "The estimated height of a system.")
1136      (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching
1137 cyclic dependencies.")
1138      (quantize-position ,boolean? "If set, a vertical alignment is aligned
1139 to be within staff spaces.")
1140      (quantized-positions ,number-pair? "The beam positions after
1141 quanting.")
1142
1143      (script-stencil ,pair? "A pair @code{(@var{type} . @var{arg})} which
1144 acts as an index for looking up a @code{Stencil} object.")
1145      (shorten ,ly:dimension? "The amount of space that a stem is shortened.
1146 Internally used to distribute beam shortening over stems.")
1147      (stem-info ,pair? "A cache of stem parameters.")
1148      (system-Y-offset ,number? "The Y-offset (relative to the bottom of the
1149 top-margin of the page) of the system to which this staff belongs.")
1150
1151
1152      ;;;;;;;;;;;;;;;;
1153      ;; ancient notation
1154
1155      ;;;;;;; TODO:
1156      ;; There are too many properties for ancient notation;
1157      ;; probably neume-types (a list of symbols) would also work.
1158
1159      ;; However, such a list would consist of a couple of dozens of
1160      ;; entries, since head prefixes may be combined in many ways.  If
1161      ;; the macros in `gregorian.ly' would directly set prefix-set,
1162      ;; all the head prefixes could be junked; however, such macros
1163      ;; would be quite numerous, I guess.  --jr
1164
1165      (add-cauda ,boolean? "Does this flexa require an additional cauda on
1166 the left side?")
1167      (add-join ,boolean? "Is this ligature head-joined with the next one
1168 by a vertical line?")
1169      (add-stem ,boolean? "Is this ligature head a virga and therefore needs
1170 an additional stem on the right side?")
1171      (ascendens ,boolean? "Is this neume of ascending type?")
1172      (auctum ,boolean? "Is this neume liquescentically augmented?")
1173
1174      (cavum ,boolean? "Is this neume outlined?")
1175      (context-info ,integer? "Within a ligature, the final glyph or shape of
1176 a head may be affected by the left and/@/or right neighbour head.
1177 @code{context-info} holds for each head such information about the left and
1178 right neighbour, encoded as a bit mask.")
1179
1180      (deminutum ,boolean? "Is this neume deminished?")
1181      (descendens ,boolean? "Is this neume of descendent type?")
1182
1183      (flexa-height ,ly:dimension? "The height of a flexa shape in a ligature
1184 grob (in @code{staff-space} units).")
1185      (flexa-interval ,integer? "The interval spanned by the two notes of a
1186 flexa shape (1 is a second, 7 is an octave).")
1187      (flexa-width ,ly:dimension? "The width of a flexa shape in a
1188 ligature grob in (in @code{staff-space} units).")
1189      (ligature-flexa ,boolean? "request joining note to the previous one
1190 in a flexa.")
1191
1192      (inclinatum ,boolean? "Is this neume an inclinatum?")
1193
1194
1195      (linea ,boolean? "Attach vertical lines to this neume?")
1196
1197      (oriscus ,boolean? "Is this neume an oriscus?")
1198
1199      (pes-or-flexa ,boolean? "Shall this neume be joined with the previous
1200 head?")
1201      (prefix-set ,number? "A bit mask that holds all Gregorian head
1202 prefixes, such as @code{\\virga} or @code{\\quilisma}.")
1203      (primitive ,integer? "A pointer to a ligature primitive, i.e., an item
1204 similar to a note head that is part of a ligature.")
1205
1206      (quilisma ,boolean? "Is this neume a quilisma?")
1207
1208      (stropha ,boolean? "Is this neume a stropha?")
1209
1210      (virga ,boolean? "Is this neume a virga?")
1211
1212      (x-offset ,ly:dimension? "Extra horizontal offset for ligature heads.")
1213
1214      )))
1215
1216 (define-public all-backend-properties
1217   (append
1218    all-internal-grob-properties
1219    all-user-grob-properties))