2001-01-03 01:17:58 +01:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* cffgload.h */
|
|
|
|
/* */
|
|
|
|
/* OpenType Glyph Loader (specification). */
|
|
|
|
/* */
|
2009-06-20 13:24:08 +02:00
|
|
|
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 by */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
|
|
|
/* */
|
|
|
|
/* This file is part of the FreeType project, and may only be used, */
|
|
|
|
/* modified, and distributed under the terms of the FreeType project */
|
|
|
|
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
|
|
|
/* this file you indicate that you have read the license and */
|
|
|
|
/* understand and accept it fully. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __CFFGLOAD_H__
|
|
|
|
#define __CFFGLOAD_H__
|
|
|
|
|
|
|
|
|
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_FREETYPE_H
|
2001-03-20 12:14:24 +01:00
|
|
|
#include "cffobjs.h"
|
2001-01-03 01:17:58 +01:00
|
|
|
|
|
|
|
|
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
|
|
|
|
|
|
|
#define CFF_MAX_OPERANDS 48
|
|
|
|
#define CFF_MAX_SUBRS_CALLS 32
|
2009-10-19 21:09:13 +02:00
|
|
|
#define CFF_MAX_TRANS_ELEMENTS 32
|
2001-01-03 01:17:58 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Structure> */
|
2001-01-03 08:14:12 +01:00
|
|
|
/* CFF_Builder */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A structure used during glyph loading to store its outline. */
|
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* memory :: The current memory object. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* face :: The current face object. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* glyph :: The current glyph slot. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* loader :: The current glyph loader. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* base :: The base glyph outline. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* current :: The current glyph outline. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* pos_x :: The horizontal translation (if composite glyph). */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* pos_y :: The vertical translation (if composite glyph). */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* left_bearing :: The left side bearing point. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* advance :: The horizontal advance vector. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* bbox :: Unused. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* path_begun :: A flag which indicates that a new path has begun. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* load_points :: If this flag is not set, no points are loaded. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* no_recurse :: Set but not used. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* metrics_only :: A boolean indicating that we only want to compute */
|
|
|
|
/* the metrics of a given glyph, not load all of its */
|
|
|
|
/* points. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
2002-03-30 17:41:09 +01:00
|
|
|
/* hints_funcs :: Auxiliary pointer for hinting. */
|
|
|
|
/* */
|
|
|
|
/* hints_globals :: Auxiliary pointer for hinting. */
|
2001-01-03 01:17:58 +01:00
|
|
|
/* */
|
|
|
|
typedef struct CFF_Builder_
|
|
|
|
{
|
2002-03-30 17:41:09 +01:00
|
|
|
FT_Memory memory;
|
|
|
|
TT_Face face;
|
|
|
|
CFF_GlyphSlot glyph;
|
|
|
|
FT_GlyphLoader loader;
|
|
|
|
FT_Outline* base;
|
|
|
|
FT_Outline* current;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-03-30 17:41:09 +01:00
|
|
|
FT_Pos pos_x;
|
|
|
|
FT_Pos pos_y;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-03-30 17:41:09 +01:00
|
|
|
FT_Vector left_bearing;
|
|
|
|
FT_Vector advance;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-03-30 17:41:09 +01:00
|
|
|
FT_BBox bbox; /* bounding box */
|
|
|
|
FT_Bool path_begun;
|
|
|
|
FT_Bool load_points;
|
|
|
|
FT_Bool no_recurse;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-03-30 17:41:09 +01:00
|
|
|
FT_Bool metrics_only;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-03-30 17:41:09 +01:00
|
|
|
void* hints_funcs; /* hinter-specific */
|
|
|
|
void* hints_globals; /* hinter-specific */
|
2001-12-12 17:07:29 +01:00
|
|
|
|
2001-01-03 01:17:58 +01:00
|
|
|
} CFF_Builder;
|
|
|
|
|
|
|
|
|
|
|
|
/* execution context charstring zone */
|
|
|
|
|
|
|
|
typedef struct CFF_Decoder_Zone_
|
|
|
|
{
|
|
|
|
FT_Byte* base;
|
|
|
|
FT_Byte* limit;
|
|
|
|
FT_Byte* cursor;
|
|
|
|
|
|
|
|
} CFF_Decoder_Zone;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct CFF_Decoder_
|
|
|
|
{
|
|
|
|
CFF_Builder builder;
|
2002-03-30 17:41:09 +01:00
|
|
|
CFF_Font cff;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Fixed stack[CFF_MAX_OPERANDS + 1];
|
|
|
|
FT_Fixed* top;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
|
|
|
CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1];
|
|
|
|
CFF_Decoder_Zone* zone;
|
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Int flex_state;
|
|
|
|
FT_Int num_flex_vectors;
|
|
|
|
FT_Vector flex_vectors[7];
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Pos glyph_width;
|
|
|
|
FT_Pos nominal_width;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Bool read_width;
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
FT_Bool width_only;
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Int num_hints;
|
2009-10-19 21:09:13 +02:00
|
|
|
FT_Fixed buildchar[CFF_MAX_TRANS_ELEMENTS];
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_UInt num_locals;
|
|
|
|
FT_UInt num_globals;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Int locals_bias;
|
|
|
|
FT_Int globals_bias;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Byte** locals;
|
|
|
|
FT_Byte** globals;
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2001-01-03 08:14:12 +01:00
|
|
|
FT_Byte** glyph_names; /* for pure CFF fonts only */
|
|
|
|
FT_UInt num_glyphs; /* number of glyphs in font */
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-08-28 00:34:20 +02:00
|
|
|
FT_Render_Mode hint_mode;
|
|
|
|
|
2009-06-28 01:25:55 +02:00
|
|
|
FT_Bool seac;
|
|
|
|
|
2001-01-03 01:17:58 +01:00
|
|
|
} CFF_Decoder;
|
|
|
|
|
|
|
|
|
2002-03-01 03:26:22 +01:00
|
|
|
FT_LOCAL( void )
|
2002-08-28 00:34:20 +02:00
|
|
|
cff_decoder_init( CFF_Decoder* decoder,
|
|
|
|
TT_Face face,
|
|
|
|
CFF_Size size,
|
|
|
|
CFF_GlyphSlot slot,
|
|
|
|
FT_Bool hinting,
|
|
|
|
FT_Render_Mode hint_mode );
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2007-06-06 12:05:49 +02:00
|
|
|
FT_LOCAL( FT_Error )
|
* src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added
to support charmaps for CFF fonts
* src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c,
src/cff/cffgload.h: adding support for CFF charmaps, reformatting the
sources, and removing some bugs in the Encoding and Charset loaders
2002-07-10 18:52:06 +02:00
|
|
|
cff_decoder_prepare( CFF_Decoder* decoder,
|
2008-05-15 01:05:38 +02:00
|
|
|
CFF_Size size,
|
2001-06-27 21:46:12 +02:00
|
|
|
FT_UInt glyph_index );
|
2001-01-03 01:17:58 +01:00
|
|
|
|
|
|
|
#if 0 /* unused until we support pure CFF fonts */
|
|
|
|
|
|
|
|
/* Compute the maximum advance width of a font through quick parsing */
|
2002-03-01 03:26:22 +01:00
|
|
|
FT_LOCAL( FT_Error )
|
* src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added
to support charmaps for CFF fonts
* src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c,
src/cff/cffgload.h: adding support for CFF charmaps, reformatting the
sources, and removing some bugs in the Encoding and Charset loaders
2002-07-10 18:52:06 +02:00
|
|
|
cff_compute_max_advance( TT_Face face,
|
2001-06-27 21:46:12 +02:00
|
|
|
FT_Int* max_advance );
|
2001-01-03 01:17:58 +01:00
|
|
|
|
|
|
|
#endif /* 0 */
|
|
|
|
|
2002-03-01 03:26:22 +01:00
|
|
|
FT_LOCAL( FT_Error )
|
* src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added
to support charmaps for CFF fonts
* src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c,
src/cff/cffgload.h: adding support for CFF charmaps, reformatting the
sources, and removing some bugs in the Encoding and Charset loaders
2002-07-10 18:52:06 +02:00
|
|
|
cff_decoder_parse_charstrings( CFF_Decoder* decoder,
|
|
|
|
FT_Byte* charstring_base,
|
* src/sfnt/ttpost.c (load_post_names, tt_face_free_ps_names,
tt_face_get_ps_name): Replace switch statement with if clauses to
make it more portable.
* src/cff/cffobjs.c (cff_face_init): Ditto.
* include/freetype/ftmodule.h (FT_Module_Class): Use `FT_Long' for
`module_size'.
* include/freetype/ftrender.h (FT_Glyph_Class_): Use `FT_Long' for
`glyph_size'.
* src/base/ftobjs.c (FT_Render_Glyph): Change second parameter to
`FT_Render_Mode'.
(FT_Render_Glyph_Internal): Change third parameter to
`FT_Render_Mode'.
* src/base/ftglyph.c (FT_Glyph_To_Bitmap): Change second parameter
to `FT_Render_Mode'.
* src/raster/ftrend1.c (ft_raster1_render): Change third parameter
to `FT_Render_Mode'.
* src/smooth/ftsmooth.c (ft_smooth_render, ft_smooth_render_lcd,
ft_smooth_render_lcd_v): Ditto.
(ft_smooth_render_generic): Change third and fifth parameter to
`FT_Render_Mode'.
* include/freetype/freetype.h, include/freetype/internal/ftobjs.h,
include/freetype/ftglyph.h: Updated.
* src/cff/cffdrivr.c (Load_Glyph), src/pcf/pcfdriver.c
(PCF_Glyph_Load), src/pfr/pfrobjs.c (pfr_slot_load),
src/winfonts/winfnt.c (FNT_Load_Glyph), src/t42/t42objs.c
(T42_GlyphSlot_Load), src/bdf/bdfdrivr.c (BDF_Glyph_Load): Change
fourth parameter to `FT_Int32'.
* src/pfr/pfrobjs.c (pfr_face_init): Add two missing parameters
and declare them as unused.
* src/cid/cidparse.h (CID_Parser): Use FT_Long for `postscript_len'.
* src/psnames/psnames.h (PS_Unicode_Value_Func): Change return
value to FT_UInt32.
* src/psnames/psmodule.c (ps_unicode_value, ps_build_unicode_table):
Updated accordingly.
* src/cff/cffdrivr.c (Get_Kerning): Use FT_Long for `middle'.
(cff_get_glyph_name): Use cast for result of ft_strlen.
* src/cff/cffparse.c (cff_parse_real): User cast for assigning
`exp'.
* src/cff/cffload.c (cff_index_get_pointers): Use FT_ULong for
some local variables.
(cff_charset_load, cff_encoding_load): Use casts to FT_UInt for some
switch statements.
(cff_font_load): Use cast in call to CFF_Load_FD_Select.
* src/cff/cffobjs.c (cff_size_init): Use more casts.
(cff_face_init): Use FT_Int32 for `flags'.
* src/cff/cffgload.c (cff_operator_seac): Use cast for assigning
`adx' and `ady'.
(cff_decoder_parse_charstrings): Use FT_ULong for third parameter.
Use more casts.
* src/cff/cffcmap.c (cff_cmap_unicode_init): Use cast for `count'.
* src/cid/cidload.c (cid_read_subrs): Use FT_ULong for `len'.
* src/cid/cidgload.c (cid_load_glyph): Add missing cast for
`cid_get_offset'.
* src/psaux/t1decode.c (t1_decoder_parse_charstrings) <18>: Use
cast for `num_points'.
(t1_decoder_init): Use cast for assigning `decoder->num_glyphs'.
* src/base/ftdebug.c (ft_debug_init): Use FT_Int.
* include/freetype/internal/ftdriver.h (FT_Slot_LoadFunc): Use
`FT_Int32' for fourth parameter.
* src/base/ftobjs.c (open_face): Use cast for calling
clazz->init_face.
* src/raster/ftraster.c (Set_High_Precision): Use `1' instead of
`1L'.
(Finalize_Profile_Table, Line_Up, ft_black_init): Use casts.
* src/raster/ftrend1.c (ft_raster1_render): Ditto.
* src/sfnt/sfnt_dir_check: Compare `magic' with unsigned long
constant.
* builds/amiga/include/freetype/config/ftmodule.h: Updated.
2002-09-27 13:09:23 +02:00
|
|
|
FT_ULong charstring_len );
|
2001-01-03 01:17:58 +01:00
|
|
|
|
2002-03-01 03:26:22 +01:00
|
|
|
FT_LOCAL( FT_Error )
|
* src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added
to support charmaps for CFF fonts
* src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c,
src/cff/cffgload.h: adding support for CFF charmaps, reformatting the
sources, and removing some bugs in the Encoding and Charset loaders
2002-07-10 18:52:06 +02:00
|
|
|
cff_slot_load( CFF_GlyphSlot glyph,
|
|
|
|
CFF_Size size,
|
2006-03-21 19:41:40 +01:00
|
|
|
FT_UInt glyph_index,
|
2002-08-28 00:34:20 +02:00
|
|
|
FT_Int32 load_flags );
|
2001-01-03 01:17:58 +01:00
|
|
|
|
|
|
|
|
|
|
|
FT_END_HEADER
|
|
|
|
|
|
|
|
#endif /* __CFFGLOAD_H__ */
|
|
|
|
|
|
|
|
|
|
|
|
/* END */
|