From: Han-Wen Nienhuys Date: Sat, 14 Feb 2004 00:47:44 +0000 (+0000) Subject: (interface-doc): prune Grob X-Git-Tag: release/2.1.23~3 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c484fb1da7751d35734194e623cb823b559e190f;p=lilypond.git (interface-doc): prune Grob documentation: don't duplicate interface information. --- diff --git a/ChangeLog b/ChangeLog index 1618a1a47f..f9064b9464 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2004-02-14 Han-Wen Nienhuys + + * scm/document-backend.scm (interface-doc): prune Grob + documentation: don't duplicate interface information. + + * lily/*.cc: lots of updates of doc strings. + 2004-02-13 Han-Wen Nienhuys * input/test/ac-extra-voice.ly (accompany): remove file. diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index f99bc22fbf..83f8349c5c 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -1438,10 +1438,9 @@ whether the rule applies to begin or end-points. The quantity @var{p}/@var{q} refers to the length of the beamed notes (and `@code{* *}' designates notes of any length), @var{n}/@var{M} refers to a time signature (wildcards `@code{* *}' may be entered to designate all time -signatures), var{a}/var{b} is a duration. -By default, this command changes setting for the current voice. It is -also possible to adjust settings at higher contexts, by adding a -@var{context} argument. +signatures), @var{a}/@var{b} is a duration. By default, this command +changes settings for the current voice. It is also possible to adjust +settings at higher contexts, by adding a @var{context} argument. For example, if automatic beams should end on every quarter note, use the following: diff --git a/input/regression/drums.ly b/input/regression/drums.ly index 6314dec18d..6631b280af 100644 --- a/input/regression/drums.ly +++ b/input/regression/drums.ly @@ -4,7 +4,7 @@ } -\version "2.1.22" +\version "2.1.23" drh = \drums { cymc4.^"crash" hhc16^"h.h." hh \repeat "unfold" 5 {hhc8 hho hhc8 hh16 hh} hhc4 r4 r2 } drl = \drums {\repeat "unfold" 3 {bd4 sn8 bd bd4 << bd ss >> } bd8 tommh tommh bd toml toml bd tomfh16 tomfh } @@ -15,8 +15,8 @@ timb = \drums \repeat "unfold" 2 {timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 << \new DrumStaff \with { drumStyleTable = #timbales-style - StaffSymbol \override #'line-count = #2 - BarLine \override #'bar-size = #2 + \override StaffSymbol #'line-count = #2 + \override BarLine #'bar-size = #2 } << \set Staff.instrument = "timbales" \timb diff --git a/input/regression/staff-mixed-size.ly b/input/regression/staff-mixed-size.ly index d490ea96ee..37820499dd 100644 --- a/input/regression/staff-mixed-size.ly +++ b/input/regression/staff-mixed-size.ly @@ -6,13 +6,13 @@ factor, objects generally become too thick or too large. " } -\version "2.1.22" +\version "2.1.23" \score { << \new Staff \with { fontSize = #-4 - StaffSymbol \set #'staff-space = #(magstep -4) + \override StaffSymbol #'staff-space = #(magstep -4) } \notes \relative c' { \override DynamicText #'extra-offset = #'(0 . 3) diff --git a/input/test/maximum-rest-count.ly b/input/test/maximum-rest-count.ly deleted file mode 100644 index 5c42c3acc0..0000000000 --- a/input/test/maximum-rest-count.ly +++ /dev/null @@ -1,43 +0,0 @@ -\version "2.1.22" -% possible rename to rest-foo -\header { - texidoc = "@cindex Rest Collision Count -Control the number of rests in a collision with maximum-rest-count." -} - -\score{ -\context Staff \notes\relative c''<< - \new Voice { - a4 - r - \override Staff.RestCollision #'maximum-rest-count = #1 - r - \override Staff.RestCollision #'maximum-rest-count = #2 - r - \override Staff.RestCollision #'maximum-rest-count = #3 - r - r8 r8 - c - } - \new Voice { - c4 - r - r - r - r - r - r - } - \new Voice { - e4 - r - r - r - r - r - r - } - >> - \paper{ raggedright = ##t } -} - diff --git a/lily/balloon.cc b/lily/balloon.cc index 6c29895f4b..000640754d 100644 --- a/lily/balloon.cc +++ b/lily/balloon.cc @@ -89,6 +89,6 @@ Balloon_interface::print (SCM smob) } ADD_INTERFACE (Balloon_interface,"text-balloon-interface", - "comic books.", + "A collection of routines to put text balloons around an object.", "balloon-padding balloon-text-props balloon-text-offset balloon-text balloon-original-callback"); diff --git a/lily/grob.cc b/lily/grob.cc index d44f3ce7c5..81df59f753 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -828,7 +828,7 @@ ADD_INTERFACE (Grob, "grob-interface", "Y-extent-callback print-function extra-offset spacing-procedure " "staff-symbol interfaces dependencies X-extent Y-extent extra-X-extent " "meta layer before-line-breaking-callback " -"after-line-breaking-callback extra-Y-extent minimum-X-extent X-extent Y-extent " +"after-line-breaking-callback extra-Y-extent minimum-X-extent " "minimum-Y-extent transparent"); diff --git a/lily/lyric-hyphen.cc b/lily/lyric-hyphen.cc index 3691dedc62..5973bab2c4 100644 --- a/lily/lyric-hyphen.cc +++ b/lily/lyric-hyphen.cc @@ -99,11 +99,14 @@ Hyphen_spanner::set_spacing_rods (SCM smob) Spanner*sp = dynamic_cast (me); r.distance_ = robust_scm2double (me->get_grob_property ("minimum-length"), 0); + Direction d=LEFT; - do { - r.item_l_drul_[d] = sp->get_bound (d); - r.distance_ += r.item_l_drul_[d]->extent (r.item_l_drul_[d], X_AXIS)[-d]; - } while (flip (&d) != LEFT); + do + { + r.item_l_drul_[d] = sp->get_bound (d); + r.distance_ += r.item_l_drul_[d]->extent (r.item_l_drul_[d], X_AXIS)[-d]; + } + while (flip (&d) != LEFT); r.add_to_cols (); return SCM_UNSPECIFIED; diff --git a/lily/script.cc b/lily/script.cc index 619f4e420b..68ec61119f 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -106,10 +106,10 @@ struct Skript }; ADD_INTERFACE (Text_script,"text-script-interface", - "Any text script", + "An object that is put above or below a note", "script-priority"); ADD_INTERFACE (Script_interface, "script-interface", - "", + "An object that is put above or below a note", "script-priority script-stencil"); diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index 868e49ecdd..92d9cc236d 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -77,6 +77,10 @@ SCM Separating_group_spanner::set_spacing_rods (SCM smob) { Grob*me = unsmob_grob (smob); + + /* + Ugh: padding is added doubly, also for SeparationItem + */ Real padding = robust_scm2double (me->get_grob_property ("padding"), 0.1); for (SCM s = me->get_grob_property ("elements"); gh_pair_p (s) && gh_pair_p (ly_cdr (s)); s = ly_cdr (s)) @@ -113,5 +117,6 @@ Separating_group_spanner::add_spacing_unit (Grob* me ,Item*i) ADD_INTERFACE (Separating_group_spanner,"separation-spanner-interface", - "Spanner that containing @code{separation-item-interface} grobs to calculate rods", - ""); + "A spanner that calculates spacing constraints (\"rods\") " + "using the @code{separation-item-interface} grobs in @code{elements}.", + "elements padding"); diff --git a/lily/slur.cc b/lily/slur.cc index 9868d30b9c..5e3916994e 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -560,6 +560,10 @@ Slur::print (SCM smob) return SCM_EOL; Stencil a; + + /* + TODO: replace dashed with generic property. + */ SCM d = me->get_grob_property ("dashed"); if (gh_number_p (d)) a = Lookup::dashed_slur (one, thick, thick * robust_scm2double (d, 0)); @@ -693,5 +697,5 @@ Slur::get_curve (Grob*me) ADD_INTERFACE (Slur,"slur-interface", "A slur", - "attachment attachment-offset beautiful control-points dashed details de-uglify-parameters direction extremity-rules extremity-offset-alist height-limit ratio slope-limit thickness y-free"); + "attachment attachment-offset beautiful control-points dashed details de-uglify-parameters direction extremity-rules extremity-offset-alist height-limit note-columns ratio slope-limit thickness y-free"); diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 1f18c4939a..4399fc5051 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -930,7 +930,7 @@ Spacing_spanner::note_spacing (Grob*me, Grob *lc, Grob *rc, ADD_INTERFACE (Spacing_spanner,"spacing-spanner-interface", "The space taken by a note is dependent on its duration. Doubling a\n" "duration adds spacing-increment to the space. The most common shortest\n" -"note gets shortest-duration-space. Notes that are even shorter are\n" +"note gets @code{shortest-duration-space}. Notes that are even shorter are\n" "spaced proportonial to their duration.\n" "\n" "Typically, the increment is the width of a black note head. In a\n" diff --git a/lily/span-bar.cc b/lily/span-bar.cc index a8b1862337..97e581e938 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -241,7 +241,8 @@ Span_bar::get_bar_size (SCM smob) ADD_INTERFACE (Span_bar,"span-bar-interface", - "A bar line that spans other barlines (typically used to get cross-staff barlines.", - ""); + "A bar line that spanned between other barlines. This interface is " + " used for bar lines that connect different staves.", + "elements"); diff --git a/lily/spanner.cc b/lily/spanner.cc index 0a4a585d03..c94bb3de49 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -367,10 +367,10 @@ unsmob_spanner (SCM s ) ADD_INTERFACE(Spanner, "spanner-interface", -"Other grobs have a shape that depends on the horizontal spacing. For\n" +"Some objects are horizontally spanned between objects. For\n" "example, slur, beam, tie, etc. These grobs form a subtype called\n" "@code{Spanner}. All spanners have two span-points (these must be\n" -"@code{Item}s), one on the left and one on the right. The left bound is\n" +"@code{Item} objects), one on the left and one on the right. The left bound is\n" "also the X-reference point of the spanner.\n" , "minimum-length"); diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index ddb26dd47b..6a7535f030 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -242,5 +242,7 @@ Staff_spacing::get_spacing_params (Grob *me, Real * space, Real * fixed) ADD_INTERFACE (Staff_spacing,"staff-spacing-interface", - "", + "This object calculates spacing details from a " + " breakable symbol (left) to another object. For example, it takes care " + " of optical spacing from a bar lines to a note.", "stem-spacing-correction left-items right-items"); diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index cfb871d575..cd4295e9af 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -173,8 +173,8 @@ compare_position (Grob *const &a, Grob * const &b) } ADD_INTERFACE (Staff_symbol_referencer,"staff-symbol-referencer-interface", - "Object whose Y position is meaning with reference to a staff " -"symbol. Objects that have this interface should include " -"Staff_symbol_referencer::callback in their Y-offset-callback. " -, - "staff-position"); + "Object whose Y position is meant relative to a staff " + "symbol. These objects usually have " + "Staff_symbol_referencer::callback in their Y-offset-callback. " + , + "staff-position"); diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc index ab0c72b0d5..bb0a9674c0 100644 --- a/lily/staff-symbol.cc +++ b/lily/staff-symbol.cc @@ -122,8 +122,11 @@ Staff_symbol::get_ledger_line_thickness (Grob * me) ADD_INTERFACE (Staff_symbol,"staff-symbol-interface", - "This spanner draws the lines of a staff. The center (i.e. middle line " -"or space) is position 0. The length of the symbol may be set by hand " -"through the @code{width} property. ", + "This spanner draws the lines of a staff. " + "A staff symbol definines a vertical unit, the staff space " + "Quantities that go by a half staff space are called positions " + "The center (i.e. middle line " + "or space) is position 0. The length of the symbol may be set by hand " + "through the @code{width} property. ", "ledger-line-thickness width staff-space thickness line-count"); diff --git a/lily/stem.cc b/lily/stem.cc index c0af303c0c..50c3b49fa0 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -970,7 +970,12 @@ Stem::beam_multiplicity (Grob *stem) these are too many props. */ ADD_INTERFACE (Stem,"stem-interface", - "A stem", + "The stem represent the graphical stem. " + " In addition, it internally connects note heads, beams, tremolos. Rests " + " and whole notes have invisible stems." + +, + "tremolo-flag french-beaming " "avoid-note-head adjust-if-on-staffline thickness " "stem-info beamed-lengths beamed-minimum-free-lengths " diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index e39b897cfc..f01ef8a37a 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -183,5 +183,8 @@ System_start_delimiter::staff_brace (Grob*me, Real y) ADD_INTERFACE (System_start_delimiter,"system-start-delimiter-interface", - "#'style can be bar-line, bracket or brace", - "collapse-height thickness arch-height arch-angle arch-thick arch-width bracket-thick glyph"); + "The brace, bracket or bar in front of the system. " + "It is implemented as a spanner" + , + "collapse-height thickness " + "arch-height arch-angle arch-thick arch-width bracket-thick glyph"); diff --git a/lily/system.cc b/lily/system.cc index 5fce3e2299..1d0c28ae4c 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -612,11 +612,7 @@ System::columns ()const ADD_INTERFACE (System,"system-interface", - "Super grob, parent of all: " -"\n\n" -"The columns of a score that form one line. The toplevel grob. Any " -"grob has a Line_of_score as both X and Y reference point. The " -"Paper_score contains one grob of this type. Control enters the " -"Grob dependency calculation from this single Line_of_score " -"object.", - "between-system-string all-elements columns"); + "This is the toplevel object: each object in a score " + "ultimately has a System object as its X and Y parent. " + , + "between-system-string all-elements columns"); diff --git a/lily/text-item.cc b/lily/text-item.cc index f45b66e068..3fe2d788f5 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -79,7 +79,7 @@ Text_item::markup_p (SCM x) } ADD_INTERFACE (Text_item,"text-interface", - "A scheme markup text, see @usermanref{Markup functions}.", + "A scheme markup text, see @usermanref{Text markup}.", "text baseline-skip word-space"); diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 44208c234f..17ea197241 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -203,6 +203,6 @@ Tie_column::after_line_breaking (SCM smob) ADD_INTERFACE (Tie_column,"tie-column-interface", - "that sets tie directions in a tied chord", + "Object that sets directions of multiple ties in a tied chord", "direction"); diff --git a/lily/tie.cc b/lily/tie.cc index afdfd0240a..e95135b12d 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -355,6 +355,6 @@ Tie::print (SCM smob) ADD_INTERFACE (Tie,"tie-interface", - "A tie connecting two noteheads.\n" -"direction = Forced direction for all ties", + "A tie connecting two noteheads.\n" + , "y-offset staffline-clearance control-points head-pair details thickness x-gap direction minimum-length"); diff --git a/lily/translator-property.cc b/lily/translator-property.cc index 77414e7d8a..eaf82c3166 100644 --- a/lily/translator-property.cc +++ b/lily/translator-property.cc @@ -1,14 +1,14 @@ /* -translator-property.cc -- implement manipulation of + translator-property.cc -- implement manipulation of immutable Grob property lists. -source file of the GNU LilyPond music typesetter - -(c) 2004 Han-Wen Nienhuys + source file of the GNU LilyPond music typesetter + (c) 2004 Han-Wen Nienhuys */ +#include "main.hh" #include "translator-group.hh" #include "warn.hh" #include "item.hh" @@ -32,7 +32,7 @@ void execute_pushpop_property (Translator_group * trg, SCM prop, SCM eltprop, SCM val) { - if (gh_symbol_p (prop)) + if (gh_symbol_p (prop) && gh_symbol_p (eltprop)) { if (val != SCM_UNDEFINED) { @@ -101,6 +101,12 @@ execute_pushpop_property (Translator_group * trg, trg->internal_set_property (prop, gh_cons (new_alist, daddy)); } } + else + { + warning ("Need symbol arguments for \\override and \\revert"); + if (internal_type_checking_global_b) + assert (false); + } } /* diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index 4cb87db2b3..529433ae54 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -95,47 +95,13 @@ are interesting enough to maintain a hara-kiri staff." (ly:add-interface 'stanza-number-interface - "" + "A stanza number, to be put in from of a lyrics line" '() ) ;;; todo: this is not typesetting info. Move to interpretation. (ly:add-interface 'tablature-interface - "tablature notes" + "An interface for any notes set in a tablature staff" '()) - -;; todo: figure out where to put this doco: - -" -Grob properties form a name space where you can set variables per -object. Each object however, may have multiple functions. For -example, consider a dynamic symbol, such @code{\ff} (fortissimo). It -is printed above or below the staff, it is a dynamic sign, and it is a -kind of text. - -To reflect this different functions of a grob, procedures and variables -are grouped into so-called interfaces. The dynamic text for example -supports the following interfaces: -@table @code -@item font-interface - The glyph is built from characters from a font, hence the -@code{font-interface}. For objects supporting @code{font-interface}, you -can select alternate fonts by setting @code{font-style}, -@code{font-point-size}, etc. - -@item dynamic-interface - Dynamic interface is not associated with any variable or function in -particular, but this makes it possible to distinguish this grob from -other similar grobs (like @code{TextScript}), that have no meaning of -dynamics. - -@item text-interface - This interface is for texts that are to be set using special routines -to stack text into lines, using kerning, etc. - -@item general-grob-interface - This interface is supported by all grob types. -@end table -" diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 2b520fb25d..350049fdc0 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -41,12 +41,8 @@ grob's parent. The last one in the list is called first.") (Y-offset-callbacks ,list? "see @code{X-offset-callbacks}.") (accidentals ,list? "List of alteration numbers.") - (add-cauda ,boolean? "does this flexa require an additional cauda on the left ,side?.") - (add-join ,boolean? "is this ligature head joined with the next one by a vertical ,line?") - (add-stem ,boolean? "is this ligature head a virga and therefore needs an additional stem on the right ,side?") - (adjust-if-on-staffline ,boolean? "If this grob is on a staff line, adjust its appearance, so that it better fits into the staff. E.g., if set true on stem grobs, flares of mensural flags will always be aligned with the staff lines, regardless if the associated note head is printed on a staff line or inbetween.") - (after-line-breaking-callback ,procedure? "Procedure taking a grob as argument. -This procedure is called (using dependency resolution) after line breaking. Return value is ignored.") + + (align-dir ,ly:dir? "Which side to ,align? -1: left side, 0: around center of width, 1: right side.") (arch-angle ,number? "turning angle of the hook of a system brace" ) (arch-height ,ly:dimension? "height of the hook of a system brace.") @@ -54,16 +50,52 @@ This procedure is called (using dependency resolution) after line breaking. Retu (arch-width ,ly:dimension? "width of the hook of a system brace.") (arpeggio-direction ,ly:dir? "If set, put an arrow on the arpeggio squiggly line.") - (ascendens ,boolean? "is this neume of an ,ascending?.") (attachment ,pair? "cons of symbols indicating how a slur should be attached at the ends. The format is '(LEFT-TYPE . RIGHT-TYPE), where both TYPEs are symbols. The values of these symbols may be alongside-stem, stem, head or loose-end.") (attachment-offset ,pair? "cons of offsets, -'(LEFT-offset . RIGHT-offset). This offset is added to the -attachments to prevent ugly slurs. [fixme: we need more documentation here]. -.") - (auctum ,boolean? "is this neume ,augmented?.") +'(@var{left-offset} . @var{right-offset}). This offset is added to +the attachments to prevent ugly slurs. [fixme: we need more +documentation here].") + + ;; ancient notation + + ;;;;;;; TODO: + ;; there are too many properties for ancient notation + ;; probably neume-types (a list of symbols) would also work. + + (auctum ,boolean? "is this neume augmented?") + (ascendens ,boolean? "is this neume of an ascending?") + (add-cauda ,boolean? "does this flexa require an additional cauda on the left side?") + (add-join ,boolean? "is this ligature head joined with the next one by a vertical line?") + (cavum ,boolean? "is this neume outlined?") + (descendens ,boolean? "is this neume of a descendent type?") + (deminutum ,boolean? "is this neume deminished?") + (flexa-height ,ly:dimension? "height of a flexa shape in a ligature grob in staff_space.") + (flexa-width ,ly:dimension? "width of a flexa shape in a ligature grob in staff_space.") + (join-heads ,boolean? "Whether to join the noteheads of an ambitus grob with a vertical line.") + (linea ,boolean? "attach vertical lines to this neume?") + + + (add-stem ,boolean? "is this ligature head a virga and therefore needs an additional stem on the right side?") + (adjust-if-on-staffline ,boolean? "If this grob is on a staff line, adjust its appearance, so that it better fits into the staff. E.g., if set true on stem grobs, flares of mensural flags will always be aligned with the staff lines, regardless if the associated note head is printed on a staff line or inbetween.") + (join-left ,boolean? "is this ligature head joined with the previous one by a vertical line?") + (context-info ,integer? "") + (inclinatum ,boolean? "is this neume an inclinatum?") + (note-head-style ,string? "name of the font character to be used as note heads in the ambitus grob.") + (oriscus ,boolean? "is this neume an oriscus?") + (quilisma ,boolean? "is this neume a quilisma?") + (pes-or-flexa ,boolean? "shall this neume be joined with the previous head?") + ;; DOCME + (prefix-set ,number? "") + (stropha ,boolean? "is this neume a stropha?") + (virga ,boolean? "is this neume a virga?") + + + ;; end ancient notation + + (auto-knee-gap ,ly:dimension? "If a gap is found between noteheads where a horizontal beam fits that is larger than this number, make a kneed beam.") (axes ,list? "list of axis numbers. @@ -83,7 +115,8 @@ original stencil drawer to draw the balloon around.") (bar-size-procedure ,procedure? "Procedure that computes the size of a bar line.") (base-shortest-duration ,ly:moment? "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? "Baseline skip to use for multiple lines of text.") + (baseline-skip ,ly:dimension? "Distance between base lines of + multiple lines of text.") (beam-thickness ,ly:dimension? "thickness, measured in staffspace.") (beam-width ,ly:dimension? "width of the tremolo sign.") (beamed-lengths ,list? "list of stem lengths given beam multiplicity .") @@ -104,15 +137,13 @@ This procedure is called (using dependency resolution) before line breaking, but (between-cols ,pair? "Where to attach a loose column to") (between-system-string ,string? "string to dump between two systems. Useful for forcing pagebreaks.") - (bracket-thick ,number? "width of a system start bracket. .") + (bracket-thick ,number? "width of a system start bracket.") (break-align-symbol ,symbol? "the index in the spacing table (symbol) of the to be aligned item.") (break-glyph-function ,procedure? "function taking glyph and break-direction, returning the glyph at a line break.") - (breakable ,boolean? "boolean indicating if this is a breakable item (clef, barline, key sig, etc.).") + (breakable ,boolean? "Is this is a breakable item (e.g. clef, barline)?") (c0-position ,integer? "integer indicating the position of central C.") (cautionary-style ,symbol? "style of cautionary accidentals. Choices are 'smaller (one size smaller) or 'parentheses.") (cautionary ,boolean? "is this a cautionary accidentals.?") - (cavum ,boolean? "is this neume ,outlined?.") - (concaveness-gap ,ly:dimension? "A beam is considered to be concave if the distance of an inner notehead to the line between two outer noteheads is bigger than this gap.") @@ -125,7 +156,6 @@ square of the inner notes involved.") (collapse-height ,ly:dimension? "Minimum height of system start delimiter. If equal or smaller, the bracket is removed.") ;;DOCME - (context-info ,integer? "") (control-points ,list? "List of 4 offsets (number-pairs) that form control points for the tie/slur shape.") @@ -139,12 +169,7 @@ line).") ;; [FIXME: use dash-period/dash length; see text-spanner] (dashed ,number? " number representing the length of the dashes.") - (descendens ,boolean? "is this neume of a descendent ,type?.") - (de-uglify-parameters ,list? "list of 3 real constants. They -define the valid areas for the middle control points. Used in -de_uglyfy. They are empirical.") - (neutral-direction ,ly:dir? "Where to go if we're on the neutral position of the staff (see also grob-property neutral-position).") @@ -157,9 +182,6 @@ Use property neutral-direction to control the behaviour of stems on the neutral position itself. (Note: currently, neutral-position is supported only for custodes; for stems of note heads, neutral-position is currently fixed to 0, i.e. the middle of the staff.)") - - (deminutum ,boolean? "is this neume ,deminished?.") - (details ,list? "alist of parameters for detailed grob behavior.") (dir-function ,procedure? "function of type (count total)->direction. Default value: beam-dir-majority, also available: beam-dir-mean, beam-dir-median. The ways to calculate the direction of a beam work as follows: @@ -173,7 +195,7 @@ mean centre distance weighted per note @end table ") - (direction ,ly:dir? "Up or down, left or right?.") + (direction ,ly:dir? "Up or down, left or right?") (dot-count ,integer? "number of dots.") (duration-log ,integer? "2-log of the notehead duration, i.e. 0=whole note, 1 = half note, etc.") (edge-height ,pair? "a cons that specifies the heights of the vertical edges '(LEFT-height . RIGHT-height).") @@ -211,10 +233,8 @@ options include undefined and mensural. Additionally, @code{no-flag} switches off the flag.") (stroke-style ,string? "set to \"grace\" to turn stroke through flag on.") (flag-width-function ,procedure? "Procedure that computes the width of a half-beam (a non-connecting beam.).") - (flexa-height ,ly:dimension? "height of a flexa shape in a ligature grob in staff_space.") - (flexa-width ,ly:dimension? "width of a flexa shape in a ligature grob in staff_space.") (font-family ,symbol? "partial font -definition: music roman braces dynamic math ...") +definition: music roman braces dynamic math ..") (font-name ,string? "file name for the font to load. Overrides all other font-X qualifiers.") (font-magnification ,number? "Magnification @@ -247,8 +267,9 @@ name of character within font.") (gap ,ly:dimension? "Size of a gap in a variable symbol.") (gap-count ,integer? "Number of gapped beams for tremolo.") + (grace-space-factor ,number? "space grace at this fraction of the increment.") - (grow-direction ,ly:dir? "crescendo or ,decrescendo?.") + (grow-direction ,ly:dir? "crescendo or decrescendo?") (hair-thickness ,number? "thickness, measured in linethickness.") (height ,ly:dimension? "in staffspace.") @@ -258,13 +279,10 @@ slur, the closer it is to this height.") (horizontal-shift ,integer? "integer that identifies ranking of note-column for horizontal shifting. This is used by @internalsref{note-collision-interface}.") - (ideal-distances ,list? "(OBJ . (DIST . STRENGTH)) pairs.") - (inclinatum ,boolean? "is this neume an ,inclinatum?.") (interfaces ,list? "list of symbols indicating the interfaces supported by this object. Is initialized from the @code{meta} field.") - (join-heads ,boolean? "Whether to join the noteheads of an ambitus grob with a vertical line.") (kern ,ly:dimension? "amount of extra white space to add. For barline, space after a thick line.") - (knee ,boolean? "Is this beam a ,knee?") + (knee ,boolean? "Is this beam a knee?") (knee-spacing-correction ,number? "optical correction amount for knees. 0: no correction; 1: full correction.") (layer ,number? "The output layer [0..2]. The default is 1.") @@ -281,7 +299,6 @@ cdr for staff space. Both contributions are added.") multiplicity of flag. The Nth element of the list gives the stem length of a note with N flags. ") - (linea ,boolean? "attach vertical lines to this ,neume?.") (line-count ,integer? "Number of staff lines. If you want to override this for staffs individually, you must use @code{\\outputproperty}. @code{\\property .. \\override} will not @@ -304,61 +321,48 @@ noteheads in collisions, even if they have a different number of dots. This normal notation for some types of polyphonic music. The value of this setting is used by @internalsref{note-collision-interface} .") - (meta ,list? "Contains meta information. It is an alist with the -entries @code{name} and @code{interfaces}.") - (minimum-distance ,ly:dimension? "Minimum distance between rest and notes or beam.") - (minimum-distances ,list? "list of rods (ie. (OBJ . DIST) pairs).") (minimum-X-extent ,number-pair? "minimum size in X dimension, measured in staff space.") (minimum-Y-extent ,number-pair? "see @code{minimum-Y-extent}.") - (minimum-length ,ly:dimension? "try to make the -Grob at least this long. - -Also works as a scaling parameter for the length of hyphen. .") + (minimum-length ,ly:dimension? "try to make a spanner at least +this long. This requires a routine setting rods in @code{spacing-procedure} property.") (minimum-space ,ly:dimension? "minimum distance that the victim should move (after padding).") (print-function ,procedure? "Function taking grob as argument, returning a Molecule object.") - (stencil ,ly:stencil? "Cached output of the print-function.") - (new-accidentals ,list? "list of (pitch, accidental) pairs.") - (no-spacing-rods ,boolean? "read from grobs: boolean that makes Separation_item ignore this item (MOVE ME TO ITEM).") - (no-stem-extend ,boolean? "should stem not be extended to middle staff ,line?.") - (non-default ,boolean? "not set because of existence of a ,bar?.") - (note-head-style ,string? "name of the font character to be used as note heads in the ambitus grob.") + (no-spacing-rods ,boolean? "Items with this property do not cause +spacing constraints.") + (no-stem-extend ,boolean? "prevent stem from extending to middle +staff line?") + (non-default ,boolean? "set for manually specified clefs.") (old-accidentals ,list? "list of (pitch, accidental) pairs.") - (oriscus ,boolean? "is this neume an ,oriscus?.") (enclose-bounds ,number? - "How much of the bound a spanner should enclose: +1 = completely, 0 = center, -1 not at all.") + "How much of the bound a spanner should enclose: ++1 = completely, 0 = center, -1 not at all.") - (padding ,ly:dimension? "add this much extra space between objects that are next to each other.") + (padding ,ly:dimension? "add this much extra space between +objects that are next to each other.") (penalty ,number? "Penalty for breaking at this column. 10000 or more means forbid linebreak, -10000 or less means force linebreak. Other values influence linebreaking decisions as a real penalty.") - - (pes-or-flexa ,boolean? "shall this neume be joined with the previous ,head?.") - (pitch-max ,ly:pitch? "FIXME, JUNKME") (pitch-min ,ly:pitch? "FIXME, JUNKME") - - (quilisma ,boolean? "is this neume a ,quilisma?.") (positions ,pair? "cons of staff coordinates (@var{left} . @var{right}), where both @var{left} and @var{right} are in the staff-space unit of the current staff.") - ;; DOCME - (prefix-set ,number? "") (ratio ,number? "Parameter for slur shape. The higher this number, the quicker the slur attains it @code{height-limit}.") - (remove-first ,boolean? - "Remove the first staff of a orchestral score?") + (remove-first ,boolean? "Remove the first staff of a orchestral score?") (right-padding ,ly:dimension? "space right of accs.") (right-position ,number? "position of right part of spanner.") - (script-priority ,number? "A sorting key that determines in what order a script is within a stack of scripts.") + (script-priority ,number? "A sorting key that determines in what +order a script is within a stack of scripts.") ;; TODO: revise typing (self-alignment-X ,number-or-grob? "real number: -1 = @@ -399,7 +403,7 @@ duration. Typically, the width of a note head. See also argument. This is called after before-line-breaking-callback, but before the actual line breaking itself. Return value is ignored.") - (stacking-dir ,ly:dir? "stack contents of grobs in which direction ?.") + (stacking-dir ,ly:dir? "stack contents of grobs in which direction ?") (staff-space ,ly:dimension? "Amount of line leading relative to global staffspace.") (staff-position ,number? "vertical position in staff spaces, counted from the middle line.") @@ -417,8 +421,7 @@ the Nth element of the list gives the amount stem shortening of a note with N fl ") ;;[TODO: doco] (stem-spacing-correction ,number? "optical correction amount. ") - (stropha ,boolean? "is this neume a ,stropha?.") - (style ,symbol? "a string determining what style of glyph is typeset. Valid choices depend on the function that is reading this property. .") + (style ,symbol? "a string determining what style of glyph is typeset. Valid choices depend on the function that is reading this property.") (text-repeat-if-broken ,boolean? "Repeat text on broken ,text-spanner?") (text ,markup? "Text markup. See the @@ -432,7 +435,7 @@ notation manual for more information.") (transparent ,boolean? "This is almost the same as setting print-function to #f, but this retains the dimensions of this grob, which means that you can erase grobs -individually. .") +individually.") (bracket-visibility ,boolean-or-symbol? " This controls the visibility of the tuplet bracket. Setting it to false will prevent printing of the bracket. Setting the property to #'if-no-beam will @@ -444,15 +447,15 @@ bracket.") ;; FIXME. (break-visibility ,procedure? "a function that takes the break -direction and returns a cons of booleans containing (TRANSPARENT -. EMPTY). The following variables are predefined: @code{all-visible}, -@code{begin-of-line-visible}, @code{end-of-line-visible}, -@code{begin-of-line-invisible}, @code{end-of-line-invisible}, -@code{all-invisible}. +direction and returns a cons of booleans containing (@var{transparent} +. @var{empty}). The following variables are predefined: +@code{all-visible}, @code{begin-of-line-visible}, +@code{end-of-line-visible}, @code{begin-of-line-invisible}, +@code{end-of-line-invisible}, @code{all-invisible}. ") + (flag-count ,number? "Number of tremolo beams.") - (virga ,boolean? "is this neume a ,virga?.") - (when ,ly:moment? "when does this column ,happen?.") + (when ,ly:moment? "when does this column happen?") (word-space ,ly:dimension? "space to insert between lyrics or words in texts.") (width ,ly:dimension? "width of a grob measured in staff space.") @@ -499,9 +502,10 @@ duration of a measure is a breve or longer.") `( (accidental-grobs ,list? "Alis with (NOTENAME . GROBLIST) entries") - - (all-elements ,grob-list? "list of all grobs in this line. Needed for protecting grobs from GC.") - (arpeggio ,ly:grob? "pointer to arpeggio object.") + (after-line-breaking-callback ,procedure? "This procedure is called after line breaking. Its return value is ignored.") + (all-elements ,grob-list? "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.") (center-element ,ly:grob? "grob which will be at the center of the group after aligning (when using @@ -520,12 +524,14 @@ set, which grob to get the direction from .") (bars ,grob-list? "list of barline pointers.") (bounded-by-me ,grob-list? "list of spanners that have this column as start/begin point. Only columns that have grobs or act as bounds are spaced.") - (columns ,grob-list? "list of grobs, typically containing paper-columns.") + (columns ,grob-list? "list of grobs, typically containing +paper-columns or note-column objects.") (conditional-elements ,grob-list? "Internal use only") (dependencies ,grob-list? "list of score-grob pointers that indicate who to compute first for certain global passes.") (elements ,grob-list? "list of grobs, type depending on the Grob where this is set in.") (heads ,grob-list? "List of note heads.") (items-worth-living ,grob-list? "list of interesting items. If empty in a particular system, clear that system.") + (details ,list? "alist of parameters for detailed grob behavior.") (note-heads ,grob-list? "List of note head grobs") (side-support-elements ,grob-list? "the support, a list of grobs.") (spacing-wishes ,grob-list? "List of note spacing or staff spacing objects.") @@ -551,8 +557,9 @@ did it's job. This ensures that a positioning is only done once.") (script-stencil ,pair? "Index code for script -- internal, see script.cc.") + (meta ,list? "Contains meta information. It is an alist with the +entries @code{name} and @code{interfaces}.") - (flag-count ,number? "") ;; TODO: use interface for this! (chord-tremolo ,boolean? "if set, this beam is a tremolo. ") @@ -567,13 +574,10 @@ debugging") (note-columns ,pair? "list of NoteColumn grobs.") (if-text-padding ,number? "padding in case texts are there.") - (grace-space-factor ,number? "space grace at this fraction of the increment.") (position-callbacks ,list? "list of functions set spanner positions.") ;;; Junk me, replace it by add-join. - (join-left ,boolean? "is this ligature head joined with the previous one by a vertical ,line?") - (join-left-amount ,number? "") (delta-pitch ,number? "the interval between this and the next note, or, more precisely, their vertical distance; this is used in ligatures for calculation of the height of vertical joins flexa shapes") @@ -581,6 +585,14 @@ 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.") + (de-uglify-parameters ,list? "list of 3 real constants. They +define the valid areas for the middle control points. They are +empirical.") + (ideal-distances ,list? "(@var{obj} . (@var{dist} . @var{strength})) pairs.") + (minimum-distances ,list? "list of rods, that have the format (@var{obj} . @var{dist}).") + + ))) diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 4cd43d3de9..21b612e9ed 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -40,7 +40,7 @@ (print-function . ,Ambitus::print) (font-family . music) (note-head-style . "noteheads-2") - (visibility-lambda . ,begin-of-line-visible) + (break-visibility . ,begin-of-line-visible) (join-heads . #t) (space-alist . ( (clef . (extra-space . 0.0)) @@ -171,7 +171,6 @@ ;; sadly possibly breaking patterns with high order beams. (beamed-stem-shorten . (1.0 0.5 0.25)) - (outer-stem-length-limit . 0.2) (slope-limit . 0.2) (flag-width-function . ,beam-flag-width-function) (damping . 1) @@ -400,7 +399,6 @@ (spacing-procedure . ,Spanner::set_spacing_rods) (minimum-length . 2.0) (if-text-padding . 1.0) - (dash-length . 4.0) (self-alignment-Y . 0) (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) (meta . ((interfaces . (hairpin-interface line-interface self-alignment-interface dynamic-interface spanner-interface)))) @@ -609,8 +607,6 @@ (NoteCollision . ( (axes . (0 1)) - ;; Ugh, should not be hard-coded. - (note-width . 1.321) (X-extent-callback . ,Axis_group_interface::group_extent_callback) (Y-extent-callback . ,Axis_group_interface::group_extent_callback) (meta . ((interfaces . (note-collision-interface axis-group-interface item-interface )))) @@ -737,7 +733,6 @@ (print-function . ,Multi_measure_rest::percent) (slope . 1.0) (thickness . 0.48) - (minimum-width . 12.5) ; staffspace (font-family . music) (meta . ((interfaces . (multi-measure-rest-interface spanner-interface font-interface percent-repeat-interface)))) )) @@ -1057,7 +1052,7 @@ (arch-angle . 50.0) (arch-thick . 0.25) (arch-width . 1.5) - (bracket-collapse-height . 1) + (collapse-height . 1) (thickness . 0.25) (meta . ((interfaces . (system-start-delimiter-interface spanner-interface)))) )) diff --git a/scm/define-translator-properties.scm b/scm/define-translator-properties.scm index 7e6ca259a5..11411f4f12 100644 --- a/scm/define-translator-properties.scm +++ b/scm/define-translator-properties.scm @@ -145,9 +145,9 @@ overriding Staff.defaultBarType will have no effect. decrescendi. One of: @samp{hairpin}, @samp{line}, @samp{dashed-line}, @samp{dotted-line}. If unset, hairpin type is used.") - (explicitClefVisibility ,procedure? "visibility-lambda function for clef changes.") + (explicitClefVisibility ,procedure? "break-visibility function for clef changes.") - (explicitKeySignatureVisibility ,procedure? "visibility-lambda + (explicitKeySignatureVisibility ,procedure? "break-visibility function for explicit Key changes; \\override of #'break-visibility will set the visibility for normal (ie. at the start of the line) key signatures.") diff --git a/scm/document-backend.scm b/scm/document-backend.scm index 35fdfcd2cb..484c65eace 100644 --- a/scm/document-backend.scm +++ b/scm/document-backend.scm @@ -34,13 +34,21 @@ Interfaces: (desc (cadr interface)) (props (sort (caddr interface) symboltexi propdocs)) + (property->texi + 'backend pr grob-description))) + (iprops (filter (lambda (x) (object-property x 'backend-internal) ) props)) + (uprops (filter (lambda (x) (not (object-property x 'backend-internal)) ) props)) + (user-propdocs (map docfunc uprops)) + (internal-propdocs (map docfunc iprops))) + + (string-append + desc + "\n\n@unnumberedsubsubsec User settable properties:\n" + (description-list->texi user-propdocs) + + "\n\n@unnumberedsubsubsec Internal properties: \n" + (description-list->texi internal-propdocs) + ) )) @@ -71,7 +79,7 @@ Interfaces: (make #:name name #:text (string-append - (interface-doc-string (cdr interface) #f) + (interface-doc-string (cdr interface) '()) "\n\n" "This grob interface is used in the following graphical objects: " @@ -82,6 +90,17 @@ Interfaces: ))) +(define (grob-alist->texi alist) + (let* + ((uprops (filter (lambda (x) (not (object-property x 'backend-internal))) + (map car alist)))) + + (description-list->texi + (map (lambda (y) (property->texi 'backend y alist)) + uprops) + ))) + + (define (grob-doc description) "Given a property alist DESCRIPTION, make a documentation node." @@ -89,18 +108,12 @@ node." (let* ( (metah (assoc 'meta description)) - (meta (cdr metah)) (name (cdr (assoc 'name meta))) (ifaces (map lookup-interface (cdr (assoc 'interfaces meta)))) (ifacedoc (map (lambda (iface) - (string-append -" -@subsubheading " -(ref-ify (symbol->string (car iface))) - -"\n\n" - (interface-doc-string iface description))) + (ref-ify (symbol->string (car iface))) + ) (reverse ifaces))) (engravers (filter (lambda (x) (engraver-makes-grob? name x)) all-engravers-list)) @@ -115,7 +128,10 @@ node." namestr " grobs are created by: " (human-listify (map ref-ify (map engraver-name engraver-names))) - (apply string-append ifacedoc) + "\n\nStandard settings: \n\n" + (grob-alist->texi description) + "\n\nThis object supports the following interfaces: \n" + (human-listify ifacedoc) )) )) @@ -153,7 +169,7 @@ node." (define (lookup-interface name) (let* ( - (entry (hashq-ref (ly:all-grob-interfaces) name #f)) + (entry (hashq-ref (ly:all-grob-interfaces) name '() )) ) (if (equal? entry #f) @@ -175,7 +191,7 @@ node." ( (ps (sort (map symbol->string lst) stringsymbol prop) 'backend #f)) + (property->texi 'backend (string->symbol prop) '())) ps)) (texi (description-list->texi descs)) ) diff --git a/scm/document-music.scm b/scm/document-music.scm index 97991c8971..c0d8157c78 100644 --- a/scm/document-music.scm +++ b/scm/document-music.scm @@ -90,7 +90,7 @@ "\n\nProperties: \n" (description-list->texi (map - (lambda (x) (document-property x 'music props)) + (lambda (x) (property->texi 'music x props)) (map car props))) ) diff --git a/scm/document-translation.scm b/scm/document-translation.scm index e7e8cdd5d3..b7bf4b09db 100644 --- a/scm/document-translation.scm +++ b/scm/document-translation.scm @@ -1,4 +1,3 @@ - ;;; engraver-doumentation-lib.scm -- Functions for engraver documentation ;;; ;;; source file of the GNU LilyPond music typesetter @@ -30,7 +29,7 @@ (propsw (cdr (assoc 'properties-written (ly:translator-description engraver)))) (accepted (cdr (assoc 'events-accepted (ly:translator-description engraver)))) (name-sym (ly:translator-name engraver)) - (name (symbol->string name-sym)) + (name-str (symbol->string name-sym)) (desc (cdr (assoc 'description (ly:translator-description engraver)))) (grobs (engraver-grobs engraver)) ) @@ -54,7 +53,7 @@ (string-append "Properties (read)" (description-list->texi - (map (lambda (x) (document-property x 'translation #f)) propsr))) + (map (lambda (x) (property->texi 'translation x '())) propsr))) "") (if (null? propsw) @@ -62,35 +61,41 @@ (string-append "Properties (write)" (description-list->texi - (map (lambda (x) (document-property x 'translation #f)) propsw)))) + (map (lambda (x) (property->texi 'translation x '())) propsw)))) (if (null? grobs) "" (string-append "This engraver creates the following grobs: \n " - (human-listify (map ref-ify (uniq-list (sort grobs stringstring contexts))))) "" )))) @@ -280,7 +285,7 @@ (sortedsyms (map string->symbol ps)) (propdescs (map - (lambda (x) (document-property x 'translation #f)) + (lambda (x) (property->texi 'translation x '())) sortedsyms)) (texi (description-list->texi propdescs))) texi diff --git a/scm/documentation-lib.scm b/scm/documentation-lib.scm index 8dc5edc5ca..e0b056205a 100644 --- a/scm/documentation-lib.scm +++ b/scm/documentation-lib.scm @@ -182,49 +182,38 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; property stuff. -(define (property->texi where sym) - "Document SYM for WHERE (which can be translation, backend, music)" +(define (property->texi where sym . rest) + "Document SYM for WHERE (which can be translation, backend, music), +with init values from ALIST (1st optional argument) +" (let* ((name (symbol->string sym)) + (alist (if (pair? rest) (car rest) '())) (type?-name (string->symbol (string-append (symbol->string where) "-type?"))) (doc-name (string->symbol (string-append (symbol->string where) "-doc"))) (type (object-property sym type?-name)) (typename (type-name type)) - (desc (object-property sym doc-name))) + (desc (object-property sym doc-name)) + (handle (assoc sym alist)) + ) (if (eq? desc #f) (error "No description for property ~S" sym)) (cons (string-append "@code{" name "} " - "(" typename ")") + "(" typename ")" + (if handle + (string-append + ":\n\n @code{" + (scm->texi (cdr handle)) + "}\n\n") + "") + + + ) desc) )) -(define (document-property-value sym alist) - "Extract value for SYM from ALIST, return as texi string" - (let* ((handle (assoc sym alist))) - (if (eq? handle #f) - "(unset)" - (scm->texi (cdr handle))))) - -(define (backend-property->texi sym) - (property->texi 'backend sym)) - -(define (document-property sym where alist) - "Document SYM. If GROB-DESCRIPTION is not #f, it's an alist -containing default values." - (let* - ((without (property->texi where sym)) - (rv - - (cons (car without) - (if (eq? alist #f) - (cdr without) - (string-append - (cdr without) - "\nDefault value: " - (document-property-value sym alist)))))) - rv)) diff --git a/scm/lily.scm b/scm/lily.scm index bd268611b3..4b21833762 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -456,6 +456,7 @@ L1 is copied, L2 not. (,ly:music? . "music") (,ly:pitch? . "pitch") (,ly:translator? . "translator") + (,ly:font-metric? . "font metric") (,markup-list? . "list of markups") (,markup? . "markup") (,music-list? . "list of music")