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>
14 #include "font-metric.hh"
17 Font_metric::text_dimension (String text) const
22 for (int i = 0; i < text.length_i (); i++)
27 for (i++; (i < text.length_i ()) && isalpha(text[i]); i++)
30 i--; // Compensate for the increment in the outer loop!
34 Character_metric const *c = get_char ((unsigned char)text[i],false);
36 // Ugh, use the width of 'x' for unknown characters
37 if (c->dimensions()[X_AXIS].length () == 0)
38 c = get_char ((unsigned char)'x',false);
40 w += c->dimensions()[X_AXIS].length ();
41 ydims.unite (c->dimensions()[Y_AXIS]);
45 ydims = Interval (0,0);
47 return Box(Interval (0, w), ydims);
52 Scaled_font_metric::text_dimension (String t) const
54 Real realmag = pow (1.2, magstep_i_);
55 Box b (orig_l_->text_dimension (t));
57 return Box(b[X_AXIS]* realmag, b[Y_AXIS]*realmag);
62 Character_metric::dimensions () const
64 return Box(Interval(0,0), Interval(0,0));
67 Font_metric::~Font_metric ()
72 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 (ly_symbol2scm (name_str_.ch_C()), 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)
126 Font_metric::print_smob (SCM s, SCM port, scm_print_state * )
128 scm_puts ("#<Font_metric>", port);