diff options
author | Han-Wen Nienhuys <hanwen@xs4all.nl> | 2007-01-25 16:01:47 +0100 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@xs4all.nl> | 2007-01-25 16:01:47 +0100 |
commit | 9880906860b1ba94a03e1509b2c17a13e9844fa3 (patch) | |
tree | e61b409a93b2be862e85fe23ad3af4927b01fb7b | |
parent | 9a6392ad41c7cd1d811971b20b613129c65e10a6 (diff) |
use new-line-spanner for TextSpanner
-rw-r--r-- | input/regression/line-arrows.ly | 11 | ||||
-rw-r--r-- | lily/include/text-spanner.hh | 22 | ||||
-rw-r--r-- | lily/new-line-spanner.cc | 1 | ||||
-rw-r--r-- | lily/text-spanner.cc | 178 | ||||
-rw-r--r-- | python/convertrules.py | 17 | ||||
-rw-r--r-- | scm/define-grobs.scm | 15 |
6 files changed, 38 insertions, 206 deletions
diff --git a/input/regression/line-arrows.ly b/input/regression/line-arrows.ly index 201210c353..7512711cb1 100644 --- a/input/regression/line-arrows.ly +++ b/input/regression/line-arrows.ly @@ -9,12 +9,17 @@ } \relative c'' { - \override TextSpanner #'edge-text = #'("foo" . "bar") \override TextSpanner #'bound-padding = #1.0 \override TextSpanner #'dash-fraction = #'() - \override TextSpanner #'arrow = ##t + \override TextSpanner #'bound-details #'right #'arrow = ##t + \override TextSpanner #'bound-details #'left #'text = #"fof" + \override TextSpanner #'bound-details #'right #'text = #"gag" + \override TextSpanner #'bound-details #'right #'padding = #0.6 + + \override TextSpanner #'bound-details #'right #'stencil-align-dir-y = #CENTER + \override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #CENTER - \override Glissando #'arrow = ##t + \override Glissando #'bound-details #'right #'arrow = ##t \override Glissando #'arrow-length = #0.5 \override Glissando #'arrow-width = #0.25 diff --git a/lily/include/text-spanner.hh b/lily/include/text-spanner.hh deleted file mode 100644 index 3af69d6344..0000000000 --- a/lily/include/text-spanner.hh +++ /dev/null @@ -1,22 +0,0 @@ -/* - text-spanner.hh -- declare Text_spanner - - source file of the GNU LilyPond music typesetter - - (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org> -*/ - -#ifndef TEXT_SPANNER_HH -#define TEXT_SPANNER_HH - -#include "grob-interface.hh" -#include "lily-proto.hh" - -class Text_spanner -{ -public: - DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE(); -}; - -#endif /* TEXT_SPANNER_HH */ diff --git a/lily/new-line-spanner.cc b/lily/new-line-spanner.cc index 3842cb2cf6..b891750361 100644 --- a/lily/new-line-spanner.cc +++ b/lily/new-line-spanner.cc @@ -302,7 +302,6 @@ New_line_spanner::print (SCM smob) if (stencils[d]) span_points[d] += dz_dir * (stencils[d]->extent (X_AXIS)[-d] / dz_dir[X_AXIS]); - span_points[d] += -d * gaps[d] * dz.direction (); } diff --git a/lily/text-spanner.cc b/lily/text-spanner.cc deleted file mode 100644 index e98ae0f7df..0000000000 --- a/lily/text-spanner.cc +++ /dev/null @@ -1,178 +0,0 @@ -/* - text-spanner.cc -- implement Text_spanner - - source file of the GNU LilyPond music typesetter - - (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org> - - Revised over good by Han-Wen. -*/ - -#include "text-spanner.hh" - -#include "text-interface.hh" -#include "line-spanner.hh" -#include "spanner.hh" -#include "font-interface.hh" -#include "dimensions.hh" -#include "output-def.hh" -#include "warn.hh" -#include "paper-column.hh" -#include "staff-symbol-referencer.hh" - -/* - TODO: - - vertical start / vertical end (fixme-name) | - - contination types (vert. star, vert. end) |-> eat volta-bracket - - more styles - - more texts/positions -*/ - -MAKE_SCHEME_CALLBACK (Text_spanner, print, 1); - -/* - TODO: this function is too long -*/ -SCM -Text_spanner::print (SCM smob) -{ - Grob *me = unsmob_grob (smob); - Spanner *spanner = dynamic_cast<Spanner *> (me); - - /* Ugh, must be same as Hairpin::print. */ - - Grob *common = spanner->get_bound (LEFT)->common_refpoint (spanner->get_bound (RIGHT), X_AXIS); - Output_def *layout = me->layout (); - - SCM flare = me->get_property ("bracket-flare"); - SCM shorten = me->get_property ("shorten-pair"); - - Interval span_points; - Drul_array<bool> broken; - Direction d = LEFT; - do - { - Item *b = spanner->get_bound (d); - broken[d] = b->break_status_dir () != CENTER; - - if (broken[d]) - { - if (d == LEFT) - span_points[d] = spanner->get_broken_left_end_align (); - else - span_points[d] = b->relative_coordinate (common, X_AXIS); - } - else - { - Real encl = robust_scm2double (me->get_property ("enclose-bounds"), 0.0); - Interval ext = b->extent (common, X_AXIS); - - span_points[d] - = robust_relative_extent (b, common, X_AXIS).linear_combination (d * encl); - - if (is_number_pair (shorten)) - span_points -= d * scm_to_double (index_get_cell (shorten, d)); - } - - if (is_number_pair (flare)) - span_points -= d * scm_to_double (index_get_cell (flare, d)); - } - while (flip (&d) != LEFT); - - SCM properties = Font_interface::text_font_alist_chain (me); - SCM edge_text = me->get_property ("edge-text"); - Drul_array<Stencil> edge; - if (scm_is_pair (edge_text)) - { - Direction d = LEFT; - do - { - if (broken[d]) - continue; - - SCM text = index_get_cell (edge_text, d); - - 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); - } - while (flip (&d) != LEFT); - } - - Drul_array<Real> edge_height = robust_scm2interval (me->get_property ("edge-height"), - Interval (0.0, 0.0)); - Drul_array<Stencil> edge_line; - { - Direction d = LEFT; - int dir = to_dir (me->get_property ("direction")); - do - { - if (broken[d]) - continue; - - Real dx = 0.0; - if (is_number_pair (flare)) - dx = scm_to_double (index_get_cell (flare, d)) * d; - - Real dy = -dir * edge_height[d]; - if (dy) - edge_line[d] = Line_spanner::line_stencil (me, Offset (0, 0), Offset (dx, dy)); - } - while (flip (&d) != LEFT); - } - - Stencil m; - do - { - Interval ext = edge[d].extent (X_AXIS); - if (!ext.is_empty ()) - { - Real pad = robust_scm2double (me->get_property ("bound-padding"), 0.0); - edge[d].translate_axis (span_points[d], X_AXIS); - m.add_stencil (edge[d]); - span_points[d] += -d * (ext[-d] + pad); - } - } - while (flip (&d) != LEFT); - - do - { - if (d * span_points[d] > d * edge[-d].extent (X_AXIS)[d]) - { - edge_line[d].translate_axis (span_points[d], X_AXIS); - m.add_stencil (edge_line[d]); - } - } - while (flip (&d) != LEFT); - - - if (!span_points.is_empty () - && span_points.length () > robust_scm2double (me->get_property ("dash-period"), 0.0)) - { - Stencil l = Line_spanner::line_stencil (me, - Offset (span_points[LEFT], 0), - Offset (span_points[RIGHT], 0)); - m.add_stencil (l); - } - m.translate_axis (- me->relative_coordinate (common, X_AXIS), X_AXIS); - return m.smobbed_copy (); -} - -ADD_INTERFACE (Text_spanner, - - "generic text spanner", - - "bound-padding " - "bracket-flare " - "dash-fraction " - "dash-period " - "edge-height " - "edge-text " - "enclose-bounds " - "shorten-pair " - "style " - "thickness " - ); - diff --git a/python/convertrules.py b/python/convertrules.py index 06f572e204..71dbd10d42 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -2952,3 +2952,20 @@ def conv (str): return str conversions.append (((2, 11, 11), conv, """layout-set-staff-size -> layout-set-absolute-staff-size""")) + + +def conv (str): + str = re.sub (r"\\override\s*([a-zA-Z.]+)\s*#'arrow\s*=\s*##t", + r"\\override \1 #'bound-details #'right #'arrow = ##t", + str) + + if re.search ('edge-text', str): + error_file.write (NOT_SMART % "edge-text settings for TextSpanner.") + error_file.write ("Use\n\n" + "\t\\override TextSpanner #'bound-details #'right #'text = <right-text>\n" + "\t\\override TextSpanner #'bound-details #'left #'text = <left-text>\n") + + + return str + +conversions.append (((2, 11, 13), conv, """#'arrow = ##t -> #'bound-details #'right #'arrow = ##t""")) diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 9cdab41324..bb10ff6308 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1677,7 +1677,6 @@ (meta . ((class . Item) (interfaces . (piano-pedal-interface text-spanner-interface - line-spanner-interface text-interface self-alignment-interface piano-pedal-script-interface @@ -1812,7 +1811,6 @@ (TextSpanner . ( - (stencil . ,ly:text-spanner::print) (Y-offset . ,ly:side-position-interface::y-aligned-side) (font-shape . italic) (style . dashed-line) @@ -1822,6 +1820,19 @@ (side-axis . ,Y) (direction . ,UP) (outside-staff-priority . 350) + + (left-bound-info . ,ly:new-line-spanner::calc-left-bound-info) + (right-bound-info . ,ly:new-line-spanner::calc-right-bound-info) + (bound-details . ((left . ((Y . 0) + (padding . 0.25) + (attach-dir . ,LEFT) + )) + (right . ((Y . 0) + (padding . 0.25) + )) + )) + (stencil . ,ly:new-line-spanner::print) + (meta . ((class . Spanner) (interfaces . (text-spanner-interface line-spanner-interface |