summaryrefslogtreecommitdiff
path: root/third_party/freetype-py/freetype/ft_structs.py
diff options
context:
space:
mode:
authorRoozbeh Pournader <roozbeh@google.com>2015-01-13 08:50:27 -0800
committerJames Godfrey-Kittle <jamesgk@google.com>2015-04-16 12:16:25 -0700
commit36623f13d922461c897fe0ae1ff550a073385329 (patch)
tree9339ab434222da3393491673ea12090de381495b /third_party/freetype-py/freetype/ft_structs.py
parent9fc4898c2338e4b9bb028171f5f8492f01879fbe (diff)
Add FreeType python bindings to third_party.
Diffstat (limited to 'third_party/freetype-py/freetype/ft_structs.py')
-rw-r--r--third_party/freetype-py/freetype/ft_structs.py944
1 files changed, 944 insertions, 0 deletions
diff --git a/third_party/freetype-py/freetype/ft_structs.py b/third_party/freetype-py/freetype/ft_structs.py
new file mode 100644
index 0000000..c669c92
--- /dev/null
+++ b/third_party/freetype-py/freetype/ft_structs.py
@@ -0,0 +1,944 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# -----------------------------------------------------------------------------
+#
+# FreeType high-level python API - Copyright 2011 Nicolas P. Rougier
+# Distributed under the terms of the new BSD license.
+#
+# -----------------------------------------------------------------------------
+'''
+Freetype structured types
+-------------------------
+
+FT_Library: A handle to a FreeType library instance.
+
+FT_Vector: A simple structure used to store a 2D vector.
+
+FT_BBox: A structure used to hold an outline's bounding box.
+
+FT_Matrix: A simple structure used to store a 2x2 matrix.
+
+FT_UnitVector: A simple structure used to store a 2D vector unit vector.
+
+FT_Bitmap: A structure used to describe a bitmap or pixmap to the raster.
+
+FT_Data: Read-only binary data represented as a pointer and a length.
+
+FT_Generic: Client applications generic data.
+
+FT_Bitmap_Size: Metrics of a bitmap strike.
+
+FT_Charmap: The base charmap structure.
+
+FT_Glyph_Metrics:A structure used to model the metrics of a single glyph.
+
+FT_Outline: This structure is used to describe an outline to the scan-line
+ converter.
+
+FT_GlyphSlot: FreeType root glyph slot class structure.
+
+FT_Glyph: The root glyph structure contains a given glyph image plus its
+ advance width in 16.16 fixed float format.
+
+FT_Size_Metrics: The size metrics structure gives the metrics of a size object.
+
+FT_Size: FreeType root size class structure.
+
+FT_Face: FreeType root face class structure.
+
+FT_Parameter: A simple structure used to pass more or less generic parameters
+ to FT_Open_Face.
+
+FT_Open_Args: A structure used to indicate how to open a new font file or
+ stream.
+
+FT_SfntName: A structure used to model an SFNT 'name' table entry.
+
+FT_Stroker: Opaque handler to a path stroker object.
+
+FT_BitmapGlyph: A structure used for bitmap glyph images.
+'''
+from freetype.ft_types import *
+
+
+# -----------------------------------------------------------------------------
+# A handle to a FreeType library instance. Each 'library' is completely
+# independent from the others; it is the 'root' of a set of objects like fonts,
+# faces, sizes, etc.
+class FT_LibraryRec(Structure):
+ '''
+ A handle to a FreeType library instance. Each 'library' is completely
+ independent from the others; it is the 'root' of a set of objects like
+ fonts, faces, sizes, etc.
+ '''
+ _fields_ = [ ]
+FT_Library = POINTER(FT_LibraryRec)
+
+
+
+# -----------------------------------------------------------------------------
+# A simple structure used to store a 2D vector; coordinates are of the FT_Pos
+# type.
+class FT_Vector(Structure):
+ '''
+ A simple structure used to store a 2D vector; coordinates are of the FT_Pos
+ type.
+
+ x: The horizontal coordinate.
+ y: The vertical coordinate.
+ '''
+ _fields_ = [('x', FT_Pos),
+ ('y', FT_Pos)]
+
+
+
+# -----------------------------------------------------------------------------
+# A structure used to hold an outline's bounding box, i.e., the coordinates of
+# its extrema in the horizontal and vertical directions.
+#
+# The bounding box is specified with the coordinates of the lower left and the
+# upper right corner. In PostScript, those values are often called (llx,lly)
+# and (urx,ury), respectively.
+#
+# If 'yMin' is negative, this value gives the glyph's descender. Otherwise, the
+# glyph doesn't descend below the baseline. Similarly, if 'ymax' is positive,
+# this value gives the glyph's ascender.
+#
+# 'xMin' gives the horizontal distance from the glyph's origin to the left edge
+# of the glyph's bounding box. If 'xMin' is negative, the glyph extends to the
+# left of the origin.
+class FT_BBox(Structure):
+ '''
+ A structure used to hold an outline's bounding box, i.e., the coordinates
+ of its extrema in the horizontal and vertical directions.
+
+ The bounding box is specified with the coordinates of the lower left and
+ the upper right corner. In PostScript, those values are often called
+ (llx,lly) and (urx,ury), respectively.
+
+ If 'yMin' is negative, this value gives the glyph's descender. Otherwise,
+ the glyph doesn't descend below the baseline. Similarly, if 'ymax' is
+ positive, this value gives the glyph's ascender.
+
+ 'xMin' gives the horizontal distance from the glyph's origin to the left
+ edge of the glyph's bounding box. If 'xMin' is negative, the glyph extends
+ to the left of the origin.
+
+ xMin: The horizontal minimum (left-most).
+ yMin: The vertical minimum (bottom-most).
+ xMax: The horizontal maximum (right-most).
+ yMax: The vertical maximum (top-most).
+ '''
+ _fields_ = [('xMin', FT_Pos),
+ ('yMin', FT_Pos),
+ ('xMax', FT_Pos),
+ ('yMax', FT_Pos)]
+
+
+
+# -----------------------------------------------------------------------------
+# A simple structure used to store a 2x2 matrix. Coefficients are in 16.16
+# fixed float format. The computation performed is:
+# x' = x*xx + y*xy
+# y' = x*yx + y*yy
+class FT_Matrix(Structure):
+ '''
+ A simple structure used to store a 2x2 matrix. Coefficients are in 16.16
+ fixed float format. The computation performed is:
+
+ x' = x*xx + y*xy
+ y' = x*yx + y*yy
+
+ xx: Matrix coefficient.
+ xy: Matrix coefficient.
+ yx: Matrix coefficient.
+ yy: Matrix coefficient.
+ '''
+ _fields_ = [('xx', FT_Fixed),
+ ('xy', FT_Fixed),
+ ('yx', FT_Fixed),
+ ('yy', FT_Fixed)]
+
+
+
+# -----------------------------------------------------------------------------
+# A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14
+# types.
+class FT_UnitVector(Structure):
+ '''
+ A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14
+ types.
+
+ x: The horizontal coordinate.
+ y: The vertical coordinate.
+ '''
+ _fields_ = [('x', FT_F2Dot14),
+ ('y', FT_F2Dot14)]
+
+
+
+# -----------------------------------------------------------------------------
+# A structure used to describe a bitmap or pixmap to the raster. Note that we
+# now manage pixmaps of various depths through the 'pixel_mode' field.
+class FT_Bitmap(Structure):
+ '''
+ A structure used to describe a bitmap or pixmap to the raster. Note that we
+ now manage pixmaps of various depths through the 'pixel_mode' field.
+
+ rows: The number of bitmap rows.
+
+ width: The number of pixels in bitmap row.
+
+ pitch: The pitch's absolute value is the number of bytes taken by one
+ bitmap row, including padding. However, the pitch is positive when
+ the bitmap has a 'down' flow, and negative when it has an 'up'
+ flow. In all cases, the pitch is an offset to add to a bitmap
+ pointer in order to go down one row.
+
+ Note that 'padding' means the alignment of a bitmap to a byte
+ border, and FreeType functions normally align to the smallest
+ possible integer value.
+
+ For the B/W rasterizer, 'pitch' is always an even number.
+
+ To change the pitch of a bitmap (say, to make it a multiple of 4),
+ use FT_Bitmap_Convert. Alternatively, you might use callback
+ functions to directly render to the application's surface; see the
+ file 'example2.py' in the tutorial for a demonstration.
+
+ buffer: A typeless pointer to the bitmap buffer. This value should be
+ aligned on 32-bit boundaries in most cases.
+
+ num_grays: This field is only used with FT_PIXEL_MODE_GRAY; it gives the
+ number of gray levels used in the bitmap.
+
+ pixel_mode: The pixel mode, i.e., how pixel bits are stored. See
+ FT_Pixel_Mode for possible values.
+
+ palette_mode: This field is intended for paletted pixel modes; it indicates
+ how the palette is stored. Not used currently.
+
+ palette: A typeless pointer to the bitmap palette; this field is intended
+ for paletted pixel modes. Not used currently.
+ '''
+ _fields_ = [
+ ('rows', c_int),
+ ('width', c_int),
+ ('pitch', c_int),
+ # declaring buffer as c_char_p confuses ctypes
+ ('buffer', POINTER(c_ubyte)),
+ ('num_grays', c_short),
+ ('pixel_mode', c_ubyte),
+ ('palette_mode', c_char),
+ ('palette', c_void_p) ]
+
+
+
+# -----------------------------------------------------------------------------
+# Read-only binary data represented as a pointer and a length.
+class FT_Data(Structure):
+ '''
+ Read-only binary data represented as a pointer and a length.
+
+ pointer: The data.
+ length: The length of the data in bytes.
+ '''
+ _fields_ = [('pointer', POINTER(FT_Byte)),
+ ('y', FT_Int)]
+
+
+
+# -----------------------------------------------------------------------------
+# Client applications often need to associate their own data to a variety of
+# FreeType core objects. For example, a text layout API might want to associate
+# a glyph cache to a given size object.
+#
+# Most FreeType object contains a 'generic' field, of type FT_Generic, which
+# usage is left to client applications and font servers.
+#
+# It can be used to store a pointer to client-specific data, as well as the
+# address of a 'finalizer' function, which will be called by FreeType when the
+# object is destroyed (for example, the previous client example would put the
+# address of the glyph cache destructor in the 'finalizer' field).
+class FT_Generic(Structure):
+ '''
+ Client applications often need to associate their own data to a variety of
+ FreeType core objects. For example, a text layout API might want to
+ associate a glyph cache to a given size object.
+
+ Most FreeType object contains a 'generic' field, of type FT_Generic, which
+ usage is left to client applications and font servers.
+
+ It can be used to store a pointer to client-specific data, as well as the
+ address of a 'finalizer' function, which will be called by FreeType when
+ the object is destroyed (for example, the previous client example would put
+ the address of the glyph cache destructor in the 'finalizer' field).
+
+ data: A typeless pointer to any client-specified data. This field is
+ completely ignored by the FreeType library.
+ finalizer: A pointer to a 'generic finalizer' function, which will be
+ called when the object is destroyed. If this field is set to
+ NULL, no code will be called.
+ '''
+ _fields_ = [('data', c_void_p),
+ ('finalizer', FT_Generic_Finalizer)]
+
+
+
+
+# -----------------------------------------------------------------------------
+# This structure models the metrics of a bitmap strike (i.e., a set of glyphs
+# for a given point size and resolution) in a bitmap font. It is used for the
+# 'available_sizes' field of FT_Face.
+class FT_Bitmap_Size(Structure):
+ '''
+ This structure models the metrics of a bitmap strike (i.e., a set of glyphs
+ for a given point size and resolution) in a bitmap font. It is used for the
+ 'available_sizes' field of FT_Face.
+
+ height: The vertical distance, in pixels, between two consecutive
+ baselines. It is always positive.
+
+ width: The average width, in pixels, of all glyphs in the strike.
+
+ size: The nominal size of the strike in 26.6 fractional points. This field
+ is not very useful.
+
+ x_ppem: The horizontal ppem (nominal width) in 26.6 fractional pixels.
+
+ y_ppem: The vertical ppem (nominal height) in 26.6 fractional pixels.
+ '''
+ _fields_ = [
+ ('height', FT_Short),
+ ('width', FT_Short),
+ ('size', FT_Pos),
+ ('x_ppem', FT_Pos),
+ ('y_ppem', FT_Pos) ]
+
+
+
+# -----------------------------------------------------------------------------
+# The base charmap structure.
+class FT_CharmapRec(Structure):
+ '''
+ The base charmap structure.
+
+ face : A handle to the parent face object.
+
+ encoding : An FT_Encoding tag identifying the charmap. Use this with
+ FT_Select_Charmap.
+
+ platform_id: An ID number describing the platform for the following
+ encoding ID. This comes directly from the TrueType
+ specification and should be emulated for other formats.
+
+ encoding_id: A platform specific encoding number. This also comes from the
+ TrueType specification and should be emulated similarly.
+ '''
+ _fields_ = [
+ ('face', c_void_p), # Shoudl be FT_Face
+ ('encoding', FT_Encoding),
+ ('platform_id', FT_UShort),
+ ('encoding_id', FT_UShort),
+ ]
+FT_Charmap = POINTER(FT_CharmapRec)
+
+
+
+# -----------------------------------------------------------------------------
+# A structure used to model the metrics of a single glyph. The values are
+# expressed in 26.6 fractional pixel format; if the flag FT_LOAD_NO_SCALE has
+# been used while loading the glyph, values are expressed in font units
+# instead.
+class FT_Glyph_Metrics(Structure):
+ '''
+ A structure used to model the metrics of a single glyph. The values are
+ expressed in 26.6 fractional pixel format; if the flag FT_LOAD_NO_SCALE has
+ been used while loading the glyph, values are expressed in font units
+ instead.
+
+ width: The glyph's width.
+
+ height: The glyph's height.
+
+ horiBearingX: Left side bearing for horizontal layout.
+
+ horiBearingY: Top side bearing for horizontal layout.
+
+ horiAdvance: Advance width for horizontal layout.
+
+ vertBearingX: Left side bearing for vertical layout.
+
+ vertBearingY: Top side bearing for vertical layout.
+
+ vertAdvance: Advance height for vertical layout.
+ '''
+ _fields_ = [
+ ('width', FT_Pos),
+ ('height', FT_Pos),
+ ('horiBearingX', FT_Pos),
+ ('horiBearingY', FT_Pos),
+ ('horiAdvance', FT_Pos),
+ ('vertBearingX', FT_Pos),
+ ('vertBearingY', FT_Pos),
+ ('vertAdvance', FT_Pos),
+ ]
+
+
+
+# -----------------------------------------------------------------------------
+# This structure is used to describe an outline to the scan-line converter.
+class FT_Outline(Structure):
+ '''
+ This structure is used to describe an outline to the scan-line converter.
+
+ n_contours: The number of contours in the outline.
+
+ n_points: The number of points in the outline.
+
+ points: A pointer to an array of 'n_points' FT_Vector elements, giving the
+ outline's point coordinates.
+
+ tags: A pointer to an array of 'n_points' chars, giving each outline
+ point's type.
+
+ If bit 0 is unset, the point is 'off' the curve, i.e., a Bezier
+ control point, while it is 'on' if set.
+
+ Bit 1 is meaningful for 'off' points only. If set, it indicates a
+ third-order Bezier arc control point; and a second-order control
+ point if unset.
+
+ If bit 2 is set, bits 5-7 contain the drop-out mode (as defined in
+ the OpenType specification; the value is the same as the argument to
+ the SCANMODE instruction).
+
+ Bits 3 and 4 are reserved for internal purposes.
+
+ contours: An array of 'n_contours' shorts, giving the end point of each
+ contour within the outline. For example, the first contour is
+ defined by the points '0' to 'contours[0]', the second one is
+ defined by the points 'contours[0]+1' to 'contours[1]', etc.
+
+ flags: A set of bit flags used to characterize the outline and give hints
+ to the scan-converter and hinter on how to convert/grid-fit it. See
+ FT_OUTLINE_FLAGS.
+ '''
+ _fields_ = [
+ ('n_contours', c_short),
+ ('n_points', c_short),
+ ('points', POINTER(FT_Vector)),
+ # declaring buffer as c_char_p would prevent us to acces all tags
+ ('tags', POINTER(c_ubyte)),
+ ('contours', POINTER(c_short)),
+ ('flags', c_int),
+ ]
+
+
+# -----------------------------------------------------------------------------
+# The root glyph structure contains a given glyph image plus its advance width
+# in 16.16 fixed float format.
+
+class FT_GlyphRec(Structure):
+ '''
+ The root glyph structure contains a given glyph image plus its advance
+ width in 16.16 fixed float format.
+
+ library: A handle to the FreeType library object.
+
+ clazz: A pointer to the glyph's class. Private.
+
+ format: The format of the glyph's image.
+
+ advance: A 16.16 vector that gives the glyph's advance width.
+ '''
+ _fields_ = [
+ ('library', FT_Library),
+ ('clazz', c_void_p),
+ ('format', FT_Glyph_Format),
+ ('advance', FT_Vector)
+ ]
+FT_Glyph = POINTER(FT_GlyphRec)
+
+
+
+# -----------------------------------------------------------------------------
+# FreeType root glyph slot class structure. A glyph slot is a container where
+# individual glyphs can be loaded, be they in outline or bitmap format.
+class FT_GlyphSlotRec(Structure):
+ '''
+ FreeType root glyph slot class structure. A glyph slot is a container where
+ individual glyphs can be loaded, be they in outline or bitmap format.
+
+ library: A handle to the FreeType library instance this slot belongs to.
+
+ face: A handle to the parent face object.
+
+ next: In some cases (like some font tools), several glyph slots per face
+ object can be a good thing. As this is rare, the glyph slots are
+ listed through a direct, single-linked list using its 'next' field.
+
+ generic: A typeless pointer which is unused by the FreeType library or any
+ of its drivers. It can be used by client applications to link
+ their own data to each glyph slot object.
+
+ metrics: The metrics of the last loaded glyph in the slot. The returned
+ values depend on the last load flags (see the FT_Load_Glyph API
+ function) and can be expressed either in 26.6 fractional pixels or
+ font units.
+
+ Note that even when the glyph image is transformed, the metrics
+ are not.
+
+ linearHoriAdvance: The advance width of the unhinted glyph. Its value is
+ expressed in 16.16 fractional pixels, unless
+ FT_LOAD_LINEAR_DESIGN is set when loading the
+ glyph. This field can be important to perform correct
+ WYSIWYG layout. Only relevant for outline glyphs.
+
+ linearVertAdvance: The advance height of the unhinted glyph. Its value is
+ expressed in 16.16 fractional pixels, unless
+ FT_LOAD_LINEAR_DESIGN is set when loading the
+ glyph. This field can be important to perform correct
+ WYSIWYG layout. Only relevant for outline glyphs.
+
+ advance: This shorthand is, depending on FT_LOAD_IGNORE_TRANSFORM, the
+ transformed advance width for the glyph (in 26.6 fractional pixel
+ format). As specified with FT_LOAD_VERTICAL_LAYOUT, it uses either
+ the 'horiAdvance' or the 'vertAdvance' value of 'metrics' field.
+
+ format: This field indicates the format of the image contained in the glyph
+ slot. Typically FT_GLYPH_FORMAT_BITMAP, FT_GLYPH_FORMAT_OUTLINE, or
+ FT_GLYPH_FORMAT_COMPOSITE, but others are possible.
+
+ bitmap: This field is used as a bitmap descriptor when the slot format is
+ FT_GLYPH_FORMAT_BITMAP. Note that the address and content of the
+ bitmap buffer can change between calls of FT_Load_Glyph and a few
+ other functions.
+
+ bitmap_left: This is the bitmap's left bearing expressed in integer
+ pixels. Of course, this is only valid if the format is
+ FT_GLYPH_FORMAT_BITMAP.
+
+ bitmap_top: This is the bitmap's top bearing expressed in integer
+ pixels. Remember that this is the distance from the baseline to
+ the top-most glyph scanline, upwards y coordinates being
+ positive.
+
+ outline: The outline descriptor for the current glyph image if its format
+ is FT_GLYPH_FORMAT_OUTLINE. Once a glyph is loaded, 'outline' can
+ be transformed, distorted, embolded, etc. However, it must not be
+ freed.
+
+ num_subglyphs: The number of subglyphs in a composite glyph. This field is
+ only valid for the composite glyph format that should
+ normally only be loaded with the FT_LOAD_NO_RECURSE
+ flag. For now this is internal to FreeType.
+
+ subglyphs: An array of subglyph descriptors for composite glyphs. There are
+ 'num_subglyphs' elements in there. Currently internal to
+ FreeType.
+
+ control_data: Certain font drivers can also return the control data for a
+ given glyph image (e.g. TrueType bytecode, Type 1
+ charstrings, etc.). This field is a pointer to such data.
+
+ control_len: This is the length in bytes of the control data.
+
+ other: Really wicked formats can use this pointer to present their own
+ glyph image to client applications. Note that the application needs
+ to know about the image format.
+
+ lsb_delta: The difference between hinted and unhinted left side bearing
+ while autohinting is active. Zero otherwise.
+
+ rsb_delta: The difference between hinted and unhinted right side bearing
+ while autohinting is active. Zero otherwise.
+ '''
+ _fields_ = [
+ ('library', FT_Library),
+ ('face', c_void_p),
+ ('next', c_void_p),
+ ('reserved', c_uint),
+ ('generic', FT_Generic),
+
+ ('metrics', FT_Glyph_Metrics),
+ ('linearHoriAdvance', FT_Fixed),
+ ('linearVertAdvance', FT_Fixed),
+ ('advance', FT_Vector),
+
+ ('format', FT_Glyph_Format),
+
+ ('bitmap', FT_Bitmap),
+ ('bitmap_left', FT_Int),
+ ('bitmap_top', FT_Int),
+
+ ('outline', FT_Outline),
+ ('num_subglyphs', FT_UInt),
+ ('subglyphs', c_void_p),
+
+ ('control_data', c_void_p),
+ ('control_len', c_long),
+
+ ('lsb_delta', FT_Pos),
+ ('rsb_delta', FT_Pos),
+ ('other', c_void_p),
+ ('internal', c_void_p),
+ ]
+FT_GlyphSlot = POINTER(FT_GlyphSlotRec)
+
+
+
+# -----------------------------------------------------------------------------
+# The size metrics structure gives the metrics of a size object.
+class FT_Size_Metrics(Structure):
+ '''
+ The size metrics structure gives the metrics of a size object.
+
+ x_ppem: The width of the scaled EM square in pixels, hence the term 'ppem'
+ (pixels per EM). It is also referred to as 'nominal width'.
+
+ y_ppem: The height of the scaled EM square in pixels, hence the term 'ppem'
+ (pixels per EM). It is also referred to as 'nominal height'.
+
+ x_scale: A 16.16 fractional scaling value used to convert horizontal
+ metrics from font units to 26.6 fractional pixels. Only relevant
+ for scalable font formats.
+
+ y_scale: A 16.16 fractional scaling value used to convert vertical metrics
+ from font units to 26.6 fractional pixels. Only relevant for
+ scalable font formats.
+
+ ascender: The ascender in 26.6 fractional pixels. See FT_FaceRec for the
+ details.
+
+ descender: The descender in 26.6 fractional pixels. See FT_FaceRec for the
+ details.
+
+ height: The height in 26.6 fractional pixels. See FT_FaceRec for the
+ details.
+
+ max_advance: The maximal advance width in 26.6 fractional pixels. See
+ FT_FaceRec for the details.
+ '''
+ _fields_ = [
+ ('x_ppem', FT_UShort),
+ ('y_ppem', FT_UShort),
+
+ ('x_scale', FT_Fixed),
+ ('y_scale', FT_Fixed),
+
+ ('ascender', FT_Pos),
+ ('descender', FT_Pos),
+ ('height', FT_Pos),
+ ('max_advance', FT_Pos),
+ ]
+
+
+
+# -----------------------------------------------------------------------------
+# FreeType root size class structure. A size object models a face object at a
+# given size.
+class FT_SizeRec(Structure):
+ '''
+ FreeType root size class structure. A size object models a face object at a
+ given size.
+
+ face: Handle to the parent face object.
+
+ generic: A typeless pointer, which is unused by the FreeType library or any
+ of its drivers. It can be used by client applications to link
+ their own data to each size object.
+
+ metrics: Metrics for this size object. This field is read-only.
+ '''
+ _fields_ = [
+ ('face', c_void_p),
+ ('generic', FT_Generic),
+ ('metrics', FT_Size_Metrics),
+ ('internal', c_void_p),
+ ]
+FT_Size = POINTER(FT_SizeRec)
+
+
+
+# -----------------------------------------------------------------------------
+# FreeType root face class structure. A face object models a typeface in a font
+# file.
+class FT_FaceRec(Structure):
+ '''
+ FreeType root face class structure. A face object models a typeface in a
+ font file.
+
+ num_faces: The number of faces in the font file. Some font formats can have
+ multiple faces in a font file.
+
+ face_index: The index of the face in the font file. It is set to 0 if there
+ is only one face in the font file.
+
+ face_flags: A set of bit flags that give important information about the
+ face; see FT_FACE_FLAG_XXX for the details.
+
+ style_flags: A set of bit flags indicating the style of the face; see
+ FT_STYLE_FLAG_XXX for the details.
+
+ num_glyphs: The number of glyphs in the face. If the face is scalable and
+ has sbits (see 'num_fixed_sizes'), it is set to the number of
+ outline glyphs.
+
+ For CID-keyed fonts, this value gives the highest CID used in
+ the font.
+
+ family_name: The face's family name. This is an ASCII string, usually in
+ English, which describes the typeface's family (like 'Times
+ New Roman', 'Bodoni', 'Garamond', etc). This is a least common
+ denominator used to list fonts. Some formats (TrueType &
+ OpenType) provide localized and Unicode versions of this
+ string. Applications should use the format specific interface
+ to access them. Can be NULL (e.g., in fonts embedded in a PDF
+ file).
+
+ style_name: The face's style name. This is an ASCII string, usually in
+ English, which describes the typeface's style (like 'Italic',
+ 'Bold', 'Condensed', etc). Not all font formats provide a style
+ name, so this field is optional, and can be set to NULL. As for
+ 'family_name', some formats provide localized and Unicode
+ versions of this string. Applications should use the format
+ specific interface to access them.
+
+ num_fixed_sizes: The number of bitmap strikes in the face. Even if the face
+ is scalable, there might still be bitmap strikes, which
+ are called 'sbits' in that case.
+
+ available_sizes: An array of FT_Bitmap_Size for all bitmap strikes in the
+ face. It is set to NULL if there is no bitmap strike.
+
+ num_charmaps: The number of charmaps in the face.
+
+ charmaps: An array of the charmaps of the face.
+
+ generic: A field reserved for client uses. See the FT_Generic type
+ description.
+
+ bbox: The font bounding box. Coordinates are expressed in font units (see
+ 'units_per_EM'). The box is large enough to contain any glyph from
+ the font. Thus, 'bbox.yMax' can be seen as the 'maximal ascender',
+ and 'bbox.yMin' as the 'minimal descender'. Only relevant for
+ scalable formats.
+
+ Note that the bounding box might be off by (at least) one pixel for
+ hinted fonts. See FT_Size_Metrics for further discussion.
+
+ units_per_EM: The number of font units per EM square for this face. This is
+ typically 2048 for TrueType fonts, and 1000 for Type 1
+ fonts. Only relevant for scalable formats.
+
+ ascender: The typographic ascender of the face, expressed in font
+ units. For font formats not having this information, it is set to
+ 'bbox.yMax'. Only relevant for scalable formats.
+
+ descender: The typographic descender of the face, expressed in font
+ units. For font formats not having this information, it is set
+ to 'bbox.yMin'. Note that this field is usually negative. Only
+ relevant for scalable formats.
+
+ height: The height is the vertical distance between two consecutive
+ baselines, expressed in font units. It is always positive. Only
+ relevant for scalable formats.
+
+ max_advance_width: The maximal advance width, in font units, for all glyphs
+ in this face. This can be used to make word wrapping
+ computations faster. Only relevant for scalable formats.
+
+ max_advance_height: The maximal advance height, in font units, for all
+ glyphs in this face. This is only relevant for vertical
+ layouts, and is set to 'height' for fonts that do not
+ provide vertical metrics. Only relevant for scalable
+ formats.
+
+ underline_position: The position, in font units, of the underline line for
+ this face. It is the center of the underlining
+ stem. Only relevant for scalable formats.
+
+ underline_thickness: The thickness, in font units, of the underline for
+ this face. Only relevant for scalable formats.
+
+ glyph: The face's associated glyph slot(s).
+
+ size: The current active size for this face.
+
+ charmap: The current active charmap for this face.
+ '''
+ _fields_ = [
+ ('num_faces', FT_Long),
+ ('face_index', FT_Long),
+
+ ('face_flags', FT_Long),
+ ('style_flags', FT_Long),
+
+ ('num_glyphs', FT_Long),
+
+ ('family_name', FT_String_p),
+ ('style_name', FT_String_p),
+
+ ('num_fixed_sizes', FT_Int),
+ ('available_sizes', POINTER(FT_Bitmap_Size)),
+
+ ('num_charmaps', c_int),
+ ('charmaps', POINTER(FT_Charmap)),
+
+ ('generic', FT_Generic),
+
+ # The following member variables (down to `underline_thickness')
+ # are only relevant to scalable outlines; cf. @FT_Bitmap_Size
+ # for bitmap fonts.
+ ('bbox', FT_BBox),
+
+ ('units_per_EM', FT_UShort),
+ ('ascender', FT_Short),
+ ('descender', FT_Short),
+ ('height', FT_Short),
+
+ ('max_advance_width', FT_Short),
+ ('max_advance_height', FT_Short),
+
+ ('underline_position', FT_Short),
+ ('underline_thickness', FT_Short),
+
+ ('glyph', FT_GlyphSlot),
+ ('size', FT_Size),
+ ('charmap', FT_Charmap),
+
+ # private
+ ('driver', c_void_p),
+ ('memory', c_void_p),
+ ('stream', c_void_p),
+ ('sizes_list_head', c_void_p),
+ ('sizes_list_tail', c_void_p),
+ ('autohint', FT_Generic),
+ ('extensions', c_void_p),
+ ('internal', c_void_p),
+ ]
+FT_Face = POINTER(FT_FaceRec)
+
+
+
+# -----------------------------------------------------------------------------
+# A simple structure used to pass more or less generic parameters to
+# FT_Open_Face.
+class FT_Parameter(Structure):
+ '''
+ A simple structure used to pass more or less generic parameters to
+ FT_Open_Face.
+
+ tag: A four-byte identification tag.
+
+ data: A pointer to the parameter data
+ '''
+ _fields_ = [
+ ('tag', FT_ULong),
+ ('data', FT_Pointer) ]
+FT_Parameter_p = POINTER(FT_Parameter)
+
+
+
+# -----------------------------------------------------------------------------
+# A structure used to indicate how to open a new font file or stream. A pointer
+# to such a structure can be used as a parameter for the functions FT_Open_Face
+# and FT_Attach_Stream.
+class FT_Open_Args(Structure):
+ '''
+ A structure used to indicate how to open a new font file or stream. A pointer
+ to such a structure can be used as a parameter for the functions FT_Open_Face
+ and FT_Attach_Stream.
+
+ flags: A set of bit flags indicating how to use the structure.
+
+ memory_base: The first byte of the file in memory.
+
+ memory_size: The size in bytes of the file in memory.
+
+ pathname: A pointer to an 8-bit file pathname.
+
+ stream: A handle to a source stream object.
+
+ driver: This field is exclusively used by FT_Open_Face; it simply specifies
+ the font driver to use to open the face. If set to 0, FreeType
+ tries to load the face with each one of the drivers in its list.
+
+ num_params: The number of extra parameters.
+
+ params: Extra parameters passed to the font driver when opening a new face.
+ '''
+ _fields_ = [
+ ('flags', FT_UInt),
+ ('memory_base', POINTER(FT_Byte)),
+ ('memory_size', FT_Long),
+ ('pathname', FT_String_p),
+ ('stream', c_void_p),
+ ('driver', c_void_p),
+ ('num_params', FT_Int),
+ ('params', FT_Parameter_p) ]
+
+
+
+# -----------------------------------------------------------------------------
+# A structure used to model an SFNT 'name' table entry.
+
+class FT_SfntName(Structure):
+ '''
+ platform_id: The platform ID for 'string'.
+
+ encoding_id: The encoding ID for 'string'.
+
+ language_id: The language ID for 'string'
+
+ name_id: An identifier for 'string'
+
+ string: The 'name' string. Note that its format differs depending on the
+ (platform,encoding) pair. It can be a Pascal String, a UTF-16 one,
+ etc.
+
+ Generally speaking, the string is not zero-terminated. Please refer
+ to the TrueType specification for details.
+
+ string_len: The length of 'string' in bytes.
+ '''
+
+ _fields_ = [
+ ('platform_id', FT_UShort),
+ ('encoding_id', FT_UShort),
+ ('language_id', FT_UShort),
+ ('name_id', FT_UShort),
+ # this string is *not* null-terminated!
+ ('string', POINTER(FT_Byte)),
+ ('string_len', FT_UInt) ]
+
+
+
+# -----------------------------------------------------------------------------
+# Opaque handler to a path stroker object.
+class FT_StrokerRec(Structure):
+ '''
+ Opaque handler to a path stroker object.
+ '''
+ _fields_ = [ ]
+FT_Stroker = POINTER(FT_StrokerRec)
+
+
+# -----------------------------------------------------------------------------
+# A structure used for bitmap glyph images. This really is a 'sub-class' of
+# FT_GlyphRec.
+#
+class FT_BitmapGlyphRec(Structure):
+ '''
+ A structure used for bitmap glyph images. This really is a 'sub-class' of
+ FT_GlyphRec.
+ '''
+ _fields_ = [
+ ('root' , FT_GlyphRec),
+ ('left', FT_Int),
+ ('top', FT_Int),
+ ('bitmap', FT_Bitmap)
+ ]
+FT_BitmapGlyph = POINTER(FT_BitmapGlyphRec)