X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftfm.cc;h=01b26efabad3f57dd6b735f0d7c085fea8313c42;hb=3fc91138b05cfdd6b8446608eb1764cad85202f8;hp=bbcfaab5b1c91c9207e44a4d2fa114aacb21a1e4;hpb=ad7defd5f5a3d0151a711555c2d680c56ef559c7;p=lilypond.git diff --git a/lily/tfm.cc b/lily/tfm.cc index bbcfaab5b1..01b26efaba 100644 --- a/lily/tfm.cc +++ b/lily/tfm.cc @@ -1,9 +1,9 @@ /* - tfm.cc -- implement Tex_font_metric + tfm.cc -- implement Tex_font_metric source file of the GNU LilyPond music typesetter - (c) 1999--2000 Jan Nieuwenhuizen + (c) 1999--2002 Jan Nieuwenhuizen some code shamelessly copied from GNU fontutils-0.6/tfm/tfm_input.c @@ -18,8 +18,15 @@ Box Tex_font_char_metric::dimensions () const { + if (!exists_b_) + { + Box b; + b.set_empty (); + return b; + } + Real d = -depth_; - return Box (Interval (0, width_),Interval ( d ? height_)); + return Box (Interval (0, width_),Interval (d ? height_)); } Tex_font_char_metric::Tex_font_char_metric () @@ -57,25 +64,41 @@ Tex_font_metric::Tex_font_metric () { } + static Tex_font_char_metric dummy_static_char_metric; Tex_font_char_metric const * Tex_font_metric::find_ascii (int ascii, bool warn) const { - if (ascii < ascii_to_metric_idx_.size() && ascii_to_metric_idx_[ascii] >= 0) + if (ascii < ascii_to_metric_idx_.size () && ascii_to_metric_idx_[ascii] >= 0) return & char_metrics_[ascii_to_metric_idx_ [ascii]]; else if (warn) - { - warning (_f ("Can't find ascii character: `%d'", ascii)); + warning (_f ("can't find ascii character: %d", ascii)); } return &dummy_static_char_metric; } + +/* + UGH: glyphs need not be consecutive in TFM. + */ +int +Tex_font_metric::count () const +{ + for (int i = ascii_to_metric_idx_.size (); i--;) + { + if (ascii_to_metric_idx_[i] != -1) + return i + 1; + } + return 0; +} + Box -Tex_font_metric::get_char (int a, bool w) const +Tex_font_metric::get_char (int a) const { - return find_ascii (a, w)->dimensions (); + Box b = find_ascii (a)->dimensions () ; + return b; } @@ -89,11 +112,19 @@ Tex_font_metric::str () const return outstr; } -void -Tex_font_metric::clear (int n) -{ - for (int i=0; i < n; i++) - ascii_to_metric_idx_.push (-1); -} + +SCM +Tex_font_metric::make_tfm (String fn) +{ + Tex_font_metric * tfm_p = new Tex_font_metric; + Tex_font_metric_reader reader (fn); + + tfm_p->info_ = reader.info_; + tfm_p->header_ = reader.header_; + tfm_p->char_metrics_ = reader.char_metrics_; + tfm_p->ascii_to_metric_idx_ = reader.ascii_to_metric_idx_; + + return tfm_p->self_scm (); +}