summaryrefslogtreecommitdiff
path: root/console/bdf.h
diff options
context:
space:
mode:
Diffstat (limited to 'console/bdf.h')
-rw-r--r--console/bdf.h272
1 files changed, 272 insertions, 0 deletions
diff --git a/console/bdf.h b/console/bdf.h
new file mode 100644
index 00000000..968c9f59
--- /dev/null
+++ b/console/bdf.h
@@ -0,0 +1,272 @@
+/* bdf.h - Interface to Adobe Glyph Bitmap Distribution Format (BDF) parser.
+ Copyright (C) 2002 Free Software Foundation, Inc.
+ Written by Marcus Brinkmann <marcus@gnu.org>.
+
+ This file is part of the GNU Hurd.
+
+ The GNU Hurd 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.
+
+ The GNU Hurd 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
+
+#ifndef _BDF_H_
+#define _BDF_H_
+
+#include <stdio.h>
+
+/* Version 2.2 of the Glyph Bitmap Distribution Format Specification
+ was released by Adobe 22 March 1993 and is a superset of version 2.1.
+
+ The format of a BDF file is a human-readable ASCII text file.
+ Every line consists of a keyword, which may be followed by one or
+ more arguments. The specification is vague about the exact data
+ types of the arguments, so we treat a string as an 8-bit string
+ which must not contain a binary null, and a number like an integer
+ as an int. Leading and trailing white space are removed, multiple
+ spaces that seperate arguments are replaced by a single white
+ space, and empty lines are ignored. */
+
+
+/* Possible error values returned by the BDF functions. */
+typedef enum
+{
+ /* No error occured. This is guaranteed to be zero. */
+ BDF_NO_ERROR = 0,
+
+ /* A system error occured. The caller should consult errno. */
+ BDF_SYSTEM_ERROR,
+
+ /* All following errors indicate that the file is not a valid BDF
+ file. */
+ BDF_SYNTAX_ERROR,
+
+ /* An argument is out of range or of an invalid type. */
+ BDF_INVALID_ARGUMENT,
+
+ /* The number of properties, glyphs or bitmap lines is
+ incorrect. */
+ BDF_COUNT_MISMATCH
+} bdf_error_t;
+
+/* Return a statically allocated string describing the error value ERR. */
+const char *bdf_strerror (bdf_error_t err);
+
+
+/* A property in the BDF font file is an unspecified KEYWORD VALUE
+ pair in a line after STARTPROPERTIES and before ENDPROPERTIES.
+ VALUE can be an integer or a string in double quotes (two
+ consecutives double quotes can be used to include a double quote in
+ the string. */
+struct bdf_property
+{
+ /* The property name. */
+ char *name;
+
+ /* The type indicates which member of the union is valid. */
+ enum { BDF_PROPERTY_NUMBER, BDF_PROPERTY_STRING } type;
+ union
+ {
+ int number;
+ char *string;
+ } value;
+};
+typedef struct property *bdf_property_t;
+
+/* The bounding box of a font or a glyph within. */
+struct bdf_bbox
+{
+ int width;
+ int height;
+ int offx;
+ int offy;
+};
+
+/* A vector, used for displacement and resolution. */
+struct bdf_vector
+{
+ int x;
+ int y;
+};
+
+/* A single glyph in the font. */
+struct bdf_glyph
+{
+ /* The name of the glyph. */
+ char *name;
+
+ /* The Adode Standard Encoding of the glyph, or -1 if not
+ available. */
+ int encoding;
+
+ /* If encoding is -1, internal_encoding contains the internal
+ encoding of the glyph. The internal encoding is private to the
+ font and the application. */
+ int internal_encoding;
+
+ /* The bounding box of the glyph. The width of the bounding box,
+ divided by 8 (rounding up), specifies how many bytes are used in
+ the bitmap for each row of the glyph. The height specifies the
+ number of rows. */
+ struct bdf_bbox bbox;
+
+ /* The bitmap of the glyph, row-by-row from top to bottom, and
+ byte-by-byte within a row from left to right. Within a byte, the
+ most significant bit is left in the glyph. */
+ unsigned char *bitmap;
+
+ /* If the writing direction is horizontal, SWIDTH and DWIDTH are
+ relevant. If the writing direction is vertical, SWIDTH1, DWIDTH1
+ and VVECTOR are relevant. Relevant values have to be specified
+ here, or font-wide in the global section. A global value can be
+ overridden for individual glyphs. */
+ int has_swidth : 1;
+ int has_dwidth : 1;
+ int has_swidth1 : 1;
+ int has_dwidth1 : 1;
+ int has_vvector : 1;
+ struct bdf_vector swidth;
+ struct bdf_vector dwidth;
+ struct bdf_vector swidth1;
+ struct bdf_vector dwidth1;
+ struct bdf_vector vvector;
+};
+
+/* A font is a set of glyphs with some font-wide attributes. */
+struct bdf_font
+{
+ /* The version of the font format. Should be 2.1 or 2.2. It is
+ split up into major and minor component to make precise
+ comparison possible. */
+ int version_maj;
+ int version_min;
+
+ /* The font name. */
+ char *name;
+
+ /* The content version, if available. The content version indicates
+ the revision of the appearance of the glyphs within the font. */
+ int has_content_version : 1;
+ int content_version;
+
+ /* The point size of the font in device pixels. */
+ int point_size;
+
+ /* The resolution of the display the font is intended for (dpi).
+ This is needed if you want to scale the glyphs for a different
+ device than they were intended for. */
+ int res_x;
+ int res_y;
+
+ /* The global bounding box parameters. */
+ struct bdf_bbox bbox;
+
+ int __properties_allocated;
+ int properties_count;
+ struct bdf_property *properties;
+ int __glyphs_allocated;
+ int glyphs_count;
+ struct bdf_glyph *glyphs;
+
+ /* The metricsset. If 0, the font has a horizontal writing
+ direction. If 1, the font has a vertical writing direction. If
+ 2, the font has a mixed writing direction. */
+ int metricsset;
+
+ /* The following have the same meaning as the corresponding members
+ in the glyph structure and specify a font wide default which must
+ be used if the glyph does not provide its own values. */
+ int has_swidth : 1;
+ int has_dwidth : 1;
+ int has_swidth1 : 1;
+ int has_dwidth1 : 1;
+ int has_vvector : 1;
+ struct bdf_vector swidth;
+ struct bdf_vector dwidth;
+ struct bdf_vector swidth1;
+ struct bdf_vector dwidth1;
+ struct bdf_vector vvector;
+};
+typedef struct bdf_font *bdf_font_t;
+
+
+/* Read the font from stream FILE, and return it in FONT. If
+ LINECOUNT is not zero, it will contain the number of lines in the
+ file at success, and the current line an error occured at
+ failure. */
+bdf_error_t bdf_read (FILE *file, bdf_font_t *font, int *linecount);
+
+/* Destroy the BDF font object and release all associated
+ resources. */
+void bdf_destroy (bdf_font_t font);
+
+/* Create a new font object with the specified mandatory
+ parameters. */
+bdf_error_t bdf_new (bdf_font_t *font, int version_maj, int version_min,
+ const char *name, int point_size, int res_x, int res_y,
+ int bbox_width, int bbox_height, int bbox_offx,
+ int bbox_offy, int metricsset);
+
+/* Set the SWIDTH of the glyph GLYPH in font FONT to X and Y. If
+ glyph is negativ, the default for the font will be set. */
+bdf_error_t bdf_set_swidth (bdf_font_t font, int glyph, int x, int y);
+
+/* Set the DWIDTH of the glyph GLYPH in font FONT to X and Y. If
+ glyph is negativ, the default for the font will be set. */
+bdf_error_t bdf_set_dwidth (bdf_font_t font, int glyph, int x, int y);
+
+/* Set the SWIDTH1 of the glyph GLYPH in font FONT to X and Y. If
+ glyph is negativ, the default for the font will be set. */
+bdf_error_t bdf_set_swidth1 (bdf_font_t font, int glyph, int x, int y);
+
+/* Set the DWIDTH1 of the glyph GLYPH in font FONT to X and Y. If
+ glyph is negativ, the default for the font will be set. */
+bdf_error_t bdf_set_dwidth1 (bdf_font_t font, int glyph, int x, int y);
+
+/* Set the VVECTOR of the glyph GLYPH in font FONT to X and Y. If
+ glyph is negativ, the default for the font will be set. */
+bdf_error_t bdf_set_vvector (bdf_font_t font, int glyph, int x, int y);
+
+/* Add a new string property to the font FONT. */
+bdf_error_t bdf_add_string_property (bdf_font_t font, const char *name,
+ const char *value);
+
+/* Add a new number property to the font FONT. */
+bdf_error_t bdf_add_number_property (bdf_font_t font, const char *name,
+ int value);
+
+/* Add a new glyph with the specified paramters to the font FONT. If
+ encoding is -1, internal_encoding specifies the internal
+ encoding. All other parameters are mandatory. */
+bdf_error_t bdf_add_glyph (bdf_font_t font, const char *name, int encoding,
+ int internal_encoding, int bbox_width,
+ int bbox_height, int bbox_offx, int bbox_offy,
+ const unsigned char *bitmap);
+
+/* Write the font FONT in BDF format to stream FILEP. */
+bdf_error_t bdf_write (FILE *filep, bdf_font_t font);
+
+/* The function returns -1 if the encoding of glyph A is lower than
+ the encoding of glyph B, 1 if it is the other way round, and 0 if
+ the encoding of both glyphs is the same. */
+int bdf_compare_glyphs (const void *a, const void *b);
+
+/* Sort the glyphs in the font FONT. This must be called before using
+ bdf_find_glyphs, after the font has been created or after new
+ glyphs have been added to the font. */
+void bdf_sort_glyphs (bdf_font_t font);
+
+/* Find the glyph with the encoding ENC (and INTERNAL_ENC, if ENC is
+ -1) in the font FONT. Requires that the glyphs in the font are
+ sorted. */
+struct bdf_glyph *bdf_find_glyph (bdf_font_t font, int enc, int internal_enc);
+
+#endif /* _BDF_H_ */