summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/PfEd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/PfEd.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/PfEd.h218
1 files changed, 218 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/PfEd.h b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/PfEd.h
new file mode 100644
index 00000000000..d7d5d8fa670
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/PfEd.h
@@ -0,0 +1,218 @@
+/* Copyright (C) 2008 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _PFED_H
+# define _PFED_H
+/* The PfEd table (from PfaEdit, former name of FontForge) is designed to */
+/* store information useful for editing the font. This includes stuff like */
+/* guidelines, background layers, spiro layers, comments, lookup names, etc*/
+/* The idea is that much useful information can be retrieved even after the */
+/* font has been generated into its final form: ttf/otf */
+/* It is something of a catch all table composed of many subtables, each of */
+/* which preserves one particular item. I expect more subtables will be */
+/* added as I, or others, think of more things worth preserving. */
+
+
+# ifndef CHR
+# define CHR(ch1,ch2,ch3,ch4) (((ch1)<<24)|((ch2)<<16)|((ch3)<<8)|(ch4))
+# endif
+
+/* 'PfEd' table format is as follows... */
+/* uint32 version number 0x00010000 */
+/* uint32 subtable count */
+/* struct { uint32 tab, offset } tag/offset for first subtable */
+/* struct { uint32 tab, offset } tag/offset for second subtable */
+/* ... */
+
+/* 'PfEd' 'fcmt' font comment subtable format */
+/* short version number 0/1 */
+/* short string length */
+/* version 0=>String in latin1 (should be ASCII), version 1=>utf8*/
+
+ /* 'PfEd' 'cmnt' glyph comment subtable format */
+ /* THIS VERSION IS DEPRECATED IN FAVOR OF VERSION 1 DESCRIBED BELOW */
+ /* short version number 0 */
+ /* short count-of-ranges */
+ /* struct { short start-glyph, end-glyph, short offset } */
+ /* ... */
+ /* foreach glyph >=start-glyph, <=end-glyph(+1) */
+ /* uint32 offset to glyph comment string (in UCS2)*/
+ /* ... */
+ /* And one last offset pointing beyong the end of the last string to enable length calculations */
+ /* String table in UCS2 (NUL terminated). All offsets from start*/
+ /* of subtable */
+
+/* 'PfEd' 'cmnt' glyph comment subtable format */
+/* New version of 'cmnt' which uses utf8 rather than UCS2 */
+/* short version number 1 */
+/* short count-of-ranges */
+/* struct { short start-glyph, end-glyph, short offset } */
+/* ... */
+/* foreach glyph >=start-glyph, <=end-glyph(+1) */
+/* uint32 offset to glyph comment string (in utf8)*/
+/* ... */
+/* And one last offset pointing beyong the end of the last string to enable length calculations */
+/* String table in utf8 (NUL terminated). All offsets from start*/
+/* of subtable */
+
+/* 'PfEd' 'cvt ' cvt comment subtable format */
+/* short version number 0 */
+/* short size of cvt comment array (might be less that cvt) */
+/* ushort offset[size] to utf8 strings describing cvt entries */
+/* (strings are NUL terminated) */
+/* String table in utf8 (NUL terminated). All offsets from start*/
+/* of subtable */
+
+/* 'PfEd' 'colr' glyph colour subtable */
+/* short version number 0 */
+/* short count-of-ranges */
+/* struct { short start-glyph, end-glyph, uint32 colour (rgb) } */
+
+/* 'PfEd' 'GPOS' GPOS lookup/subtable/anchor names */
+/* short version number 0 */
+/* short count-of-lookups */
+/* struct { short offset name, offset subtables; } */
+/* A subtable: */
+/* short count-of-subtables */
+/* struct { short offset name, offset anchors; } */
+/* An anchor */
+/* short count-of-anchors */
+/* struct { short offset name; } */
+/* string data (utf8, nul terminated) */
+/* (all offsets from start of subtable) */
+
+/* 'PfEd' 'GSUB' GSUB lookup/subtable names */
+/* Same as GPOS (anchors will always be NULL) */
+
+/* The next two tables 'guid' and 'layr' will make use of the */
+/* following data type. The glyph_layer. */
+/* short contour-count */
+/* short image-count (always 0 for now) */
+/* struct { ushort offset; ushort name-off}[contour-count] */
+/* struct { ??? }[image-count] */
+/* Each contour consists of one byte of command and a random */
+/* amount of data dependant on the command. */
+/* See below for a description of the command verbs */
+/* string data in utf8 */
+/* (offsets relative to start of glyph_layer structure ) */
+
+/* 'PfEd' 'guid' Horizontal/Vertical guideline data */
+/* short version number 0 */
+/* short # vertical guidelines */
+/* short # horizontal guidelines */
+/* short mbz */
+/* offset guide spline data -- specifies all guides as splines */
+/* May be NULL */
+/* struct[# vert guidelines] { short x; short offset name} */
+/* struct[# h guidelines] { short y; short offset name} */
+/* a glyph_layer (includes all guides, even those listed above) */
+/* (all offsets, except those in the glyph_layer, relative to start of subtable) */
+
+/* 'PfEd' 'layr' layer data */
+/* short version number 0 */
+/* short layer-count */
+/* struct { short typeflags; short offset-name; uint32 offset-to-layer-data; } */
+/* the layer type is 2=>quadratic, 3=>PostScript, 1=>spiro */
+/* 0x102=>quadratic fore, 0x103=>PS fore */
+/* A layer: */
+/* short count-of-ranges */
+/* struct { short start-glyph, end-glyph, uint32 offset } */
+/* ... */
+/* foreach glyph >=start-glyph, <=end-glyph */
+/* uint32 offset to per-glyph outline data */
+/* many glyph_layers */
+/* (all offsets, except those in the glyph_layers, relative to start of subtable) */
+
+ /* Main table tag */
+# define PfEd_TAG CHR('P','f','E','d')
+
+ /* Subtable tags */
+# define fcmt_TAG CHR('f','c','m','t') /* Font Comment */
+# define flog_TAG CHR('f','l','o','g') /* Font Log */
+# define cmnt_TAG CHR('c','m','n','t') /* Glyph Comments */
+# define cvtc_TAG CHR('c','v','t','c') /* Comments for each cvt entry */
+# define colr_TAG CHR('c','o','l','r') /* Glyph color flags */
+# ifndef GPOS_TAG
+# define GPOS_TAG CHR('G','P','O','S') /* Names for GPOS lookups */
+# define GSUB_TAG CHR('G','S','U','B') /* Names for GSUB lookups */
+# endif
+# define guid_TAG CHR('g','u','i','d') /* Guideline data */
+# define layr_TAG CHR('l','a','y','r') /* Any layers which aren't part of the font */
+ /* Backgrounds, spiros, etc. */
+
+
+/* The layer commands used to draw quadratic and cubic layers have two */
+/* componants: A verb, which says what to do, and a modifier which says */
+/* how the data are stored. So a command looks like (verb)|(modifier) */
+/* A moveto command with byte data looks like (V_MoveTo|V_B) */
+/* The two commands to end a contour (V_Close and V_End) take no data */
+/* and use no modifier */
+
+/* layr subtable contour construction verb modifiers specifying data types */
+# define V_B 0 /* data are signed bytes */
+# define V_S 1 /* data are signed shorts */
+# define V_F 2 /* data are fixed longs, divide by 256.0 */
+
+/* layr subtable contour construction verbs */
+# define V_MoveTo 0 /* Start contour, absolute data (2 coords) */
+# define V_LineTo 4 /* Straight line, relative data (2 coords) */
+# define V_HLineTo 8 /* Horizontal line, relative (1 coord, x-off) */
+# define V_VLineTo 12 /* Vertical line, relative (1 coord, y-off) */
+
+# define V_QCurveTo 16 /* Quadratic spline, rel, rel (4 coords, cp, p) */
+# define V_QImplicit 20 /* Quadratic spline, rel (2 coords, cp) */
+ /* May only occur after a V_QCurveTo or V_QImplicit (may not start contour) */
+ /* Must be followed by a V_QCurveTo or V_QImplicit (this may end contour) */
+ /* The on-curve point is implicit by averaging the given cp with the cp in the next verb */
+# define V_QHImplicit 24 /* Quadratic spline, rel (1 coord, cp.x) */
+# define V_QVImplicit 28 /* Quadratic spline, rel (1 coord, cp.y) */
+
+# define V_CurveTo 32 /* Cubic spline, rel, rel (6 coords, cp1, cp2, p) */
+# define V_VHCurveTo 36 /* Cubic spline, rel, rel (4 coords, cp1.y cp2.* p.x) */
+ /* cp1.x == current.y, p.y == cp2.y */
+# define V_HVCurveTo 40 /* Cubic spline, rel, rel (4 coords, cp1.x cp2.* p.y) */
+
+# define V_Close 44 /* Close path (optionally adding a line) no data */
+# define V_End 45 /* End path (leave open) no data */
+
+#define COM_MOD(com) ((com)&3)
+#define COM_VERB(com) ((com)&~3)
+
+/* the layer commands used to draw spiro layers are the standard spiro verbs */
+/* these will always take fixed long data (V_L) as described above */
+# ifndef SPIRO_OPEN_CONTOUR
+# define SPIRO_OPEN_CONTOUR '{'
+# define SPIRO_CORNER 'v'
+# define SPIRO_G4 'o'
+# define SPIRO_G2 'c'
+# define SPIRO_LEFT '['
+# define SPIRO_RIGHT ']'
+# define SPIRO_END 'z'
+# endif
+# define SPIRO_CLOSE_CONTOUR '}'
+
+#endif /* _PFED_H */