CVSROOT: /cvsroot/lilypond Module name: lilypond Branch: Changes by: Han-Wen Nienhuys <[EMAIL PROTECTED]> 05/08/03 18:23:47
Modified files: . : ChangeLog Documentation/topdocs: NEWS.tely flower/include : interval.hh lily : book.cc dynamic-text-spanner.cc mark-engraver.cc ottava-bracket.cc paper-book.cc parser.yy part-combine-engraver.cc text-interface.cc text-spanner.cc tuplet-bracket.cc lily/include : text-interface.hh mf : feta-generic.mf feta-test-generic.mf scm : define-grob-properties.scm define-grobs.scm define-markup-commands.scm Added files: input/regression: markup-arrows.ly tuplet-broken.ly mf : feta-arrow.mf Log message: * input/regression/markup-arrows.ly: new file. * lily/tuplet-bracket.cc: document new behavior. * input/regression/tuplet-broken.ly: new file. Demonstrate tuplets with line breaks. * scm/define-markup-commands.scm (arrow-head): arrow-head markup command. * scm/define-grobs.scm (all-grob-descriptions): set arrows as default * lily/tuplet-bracket.cc: add edge-text property. add break-overshoot. (print): read break-overshoot. (print): read edge-text, add stencils. * mf/feta-arrow.mf: new file. * mf/feta-generic.mf: add feta-arrow. CVSWeb URLs: http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3947&tr2=1.3948&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/Documentation/topdocs/NEWS.tely.diff?tr1=1.51&tr2=1.52&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/flower/include/interval.hh.diff?tr1=1.49&tr2=1.50&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/input/regression/markup-arrows.ly?rev=1.1 http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/input/regression/tuplet-broken.ly?rev=1.1 http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/book.cc.diff?tr1=1.44&tr2=1.45&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/dynamic-text-spanner.cc.diff?tr1=1.16&tr2=1.17&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/mark-engraver.cc.diff?tr1=1.107&tr2=1.108&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/ottava-bracket.cc.diff?tr1=1.35&tr2=1.36&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-book.cc.diff?tr1=1.112&tr2=1.113&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/parser.yy.diff?tr1=1.485&tr2=1.486&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/part-combine-engraver.cc.diff?tr1=1.24&tr2=1.25&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/text-interface.cc.diff?tr1=1.3&tr2=1.4&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/text-spanner.cc.diff?tr1=1.114&tr2=1.115&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/tuplet-bracket.cc.diff?tr1=1.87&tr2=1.88&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/text-interface.hh.diff?tr1=1.1&tr2=1.2&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/mf/feta-arrow.mf?rev=1.1 http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/mf/feta-generic.mf.diff?tr1=1.77&tr2=1.78&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/mf/feta-test-generic.mf.diff?tr1=1.17&tr2=1.18&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-grob-properties.scm.diff?tr1=1.106&tr2=1.107&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-grobs.scm.diff?tr1=1.216&tr2=1.217&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-markup-commands.scm.diff?tr1=1.103&tr2=1.104&r1=text&r2=text Patches: Index: lilypond/ChangeLog diff -u lilypond/ChangeLog:1.3947 lilypond/ChangeLog:1.3948 --- lilypond/ChangeLog:1.3947 Wed Aug 3 14:26:32 2005 +++ lilypond/ChangeLog Wed Aug 3 18:23:46 2005 @@ -1,3 +1,26 @@ +2005-08-03 Han-Wen Nienhuys <[EMAIL PROTECTED]> + + * input/regression/markup-arrows.ly: new file. + + * lily/tuplet-bracket.cc: document new behavior. + + * input/regression/tuplet-broken.ly: new file. Demonstrate tuplets + with line breaks. + + * scm/define-markup-commands.scm (arrow-head): arrow-head markup command. + + * scm/define-grobs.scm (all-grob-descriptions): set arrows as + default + + * lily/tuplet-bracket.cc: add edge-text property. + add break-overshoot. + (print): read break-overshoot. + (print): read edge-text, add stencils. + + * mf/feta-arrow.mf: new file. + + * mf/feta-generic.mf: add feta-arrow. + 2005-08-03 Mats Bengtsson <[EMAIL PROTECTED]> * Documentation/user/lilypond-book.itely (An example of a Index: lilypond/Documentation/topdocs/NEWS.tely diff -u lilypond/Documentation/topdocs/NEWS.tely:1.51 lilypond/Documentation/topdocs/NEWS.tely:1.52 --- lilypond/Documentation/topdocs/NEWS.tely:1.51 Wed Aug 3 13:03:57 2005 +++ lilypond/Documentation/topdocs/NEWS.tely Wed Aug 3 18:23:46 2005 @@ -34,6 +34,33 @@ @itemize @bullet @item +Tuplet brackets get arrows when they are broken across a line. + [EMAIL PROTECTED],raggedright,verbatim,relative=2] +\times 4/5 { + c c c \bar "empty" \break c c +} [EMAIL PROTECTED] lilypond + +This feature was sponsored by Trevor Baca. + + [EMAIL PROTECTED] +Arrow heads were added to the Feta font. + [EMAIL PROTECTED] +\lyrics { + \markup { + filled, to the right: \hspace #2.0 \fontsize #6 \arrow-head #0 #1 ##t + open, down: \hspace #2.0 \fontsize #6 \arrow-head #1 #-1 ##f + } +} [EMAIL PROTECTED] lilypond + +These glyphs have been sponsored by Trevor Baca. + + [EMAIL PROTECTED] Nested tuplets are automatically positioned, @lilypond[fragment,raggedright,verbatim,relative=2] Index: lilypond/flower/include/interval.hh diff -u lilypond/flower/include/interval.hh:1.49 lilypond/flower/include/interval.hh:1.50 --- lilypond/flower/include/interval.hh:1.49 Mon May 30 09:45:13 2005 +++ lilypond/flower/include/interval.hh Wed Aug 3 18:23:46 2005 @@ -70,6 +70,11 @@ { set_empty (); } + Interval_t (Drul_array<T> const &src) + : Drul_array<T> (src) + { + } + Interval_t (T m, T M) : Drul_array<T> (m, M) { } Index: lilypond/lily/book.cc diff -u lilypond/lily/book.cc:1.44 lilypond/lily/book.cc:1.45 --- lilypond/lily/book.cc:1.44 Sun Jul 24 15:30:02 2005 +++ lilypond/lily/book.cc Wed Aug 3 18:23:46 2005 @@ -127,7 +127,7 @@ outputs = scm_cdr (outputs); } } - else if (Text_interface::markup_p (scm_car (s))) + else if (Text_interface::is_markup (scm_car (s))) paper_book->add_score (scm_car (s)); else assert (0); Index: lilypond/lily/dynamic-text-spanner.cc diff -u lilypond/lily/dynamic-text-spanner.cc:1.16 lilypond/lily/dynamic-text-spanner.cc:1.17 --- lilypond/lily/dynamic-text-spanner.cc:1.16 Tue Jun 7 15:13:06 2005 +++ lilypond/lily/dynamic-text-spanner.cc Wed Aug 3 18:23:46 2005 @@ -101,8 +101,8 @@ SCM text = index_get_cell (edge_text, d); - if (Text_interface::markup_p (text)) - edge[d] = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), properties, text)); + if (Text_interface::is_markup (text)) + edge[d] = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), properties, text)); if (!edge[d].is_empty ()) edge[d].align_to (Y_AXIS, CENTER); Index: lilypond/lily/include/text-interface.hh diff -u lilypond/lily/include/text-interface.hh:1.1 lilypond/lily/include/text-interface.hh:1.2 --- lilypond/lily/include/text-interface.hh:1.1 Tue Jun 7 15:13:06 2005 +++ lilypond/lily/include/text-interface.hh Wed Aug 3 18:23:47 2005 @@ -19,7 +19,7 @@ DECLARE_SCHEME_CALLBACK (interpret_markup, (SCM, SCM, SCM)); DECLARE_SCHEME_CALLBACK (interpret_string, (SCM, SCM, SCM)); static bool has_interface (Grob *); - static bool markup_p (SCM); + static bool is_markup (SCM); }; #endif /* TEXT_ITEM */ Index: lilypond/lily/mark-engraver.cc diff -u lilypond/lily/mark-engraver.cc:1.107 lilypond/lily/mark-engraver.cc:1.108 --- lilypond/lily/mark-engraver.cc:1.107 Tue Jul 26 22:24:30 2005 +++ lilypond/lily/mark-engraver.cc Wed Aug 3 18:23:47 2005 @@ -101,7 +101,7 @@ SCM m = mark_ev_->get_property ("label"); SCM proc = get_property ("markFormatter"); - if (!Text_interface::markup_p (m) + if (!Text_interface::is_markup (m) && ly_is_procedure (proc)) { if (!scm_is_number (m)) @@ -123,7 +123,7 @@ warning (_ ("rehearsalMark must have integer value")); } - if (Text_interface::markup_p (m)) + if (Text_interface::is_markup (m)) text_->set_property ("text", m); else warning (_ ("mark label must be a markup object")); Index: lilypond/lily/ottava-bracket.cc diff -u lilypond/lily/ottava-bracket.cc:1.35 lilypond/lily/ottava-bracket.cc:1.36 --- lilypond/lily/ottava-bracket.cc:1.35 Sat Jul 16 12:23:33 2005 +++ lilypond/lily/ottava-bracket.cc Wed Aug 3 18:23:47 2005 @@ -69,7 +69,7 @@ SCM properties = Font_interface::text_font_alist_chain (me); SCM markup = me->get_property ("text"); Stencil text; - if (Text_interface::markup_p (markup)) + if (Text_interface::is_markup (markup)) text = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), properties, markup)); Drul_array<Real> shorten = robust_scm2interval (me->get_property ("shorten-pair"), Index: lilypond/lily/paper-book.cc diff -u lilypond/lily/paper-book.cc:1.112 lilypond/lily/paper-book.cc:1.113 --- lilypond/lily/paper-book.cc:1.112 Sun Jul 24 15:30:02 2005 +++ lilypond/lily/paper-book.cc Wed Aug 3 18:23:47 2005 @@ -307,7 +307,7 @@ system_list = scm_reverse (system_list); systems_ = scm_append (scm_list_2 (system_list, systems_)); } - else if (Text_interface::markup_p (scm_car (s))) + else if (Text_interface::is_markup (scm_car (s))) { SCM t = Text_interface::interpret_markup (paper_->self_scm (), page_properties, Index: lilypond/lily/parser.yy diff -u lilypond/lily/parser.yy:1.485 lilypond/lily/parser.yy:1.486 --- lilypond/lily/parser.yy:1.485 Tue Aug 2 07:46:58 2005 +++ lilypond/lily/parser.yy Wed Aug 3 18:23:47 2005 @@ -2698,7 +2698,7 @@ *destination = p->self_scm (); return OUTPUT_DEF_IDENTIFIER; - } else if (Text_interface::markup_p (sid)) { + } else if (Text_interface::is_markup (sid)) { *destination = sid; if (is_lyric_state ()) return LYRIC_MARKUP_IDENTIFIER; Index: lilypond/lily/part-combine-engraver.cc diff -u lilypond/lily/part-combine-engraver.cc:1.24 lilypond/lily/part-combine-engraver.cc:1.25 --- lilypond/lily/part-combine-engraver.cc:1.24 Tue Jul 26 22:24:30 2005 +++ lilypond/lily/part-combine-engraver.cc Wed Aug 3 18:23:47 2005 @@ -59,7 +59,7 @@ else if (what == ly_symbol2scm ("unisono")) text = get_property ("aDueText"); - if (Text_interface::markup_p (text)) + if (Text_interface::is_markup (text)) { text_ = make_item ("CombineTextScript", event_->self_scm ()); text_->set_property ("text", text); Index: lilypond/lily/text-interface.cc diff -u lilypond/lily/text-interface.cc:1.3 lilypond/lily/text-interface.cc:1.4 --- lilypond/lily/text-interface.cc:1.3 Tue Jun 7 15:13:06 2005 +++ lilypond/lily/text-interface.cc Wed Aug 3 18:23:47 2005 @@ -49,7 +49,7 @@ { SCM func = scm_car (markup); SCM args = scm_cdr (markup); - if (!markup_p (markup)) + if (!is_markup (markup)) programming_error ("markup head has no markup signature"); return scm_apply_2 (func, layout_smob, props, args); @@ -81,7 +81,7 @@ /* Ugh. Duplicated from Scheme. */ bool -Text_interface::markup_p (SCM x) +Text_interface::is_markup (SCM x) { return (scm_is_string (x) || (scm_is_pair (x) Index: lilypond/lily/text-spanner.cc diff -u lilypond/lily/text-spanner.cc:1.114 lilypond/lily/text-spanner.cc:1.115 --- lilypond/lily/text-spanner.cc:1.114 Tue Jun 7 15:13:06 2005 +++ lilypond/lily/text-spanner.cc Wed Aug 3 18:23:47 2005 @@ -92,7 +92,7 @@ SCM text = index_get_cell (edge_text, d); - if (Text_interface::markup_p (text)) + if (Text_interface::is_markup (text)) edge[d] = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), properties, text)); if (!edge[d].is_empty ()) Index: lilypond/lily/tuplet-bracket.cc diff -u lilypond/lily/tuplet-bracket.cc:1.87 lilypond/lily/tuplet-bracket.cc:1.88 --- lilypond/lily/tuplet-bracket.cc:1.87 Wed Aug 3 13:03:57 2005 +++ lilypond/lily/tuplet-bracket.cc Wed Aug 3 18:23:47 2005 @@ -46,14 +46,18 @@ #include "staff-symbol-referencer.hh" #include "lookup.hh" -static Grob * -get_x_bound_grob (Grob *g, Direction my_dir) +static Item * +get_x_bound_item (Grob *me_grob, Direction hdir, Direction my_dir) { - if (Note_column::get_stem (g) + Spanner *me = dynamic_cast<Spanner*> (me_grob); + Item *g = me->get_bound (hdir); + if (Note_column::has_interface (g) + && Note_column::get_stem (g) && Note_column::dir (g) == my_dir) { g = Note_column::get_stem (g); } + return g; } @@ -162,13 +166,27 @@ Direction dir = get_grob_direction (me); - Grob *lgr = get_x_bound_grob (columns[0], dir); - Grob *rgr = get_x_bound_grob (columns.top (), dir); + Drul_array<Item *> bounds; + bounds[LEFT] = get_x_bound_item (me, LEFT, dir); + bounds[RIGHT] = get_x_bound_item (me, RIGHT, dir); - Real x0 = robust_relative_extent (lgr, commonx, X_AXIS)[LEFT]; - Real x1 = robust_relative_extent (rgr, commonx, X_AXIS)[RIGHT]; - Real w = x1 -x0; + Interval x_span; + Direction d = LEFT; + do + { + x_span[d] = robust_relative_extent (bounds[d], commonx, X_AXIS)[d]; + + if (bounds[d]->break_status_dir()) + { + Interval overshoot (robust_scm2drul (me->get_property ("break-overshoot"), + Interval (0,0))); + + x_span[d] += d * overshoot[d]; + } + } + while (flip (&d) != LEFT); + Real w = x_span.length(); SCM number = me->get_property ("text"); Output_def *pap = me->get_layout (); @@ -217,7 +235,20 @@ scale_drul (&height, -ss * dir); scale_drul (&flare, ss); scale_drul (&shorten, ss); + + do + { + if (bounds[d]->break_status_dir ()) + { + height[d] = 0.0; + flare[d] = 0.0; + shorten[d] = 0.0; + } + } + while (flip (&d) != LEFT); + + Stencil brack = make_bracket (me, Y_AXIS, Offset (w, ry - ly), height, @@ -227,11 +258,35 @@ */ Interval (-0.5, 0.5) * gap + 0.1, flare, shorten); + + do + { + if (bounds[d]->break_status_dir ()) + { + SCM properties = Font_interface::text_font_alist_chain (me); + SCM edge_text = me->get_property ("edge-text"); + + SCM text = index_get_cell (edge_text, d); + if (Text_interface::is_markup (text)) + { + SCM t = Text_interface::interpret_markup (pap->self_scm (), properties, + text); + + Stencil *edge_text = unsmob_stencil (t); + edge_text->translate_axis (x_span[d] - x_span[LEFT], X_AXIS); + mol.add_stencil (*edge_text); + } + } + } + while (flip (&d) != LEFT); + + mol.add_stencil (brack); } mol.translate_axis (ly, Y_AXIS); - mol.translate_axis (x0 - sp->get_bound (LEFT)->relative_coordinate (commonx, X_AXIS), X_AXIS); + mol.translate_axis (x_span[LEFT] + - sp->get_bound (LEFT)->relative_coordinate (commonx, X_AXIS), X_AXIS); return mol.smobbed_copy (); } @@ -376,8 +431,8 @@ if (!columns.size ()) return; - Grob *lgr = get_x_bound_grob (columns[0], dir); - Grob *rgr = get_x_bound_grob (columns.top (), dir); + Item *lgr = get_x_bound_item (me, LEFT, dir); + Item *rgr = get_x_bound_item (me, RIGHT, dir); Real x0 = robust_relative_extent (lgr, commonx, X_AXIS)[LEFT]; Real x1 = robust_relative_extent (rgr, commonx, X_AXIS)[RIGHT]; @@ -608,10 +663,14 @@ ADD_INTERFACE (Tuplet_bracket, "tuplet-bracket-interface", - "A bracket with a number in the middle, used for tuplets.", + "A bracket with a number in the middle, used for tuplets. ", + "When the bracket spans a line break, the value of " + "@code{break-overshoot} determines how far it extends beyond the staff. " + "At a line break, the markups in the @code{edge-text} are printed " + "at the edges. " "note-columns bracket-flare edge-height shorten-pair " - "tuplets " + "tuplets edge-text break-overshoot " "padding left-position right-position bracket-visibility " "number-visibility thickness direction"); Index: lilypond/mf/feta-generic.mf diff -u lilypond/mf/feta-generic.mf:1.77 lilypond/mf/feta-generic.mf:1.78 --- lilypond/mf/feta-generic.mf:1.77 Sat May 28 00:47:04 2005 +++ lilypond/mf/feta-generic.mf Wed Aug 3 18:23:47 2005 @@ -23,12 +23,15 @@ font_x_height staff_space#; +%% this is a fallback so we can run the font without including feta-bolletjes. +black_notehead_width# := 1.0 staff_space#; fet_beginfont("feta", design_size, "fetaMusic"); if test = 0: input feta-eindelijk; input feta-toevallig; + input feta-arrow; input feta-puntje; input feta-bolletjes; input feta-schrift; Index: lilypond/mf/feta-test-generic.mf diff -u lilypond/mf/feta-test-generic.mf:1.17 lilypond/mf/feta-test-generic.mf:1.18 --- lilypond/mf/feta-test-generic.mf:1.17 Sat May 28 00:47:04 2005 +++ lilypond/mf/feta-test-generic.mf Wed Aug 3 18:23:47 2005 @@ -6,12 +6,14 @@ %input feta-eindelijk; %input feta-toevallig; %input feta-puntje; -input feta-bolletjes; +%input feta-bolletjes; +input feta-arrow; +%input feta-schrift; %input feta-schrift; %input feta-banier; % input feta-slag; %input feta-klef; -input feta-haak; +%input feta-haak; % input feta-haak; %input feta-timesig; %input feta-pendaal; Index: lilypond/scm/define-grob-properties.scm diff -u lilypond/scm/define-grob-properties.scm:1.106 lilypond/scm/define-grob-properties.scm:1.107 --- lilypond/scm/define-grob-properties.scm:1.106 Wed Aug 3 13:03:57 2005 +++ lilypond/scm/define-grob-properties.scm Wed Aug 3 18:23:47 2005 @@ -112,6 +112,8 @@ (break-glyph-function ,procedure? "This function determines the appearance of a bar line at the line break. It takes a glyph and break-direction and returns the glyph at a line break.") + (break-overshoot ,number-pair? "How much does a broken spanner +stick out of its bounds?") (breakable ,boolean? "Can this object appear at a line break, like clefs and bar lines?") (c0-position ,integer? "An integer indicating the position of Index: lilypond/scm/define-grobs.scm diff -u lilypond/scm/define-grobs.scm:1.216 lilypond/scm/define-grobs.scm:1.217 --- lilypond/scm/define-grobs.scm:1.216 Thu Jul 21 21:36:05 2005 +++ lilypond/scm/define-grobs.scm Wed Aug 3 18:23:47 2005 @@ -1484,7 +1484,10 @@ (padding . 1.1) (thickness . 1.6) (edge-height . (0.7 . 0.7)) + (break-overshoot . (1.0 . 1.0)) (shorten-pair . (-0.2 . -0.2)) + (edge-text . ,(cons (markup #:arrow-head 0 -1 #f) + (markup #:arrow-head 0 1 #f))) (before-line-breaking-callback . ,Tuplet_bracket::before_line_breaking) (after-line-breaking-callback . ,Tuplet_bracket::after_line_breaking) (print-function . ,Tuplet_bracket::print) Index: lilypond/scm/define-markup-commands.scm diff -u lilypond/scm/define-markup-commands.scm:1.103 lilypond/scm/define-markup-commands.scm:1.104 --- lilypond/scm/define-markup-commands.scm:1.103 Tue Jul 19 15:42:40 2005 +++ lilypond/scm/define-markup-commands.scm Wed Aug 3 18:23:47 2005 @@ -810,11 +810,27 @@ (ly:stencil-extent stil X) (ly:stencil-extent stil Y)))) - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; glyphs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(def-markup-command (arrow-head layout props axis direction filled) + (integer? ly:dir? boolean?) + "produce an arrow head in specified direction and axis. Use the filled head if @var{filled} is specified." + (let* + ((name (format "arrowheads.~a.~a~a" + (if filled + "close" + "open") + axis + direction))) + (ly:font-get-glyph + (ly:paper-get-font layout (cons '((font-encoding . fetaMusic)) + props)) + name))) + (def-markup-command (musicglyph layout props glyph-name) (string?) "This is converted to a musical symbol, e.g. @code{\\musicglyph #\"accidentals.0\"} will select the natural sign from the music font. @@ -869,6 +885,7 @@ (Text_interface::interpret_markup layout props (number->markletter-string number->mark-alphabet-vector num))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; the note command. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -957,6 +974,7 @@ (let ((parsed (parse-simple-duration duration))) (note-by-number-markup layout props (car parsed) (cadr parsed) dir))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; translating. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1074,7 +1092,7 @@ (interpret-markup layout props arg) (* -0.5 (chain-assoc-get 'baseline-skip props)) Y)) - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; brackets. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _______________________________________________ Lilypond-cvs mailing list Lilypond-cvs@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-cvs