home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / groff / libgroff / font.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-30  |  3.1 KB  |  111 lines

  1. // -*- C++ -*-
  2. /* Copyright (C) 1989, 1990 Free Software Foundation, Inc.
  3.      Written by James Clark (jjc@jclark.uucp)
  4.  
  5. This file is part of groff.
  6.  
  7. groff is free software; you can redistribute it and/or modify it under
  8. the terms of the GNU General Public License as published by the Free
  9. Software Foundation; either version 1, or (at your option) any later
  10. version.
  11.  
  12. groff is distributed in the hope that it will be useful, but WITHOUT ANY
  13. WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15. for more details.
  16.  
  17. You should have received a copy of the GNU General Public License along
  18. with groff; see the file LICENSE.  If not, write to the Free Software
  19. Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  20.  
  21.  
  22. struct font_kern_list;
  23. struct font_char_metric;
  24.  
  25. class font {
  26. public:
  27.   enum {
  28.     LIG_ff = 1,
  29.     LIG_fi = 2,
  30.     LIG_fl = 4,
  31.     LIG_ffi = 8,
  32.     LIG_ffl = 16
  33.     };
  34.  
  35.   virtual ~font();
  36.   int contains(int index);
  37.   int is_special();
  38.   int get_width(int index, int point_size);
  39.   int get_height(int index, int point_size);
  40.   int get_depth(int index, int point_size);
  41.   int get_space_width(int point_size);
  42.   int get_character_type(int index);
  43.   int get_kern(int index1, int index2, int point_size);
  44.   int get_skew(int index, int point_size, int slant);
  45.   int has_ligature(int);
  46.   int get_italic_correction(int index, int point_size);
  47.   int get_left_italic_correction(int index, int point_size);
  48.   int get_subscript_correction(int index, int point_size);
  49.   unsigned char get_code(int i);
  50.   const char *get_name();
  51.   const char *get_internal_name();
  52.  
  53.   static font *load_font(const char *);
  54.   static void command_line_font_dir(const char *path);
  55.   static void forget_command_line_font_dirs();
  56.   static void set_device_name(const char *);
  57.   static const char *get_device_name();
  58.   static FILE *open_file(const char *name, char **pathp);
  59.   static int load_desc();
  60.   static int name_to_index(const char *);
  61.   static int number_to_index(unsigned char);
  62.  
  63.   static int res;
  64.   static int hor;
  65.   static int vert;
  66.   static int unitwidth;
  67.   static int paperwidth;
  68.   static int paperlength;
  69.   static int biggestfont;
  70.   static int spare2;
  71.   static int sizescale;
  72.   static int tcommand;
  73.  
  74.   static const char **font_name_table;
  75.   static const char **style_table;
  76.   static const char *family;
  77.   static int *sizes;
  78. private:
  79.   unsigned ligatures;
  80.   font_kern_list **kern_hash_table;
  81.   int space_width;
  82.   short *ch_index;
  83.   int nindices;
  84.   font_char_metric *ch;
  85.   int ch_used;
  86.   int ch_size;
  87.   int special;
  88.   char *name;
  89.   char *internalname;
  90.   double slant;
  91.  
  92.   static char *dev_name;
  93.   static char *cl_font_dirs;
  94.  
  95.   enum { KERN_HASH_TABLE_SIZE = 503 };
  96.  
  97.   void add_entry(int index, const font_char_metric &);
  98.   void copy_entry(int new_index, int old_index);
  99.   void add_kern(int index1, int index2, int amount);
  100.   static int hash_kern(int i1, int i2);
  101.   void alloc_ch_index(int);
  102.   void extend_ch();
  103.   void compact();
  104.  
  105.   static int scale(int w, int pointsize);
  106.   virtual void handle_unknown_font_command(int argc, const char **argv);
  107. protected:
  108.   font(const char *);
  109.   int load();
  110. };
  111.