summaryrefslogtreecommitdiff
path: root/include/bzr.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/bzr.h')
-rw-r--r--include/bzr.h134
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 */