summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'base/gsccode.h')
-rw-r--r--base/gsccode.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/base/gsccode.h b/base/gsccode.h
new file mode 100644
index 00000000..56a2baf1
--- /dev/null
+++ b/base/gsccode.h
@@ -0,0 +1,139 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* Types for character codes */
+
+#ifndef gsccode_INCLUDED
+# define gsccode_INCLUDED
+
+#include "std.h"
+#include "gstypes.h"
+
+/*
+ * Define a character code. Normally this is just a single byte from a
+ * string, but because of composite fonts, character codes must be
+ * at least 32 bits.
+ */
+typedef ulong gs_char;
+
+#define GS_NO_CHAR ((gs_char)~0UL)
+/* Backward compatibility */
+#define gs_no_char GS_NO_CHAR
+
+/*
+ * Define a character glyph code, a.k.a. character name. The space of
+ * glyph codes is divided into five sections:
+ *
+ * - Codes >= GS_MIN_GLYPH_INDEX represent (non-negative)
+ * integers biased by GS_MIN_CID_GLYPH. They represent glyph indices
+ * of a specific font.
+ *
+ * - Codes within [GS_MIN_CID_GLYPH, GS_MIN_GLYPH_INDEX) represent (non-negative)
+ * integers biased by GS_MIN_CID_GLYPH. They represent PostScript CIDs
+ * of a specific Ordering.
+ *
+ * - Codes < GS_MIN_CID_GLYPH represent named glyphs. There are
+ * three sub-sections:
+ *
+ * - GS_NO_GLYPH, which means "no known glyph value". Note that
+ * it is not the same as /.notdef or CID 0 or GID 0: it means
+ * that the identity of the glyph is unknown, as opposed to a
+ * known glyph that is used for rendering an unknown character
+ * code.
+ *
+ * - Codes < gs_c_min_std_encoding_glyph represent names in some
+ * global space that the graphics library doesn't attempt to
+ * interpret. (When the client is the PostScript interpreter,
+ * these codes are PostScript name indices, but the graphics
+ * library doesn't know or rely on this.) The graphics library
+ * *does* assume that such codes denote the same names across
+ * all fonts, and that they can be converted to a string name
+ * by the font's glyph_name virtual procedure.
+ *
+ * - Codes >= gs_c_min_std_encoding_glyph (and < GS_MIN_CID_GLYPH)
+ * represent names in a special space used for the 11 built-in
+ * Encodings. The API is defined in gscencs.h. The only
+ * procedures that generate or recognize such codes are the ones
+ * declared in that file: clients must be careful not to mix
+ * such codes with codes in the global space.
+ *
+ * Client code may assume that GS_NO_GLYPH < GS_MIN_CID_GLYPH (i.e., it is a
+ * "name", not an integer), but should not make assumptions about whether
+ * GS_NO_GLYPH is less than or greater than gs_c_min_std_encoding_glyph.
+ */
+typedef ulong gs_glyph;
+
+#define GS_NO_GLYPH ((gs_glyph)0x7fffffff)
+#if ARCH_SIZEOF_LONG > 4
+# define GS_MIN_CID_GLYPH ((gs_glyph)0x80000000L)
+#else
+/* Avoid compiler warnings about signed/unsigned constants. */
+# define GS_MIN_CID_GLYPH ((gs_glyph)~0x7fffffff)
+#endif
+#define GS_MIN_GLYPH_INDEX (GS_MIN_CID_GLYPH | (GS_MIN_CID_GLYPH >> 1))
+#define GS_GLYPH_TAG (gs_glyph)(GS_MIN_CID_GLYPH | GS_MIN_GLYPH_INDEX)
+#define GS_MAX_GLYPH max_ulong
+
+/* Define a procedure for marking a gs_glyph during garbage collection. */
+typedef bool (*gs_glyph_mark_proc_t)(const gs_memory_t *mem, gs_glyph glyph, void *proc_data);
+
+/* Define the indices for known encodings. */
+typedef enum {
+ ENCODING_INDEX_UNKNOWN = -1,
+ /* Real encodings. These must come first. */
+ ENCODING_INDEX_STANDARD = 0,
+ ENCODING_INDEX_ISOLATIN1,
+ ENCODING_INDEX_SYMBOL,
+ ENCODING_INDEX_DINGBATS,
+ ENCODING_INDEX_WINANSI,
+ ENCODING_INDEX_MACROMAN,
+ ENCODING_INDEX_MACEXPERT,
+#define NUM_KNOWN_REAL_ENCODINGS 7
+ /* Pseudo-encodings (glyph sets). */
+ ENCODING_INDEX_MACGLYPH, /* Mac glyphs */
+ ENCODING_INDEX_ALOGLYPH, /* Adobe Latin glyph set */
+ ENCODING_INDEX_ALXGLYPH, /* Adobe Latin Extended glyph set */
+ ENCODING_INDEX_CFFSTRINGS /* CFF StandardStrings */
+#define NUM_KNOWN_ENCODINGS 11
+} gs_encoding_index_t;
+#define KNOWN_REAL_ENCODING_NAMES\
+ "StandardEncoding", "ISOLatin1Encoding", "SymbolEncoding",\
+ "DingbatsEncoding", "WinAnsiEncoding", "MacRomanEncoding",\
+ "MacExpertEncoding"
+
+/*
+ * For fonts that use more than one method to identify glyphs, define the
+ * glyph space for the values returned by procedures that return glyphs.
+ * Note that if a font uses only one method (such as Type 1 fonts, which
+ * only use names, or TrueType fonts, which only use indexes), the
+ * glyph_space argument is ignored.
+ */
+typedef enum gs_glyph_space_s {
+ GLYPH_SPACE_NAME, /* names (if available) */
+ GLYPH_SPACE_INDEX, /* indexes (if available) */
+ GLYPH_SPACE_NOGEN /* don't generate new names (Type 3 only) */
+} gs_glyph_space_t;
+
+/*
+ * Define a procedure for mapping a glyph to its (string) name. This is
+ * currently used only for CMaps: it is *not* the same as the glyph_name
+ * procedure in fonts.
+ */
+typedef int (*gs_glyph_name_proc_t)(const gs_memory_t *mem,
+ gs_glyph glyph, gs_const_string *pstr,
+ void *proc_data);
+
+#endif /* gsccode_INCLUDED */