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

Reply via email to