diff options
Diffstat (limited to 'include/pk.h')
-rw-r--r-- | include/pk.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/include/pk.h b/include/pk.h new file mode 100644 index 0000000..1e7fd8b --- /dev/null +++ b/include/pk.h @@ -0,0 +1,95 @@ +/* pk.h: manipulate packed format font files. See the PKtype source + code (by Tomas Rokicki), among other places, for the precise + definition of this bitmap format. + +Copyright (C) 1992 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef PACKED_FONT_LIBRARY_H +#define PACKED_FONT_LIBRARY_H + +#include "bounding-box.h" +#include "font.h" +#include <kpathsea/types.h> + + + +/* Prepare and finish off FONT_NAME for reading. */ +extern boolean pk_open_input_file (string font_name); +extern void pk_close_input_file (string font_name); + +/* The global information about the PK file is given in the preamble. */ +typedef struct +{ + string comment; + fix_word design_size; + unsigned checksum; + double h_resolution, v_resolution; +} pk_preamble_type; + +/* This usually indicates the source of the PK file. */ +#define PK_COMMENT(p) ((p).comment) + +/* The font's design size is in TeX points, expressed as a fix_word. */ +#define PK_DESIGN_SIZE(p) ((p).design_size) + +/* The PK checksum should match the checksums in the TFM file and/or the + GF file, if they exist. */ +#define PK_CHECKSUM(p) ((p).checksum) + +/* We express the resolutions in pixels per point multiplied by 2^16. */ +#define PK_H_RESOLUTION(p) ((p).h_resolution) +#define PK_V_RESOLUTION(p) ((p).v_resolution) + +/* Return the above structure for the font FONT_NAME. */ +extern pk_preamble_type pk_get_preamble (string font_name); + + + +/* The characters comprise the bulk of the file. */ +typedef struct +{ + one_byte code; + fix_word tfm_width; + signed_4_bytes h_escapement; + bounding_box_type bb; + bitmap_type bitmap; +} pk_char_type; + +/* The library guarantees that the character code is in the range 0 to + 255 (although the PK format does not require that). */ +#define PK_CHARCODE(c) ((c).code) + +/* The TFM width is the character's true width divided by the design + size (expressed as a fix_word). */ +#define PK_TFM_WIDTH(c) ((c).tfm_width) + +/* The horizontal escapement (i.e., set width) is in pixels. */ +#define PK_H_ESCAPEMENT(c) ((c).h_escapement) + +/* The bounding box is guaranteed to be the tightest possible. */ +#define PK_CHAR_BB(c) ((c).bb) + +/* The bits themselves. See `bitmap.h'. */ +#define PK_BITMAP(c) ((c).bitmap) + + +/* Allocate and return a pointer to the above structure for the + character CODE in the font FONT_NAME, or NULL if that character is + not in that font. */ +extern pk_char_type *pk_get_char (one_byte code, string font_name); + +#endif /* not PACKED_FONT_LIBRARY_H */ |