2 font-metric.cc -- implement Font_metric
4 source file of the GNU LilyPond music typesetter
6 (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
13 #include "font-metric.hh"
16 Font_metric::text_dimension (String text) const
21 for (int i = 0; i < text.length_i (); i++)
26 for (i++; (i < text.length_i ()) && isalpha(text[i]); i++)
29 i--; // Compensate for the increment in the outer loop!
33 Character_metric const *c = get_char ((unsigned char)text[i],false);
35 // Ugh, use the width of 'x' for unknown characters
36 if (c->dimensions()[X_AXIS].length () == 0)
37 c = get_char ((unsigned char)'x',false);
39 w += c->dimensions()[X_AXIS].length ();
40 ydims.unite (c->dimensions()[Y_AXIS]);
44 ydims = Interval (0,0);
46 return Box(Interval (0, w), ydims);
51 Scaled_font_metric::text_dimension (String t) const
53 Real realmag = pow (1.2, magstep_i_);
54 Box b (orig_l_->text_dimension (t));
56 return Box(b[X_AXIS]* realmag, b[Y_AXIS]*realmag);
61 Character_metric::dimensions () const
63 return Box(Interval(0,0), Interval(0,0));
66 Font_metric::~Font_metric ()
71 Font_metric::Font_metric ()
78 Font_metric::Font_metric (Font_metric const &)
82 Character_metric::~Character_metric()
86 Character_metric const *
87 Font_metric::get_char (int, bool)const
92 Scaled_font_metric::Scaled_font_metric (Font_metric* m, int s)
99 Font_metric::description () const
101 return gh_cons (name_, gh_int2scm (0));
106 Scaled_font_metric::description () const
108 SCM od = orig_l_->description ();
109 gh_set_cdr_x (od, gh_int2scm (magstep_i_));
115 Font_metric::do_smobify_self ()
120 Font_metric::mark_smob (SCM s)
122 Font_metric * m = SMOB_TO_TYPE(Font_metric, s);
127 Font_metric::print_smob (SCM s, SCM port, scm_print_state * )
129 Font_metric *m = unsmob_metrics (s);
130 scm_puts ("#<Font_metric ", port);
131 scm_display (m->name_, port);
132 scm_puts (">", port);
137 unsmob_metrics( SCM s)
139 if (SMOB_IS_TYPE_B(Font_metric, s))
140 return SMOB_TO_TYPE(Font_metric, s);