aboutsummaryrefslogtreecommitdiffstats
path: root/libparsepcf.h
diff options
context:
space:
mode:
Diffstat (limited to 'libparsepcf.h')
-rw-r--r--libparsepcf.h78
1 files changed, 74 insertions, 4 deletions
diff --git a/libparsepcf.h b/libparsepcf.h
index b3731d6..6931898 100644
--- a/libparsepcf.h
+++ b/libparsepcf.h
@@ -9,10 +9,47 @@
/* Based on documentation from FontForge: https://fontforge.org/docs/techref/pcf-format.html */
+
+/**
+ * Table metadata
+ */
struct libparsepcf_table {
+ /**
+ * The table type, support values are:
+ * - LIBPARSEPCF_PROPERTIES
+ * - LIBPARSEPCF_ACCELERATORS
+ * - LIBPARSEPCF_METRICS
+ * - LIBPARSEPCF_BITMAPS
+ * - LIBPARSEPCF_INK_METRICS
+ * - LIBPARSEPCF_BDF_ENCODINGS
+ * - LIBPARSEPCF_SWIDTHS
+ * - LIBPARSEPCF_GLYPH_NAMES
+ * - LIBPARSEPCF_BDF_ACCELERATORS
+ *
+ * (The set in these values are non-overlapping,
+ * however they cannot be combined.)
+ */
uint32_t type;
+
+ /**
+ * How the data in the table is formatted
+ *
+ * This is only unsed internally, and supported
+ * values are not exposed the the user
+ */
uint32_t format;
+
+ /**
+ * The size of the table
+ */
uint32_t size;
+
+ /**
+ * The table's offset in the file
+ *
+ * (The file is padded with NUL bytes to align
+ * each table to a 4 byte boundary)
+ */
uint32_t offset;
};
@@ -27,10 +64,37 @@ struct libparsepcf_table {
#define LIBPARSEPCF_GLYPH_NAMES (UINT32_C(1) << 7)
#define LIBPARSEPCF_BDF_ACCELERATORS (UINT32_C(1) << 8)
-int libparsepcf_get_table_count(const char *, size_t, size_t *countp);
-int libparsepcf_get_tables(const char *, size_t, struct libparsepcf_table *tables, size_t first, size_t count);
-
-
+/**
+ * Get the number of tables in the file
+ *
+ * @param file The file content
+ * @param size The file size
+ * @param countp Output parameter for the number of tables in the file
+ * @return 0 on success, -1 on failure
+ *
+ * @throws EBFONT The file is not a properly formatted PCF file
+ */
+int libparsepcf_get_table_count(const char *, size_t, size_t *);
+
+/**
+ * Get table metadata from the file
+ *
+ * @param file The file content
+ * @param size The file size
+ * @param tables Output buffer for the table metadata
+ * @param first The index of the first table to store in `tables`,
+ * the first table in the file has the index 0
+ * @param count The number of tables to store in `tables`;
+ * may not return the number of tables as retrieved
+ * by `libparsepcf_get_table_count`
+ * @return 0 on success, -1 on failure
+ *
+ * @throws EBFONT The file is not a properly formatted PCF file
+ */
+int libparsepcf_get_tables(const char *, size_t, struct libparsepcf_table *, size_t, size_t);
+
+
+
struct libparsepcf_properties {
size_t property_count;
@@ -57,6 +121,7 @@ int libparsepcf_get_property_subtable(const char *, size_t,
struct libparsepcf_property_subtable *, size_t, size_t);
+
struct libparsepcf_metrics {
int16_t left_side_bearing;
@@ -74,6 +139,7 @@ int libparsepcf_get_metrics(const char *, size_t,
struct libparsepcf_metrics *, size_t, size_t);
+
struct libparsepcf_glyph_names {
size_t glyph_count;
@@ -91,6 +157,7 @@ int libparsepcf_get_glyph_name_subtable(const char *, size_t,
const char **, size_t, size_t);
+
struct libparsepcf_bitmaps {
size_t glyph_count;
@@ -112,6 +179,7 @@ int libparsepcf_get_bitmap_offsets(const char *, size_t,
size_t *, size_t, size_t);
+
struct libparsepcf_encoding {
uint16_t min_byte2;
@@ -146,6 +214,7 @@ int libparsepcf_get_glyph_indices(const char *, size_t,
size_t *, size_t, size_t);
+
struct libparsepcf_accelerators {
/**
@@ -195,6 +264,7 @@ int libparsepcf_get_swidth_count(const char *, size_t, const struct libparsepcf_
int libparsepcf_get_swidths(const char *, size_t, const struct libparsepcf_table *, int32_t *, size_t, size_t);
+
struct libparsepcf_font {
const struct libparsepcf_table *prob_table;