diff options
Diffstat (limited to 'include/bzr.h')
-rw-r--r-- | include/bzr.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/include/bzr.h b/include/bzr.h new file mode 100644 index 0000000..2f267c9 --- /dev/null +++ b/include/bzr.h @@ -0,0 +1,134 @@ +/* bzr.h: manipulate Bezier-format font files. See ../bzr/README + + + for the precise definition of the file 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 BZR_H +#define BZR_H + +#include <kpathsea/types.h> + +#include "bounding-box.h" +#include "font.h" +#include "spline.h" + + +/* At most one output (and one input) file can be open at a time; + calling either of these routines twice, with no intervening call to + close the file, results in a fatal error. */ +extern boolean bzr_open_output_file (string filename); +extern boolean bzr_open_input_file (string filename); + +/* If no output (or input) file is open, a fatal error results. */ +extern void bzr_close_output_file (void); +extern void bzr_close_input_file (void); + +/* Fontwide information at the beginning of the file. */ +typedef struct +{ + string comment; + real design_size; +} bzr_preamble_type; + +/* The comment usually identifies the creator of the file, but it need + not be anything in particular. */ +#define BZR_COMMENT(p) ((p).comment) + +/* The design size is given in points (72.27pt=1in). */ +#define BZR_DESIGN_SIZE(p) ((p).design_size) + + +/* You should write the preamble before writing anything els. */ +extern void bzr_put_preamble (bzr_preamble_type); + +/* You should be positioned at the beginning of the file (e.g., have + just opened it) before calling this. Furthermore, you should call + this routine before calling any of the other input routines. + (Because this is what reads the design size of the font, and other + values in the file are scaled by that.) */ +extern bzr_preamble_type bzr_get_preamble (void); + +/* Character information. */ + +typedef struct +{ + charcode_type code; + real set_width; + real_bounding_box_type bb; + spline_list_array_type shape; +} bzr_char_type; + + +/* The character code is always in the range 0 to 255. You can use the + `CHARCODE' macro to access it. */ + +/* The set width is given in points. You can use the `CHAR_SET_WIDTH' + macro to access it. */ + +/* The character bounding box is not guaranteed to be the tightest + possible, but it should be close. The values are in points. The + CHAR_HEIGHT, CHAR_DEPTH, CHAR_SET_WIDTH, CHAR_BB, and related macros + in `font.h' all work. */ + +/* The shape is given as a list of lists of lines and cubic splines. + Each element of the outer list represents a closed path. The values + are in points. */ +#define BZR_SHAPE(c) ((c).shape) + + +/* This routine writes the given character. */ +extern void bzr_put_char (bzr_char_type); + +/* This routine returns the next character in the file. If the postamble + is next, it returns NULL. Each spline in the `shape' element is + guaranteed to have degree `LINEAR' or `CUBIC' (see `spline.h'). */ +extern bzr_char_type *bzr_get_next_char (void); + +/* This routine returns the character with the given CODE, or NULL. + Each spline in the `shape' element is guaranteed to have degree + `LINEAR' or `CUBIC' (see `spline.h'). */ +extern bzr_char_type *bzr_get_char (one_byte code); + +/* More fontwide information, this at the end of the file. */ + +typedef struct +{ + real_bounding_box_type font_bb; + one_byte nchars; +} bzr_postamble_type; + +/* The font bounding box is guaranteed to be the tightest possible, + given the character bounding box. The values are in points. */ +#define BZR_FONT_BB(p) ((p).font_bb) + +/* The total number of characters (possibly zero) in the font. */ +#define BZR_NCHARS(p) ((p).nchars) + + +/* The postamble must be written last; the library itself determines the + font bounding box, based on the character bounding boxes, so you do + not supply it as an argument. */ +extern void bzr_put_postamble (void); + +/* And this reads the postamble back. You should be positioned at the + postamble (e.g., `bzr_get_char' should have just returned NULL) before + calling this. */ +extern bzr_postamble_type bzr_get_postamble (void); + +#endif /* not BZR_H */ |