]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/afm-reader.cc
release: 1.3.23
[lilypond.git] / lily / afm-reader.cc
index ce69ff0c9b17a25a5988938d4bcedf8cd1d7ba3d..8b137891791fe96927ad78e64b0aad7bded08bdc 100644 (file)
@@ -1,170 +1 @@
-/*   
-  afm-reader.cc --  implement Adobe_font_metric_file
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#include "direction.hh"
-#include "afm.hh"
-#include "data-file.hh"
-#include "string-convert.hh"
-#include <ctype.h>
-
-
-Box
-parse_box (Array<String> a)
-{
-  Box b;
-  int i=0;
-  b[X_AXIS][SMALLER] = a[i++].value_f ();  
-  b[Y_AXIS][SMALLER] = a[i++].value_f ();
-  b[X_AXIS][BIGGER] = a[i++].value_f ();
-  b[Y_AXIS][BIGGER] = a[i++].value_f ();
-  return b;
-}
-
-String
-strip_leading_white (String c)
-{
-  int i=0;
-  while (isspace(c[i]))
-    i++;
-  c = c.cut_str (i, INT_MAX);
-  return c;
-}
-
-Adobe_font_char_metric
-read_char_metric (String s, int size)
-{
-  Adobe_font_char_metric char_metric;
-  char_metric.size_ = size;
-  Array<String> a= String_convert::split_arr (s, ';');
-  for (int i=0; i < a.size (); i++)
-    {
-      String c = strip_leading_white (a[i]);
-
-      Array<String> b = String_convert::split_arr (c, ' ');
-      if (b[0] == "C")
-       char_metric.C_ = b[1].value_i ();
-      else if (b[0] == "WX")
-       char_metric.WX_ = b[1].value_f ();
-      else if (b[0] == "N")
-       char_metric.N_ = strip_leading_white (b[1]);
-      else if (b[0] == "B")
-       char_metric.B_ = parse_box (b.slice (1, b.size()));
-    }
-  return char_metric;
-}
-
-void
-Adobe_font_metric::read_char_metrics (Data_file &input, int size)
-{
-  while (!input.eof_b ())
-    {
-      input.gobble_leading_white ();
-      String s= input.get_line ();
-      if (s == "EndCharMetrics")
-       return ;
-      Adobe_font_char_metric afm_char =read_char_metric (s, size);
-      char_metrics_.push (afm_char);
-      int i = char_metrics_.size ()-1;
-      ascii_to_metric_idx_ [afm_char.C_] = i;
-      name_to_metric_dict_ [afm_char.N_] = i;
-    }
-}
-
-#define READSTRING(k)  if (key == #k) { \
-  afm.k ## _ = input.get_line (); continue; }
-#define READBOX(b) if (key == #b) { \
-  afm.b ## _ = read_box (input); continue; }
-#define READREAL(r) if (key == #r) { \
-  afm.r ## _ = read_real (input); continue; }
-
-Real
-read_real(Data_file &d)
-{
-  String s = d.get_word ();
-  d.gobble_white ();
-  return s.value_f ();
-}
-
-
-Box
-read_box ( Data_file &d)
-{
-  Box b;
-  b[X_AXIS][SMALLER] = read_real (d);  
-  b[Y_AXIS][SMALLER] = read_real (d);
-  b[X_AXIS][BIGGER] = read_real (d);
-  b[Y_AXIS][BIGGER] = read_real (d);
-  return b;
-}
-
-Adobe_font_metric
-read_afm_file (String fn)
-{
-  Data_file input (fn);
-
-  assert (!input.eof_b ());
-  
-  int i = fn.index_i(".afm");
-  for (; i>0 && isdigit(fn[--i]); )
-    {}
-  int font_size = String_convert::dec2_i(fn.cut_str(i+1,INT_MAX));
-
-  Adobe_font_metric afm;
-
-  for (i=0; i < 256; i++)
-    {
-      afm.ascii_to_metric_idx_.push (-1);
-    }
-
-  while (!input.eof_b ())
-    {
-      input.gobble_leading_white ();
-      String w = input.get_word ();
-      if (w == "StartFontMetrics")
-       break;
-      input.get_line ();
-    }
-  
-  while (!input.eof_b ())
-    {
-      input.gobble_leading_white ();
-      String key = input.get_word ();
-      if (key == "Comment")
-       continue;
-
-      READSTRING(FontName);
-      READSTRING(FullName);
-      READSTRING(FamilyName);
-      READSTRING(Weight);
-      READSTRING(Version);
-      READSTRING(Notice);
-      READSTRING(EncodingScheme);
-      READREAL(ItalicAngle);
-      READREAL(UnderlineThickness);
-      READREAL(UnderlinePosition);
-      READBOX(FontBBox);
-      if (key == "StartCharMetrics")
-       {
-         input.get_line ();
-         afm.read_char_metrics (input, font_size);
-       }
-      if (key == "EndFontMetrics")
-       break;
-
-    }
-
-  /*
-    read to EOF
-  */
-  input.gulp ();
-  return afm;
-}
-