home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / fontutils-0.6-base.tgz / fontutils-0.6-base.tar / fsf / fontutils / charspace / char.h < prev    next >
C/C++ Source or Header  |  1992-06-14  |  3KB  |  83 lines

  1. /* char.h: the definition of `char_type'.
  2.  
  3. Copyright (C) 1992 Free Software Foundation, Inc.
  4.  
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2, or (at your option)
  8. any later version.
  9.  
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. #ifndef CHAR_H
  20. #define CHAR_H
  21.  
  22. #include "font.h"
  23. #include "list.h"
  24. #include "realstrval.h"
  25.  
  26. /* We want these to mean the values in our own structure.  */
  27. #undef CHAR_LSB
  28. #undef CHAR_RSB
  29.  
  30.  
  31. /* A side bearing can be defined almost like a symbol (no `char_type').  */
  32. typedef struct
  33. {
  34.   symval_tag_type tag;
  35.   real_string_val_type value;
  36. } sidebearing_type;
  37.  
  38. #define SB_TAG(sb) ((sb).tag)
  39. #define SB_VALUE(sb) ((sb).value)
  40. #define SB_REAL(sb) ((sb).value.real_val)
  41. #define SB_STRING(sb) ((sb).value.string_val)
  42.  
  43. /* The information about each character in which we're interested.  */
  44. typedef struct
  45. {
  46.   char_info_type *char_info;
  47.   tfm_char_type *tfm_info;
  48.   sidebearing_type *lsb, *rsb;
  49.   list_type kerns; /* We use `char_kern_type' for the elements.  */
  50. } char_type;
  51.  
  52.  
  53. /* The information from the bitmap font.  */
  54. #define CHAR_BITMAP_INFO(c) ((c).char_info)
  55. #define CHAR_CHARCODE(c) CHARCODE (*CHAR_BITMAP_INFO (c))
  56.  
  57. /* The information from the TFM file.  */
  58. #define CHAR_TFM_INFO(c) ((c).tfm_info)
  59.  
  60. /* Information we've collected for the sidebearings.  */
  61. #define CHAR_LSB(c) ((c).lsb)
  62. #define CHAR_LSB_TAG(c) (CHAR_LSB (c)->tag)
  63. #define CHAR_LSB_VALUE(c) (CHAR_LSB (c)->value)
  64.  
  65. #define CHAR_RSB(c) ((c).rsb)
  66. #define CHAR_RSB_TAG(c) (CHAR_RSB (c)->tag)
  67. #define CHAR_RSB_VALUE(c) (CHAR_RSB (c)->value)
  68.  
  69. #define CHAR_KERNS(c) ((c).kerns)
  70.  
  71. /* Initialize the various fields.  */
  72. extern char_type init_char (void);
  73.  
  74. /* Get the font information for CODE, and update *C_PTR_ADDR from the
  75.    symbol table and encoding vector.  */
  76. extern void do_char (charcode_type code, char_type **c_ptr_addr);
  77.  
  78. /* Looks up `designsize' in the symbol table and converts the result
  79.    back to printer's points.  */
  80. extern real get_designsize_in_points (void);
  81.  
  82. #endif /* not CHAR_H */
  83.