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
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs