From c5f6cd72f6b2c8c5646ffd091763b861be0d0b2d Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Fri, 26 Jul 2002 09:09:10 +0000 Subject: [PATCH] Fixing ChangeLog entries. Some formatting. * src/truetype/ttgload.c (load_truetype_glyph) [FT_CONFIG_OPTION_INCREMENTAL]: s/memset/ft_memset/. * src/autohint/ahhint.c (ah_hint_edges_3): Fix compiler warning. * src/cff/cffload.c (cff_encoding_load): Remove `memory' variable. * src/cff/cffcmap.c (cff_cmap_encoding_init): Remove `psnames' variable. * src/truetype/ttgload.c (load_truetype_glyph): Remove statement without effect. * src/truetype/ttdriver (Get_Char_Index, Get_Next_Char): Removed. --- ChangeLog | 447 ++++++++++++++++++++-------- docs/DEBUG.TXT | 204 +++++++------ include/freetype/freetype.h | 191 ++++++------ include/freetype/fttrigon.h | 11 +- include/freetype/fttypes.h | 11 +- include/freetype/internal/ftdebug.h | 4 +- include/freetype/internal/ftobjs.h | 2 +- include/freetype/internal/pshints.h | 16 +- src/autohint/ahglyph.c | 7 +- src/autohint/ahhint.c | 48 +-- src/base/ftobjs.c | 15 +- src/base/ftsynth.c | 2 + src/cff/cffcmap.c | 8 +- src/cff/cffdrivr.c | 24 +- src/cff/cffgload.c | 66 ++-- src/cff/cffload.c | 22 +- src/cff/cffobjs.c | 18 +- src/cid/cidgload.c | 109 ++++--- src/cid/cidriver.c | 24 +- src/psaux/psobjs.c | 4 +- src/pshinter/pshglob.c | 2 +- src/sfnt/sfobjs.c | 6 +- src/sfnt/ttload.c | 46 +-- src/sfnt/ttload.h | 14 +- src/truetype/ttdriver.c | 106 ------- src/truetype/ttgload.c | 116 +++++--- src/truetype/ttobjs.c | 6 + src/type1/t1gload.c | 65 ++-- 28 files changed, 899 insertions(+), 695 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef1f6caca..c4c212cb7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,190 +1,380 @@ +2002-07-26 Werner Lemberg + + * src/truetype/ttgload.c (load_truetype_glyph) + [FT_CONFIG_OPTION_INCREMENTAL]: s/memset/ft_memset/. + + * src/autohint/ahhint.c (ah_hint_edges_3): Fix compiler warning. + * src/cff/cffload.c (cff_encoding_load): Remove `memory' variable. + * src/cff/cffcmap.c (cff_cmap_encoding_init): Remove `psnames' + variable. + * src/truetype/ttgload.c (load_truetype_glyph): Remove statement + without effect. + * src/truetype/ttdriver (Get_Char_Index, Get_Next_Char): Removed. + 2002-07-24 Graham Asher - * src/truetype/ttobjs.c: fix for bug reported by Sven Neumann [sven@gimp.org] - on the FreeType development forum: "If FT_CONFIG_OPTION_INCREMENTAL is undefined - (this is the default), the TrueType loader crashes in line 852 of src/truetype/ttgload.c - when it tries to access face->glyph_locations." + * src/truetype/ttobjs.c: Fix for bug reported by Sven Neumann + [sven@gimp.org] on the FreeType development forum: "If + FT_CONFIG_OPTION_INCREMENTAL is undefined (this is the default), the + TrueType loader crashes in line 852 of src/truetype/ttgload.c when + it tries to access face->glyph_locations." 2002-07-18 Graham Asher - * include/freetype/freetype.h: - Added types and structures to support incremental typeface loading. - The FT_Incremental_Interface structure, defined in freetype.h, - is designed to be passed to FT_Open_Face to provide callback - functions to obtain glyph recipes and metrics, for fonts like - those passed from PostScript that do not necessarily provide - all, or any, glyph information, when first opened. + Added types and structures to support incremental typeface loading. + The FT_Incremental_Interface structure, defined in freetype.h, is + designed to be passed to FT_Open_Face to provide callback functions + to obtain glyph recipes and metrics, for fonts like those passed + from PostScript that do not necessarily provide all, or any, glyph + information, when first opened. - * include/freetype/config/ftoption.h - Added a new configuration macro, FT_CONFIG_OPTION_INCREMENTAL, - to enable incremental face loading. By default it is not defined. + * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_INCREMENTAL): + New configuration macro to enable incremental face loading. By + default it is not defined. - * /src/base/ftobjs.c - Added incremental loading capability to FT_Open_Face. + * include/freetype/freetype.h (FT_Basic_Glyph_Metrics, + FT_Get_Glyph_Data_Func, FT_Get_Glyph_Metrics_Func, + FT_Incremental_Interface_Funcs, FT_Incremental_Interface) + [FT_CONFIG_OPTION_INCREMENTAL]: New. + (FT_Open_Args, FT_FaceRec) [FT_CONFIG_OPTION_INCREMENTAL]: New field + `incremental_interface'. + (FT_Open_Flags) [FT_CONFIG_OPTION_INCREMENTAL]: New enum + `ft_open_incremental'. - * /src/truetype/ttgload.c - Added the incremental loading system for the TrueType driver. + * include/freetype/fttypes.h: Include FT_CONFIG_CONFIG_H. + (FT_Data): New structure to represent binary data. - * /src/truetype/ttobjs.c - Added the incremental loading system for the TrueType driver. + * src/base/ftobjs.c (open_face) [FT_CONFIG_OPTION_INCREMENTAL]: + Add parameter for incremental loading. + (FT_Open_Face) [FT_CONFIG_OPTION_INCREMENTAL]: Use incremental + interface. - * /src/cid/cidgload.c - Added the incremental loading system for the CID driver. + * src/truetype/ttgload.c (load_truetype_glyph) + [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading system + for the TrueType driver. + (compute_glyph_metrics): Return FT_Error. + [FT_CONFIG_OPTION_INCREMENTAL]: Check for overriding metrics. + (TT_Load_Glyph) [FT_CONFIG_OPTION_INCREMENTAL]: Don't look for + the glyph table while handling an incremental font. + Get glyph offset. - * /src/sfnt/sfobjs.c - Changes to support incremental Type 42 fonts: assume a font has glyphs if it - has an incremental interface object. + * src/truetype/ttobjs.c (TT_Face_Init) + [FT_CONFIG_OPTION_INCOREMENTAL]: Added the incremental loading + system for the TrueType driver. - * /src/type1/t1gload.c - Added support for incrementally loaded Type 1 faces. + * src/cid/cidgload.c (cid_load_glyph) + [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading system + for the CID driver. + + * src/sfnt/sfobjs.c (SFNT_Load_Face) [FT_CONFIG_OPTION_INCREMENTAL]: + Changes to support incremental Type 42 fonts: Assume a font has + glyphs if it has an incremental interface object. + + * src/type1/t1gload.c (T1_Parse_Glyph): Renamed to... + (T1_Parse_Glyph_And_Get_Char_String): This. + [FT_CONFIG_OPTION_INCREMENTAL]: Added support for incrementally + loaded Type 1 faces. + (T1_Parse_Glyph): New function. + (T1_Load_Glyph): Updated. 2002-07-17 David Turner - * include/freetype/cache/ftccache.h, src/cache/ftccache.i, - src/cache/ftccache.c: cleaning up the cache sub-system code, linear - hashing is now the default + Cleaning up the cache sub-system code; linear hashing is now the + default. - * include/freetype/config/ftoption.h, include/freetype/internal/tttypes.h, - src/base/ftobjs.c, src/bdf/bdfdrivr.c, src/cff/cffobjs.c, - src/pcf/pcfdrivr.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c, - src/sfnt/ttcmap0.h, src/sfnt/ttload.c, src/type1/t1objs.c, - src/type42/t42objs.c, src/type42/t42objs.h, src/type42/t42drivr.c, - src/winfonts/winfnt.c: code cleanup, FT_CONFIG_OPTION_USE_CMAPS is now - the default + * include/freetype/cache/ftccache.h, src/cache/ftccache.i, + src/cache/ftccache.c [!FTC_CACHE_USE_LINEAR_HASHING]: Removed. + (FTC_CACHE_USE_LINEAR_HASHING: Removed also. - * src/sfnt/ttload.c (TT_Load_SFNT_Header): fixed a recent bug that prevented - OpenType fonts to be recognized by FreeType + FT_CONFIG_OPTION_USE_CMAPS is now the default. + + * include/freetype/internal/ftdriver.h (FT_Driver_ClassRec): Remove + `get_char_index' and `get_next_char'. + + * include/freetype/config/ftoption.h, + include/freetype/internal/tttypes.h, src/base/ftobjs.c, + src/bdf/bdfdrivr.c, src/cff/cffobjs.c, src/pcf/pcfdrivr.c, + src/pfr/pfrdrivr.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c, + src/sfnt/ttcmap0.h, src/sfnt/ttload.c, src/type1/t1objs.c, + src/type42/t42objs.c, src/winfonts/winfnt.c + [!FT_CONFIG_OPTION_USE_CMAPS]: Removed. The new cmap code is now + the default. + + * src/type42/t42objs.c (T42_CMap_CharIndex, T42_CMap_CharNext): + Removed. + * src/type42/t42objs.h: Updated. + + * src/cid/cidriver.c (Cid_Get_Char_Index, Cid_Get_Next_Char): + Removed. + (t1_cid_driver_class): Updated. + * src/truetype/ttdriver.c (tt_driver_class): Updated. + * src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Removed + (t1_driver_class): Updated. + * src/type42/t42drivr.c (t42_driver_class): Updated. + + * src/base/ftobjs.c (open_face): Select Unicode cmap by default. + + * src/sfnt/ttload.c (TT_Load_SFNT_Header): Fixed a recent bug that + prevented OpenType fonts to be recognized by FreeType. 2002-07-11 David Turner - * src/sfnt/ttload.c, src/sfnt/ttload.h, src/sfnt/ttdriver.c: changing - the SFNT loader to check for SFNT-based font files differently. We now - ignore the range "helper" fields and check the "head" table's magic - number instead. + Changing the SFNT loader to check for SFNT-based font files + differently. We now ignore the range "helper" fields and check the + "head" table's magic number instead. - * src/base/ftobject.c, src/base/fthash.c: updated object sub-system and - dynamic hash table implementation (still experimental, don't use) + * include/freetype/internal/tttypes.h (SFNT_HeaderRec): Add `offset' + field. - * include/freetype/t1tables.h, include/freetype/internal/psaux.h, - src/psaux/psobjs.c, src/type1/t1load.c, src/type1/t1tokens.h: - fixing a bug in the Type 1 loader that prevented valid font bounding - boxes to be loaded from multiple master fonts. + * src/sfnt/ttload.c (sfnt_dir_check): New function. + (TT_Load_SFNT_HeaderRec): Renamed to... + (TT_Load_SFNT_Header): This. + Implement new functionality. + * src/sfnt/ttload.h: Updated. + * src/sfnt/sfdriver.c (sfnt_interface): Updated. + + * src/base/ftobject.c, src/base/fthash.c: Updated object sub-system + and dynamic hash table implementation (still experimental, don't + use). + * include/freetype/internal/fthash.h: Updated. + * include/freetype/internal/ftobjs.h (FT_LibraryRec): New member + `meta_class'. + + Fixing a bug in the Type 1 loader that prevented valid font bounding + boxes to be loaded from multiple master fonts. + + * include/freetype/t1tables.h (PS_BlendRec): Add `bboxes' field. + + * include/freetype/internal/psaux.h (T1_FieldType): Add + `T1_FIELD_TYPE_BBOX'. + (T1_FieldLocation): Add `T1_FIELD_LOCATION_BBOX'. + (T1_FIELD_BBOX): New macro. + + * src/psaux/psobjs.c (PS_Parser_LoadField): Handle T1_FIELD_TYPE_BBOX. + * src/type1/t1load.c (t1_allocate_blend): Create blend->bboxes. + (T1_Done_Blend): Free blend->bboxes. + (t1_load_keyword): Handle T1_FIELD_LOCATION_BBOX. + (parse_font_bbox): Commented out. + (t1_keywords): Comment out `parse_font_bbox'. + * src/type1/t1tokens.h: Define `FontBBox' field. 2002-07-10 David Turner - * src/cff/cffobjs.c: small fix to select the Unicode charmap by default - when needed + * src/cff/cffobjs.c: Small fix to select the Unicode charmap by + default when needed. + Small fix to allow OpenType fonts to support Adobe charmaps when + needed. - * src/cff/cffobjs.c: small fix to allow OpenType fonts to support Adobe - charmaps when needed. + * src/cff/cffcmap.c, src/cff/cffcmap.h: New files to support + charmaps for CFF fonts. - * src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added - to support charmaps for CFF fonts + * src/cff/cff.c, src/cff/Jamfile, src/cff/rules.mk: Updated. - * 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 + * include/freetype/internal/cfftypes.h (CFF_EncodingRec): Use + fixed-length arrays for `sids' and `codes'. Add `count' member. + (CFF_FontRec): Add `psnames' member. -2002-07-09 Owen Taylor + * src/cff/cffdrivr.c, 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. + Many fonts renamed to use lowercase only: - * src/pshinter/pshglob.c: fixed a bug that prevented the hinter from using - correct standard width and height values. resulting in hinting bugs with - certain fonts (e.g. Utopia) + CFF_Builder_Init -> cff_builder_init + CFF_Builder_Done -> cff_builder_done + CFF_Init_Decoder -> cff_decoder_init + CFF_Parse_CharStrings -> cff_decoder_parse_charstrings + CFF_Load_Glyph -> cff_slot_load + CFF_Init_Decoder -> cff_decoder_init + CFF_Prepare_Decoder -> cff_decoder_prepare + CFF_Get_Standard_Encoding -> cff_get_standard_encoding + CFF_Access_Element -> cff_index_access_element + CFF_Forget_Element -> cff_index_forget_element + CFF_Get_Name -> cff_index_get_name + CFF_Get_String -> cff_index_get_sid_string + CFF_Get_FD -> cff_fd_select_get + CFF_Done_Charset -> cff_charset_done + CFF_Load_Charset -> cff_charset_load + CFF_Done_Encoding -> cff_encoding_done + CFF_Load_Encoding -> cff_encoding_load + CFF_Done_SubFont -> cff_subfont_done + CFF_Load_Font -> cff_font_load + CFF_Done_Font -> cff_font_done + CFF_Size_Get_Global_Funcs -> cff_size_get_global_funcs + CFF_Size_Done -> cff_size_done + CFF_Size_Init -> cff_size_init + CFF_Size_Reset -> cff_size_reset + CFF_GlyphSlot_Done -> cff_slot_done + CFF_GlyphSlot_Init -> cff_slot_init + CFF_StrCopy -> cff_strcpy + CFF_Face_Init -> cff_face_init + CFF_Face_Done -> cff_face_done + CFF_Driver_Init -> cff_driver_init + CFF_Driver_Done -> cff_driver_done + CFF_Parser_Init -> cff_parser_init + CFF_Parser_Run -> cff_parser_run + + add_point -> cff_builder_add_point + add_point1 -> cff_builder_add_point1 + add_contour -> cff_builder_add_contour + close_contour -> cff_builder_close_contour + cff_explicit_index -> cff_index_get_pointers + +2002-07-09 Owen Taylor + + * src/pshinter/pshglob.c (psh_globals_new): Fixed a bug that + prevented the hinter from using correct standard width and height + values, resulting in hinting bugs with certain fonts (e.g. Utopia). 2002-07-07 David Turner - * src/base/ftglyph.c (FT_Glyph_To_Bitmap): added code to return succesfully - when the function is called with a bitmap glyph (the previous code simply - returned with an error) + * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Added code to return + successfully when the function is called with a bitmap glyph (the + previous code simply returned with an error). - * docs/DEBUG.TXT: adding debugging support documentation + * docs/DEBUG.TXT: Adding debugging support documentation. - * src/base/ftdebug.c (ft_debug_init), builds/win32/ftdebug.c - (ft_debug_init), builds/amiga/src/ftdebug.c (ft_debug_init): changed the - syntax of the FT2_DEBUG environment variable used to control debugging - output (i.e. logging and error messages). It must now look like: + * src/base/ftdebug.c (ft_debug_init), builds/win32/ftdebug.c + (ft_debug_init), builds/amiga/src/ftdebug.c (ft_debug_init): Changed + the syntax of the FT2_DEBUG environment variable used to control + debugging output (i.e. logging and error messages). It must now + look like: - any:6 memory:4 io:3 or - any:6,memory:4,io:3 or - any:6;memory:4;io:3 + any:6 memory:4 io:3 or + any:6,memory:4,io:3 or + any:6;memory:4;io:3 2002-07-07 Owen Taylor - * src/pshinter/pshglob.h, src/pshinter/pshglob.c: adding support for - blue fuzz + * src/pshinter/pshglob.c (psh_blues_snap_stem): Adding support for + blue fuzz. + * src/pshinter/pshglob.h (PSH_BluesRec): Add `blue_fuzz' field. + * src/type1/t1load.c (T1_Open_Face): Initialize `blue_fuzz'. - * include/freetype/freetype.h, src/base/ftobjs.h, - freetype/internal/ftobjs.h, freetype/internal/psaux.h, - freetype/internal/pshints.h, src/psaux/t1decode.c, src/cff/cffgload.h, - src/cff/cffgload.c, src/pshinter/pshalgo1.h, src/pshinter/pshalgo1.c, - src/pshinter/pshalgo2.h, src/pshinter/pshalgo2.c, src/pshinter/pshalgo3.h, - src/pshinter/pshalgo3.c: Adding support for hinter-specific bit flags, - and the new FT_Set_Hint_Flags high-level API + Adding support for hinter-specific bit flags, and the new + FT_Set_Hint_Flags high-level API. + + * include/freetype/freetype.h (FT_Set_Hint_Flags): New function. + (FT_HINT_NO_INTEGER_STEM, FT_HINT_NO_HSTEM_ALIGN, + FT_HINT_NO_VSTEM_ALIGN): New macros. + + * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Add + `hint_flags' member. + + * src/base/ftobjs.c (FT_Set_Hint_Flags): New function. + + * include/freetype/internal/psaux.h (T1_DecoderRec): Add `hint_flags' + member. + + * include/freetype/internal/pshints.h (T1_Hints_ApplyFunc, + T2_Hints_ApplyFunc): Add parameter to pass hint flags. + + * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings, + T1_Decoder_Init): Use decoder->hint_flags. + * src/cff/cffgload.h (CFF_Builder): Add `hint_flags' field. + * src/cff/cffgload.c (CFF_Builder_Init): Set builder->hint_flags. + (CFF_Parse_CharStrings): Updated. + * src/pshinter/pshalgo1.c (ps1_hints_apply): Add parameter to handle + hint flags (unused). + * src/pshinter/pshalgo1.h: Updated. + * src/pshinter/pshalgo2.c (ps2_hints_apply): Add parameter to handle + hint flags (unused). + * src/pshinter/pshalgo2.h: Updated. + * src/pshinter/pshalgo3.c (ps3_hints_apply): Add parameter to handle + hint flags. + * src/pshinter/pshalgo3.h: Updated. 2002-07-04 David Turner - * src/pfr/pfrobjs.c (pfr_slot_load): fixed a small bug that returned - incorrect advances when the outline resolution was different from the - metrics resolution + * src/pfr/pfrobjs.c (pfr_slot_load): Fixed a small bug that returned + incorrect advances when the outline resolution was different from + the metrics resolution. - * src/autohint/ahhint.c: removing compiler warnings + * src/autohint/ahhint.c: Removing compiler warnings. - * src/autohint/ahglyph.c: slight improvements to the serif detection - code. More work is needed though.. + * src/autohint/ahglyph.c: s/FT_MEM_SET/FT_ZERO/ where appropriate. + (ah_outline_link_segments): Slight improvements to the serif + detection code. More work is needed though. 2002-07-03 David Turner - * src/autohint/ahglobal.c, src/autohint/ahtypes.h, src/autohint/ahhint.c: - small improvements to the automatic hinter. un-even stem-widths have now - disappeared and everything looks much better, even if there are still - issues with serifed fonts. + Small improvements to the automatic hinter. Uneven stem-widths have + now disappeared and everything looks much better, even if there are + still issues with serifed fonts. + + * src/autohint/ahtypes.h (AH_Globals): Added `stds' array. + * src/autohint/ahhint.c (OPTIM_STEM_SNAP): New #define. + (ah_snap_width): Commented out. + (ah_align_linked_edge): Renamed to... + (ah_compute_stem_width): This. + Don't allow uneven stem-widths. + (ah_align_linked_edge): New function. + (ah_align_serifed_edge): Don't strengthen serifs. + (ah_hint_edges_3, ah_hinter_scale_globals): Updated. 2002-07-03 Owen Taylor - * src/pshinter/pshalgo3.c, src/pshinter/pshalgo3.h, src/pshinter/pshalgo.h, - src/pshinter/pshinter.c: adding new algorithm based on Owen Taylor's recent - work + Adding new algorithm based on Owen Taylor's recent work. + + * src/pshinter/pshalgo3.c, src/pshinter/pshalgo3.h: New files. + * src/pshinter/pshalgo.h: Updated. + Use pshalgo3 by default. + * src/pshinter/pshinter.c: Include pshalgo3.c. + + * src/pshinter/Jamfile, src/pshinter/rules.mk: Updated. 2002-07-01 Owen Taylor - * src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points): fix a bug - where, if a glyph has more than hint mask, the second mask gets applied - to points that should have been covered by the first mask. + * src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points): Fix a bug + where, if a glyph has more than hint mask, the second mask gets + applied to points that should have been covered by the first mask. 2002-07-01 Keith Packard - * src/sfnt/ttcmap0.c: fixing the cmap 8 and 12 parsing routines + * src/sfnt/ttcmap0.c (tt_cmap8_char_next, tt_cmap12_char_next): + Fixing the cmap 8 and 12 parsing routines. -2002-07-01 David Turner +2002-07-01 David Turner - * include/freetype/ftsynth.h, src/base/ftsynth.c: rewriting the automatic - style synthesis functions, now renamed to FT_GlyphSlot_Oblique and - FT_GlyphSlot_Embolden + * src/base/ftsynth.c: Include FT_TRIGONOMETRY_H. + (FT_Outline_Embolden): Renamed to... + (FT_GlyphSlot_Embolden): This. + Updated to new trigonometric functions. + (FT_Outline_Oblique): Renamed to... + (FT_GlyphSlot_Oblique): This. + (ft_norm): Removed. + * include/freetype/ftsynth.h: Updated. -2002-06-26 David Turner +2002-06-26 David Turner - * include/freetype/internal/ftobject.h: updating the object sub-system - definitions (still experimental) + * include/freetype/internal/ftobject.h: Updating the object + sub-system definitions (still experimental). - * src/base/fthash.c (ft_hash_remove): fixing a small reallocation bug + * src/base/fthash.c (ft_hash_remove): Fixing a small reallocation + bug. - * include/freetype/fttrigon.h, src/base/fttrigon.c: adding - FT_Vector_From_Polar and FT_Angle_Diff to the trigonometric functions + * src/base/fttrigon.c (FT_Vector_From_Polar, FT_Angle_Diff): New + functions. + * include/freetype/fttrigon.h: Updated. - * include/freetype/ftstroker.h, src/base/ftstroker.c, src/base/Jamfile: - adding path stroker component (work in progress) - * src/truetype/ttgload.c (TT_Load_Composite_Glyph), - src/base/ftoutln.c (FT_Vector_Transform): fixed Werner's latest - fix. FT_Vector_Transform wasn't buggy, the TrueType composite loader - was... + Adding path stroker component (work in progress). + + * include/freetype/ftstroker.h, src/base/ftstroker.c: New files. + * src/base/Jamfile: Updated. + + * include/freetype/config/ftheader.h (FT_STROKER_H): New macro. + + + * src/truetype/ttgload.c (TT_Load_Composite_Glyph), + src/base/ftoutln.c (FT_Vector_Transform): Fixed Werner's latest fix. + FT_Vector_Transform wasn't buggy, the TrueType composite loader was. 2002-06-24 Werner Lemberg * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3. - 2002-06-21 David Turner @@ -272,7 +462,7 @@ Updated Win32/VC++ projects to include the new PFR driver. - * builds\win32\visualc\freetype.dsp: Updated. + * builds/win32/visualc/freetype.dsp: Updated. 2002-06-16 Anthony Fok @@ -814,16 +1004,21 @@ function. This will be used in the near future to panic in case of unexpected exception (which shouldn't happen in theory). - * include/freetype/internal/fthash.h, src/base/fthash.c: Adding a - generic implementation of dynamic hash tables using a linear - algorithm (to get rid of `stalls' during resizes). This will be - used in the future in at least three parts of the library: the cache + * include/freetype/internal/fthash.h, src/base/fthash.c: New files. + This is generic implementation of dynamic hash tables using a linear + algorithm (to get rid of `stalls' during resizes). In the future + this will be used in at least three parts of the library: the cache sub-system, the object sub-system, and the memory debugger. - * include/freetype/internal/ftcore.h: Added this header file to - group all new definitions related to exception handling and memory - management. It is very likely that this file will disappear or be - renamed in the future. + * src/base/Jamfile: Updated. + + * include/freetype/internal/internal.h (FT_INTERNAL_HASH_H, + FT_INTERNAL_OBJECT_H): New macros. + + * include/freetype/internal/ftcore.h: New file to group all new + definitions related to exception handling and memory management. It + is very likely that this file will disappear or be renamed in the + future. * include/freetype/internal/ftobject.h, include/freetype/ftsysmem.h: Adding comments to better explain the object sub-system as well as diff --git a/docs/DEBUG.TXT b/docs/DEBUG.TXT index 86ffbcfa5..ef7faa19e 100644 --- a/docs/DEBUG.TXT +++ b/docs/DEBUG.TXT @@ -1,164 +1,162 @@ Debugging within the FreeType sources: ====================================== -I. Configuration macros: -======================== +I. Configuration macros +----------------------- -There are several ways to enable debugging features in a FreeType 2 builds. -This is controled through the definition of special macros located in the -file "ftoptions.h". The macros are: +There are several ways to enable debugging features in a FreeType 2 +builds. This is controlled through the definition of special macros +located in the file "ftoptions.h". The macros are: - FT_DEBUG_LEVEL_ERROR :: + FT_DEBUG_LEVEL_ERROR - #define this macro if you want to compile the FT_ERROR macro calls - used to print error messages during program execution. This will not - stop the program, but is very useful to spot invalid fonts during - development and code wordarounds for them. + #define this macro if you want to compile the FT_ERROR macro calls + used to print error messages during program execution. This will + not stop the program, but is very useful to spot invalid fonts + during development and code wordarounds for them. + FT_DEBUG_LEVEL_TRACE - FT_DEBUG_LEVEL_TRACE :: + #define this macro if you want to compile both the FT_ERROR macro + and the FT_TRACE one. This also includes the variants FT_TRACE0, + FT_TRACE1, FT_TRACE2, ..., FT_TRACE6. - #define this macro if you want to compile both the FT_ERROR macro and - the FT_TRACE one. This also includes the variants FT_TRACE0, FT_TRACE1, - FT_TRACE2, ..., FT_TRACE6. + The trace macros are used to send debugging messages when an + appropriate "debug level" is configured at runtime through the + FT2_DEBUG environment variable (more on this later). - The trace macros are used to send debugging messages when an appropriate - "debug level" is configured at runtime through the FT2_DEBUG environment - variable (more on this later) + FT_DEBUG_MEMORY + If this macro is #defined, the FreeType engines is linked with a + small but effective debugging memory manager that tracks all + allocations and frees that are performed within the font engine. - FT_DEBUG_MEMORY :: - - when this macro is #defined, the FreeType engines is linked with a small - but effective debugging memory manager that tracks all allocations and - frees that are performed within the font engine. - - When the FT2_DEBUG_MEMORY environment variable is defined at runtime, a - call to FT_Done_FreeType will dump memory statistics, including the list of - leaked memory blocks with the source locations where these were allocated. - It's always a very good idea to define this in development builds. This - works with _any_ program linked to FreeType, but requires a big deal of - memory (the debugging memory manager never frees the blocks to the - heap in order to detect double frees). + When the FT2_DEBUG_MEMORY environment variable is defined at + runtime, a call to FT_Done_FreeType will dump memory statistics, + including the list of leaked memory blocks with the source locations + where these were allocated. It's always a very good idea to define + this in development builds. This works with _any_ program linked to + FreeType, but requires a big deal of memory (the debugging memory + manager never frees the blocks to the heap in order to detect double + frees). When FT2_DEBUG_MEMORY isn't defined at runtime, the debugging memory manager is ignored, and performance is un-affected. -II. Debugging macros: -===================== +II. Debugging macros +-------------------- - Several macros can be used within the FreeType sources to help debugging - its code: +Several macros can be used within the FreeType sources to help debugging +its code: - 1. FT_ERROR(( .. )) + 1. FT_ERROR(( ... )) - this macro is used to send debug messages that indicate relatively serious - errors (like broken font files), but will not stop the execution of the - running program. Its code is compiled only when either FT_DEBUG_LEVEL_ERROR - or FT_DEBUG_LEVEL_TRACE are defined in "ftoption.h" + This macro is used to send debug messages that indicate relatively + serious errors (like broken font files), but will not stop the + execution of the running program. Its code is compiled only when + either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined in + "ftoption.h". - Note that you must use with a printf-like signature, but with double - parentheses, like in: + Note that you must use with a printf-like signature, but with double + parentheses, like in: - FT_ERROR(( "your %s is not %s\n", "foo", "bar" )); + FT_ERROR(( "your %s is not %s\n", "foo", "bar" )); - 2. FT_ASSERT( condition ) + 2. FT_ASSERT( condition ) - this macro is used to check strong assertions at runtime. If its condition - isn't TRUE, the program will abort with a panic message. Its code is - compiled when either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are - defined. You don't need double-parentheses here. For example: + This macro is used to check strong assertions at runtime. If its + condition isn't TRUE, the program will abort with a panic message. + Its code is compiled when either FT_DEBUG_LEVEL_ERROR or + FT_DEBUG_LEVEL_TRACE are defined. You don't need double-parentheses + here. For example: - FT_ASSERT( ptr != NULL ); + FT_ASSERT( ptr != NULL ); - 3. FT_TRACE( level, (message...) ) + 3. FT_TRACE( level, (message...) ) - the FT_TRACE macro is used to send general-purpose debugging messages - during program execution. This macro uses an *implicit* macro named - FT_COMPONENT used to name the current FreeType component being run. + The FT_TRACE macro is used to send general-purpose debugging + messages during program execution. This macro uses an *implicit* + macro named FT_COMPONENT used to name the current FreeType component + being run. - The developer should always define FT_COMPONENT as appropriate, for - example as in: + The developer should always define FT_COMPONENT as appropriate, for + example as in: - #undef FT_COMPONENT - #define FT_COMPONENT trace_io + #undef FT_COMPONENT + #define FT_COMPONENT trace_io - the value of the FT_COMPONENT macro is an enumeration named trace_XXXX - where XXXX is one of the component names defined in the internal file - + The value of the FT_COMPONENT macro is an enumeration named + trace_XXXX where XXXX is one of the component names defined in the + internal file . - Each such component is assigned a "debug level", ranging from 0 to 6 - when a program linked with FreeType starts, through the use of the FT2_DEBUG - environment variable, described later. + Each such component is assigned a "debug level", ranging from 0 to 6 + when a program linked with FreeType starts, through the use of the + FT2_DEBUG environment variable, described later. - When FT_TRACE is called, its level is compared to the one of the - corresponding component. Messages with trace levels *higher* than the - corresponding component level are filtered and never printed. + When FT_TRACE is called, its level is compared to the one of the + corresponding component. Messages with trace levels *higher* than + the corresponding component level are filtered and never printed. - this means that trace messages with level 0 are always printed, those - with level 2 are only printed when the component level is *at least* 2 + This means that trace messages with level 0 are always printed, + those with level 2 are only printed when the component level is *at + least* 2. - The second parameter to FT_TRACE must contain parentheses and correspond - to a print-like call, as in: + The second parameter to FT_TRACE must contain parentheses and + correspond to a print-like call, as in: - FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) ) + FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) ) - The shortcut macros FT_TRACE0, FT_TRACE1, FT_TRACE2_, ... FT_TRACE6 can - be used with constant level indices, and are much cleaner to use, as in + The shortcut macros FT_TRACE0, FT_TRACE1, FT_TRACE2_, ... FT_TRACE6 + can be used with constant level indices, and are much cleaner to + use, as in FT_TRACE2(( "your %s is not %s\n", "foo", "bar" )); -III. Environment variables: -=========================== +III. Environment variables +-------------------------- - The following environment variables control debugging output and behaviour - of FreeType at runtime: +The following environment variables control debugging output and +behaviour of FreeType at runtime: FT2_DEBUG - this variable is only used when FreeType is built with FT_DEBUG_LEVEL_TRACE - defined. It contains a list of component level definitions, following this - format: - component1:level1 component2:level2 component3:level3 ... + This variable is only used when FreeType is built with + FT_DEBUG_LEVEL_TRACE defined. It contains a list of component level + definitions, following this format: + + component1:level1 component2:level2 component3:level3 ... where "componentX" is the name of a tracing component, as defined in - "fttrace.h", but without the "trace_" prefix, and "levelX" is the + "fttrace.h", but without the "trace_" prefix, and "levelX" is the corresponding level to use at runtime. - "any" is a special component name that will be interpreted as - "any/all components". For example, the following definitions + "any" is a special component name that will be interpreted as + "any/all components". For example, the following definitions set FT2_DEBUG=any:2 memory:5 io:4 (on Windows) export FT2_DEBUG="any:2 memory:5 io:4" (on Linux) - both stipulate that all components should have level 2, except for the - memory and io components which will be set to trace levels 5 and 4 - respectively. - + both stipulate that all components should have level 2, except for + the memory and io components which will be set to trace levels 5 and + 4 respectively. FT2_DEBUG_MEMORY - this environment variable, when defined, tells FreeType to use a debugging - memory manager that will track leaked memory blocks as well as other common - errors like double frees. It is also capable of reporting _where_ the - leaked blocks were allocated, which considerably saves time when - debugging new additions to the library. - This code is only compiled when FreeType is built with the FT_DEBUG_MEMORY - macro #defined in "ftoption.h" though, it will be ignored in other builds. + This environment variable, when defined, tells FreeType to use a + debugging memory manager that will track leaked memory blocks as + well as other common errors like double frees. It is also capable + of reporting _where_ the leaked blocks were allocated, which + considerably saves time when debugging new additions to the library. + + This code is only compiled when FreeType is built with the + FT_DEBUG_MEMORY macro #defined in "ftoption.h" though, it will be + ignored in other builds. -Voila, - -- David Turner - - - - used like printf( format, ... ), but with double quotes. This will - send a message to the standard error descriptor (stderr on most systems) - in certain builds of the library \ No newline at end of file +End of file diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index f53608d04..c64b7b900 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -207,21 +207,22 @@ FT_BEGIN_HEADER /* FT_Basic_Glyph_Metrics */ /* */ /* */ - /* A small glyph metrics structure used to return information */ - /* for incrementally defined fonts (see FT_Incremental_Interface). */ + /* A small glyph metrics structure used to return information for */ + /* incrementally defined fonts (see @FT_Incremental_Interface). */ /* */ /* */ /* bearing_x :: Left side bearing in font units. */ /* */ /* bearing_y :: Top side bearing in font units. */ /* */ - /* advance :: Advance in font units. */ + /* advance :: Advance in font units. */ /* */ - typedef struct FT_Basic_Glyph_Metrics_ + typedef struct FT_Basic_Glyph_Metrics_ { - FT_Long bearing_x; - FT_Long bearing_y; - FT_Long advance; + FT_Long bearing_x; + FT_Long bearing_y; + FT_Long advance; + } FT_Basic_Glyph_Metrics; #endif /* #ifdef FT_CONFIG_OPTION_INCREMENTAL */ @@ -508,6 +509,7 @@ FT_BEGIN_HEADER #ifdef FT_CONFIG_OPTION_INCREMENTAL + /*************************************************************************/ /* */ @@ -515,23 +517,26 @@ FT_BEGIN_HEADER /* FT_Get_Glyph_Data_Func */ /* */ /* */ - /* A type definition for a function to get glyph data from a */ - /* face that supplies glyph data incrementally, after the face */ - /* object has been created */ + /* A type definition for a function to get glyph data from a face */ + /* that supplies glyph data incrementally, after the face object has */ + /* been created. */ /* */ /* */ - /* object :: a pointer to the user's data, specified by the 'object' */ - /* field in FT_Incremental_Interface */ + /* object :: A pointer to the user's data, specified by the `object' */ + /* field in @FT_Incremental_Interface. */ /* */ - /* index :: the glyph index */ + /* index :: The glyph index. */ /* */ /* */ - /* data :: the position and length of the data */ + /* data :: The position and length of the data. */ /* */ /* */ - /* a standard error code */ + /* FreeType error code. O means success. */ /* */ - typedef FT_Error (*FT_Get_Glyph_Data_Func)(void* object,FT_UInt index,FT_Data* data); + typedef FT_Error + (*FT_Get_Glyph_Data_Func)( void* object, + FT_UInt index, + FT_Data* data ); /*************************************************************************/ @@ -540,26 +545,30 @@ FT_BEGIN_HEADER /* FT_Get_Glyph_Metrics_Func */ /* */ /* */ - /* A type definition for a function to get glyph metrics from a */ - /* face that supplies glyph metrics incrementally, after the face */ - /* object has been created */ + /* A type definition for a function to get glyph metrics from a face */ + /* that supplies glyph metrics incrementally, after the face object */ + /* has been created. */ /* */ /* */ - /* object :: a pointer to the user's data, specified by the 'object' */ - /* field in FT_Incremental_Interface */ + /* object :: A pointer to the user's data, specified by the */ + /* `object' field in @FT_Incremental_Interface. */ /* */ - /* index :: the glyph index */ + /* index :: The glyph index. */ /* */ - /* vertical :: true for vertical layout, false for horizontal layout */ + /* vertical :: True for vertical layout, false for horizontal layout. */ /* */ /* */ - /* metrics :: the glyph metrics in font units */ + /* metrics :: The glyph metrics in font units. */ /* */ /* */ - /* a standard error code */ + /* FreeType error code. O means success. */ /* */ - typedef FT_Error (*FT_Get_Glyph_Metrics_Func)(void* object,FT_UInt index,FT_Bool vertical, - FT_Basic_Glyph_Metrics* metrics,FT_Bool* found); + typedef FT_Error + (*FT_Get_Glyph_Metrics_Func)( void* object, + FT_UInt index, + FT_Bool vertical, + FT_Basic_Glyph_Metrics* metrics, + FT_Bool* found ); /*************************************************************************/ @@ -569,20 +578,21 @@ FT_BEGIN_HEADER /* */ /* */ /* A table of functions for accessing fonts that load data */ - /* incrementally. Used in FT_Incremental_Interface */ + /* incrementally. Used in @FT_Incremental_Interface. */ /* */ /* */ - /* get_glyph_data :: The function to get glyph data. Must not be */ - /* null. */ + /* get_glyph_data :: The function to get glyph data. Must not be */ + /* null. */ /* */ - /* get_glyph_metrics :: The function to get glyph metrics. May be */ + /* get_glyph_metrics :: The function to get glyph metrics. May be */ /* null if the font does not provide */ /* overriding glyph metrics. */ /* */ - typedef struct FT_Incremental_Interface_Funcs_ + typedef struct FT_Incremental_Interface_Funcs_ { - FT_Get_Glyph_Data_Func get_glyph_data; - FT_Get_Glyph_Metrics_Func get_glyph_metrics; + FT_Get_Glyph_Data_Func get_glyph_data; + FT_Get_Glyph_Metrics_Func get_glyph_metrics; + } FT_Incremental_Interface_Funcs; @@ -592,28 +602,30 @@ FT_BEGIN_HEADER /* FT_Incremental_Interface */ /* */ /* */ - /* This interface structure is provided to FT_Open_Face to allow */ - /* incremental faces to be opened. */ + /* This interface structure is provided to @FT_Open_Face to allow */ + /* incremental faces to be opened. */ /* */ - /* A incremental face supplies no glyph data when it is opened. */ - /* Instead the glyph data is supplied using a callback function. */ - /* Optionally, metrics that override the metrics in the typeface */ - /* data can also be supplied using another callback function. */ + /* An incremental face supplies no glyph data when it is opened. */ + /* Instead, the glyph data is supplied using a callback function. */ + /* Optionally, metrics that override the metrics in the typeface data */ + /* can also be supplied using another callback function. */ /* */ /* */ - /* funcs :: The table of functions */ + /* funcs :: The table of functions. */ /* */ - /* object :: The pointer passed to the functions. Usually it */ - /* points to the object from which glyph and metric */ - /* data is obtained. */ + /* object :: The pointer passed to the functions. Usually it points */ + /* to the object from which glyph and metric data is */ + /* obtained. */ /* */ - typedef struct FT_Incremental_Interface_ - { - const FT_Incremental_Interface_Funcs* funcs; - void* object; + typedef struct FT_Incremental_Interface_ + { + const FT_Incremental_Interface_Funcs* funcs; + void* object; + } FT_Incremental_Interface; -#endif /* #ifdef FT_CONFIG_OPTION_INCREMENTAL */ + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ /*************************************************************************/ @@ -848,7 +860,7 @@ FT_BEGIN_HEADER FT_Face_Internal internal; #ifdef FT_CONFIG_OPTION_INCREMENTAL - FT_Incremental_Interface* incremental_interface; + FT_Incremental_Interface* incremental_interface; #endif /*@private end */ @@ -1578,18 +1590,20 @@ FT_BEGIN_HEADER /* `flags' field of the @FT_Open_Args structure. */ /* */ /* */ - /* ft_open_memory :: This is a memory-based stream. */ + /* ft_open_memory :: This is a memory-based stream. */ /* */ - /* ft_open_stream :: Copy the stream from the `stream' field. */ + /* ft_open_stream :: Copy the stream from the `stream' field. */ /* */ - /* ft_open_pathname :: Create a new input stream from a C pathname. */ + /* ft_open_pathname :: Create a new input stream from a C */ + /* path name. */ /* */ - /* ft_open_driver :: Use the `driver' field. */ + /* ft_open_driver :: Use the `driver' field. */ /* */ - /* ft_open_params :: Use the `num_params' & `params' field. */ + /* ft_open_params :: Use the `num_params' & `params' field. */ /* */ - /* ft_open_incremental :: Use the 'incremental_interface' field. */ - /* (Available if FT_CONFIG_OPTION_INCREMENTAL is defined.) */ + /* ft_open_incremental :: Use the 'incremental_interface' field. */ + /* (Available if @FT_CONFIG_OPTION_INCREMENTAL */ + /* is defined.) */ /* */ /* */ /* The `ft_open_memory', `ft_open_stream', and `ft_open_pathname' */ @@ -1603,7 +1617,7 @@ FT_BEGIN_HEADER ft_open_driver = 8, ft_open_params = 16 #ifdef FT_CONFIG_OPTION_INCREMENTAL - ,ft_open_incremental = 32 + ,ft_open_incremental = 32 #endif } FT_Open_Flags; @@ -1666,10 +1680,10 @@ FT_BEGIN_HEADER /* params :: Extra parameters passed to the font driver when */ /* opening a new face. */ /* */ - /* incremental_interface :: If non-null, an interface used to */ - /* implement incremental font loading. This field */ - /* exists only if FT_CONFIG_OPTION_INCREMENTAL is */ - /* defined. */ + /* incremental_interface :: */ + /* If non-null, an interface used to implement */ + /* incremental font loading. This field exists only */ + /* if @FT_CONFIG_OPTION_INCREMENTAL is defined. */ /* */ /* */ /* The stream type is determined by the contents of `flags' which */ @@ -1692,21 +1706,21 @@ FT_BEGIN_HEADER /* otherwise. */ /* */ /* If the `ft_open_incremental' bit is set 'incremental_interface' */ - /* will be used, else it is ignored. This feature is available only */ - /* if FT_CONFIG_OPTION_INCREMENTAL is defined. */ + /* will be used, else it is ignored. This feature is available only */ + /* if @FT_CONFIG_OPTION_INCREMENTAL is defined. */ /* */ typedef struct FT_Open_Args_ { - FT_Open_Flags flags; - const FT_Byte* memory_base; - FT_Long memory_size; - FT_String* pathname; - FT_Stream stream; - FT_Module driver; - FT_Int num_params; - FT_Parameter* params; + FT_Open_Flags flags; + const FT_Byte* memory_base; + FT_Long memory_size; + FT_String* pathname; + FT_Stream stream; + FT_Module driver; + FT_Int num_params; + FT_Parameter* params; #ifdef FT_CONFIG_OPTION_INCREMENTAL - FT_Incremental_Interface* incremental_interface; + FT_Incremental_Interface* incremental_interface; #endif } FT_Open_Args; @@ -2934,7 +2948,6 @@ FT_BEGIN_HEADER FT_Matrix* matrix ); - /*@***********************************************************************/ /* */ /* */ @@ -2948,16 +2961,16 @@ FT_BEGIN_HEADER /* face :: A handle to the source face object. */ /* */ /* */ - /* flags :: A set of bit flags that control the hinting process */ - /* see the FT_HINT_XXX constants for details. */ + /* flags :: A set of bit flags that control the hinting process. */ + /* See the FT_HINT_XXX constants for details. */ /* */ /* */ /* The interpretation of the flags depends on the hinter module in */ - /* use. Not all modules will support all flags */ + /* use. Not all modules will support all flags. */ /* */ FT_EXPORT( void ) - FT_Set_Hint_Flags( FT_Face face, - FT_ULong hint_flags ); + FT_Set_Hint_Flags( FT_Face face, + FT_ULong hint_flags ); /*@***********************************************************************/ @@ -2966,10 +2979,11 @@ FT_BEGIN_HEADER /* FT_HINT_NO_INTEGER_STEM */ /* */ /* */ - /* A bit-field constant, used with FT_Set_Hint_Flags() to to suppress */ - /* snapping of stem widths to integer values */ + /* A bit-field constant, used with @FT_Set_Hint_Flags to to suppress */ + /* snapping of stem widths to integer values. */ /* */ -#define FT_HINT_NO_INTEGER_STEM 1 +#define FT_HINT_NO_INTEGER_STEM 1 + /*@***********************************************************************/ /* */ @@ -2977,10 +2991,11 @@ FT_BEGIN_HEADER /* FT_HINT_NO_HSTEM_ALIGN */ /* */ /* */ - /* A bit-field constant, used with FT_Set_Hint_Flags() to to suppress */ + /* A bit-field constant, used with @FT_Set_Hint_Flags to to suppress */ /* alignment of horizontal stems with the pixel grid. */ /* */ -#define FT_HINT_NO_HSTEM_ALIGN 2 +#define FT_HINT_NO_HSTEM_ALIGN 2 + /*@***********************************************************************/ /* */ @@ -2988,13 +3003,15 @@ FT_BEGIN_HEADER /* FT_HINT_NO_VSTEM_ALIGN */ /* */ /* */ - /* A bit-field constant, used with FT_Set_Hint_Flags() to to suppress */ - /* alignment of vertical stems with the pixel grid */ + /* A bit-field constant, used with @FT_Set_Hint_Flags to to suppress */ + /* alignment of vertical stems with the pixel grid. */ /* */ -#define FT_HINT_NO_VSTEM_ALIGN 4 +#define FT_HINT_NO_VSTEM_ALIGN 4 + /* */ + FT_END_HEADER #endif /* __FREETYPE_H__ */ diff --git a/include/freetype/fttrigon.h b/include/freetype/fttrigon.h index 247420606..3b8257b6d 100644 --- a/include/freetype/fttrigon.h +++ b/include/freetype/fttrigon.h @@ -179,15 +179,16 @@ FT_BEGIN_HEADER /* FT_Angle_Diff */ /* */ /* @description: */ - /* Returns the difference between two angles. The result is always */ - /* constrained to the ]-PI..PI] interval */ + /* Return the difference between two angles. The result is always */ + /* constrained to the ]-PI..PI] interval. */ /* */ /* @input: */ - /* angle1 :: first angle */ - /* angle2 :: second angle */ + /* angle1 :: First angle. */ + /* */ + /* angle2 :: Second angle. */ /* */ /* @return: */ - /* contrainted value of 'value2-value1' */ + /* Contrainted value of `value2-value1'. */ /* */ FT_EXPORT( FT_Angle ) FT_Angle_Diff( FT_Angle angle1, diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h index c46bbd550..396a0365a 100644 --- a/include/freetype/fttypes.h +++ b/include/freetype/fttypes.h @@ -360,7 +360,7 @@ FT_BEGIN_HEADER /*************************************************************************/ /* */ /* */ - /* FT_Data */ + /* FT_Data */ /* */ /* */ /* Read-only binary data represented as a pointer and a length. */ @@ -368,12 +368,13 @@ FT_BEGIN_HEADER /* */ /* pointer :: The data. */ /* */ - /* length :: The length of the data in bytes. */ + /* length :: The length of the data in bytes. */ /* */ - typedef struct FT_Data_ + typedef struct FT_Data_ { - const FT_Byte* pointer; - FT_Int length; + const FT_Byte* pointer; + FT_Int length; + } FT_Data; diff --git a/include/freetype/internal/ftdebug.h b/include/freetype/internal/ftdebug.h index 2820ebe93..129c91f6a 100644 --- a/include/freetype/internal/ftdebug.h +++ b/include/freetype/internal/ftdebug.h @@ -15,8 +15,8 @@ /* */ /* */ /* IMPORTANT: A description of FreeType's debugging support can be */ -/* found in "docs/DEBUG.TXT". Read it if you need to use */ -/* or understand this code. */ +/* found in "docs/DEBUG.TXT". Read it if you need to use or */ +/* understand this code. */ /* */ /***************************************************************************/ diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h index 6b94a6f3b..c613b740a 100644 --- a/include/freetype/internal/ftobjs.h +++ b/include/freetype/internal/ftobjs.h @@ -292,7 +292,7 @@ FT_BEGIN_HEADER /* Only used by the convenience functions. */ /* */ /* hint_flags :: Some flags used to change the hinters' */ - /* behaviour. Only used for debugging for now */ + /* behaviour. Only used for debugging for now. */ /* */ /* postscript_name :: Postscript font name for this face. */ /* */ diff --git a/include/freetype/internal/pshints.h b/include/freetype/internal/pshints.h index e7fd76faa..5af27b133 100644 --- a/include/freetype/internal/pshints.h +++ b/include/freetype/internal/pshints.h @@ -261,13 +261,13 @@ FT_BEGIN_HEADER /* been recorded. */ /* */ /* @input: */ - /* hints :: A handle to the Type 1 hints recorder. */ + /* hints :: A handle to the Type 1 hints recorder. */ /* */ - /* outline :: A pointer to the target outline descriptor. */ + /* outline :: A pointer to the target outline descriptor. */ /* */ - /* globals :: The hinter globals for this font. */ + /* globals :: The hinter globals for this font. */ /* */ - /* hint_flags :: hinter bit flags */ + /* hint_flags :: Hinter bit flags. */ /* */ /* @return: */ /* FreeType error code. 0 means success. */ @@ -542,13 +542,13 @@ FT_BEGIN_HEADER /* method. */ /* */ /* @input: */ - /* hints :: A handle to the Type 2 hints recorder. */ + /* hints :: A handle to the Type 2 hints recorder. */ /* */ - /* outline :: A pointer to the target outline descriptor. */ + /* outline :: A pointer to the target outline descriptor. */ /* */ - /* globals :: The hinter globals for this font. */ + /* globals :: The hinter globals for this font. */ /* */ - /* hint_flags :: hinter bit flags */ + /* hint_flags :: Hinter bit flags. */ /* */ /* @return: */ /* FreeType error code. 0 means success. */ diff --git a/src/autohint/ahglyph.c b/src/autohint/ahglyph.c index 2439c20eb..5ce8c4323 100644 --- a/src/autohint/ahglyph.c +++ b/src/autohint/ahglyph.c @@ -983,14 +983,14 @@ if ( max > seg2->max_coord ) max = seg2->max_coord; - len = max - min; + len = max - min; if ( len >= 8 ) { - dist = seg2->pos - seg1->pos; + dist = seg2->pos - seg1->pos; if ( dist < 0 ) dist = -dist; - score = dist + 3000/len; + score = dist + 3000 / len; if ( score < best_score ) { @@ -1009,7 +1009,6 @@ best_segment->num_linked++; } - } /* edges 1 */ /* now, compute the `serif' segments */ diff --git a/src/autohint/ahhint.c b/src/autohint/ahhint.c index 813f4a44f..243b4d0ce 100644 --- a/src/autohint/ahhint.c +++ b/src/autohint/ahhint.c @@ -98,6 +98,7 @@ FT_Pos dist = width; FT_Int sign = 0; + if ( dist < 0 ) { dist = -width; @@ -111,6 +112,7 @@ { FT_Pos delta = dist - globals->stds[vertical]; + if ( delta < 0 ) delta = -delta; @@ -121,27 +123,25 @@ dist = 32; } + if ( dist < 3 * 64 ) { - if ( dist < 3*64 ) - { - delta = (dist & 63); - dist &= -64; + delta = ( dist & 63 ); + dist &= -64; - if ( delta < 10 ) - dist += delta; + if ( delta < 10 ) + dist += delta; - else if ( delta < 32 ) - dist += 10; + else if ( delta < 32 ) + dist += 10; - else if ( delta < 54 ) - dist += 54; + else if ( delta < 54 ) + dist += 54; - else - dist += delta; - } else - dist = (dist+32) & -64; + dist += delta; } + else + dist = ( dist + 32 ) & -64; } #else if ( vertical ) @@ -199,7 +199,8 @@ AH_Edge* stem_edge, int vertical ) { - FT_Pos dist = stem_edge->opos - base_edge->opos; + FT_Pos dist = stem_edge->opos - base_edge->opos; + stem_edge->pos = base_edge->pos + ah_compute_stem_width( hinter, vertical, dist ); @@ -348,12 +349,12 @@ /* now, align the stem */ - /* this should not happen, but it's better to be safe.. */ + /* this should not happen, but it's better to be safe. */ if ( edge2->blue_edge || edge2 < edge ) { #if 0 - printf( "strange blue alignement, edge %d to %d\n", + printf( "strange blue alignment, edge %d to %d\n", edge - edges, edge2 - edges ); #endif @@ -363,7 +364,10 @@ } { +#if 0 FT_Bool min = 0; +#endif + if ( !anchor ) { @@ -382,17 +386,17 @@ org_pos = anchor->pos + (edge->opos - anchor->opos); org_len = edge2->opos - edge->opos; - org_center = org_pos + (org_len >> 1); + org_center = org_pos + ( org_len >> 1 ); cur_len = ah_compute_stem_width( hinter, dimension, org_len ); cur_pos1 = ( org_pos + 32 ) & -64; - delta1 = ( cur_pos1 + (cur_len >> 1) - org_center ); + delta1 = ( cur_pos1 + ( cur_len >> 1 ) - org_center ); if ( delta1 < 0 ) delta1 = -delta1; - cur_pos2 = (( org_pos + org_len + 32 ) & -64) - cur_len; - delta2 = ( cur_pos2 + (cur_len >> 1) - org_center ); + cur_pos2 = ( ( org_pos + org_len + 32 ) & -64 ) - cur_len; + delta2 = ( cur_pos2 + ( cur_len >> 1 ) - org_center ); if ( delta2 < 0 ) delta2 = -delta2; @@ -434,9 +438,7 @@ continue; if ( edge->serif ) - { ah_align_serif_edge( hinter, edge->serif, edge, dimension ); - } else if ( !anchor ) { edge->pos = ( edge->opos + 32 ) & -64; diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index b0c7d88dc..90b38faff 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -702,7 +702,7 @@ FT_Parameter* params, #ifdef FT_CONFIG_OPTION_INCREMENTAL - FT_Incremental_Interface* incremental_interface, + FT_Incremental_Interface* incremental_interface, #endif FT_Face* aface ) @@ -730,7 +730,7 @@ face->memory = memory; face->stream = stream; #ifdef FT_CONFIG_OPTION_INCREMENTAL - face->incremental_interface = incremental_interface; + face->incremental_interface = incremental_interface; #endif error = clazz->init_face( stream, @@ -746,6 +746,7 @@ FT_Int nn; FT_CharMap unicmap = NULL, cmap; + for ( nn = 0; nn < face->num_charmaps; nn++ ) { cmap = face->charmaps[nn]; @@ -877,8 +878,9 @@ FT_Parameter* params = 0; #ifdef FT_CONFIG_OPTION_INCREMENTAL - FT_Incremental_Interface* incremental_interface = - (args->flags & ft_open_incremental) ? args->incremental_interface : 0; + FT_Incremental_Interface* incremental_interface = + ( args->flags & ft_open_incremental ) ? args->incremental_interface + : 0; #endif if ( args->flags & ft_open_params ) @@ -920,8 +922,9 @@ FT_Parameter* params = 0; #ifdef FT_CONFIG_OPTION_INCREMENTAL - FT_Incremental_Interface* incremental_interface = - (args->flags & ft_open_incremental) ? args->incremental_interface : 0; + FT_Incremental_Interface* incremental_interface = + ( args->flags & ft_open_incremental ) ? args->incremental_interface + : 0; #endif driver = FT_DRIVER( cur[0] ); diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c index ae053656f..2e10fbe4c 100644 --- a/src/base/ftsynth.c +++ b/src/base/ftsynth.c @@ -41,6 +41,7 @@ FT_Matrix transform; FT_Outline* outline = &slot->outline; + /* only oblique outline glyphs */ if ( slot->format != ft_glyph_format_outline ) return; @@ -209,6 +210,7 @@ FT_Angle rotate, angle_in, angle_out; FT_Int c, n, first, orientation; + /* only embolden outline glyph images */ if ( slot->format != ft_glyph_format_outline ) return; diff --git a/src/cff/cffcmap.c b/src/cff/cffcmap.c index cbed8378e..9cced306b 100644 --- a/src/cff/cffcmap.c +++ b/src/cff/cffcmap.c @@ -12,10 +12,10 @@ FT_CALLBACK_DEF( FT_Error ) cff_cmap_encoding_init( CFF_CMapStd cmap ) { - TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); - CFF_Font cff = face->extra.data; - CFF_Encoding encoding = &cff->encoding; - PSNames_Service psnames = cff->psnames; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + CFF_Font cff = face->extra.data; + CFF_Encoding encoding = &cff->encoding; + cmap->count = encoding->count; cmap->gids = encoding->codes; diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c index 91ce8823f..dcc2cc926 100644 --- a/src/cff/cffdrivr.c +++ b/src/cff/cffdrivr.c @@ -399,21 +399,21 @@ sizeof( FT_SizeRec ), sizeof( CFF_GlyphSlotRec ), - (FT_Face_InitFunc) cff_face_init, - (FT_Face_DoneFunc) cff_face_done, - (FT_Size_InitFunc) cff_size_init, - (FT_Size_DoneFunc) cff_size_done, - (FT_Slot_InitFunc) cff_slot_init, - (FT_Slot_DoneFunc) cff_slot_done, + (FT_Face_InitFunc) cff_face_init, + (FT_Face_DoneFunc) cff_face_done, + (FT_Size_InitFunc) cff_size_init, + (FT_Size_DoneFunc) cff_size_done, + (FT_Slot_InitFunc) cff_slot_init, + (FT_Slot_DoneFunc) cff_slot_done, - (FT_Size_ResetPointsFunc) cff_size_reset, - (FT_Size_ResetPixelsFunc) cff_size_reset, + (FT_Size_ResetPointsFunc)cff_size_reset, + (FT_Size_ResetPixelsFunc)cff_size_reset, - (FT_Slot_LoadFunc) Load_Glyph, + (FT_Slot_LoadFunc) Load_Glyph, - (FT_Face_GetKerningFunc) Get_Kerning, - (FT_Face_AttachFunc) 0, - (FT_Face_GetAdvancesFunc) 0, + (FT_Face_GetKerningFunc) Get_Kerning, + (FT_Face_AttachFunc) 0, + (FT_Face_GetAdvancesFunc)0, }; diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c index b46473b6a..cf8ac9313 100644 --- a/src/cff/cffgload.c +++ b/src/cff/cffgload.c @@ -434,7 +434,7 @@ /* check space for a new on-curve point, then add it */ static FT_Error - cff_builder_cff_builder_add_point1( CFF_Builder* builder, + cff_builder_add_point1( CFF_Builder* builder, FT_Pos x, FT_Pos y ) { @@ -492,7 +492,7 @@ builder->path_begun = 1; error = cff_builder_add_contour( builder ); if ( !error ) - error = cff_builder_cff_builder_add_point1( builder, x, y ); + error = cff_builder_add_point1( builder, x, y ); } return error; @@ -627,7 +627,7 @@ /* First load `bchar' in builder */ error = cff_index_access_element( &cff->charstrings_index, bchar_index, - &charstring, &charstring_len ); + &charstring, &charstring_len ); if ( !error ) { error = cff_decoder_parse_charstrings( decoder, charstring, charstring_len ); @@ -651,7 +651,7 @@ /* Now load `achar' on top of the base outline. */ error = cff_index_access_element( &cff->charstrings_index, achar_index, - &charstring, &charstring_len ); + &charstring, &charstring_len ); if ( !error ) { error = cff_decoder_parse_charstrings( decoder, charstring, charstring_len ); @@ -705,8 +705,8 @@ /* */ FT_LOCAL_DEF( FT_Error ) cff_decoder_parse_charstrings( CFF_Decoder* decoder, - FT_Byte* charstring_base, - FT_Int charstring_len ) + FT_Byte* charstring_base, + FT_Int charstring_len ) { FT_Error error; CFF_Decoder_Zone* zone; @@ -1175,8 +1175,8 @@ case cff_op_rlineto: FT_TRACE4(( " rlineto" )); - if ( cff_builder_start_point ( builder, x, y ) || - check_points( builder, num_args / 2 ) ) + if ( cff_builder_start_point ( builder, x, y ) || + check_points( builder, num_args / 2 ) ) goto Memory_Error; if ( num_args < 2 || num_args & 1 ) @@ -1214,7 +1214,7 @@ else y += args[0]; - if ( cff_builder_cff_builder_add_point1( builder, x, y ) ) + if ( cff_builder_add_point1( builder, x, y ) ) goto Memory_Error; args++; @@ -1231,8 +1231,8 @@ if ( num_args % 6 != 0 ) goto Stack_Underflow; - if ( cff_builder_start_point ( builder, x, y ) || - check_points( builder, num_args / 2 ) ) + if ( cff_builder_start_point ( builder, x, y ) || + check_points( builder, num_args / 2 ) ) goto Memory_Error; args = stack; @@ -1385,8 +1385,8 @@ if ( num_args < 8 || ( num_args - 6 ) & 1 ) goto Stack_Underflow; - if ( cff_builder_start_point( builder, x, y ) || - check_points( builder, num_lines + 3 ) ) + if ( cff_builder_start_point( builder, x, y ) || + check_points( builder, num_lines + 3 ) ) goto Memory_Error; args = stack; @@ -1425,7 +1425,7 @@ if ( num_args < 8 || ( num_args - 2 ) % 6 ) goto Stack_Underflow; - if ( cff_builder_start_point ( builder, x, y ) || + if ( cff_builder_start_point ( builder, x, y ) || check_points( builder, num_curves*3 + 2 ) ) goto Memory_Error; @@ -1468,7 +1468,7 @@ /* make sure we have enough space for the start point if it */ /* needs to be added.. */ if ( cff_builder_start_point( builder, x, y ) || - check_points( builder, 6 ) ) + check_points( builder, 6 ) ) goto Memory_Error; /* Record the starting point's y postion for later use */ @@ -1519,7 +1519,7 @@ /* adding six more points; 4 control points, 2 on-curve points */ if ( cff_builder_start_point( builder, x, y ) || - check_points ( builder, 6 ) ) + check_points ( builder, 6 ) ) goto Memory_Error; /* record the starting point's y-position for later use */ @@ -1571,7 +1571,7 @@ /* adding six more points; 4 control points, 2 on-curve points */ if ( cff_builder_start_point( builder, x, y ) || - check_points( builder, 6 ) ) + check_points( builder, 6 ) ) goto Memory_Error; /* record the starting point's x, y postion for later use */ @@ -1634,7 +1634,7 @@ FT_TRACE4(( " flex" )); if ( cff_builder_start_point( builder, x, y ) || - check_points( builder, 6 ) ) + check_points( builder, 6 ) ) goto Memory_Error; args = stack; @@ -1643,7 +1643,7 @@ x += args[0]; y += args[1]; cff_builder_add_point( builder, x, y, - (FT_Bool)( count == 3 || count == 0 ) ); + (FT_Bool)( count == 3 || count == 0 ) ); args += 2; } @@ -1974,7 +1974,8 @@ if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS ) { - FT_ERROR(( "cff_decoder_parse_charstrings: too many nested subrs\n" )); + FT_ERROR(( "cff_decoder_parse_charstrings:" + " too many nested subrs\n" )); goto Syntax_Error; } @@ -1987,7 +1988,8 @@ if ( !zone->base ) { - FT_ERROR(( "cff_decoder_parse_charstrings: invoking empty subrs!\n" )); + FT_ERROR(( "cff_decoder_parse_charstrings:" + " invoking empty subrs!\n" )); goto Syntax_Error; } @@ -2014,7 +2016,8 @@ if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS ) { - FT_ERROR(( "cff_decoder_parse_charstrings: too many nested subrs\n" )); + FT_ERROR(( "cff_decoder_parse_charstrings:" + " too many nested subrs\n" )); goto Syntax_Error; } @@ -2027,7 +2030,8 @@ if ( !zone->base ) { - FT_ERROR(( "cff_decoder_parse_charstrings: invoking empty subrs!\n" )); + FT_ERROR(( "cff_decoder_parse_charstrings:" + " invoking empty subrs!\n" )); goto Syntax_Error; } @@ -2042,7 +2046,8 @@ if ( decoder->zone <= decoder->zones ) { - FT_ERROR(( "cff_decoder_parse_charstrings: unexpected return\n" )); + FT_ERROR(( "cff_decoder_parse_charstrings:" + " unexpected return\n" )); goto Syntax_Error; } @@ -2140,11 +2145,12 @@ /* now get load the unscaled outline */ error = cff_index_access_element( &cff->charstrings_index, glyph_index, - &charstring, &charstring_len ); + &charstring, &charstring_len ); if ( !error ) { cff_decoder_prepare( &decoder, glyph_index ); - error = cff_decoder_parse_charstrings( &decoder, charstring, charstring_len ); + error = cff_decoder_parse_charstrings( &decoder, + charstring, charstring_len ); cff_index_forget_element( &cff->charstrings_index, &charstring ); } @@ -2225,19 +2231,21 @@ /* now load the unscaled outline */ error = cff_index_access_element( &cff->charstrings_index, glyph_index, - &charstring, &charstring_len ); + &charstring, &charstring_len ); if ( !error ) { CFF_IndexRec csindex = cff->charstrings_index; cff_decoder_prepare( &decoder, glyph_index ); - error = cff_decoder_parse_charstrings( &decoder, charstring, charstring_len ); + error = cff_decoder_parse_charstrings( &decoder, + charstring, charstring_len ); cff_index_forget_element( &cff->charstrings_index, &charstring ); /* We set control_data and control_len if charstrings is loaded. */ - /* See how charstring loads at cff_index_access_element() in cffload.c. */ + /* See how charstring loads at cff_index_access_element() in */ + /* cffload.c. */ glyph->root.control_data = csindex.bytes + csindex.offsets[glyph_index] - 1; diff --git a/src/cff/cffload.c b/src/cff/cffload.c index e206ab1e9..1ecc24186 100644 --- a/src/cff/cffload.c +++ b/src/cff/cffload.c @@ -1535,7 +1535,7 @@ case 0: if ( num_glyphs > 0 ) { - if ( FT_FRAME_ENTER( (num_glyphs-1)*2 ) ) + if ( FT_FRAME_ENTER( ( num_glyphs - 1 ) * 2 ) ) goto Exit; for ( j = 1; j < num_glyphs; j++ ) @@ -1699,7 +1699,6 @@ FT_ULong base_offset, FT_ULong offset ) { - FT_Memory memory = stream->memory; FT_Error error = 0; FT_UInt count; FT_UInt j; @@ -1744,7 +1743,7 @@ FT_READ_BYTE( count ) ) goto Exit; - encoding->count = (count+1); + encoding->count = count + 1; switch ( encoding->format & 0x7F ) { @@ -1752,10 +1751,11 @@ { FT_Byte* p; + if ( FT_FRAME_ENTER( count ) ) goto Exit; - p = (FT_Byte*) stream->cursor; + p = (FT_Byte*)stream->cursor; for ( j = 1; j <= count; j++ ) { @@ -1778,9 +1778,9 @@ case 1: { - FT_Byte nleft; - FT_UInt i = 1; - FT_UInt k; + FT_Byte nleft; + FT_UInt i = 1; + FT_UInt k; /* Parse the Format1 ranges. */ @@ -1981,8 +1981,8 @@ goto Exit; error = cff_parser_run( &parser, - (FT_Byte*)stream->cursor, - (FT_Byte*)stream->limit ); + (FT_Byte*)stream->cursor, + (FT_Byte*)stream->limit ); FT_FRAME_EXIT(); if ( error ) goto Exit; @@ -2001,7 +2001,7 @@ font->num_local_subrs = font->local_subrs_index.count; error = cff_index_get_pointers( &font->local_subrs_index, - &font->local_subrs ); + &font->local_subrs ); if ( error ) goto Exit; } @@ -2178,7 +2178,7 @@ font->num_glyphs = font->charstrings_index.count; error = cff_index_get_pointers( &font->global_subrs_index, - &font->global_subrs ) ; + &font->global_subrs ) ; if ( error ) goto Exit; diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c index bb04664aa..3b8303167 100644 --- a/src/cff/cffobjs.c +++ b/src/cff/cffobjs.c @@ -225,7 +225,7 @@ static FT_String* cff_strcpy( FT_Memory memory, - const FT_String* source ) + const FT_String* source ) { FT_Error error; FT_String* result = 0; @@ -402,8 +402,8 @@ root->style_name = cff_strcpy( memory, "Regular" ); /* XXXX */ else root->style_name = cff_index_get_sid_string( &cff->string_index, - dict->weight, - psnames ); + dict->weight, + psnames ); /*******************************************************************/ /* */ @@ -453,24 +453,25 @@ /* Compute char maps. */ /* */ - /* try to synthetize a Unicode charmap if there is none available */ - /* already. If an OpenType font contains a Unicode "cmap", we */ - /* will use it, wathever be in the CFF part of the file.. */ + /* Try to synthetize a Unicode charmap if there is none available */ + /* already. If an OpenType font contains a Unicode "cmap", we */ + /* will use it, whatever be in the CFF part of the file. */ { FT_CharMapRec cmaprec; FT_CharMap cmap; FT_UInt nn; CFF_Encoding encoding = &cff->encoding; + for ( nn = 0; nn < (FT_UInt) root->num_charmaps; nn++ ) { cmap = root->charmaps[nn]; - /* Windows Unicode (3,1) ? */ + /* Windows Unicode (3,1)? */ if ( cmap->platform_id == 3 && cmap->encoding_id == 1 ) goto Skip_Unicode; - /* Deprecated Unicode platform id ?? */ + /* Deprecated Unicode platform id? */ if ( cmap->platform_id == 0 ) goto Skip_Unicode; /* Standard Unicode (deprecated) */ } @@ -494,6 +495,7 @@ { FT_CMap_Class clazz; + cmaprec.face = root; cmaprec.platform_id = 7; /* Adobe platform id */ diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c index 78088e0a4..b49679d02 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -47,54 +47,69 @@ FT_Stream stream = face->root.stream; FT_Error error = 0; FT_Byte* charstring = 0; - FT_Memory memory = face->root.memory; + FT_Memory memory = face->root.memory; FT_UInt glyph_length = 0; -#ifdef FT_CONFIG_OPTION_INCREMENTAL - /* For incremental fonts get the character data using the callback function. */ - if (face->root.incremental_interface) - { - FT_Data glyph_data; - error = face->root.incremental_interface->funcs->get_glyph_data(face->root.incremental_interface->object, - glyph_index,&glyph_data); - if (error) - goto Exit; - p = (FT_Byte*)glyph_data.pointer; - fd_select = (FT_UInt)cid_get_offset(&p,(FT_Byte)cid->fd_bytes); - glyph_data.pointer += cid->fd_bytes; - glyph_data.length -= cid->fd_bytes; - glyph_length = glyph_data.length; - if (glyph_length == 0) +#ifdef FT_CONFIG_OPTION_INCREMENTAL + + /* For incremental fonts get the character data using */ + /* the callback function. */ + if ( face->root.incremental_interface ) + { + FT_Data glyph_data; + + + error = face->root.incremental_interface->funcs->get_glyph_data( + face->root.incremental_interface->object, + glyph_index, + &glyph_data ); + if ( error ) goto Exit; - if (FT_ALLOC(charstring,glyph_length)) + + p = (FT_Byte*)glyph_data.pointer; + fd_select = (FT_UInt)cid_get_offset( &p, (FT_Byte)cid->fd_bytes ); + + glyph_data.pointer += cid->fd_bytes; + glyph_data.length -= cid->fd_bytes; + glyph_length = glyph_data.length; + + if ( glyph_length == 0 ) goto Exit; - ft_memcpy(charstring,glyph_data.pointer,glyph_length); + if ( FT_ALLOC( charstring, glyph_length ) ) + goto Exit; + ft_memcpy( charstring, glyph_data.pointer, glyph_length ); } -else + + else + #endif - /* For ordinary fonts read the CID font dictionary index and charstring offset from the CIDMap. */ + /* For ordinary fonts read the CID font dictionary index */ + /* and charstring offset from the CIDMap. */ { - FT_UInt entry_len = cid->fd_bytes + cid->gd_bytes; - FT_ULong off1; + FT_UInt entry_len = cid->fd_bytes + cid->gd_bytes; + FT_ULong off1; + + if ( FT_STREAM_SEEK( cid->data_offset + cid->cidmap_offset + - glyph_index * entry_len ) || - FT_FRAME_ENTER( 2 * entry_len ) ) + glyph_index * entry_len ) || + FT_FRAME_ENTER( 2 * entry_len ) ) goto Exit; - p = (FT_Byte*)stream->cursor; - fd_select = (FT_UInt) cid_get_offset( &p, (FT_Byte)cid->fd_bytes ); - off1 = (FT_ULong)cid_get_offset( &p, (FT_Byte)cid->gd_bytes ); - p += cid->fd_bytes; + p = (FT_Byte*)stream->cursor; + fd_select = (FT_UInt) cid_get_offset( &p, (FT_Byte)cid->fd_bytes ); + off1 = (FT_ULong)cid_get_offset( &p, (FT_Byte)cid->gd_bytes ); + p += cid->fd_bytes; glyph_length = cid_get_offset( &p, (FT_Byte)cid->gd_bytes ) - off1; FT_FRAME_EXIT(); - if (glyph_length == 0) + if ( glyph_length == 0 ) goto Exit; - if (FT_ALLOC(charstring,glyph_length)) + if ( FT_ALLOC( charstring, glyph_length ) ) goto Exit; - if (FT_STREAM_READ_AT(cid->data_offset + off1,charstring,glyph_length)) + if ( FT_STREAM_READ_AT( cid->data_offset + off1, + charstring, glyph_length ) ) goto Exit; } @@ -102,7 +117,8 @@ else { CID_FaceDict dict; CID_Subrs cid_subrs = face->subrs + fd_select; - FT_Int cs_offset; + FT_Int cs_offset; + /* Set up subrs */ decoder->num_subrs = cid_subrs->num_subrs; @@ -116,7 +132,7 @@ else decoder->font_offset = dict->font_offset; decoder->lenIV = dict->private_dict.lenIV; - /* Decode the charstring. */ + /* Decode the charstring. */ /* Adjustment for seed bytes. */ cs_offset = ( decoder->lenIV >= 0 ? decoder->lenIV : 0 ); @@ -127,27 +143,34 @@ else error = decoder->funcs.parse_charstrings( decoder, charstring + cs_offset, - glyph_length - cs_offset ); - } + glyph_length - cs_offset ); + } FT_FREE( charstring ); #ifdef FT_CONFIG_OPTION_INCREMENTAL + /* Incremental fonts can optionally override the metrics. */ - if (!error && face->root.incremental_interface && face->root.incremental_interface->funcs->get_glyph_metrics) + if ( !error && + face->root.incremental_interface && + face->root.incremental_interface->funcs->get_glyph_metrics ) { - FT_Bool found = FALSE; - FT_Basic_Glyph_Metrics metrics; - error = face->root.incremental_interface->funcs->get_glyph_metrics(face->root.incremental_interface->object, - glyph_index,FALSE,&metrics,&found); - if (found) + FT_Bool found = FALSE; + FT_Basic_Glyph_Metrics metrics; + + + error = face->root.incremental_interface->funcs->get_glyph_metrics( + face->root.incremental_interface->object, + glyph_index, FALSE, &metrics, &found ); + if ( found ) { decoder->builder.left_bearing.x = metrics.bearing_x; decoder->builder.left_bearing.y = metrics.bearing_y; - decoder->builder.advance.x = metrics.advance; - decoder->builder.advance.y = 0; + decoder->builder.advance.x = metrics.advance; + decoder->builder.advance.y = 0; } } + #endif Exit: diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c index 3a175b82f..9ab86a4d5 100644 --- a/src/cid/cidriver.c +++ b/src/cid/cidriver.c @@ -90,23 +90,23 @@ sizeof( CID_SizeRec ), sizeof( CID_GlyphSlotRec ), - (FT_Face_InitFunc) CID_Face_Init, - (FT_Face_DoneFunc) CID_Face_Done, + (FT_Face_InitFunc) CID_Face_Init, + (FT_Face_DoneFunc) CID_Face_Done, - (FT_Size_InitFunc) CID_Size_Init, - (FT_Size_DoneFunc) CID_Size_Done, - (FT_Slot_InitFunc) CID_GlyphSlot_Init, - (FT_Slot_DoneFunc) CID_GlyphSlot_Done, + (FT_Size_InitFunc) CID_Size_Init, + (FT_Size_DoneFunc) CID_Size_Done, + (FT_Slot_InitFunc) CID_GlyphSlot_Init, + (FT_Slot_DoneFunc) CID_GlyphSlot_Done, - (FT_Size_ResetPointsFunc) CID_Size_Reset, - (FT_Size_ResetPixelsFunc) CID_Size_Reset, + (FT_Size_ResetPointsFunc)CID_Size_Reset, + (FT_Size_ResetPixelsFunc)CID_Size_Reset, - (FT_Slot_LoadFunc) CID_Load_Glyph, + (FT_Slot_LoadFunc) CID_Load_Glyph, - (FT_Face_GetKerningFunc) 0, - (FT_Face_AttachFunc) 0, + (FT_Face_GetKerningFunc) 0, + (FT_Face_AttachFunc) 0, - (FT_Face_GetAdvancesFunc) 0, + (FT_Face_GetAdvancesFunc)0, }; diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c index 6bbb1ca5c..7f7373de4 100644 --- a/src/psaux/psobjs.c +++ b/src/psaux/psobjs.c @@ -859,6 +859,7 @@ FT_Byte* old_cur = parser->cursor; FT_Byte* old_limit = parser->limit; + parser->cursor = token.start; parser->limit = token.limit; @@ -945,10 +946,11 @@ FT_Fixed temp[4]; FT_BBox* bbox = (FT_BBox*)q; + /* we need the '[' and ']' delimiters */ token.start--; token.limit++; - (void) t1_tofixedarray( &token.start, token.limit, 4, temp, 0 ); + (void)t1_tofixedarray( &token.start, token.limit, 4, temp, 0 ); bbox->xMin = FT_RoundFix( temp[0] ); bbox->yMin = FT_RoundFix( temp[1] ); diff --git a/src/pshinter/pshglob.c b/src/pshinter/pshglob.c index 0cb5a4704..e5464e4aa 100644 --- a/src/pshinter/pshglob.c +++ b/src/pshinter/pshglob.c @@ -537,7 +537,7 @@ if ( delta < -blues->blue_fuzz ) break; - if ( stem_top <= zone->org_top + blues->blue_fuzz) + if ( stem_top <= zone->org_top + blues->blue_fuzz ) { if ( no_shoots || delta <= blues->blue_threshold ) { diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c index 609f00073..a10d290a9 100644 --- a/src/sfnt/sfobjs.c +++ b/src/sfnt/sfobjs.c @@ -433,12 +433,12 @@ /* do we have outlines in there? */ #ifdef FT_CONFIG_OPTION_INCREMENTAL - has_outline = FT_BOOL( face->root.incremental_interface != 0 || + has_outline = FT_BOOL( face->root.incremental_interface != 0 || TT_LookUp_Table( face, TTAG_glyf ) != 0 || - TT_LookUp_Table( face, TTAG_CFF ) != 0 ); + TT_LookUp_Table( face, TTAG_CFF ) != 0 ); #else has_outline = FT_BOOL( TT_LookUp_Table( face, TTAG_glyf ) != 0 || - TT_LookUp_Table( face, TTAG_CFF ) != 0 ); + TT_LookUp_Table( face, TTAG_CFF ) != 0 ); #endif is_apple_sbit = 0; diff --git a/src/sfnt/ttload.c b/src/sfnt/ttload.c index c2de2290d..f73c4d012 100644 --- a/src/sfnt/ttload.c +++ b/src/sfnt/ttload.c @@ -135,33 +135,32 @@ } - /* in theory, we should check the values of `search_range', */ - /* `entry_selector' and `range_shift' to detect non-SFNT based files */ + /* In theory, we should check the values of `search_range', */ + /* `entry_selector', and `range_shift' to detect non-SFNT based files */ /* whose header might also start with 0x100000L (yes, these exist). */ /* */ /* Very unfortunately, many TrueType fonts don't have these fields */ - /* set correctly and we must ignore them to support them. An alternative */ + /* set correctly and we must ignore them to support them. An alternative */ /* way to check the font file is thus to: */ /* */ /* - check that `num_tables' is valid */ /* - look for a "head" table, check its size, and parse it to */ - /* see if its "magic" field is correctly set to */ + /* see if its "magic" field is correctly set */ /* */ - /* Voila, here comes robust though tolerant font format checking :-) */ - /* */ - /* When checking directory entries ignore the tables 'glyx' and 'locx' */ - /* which are hacked-out versions of 'glyf' and 'loca' in some PostScript */ + /* When checking directory entries, ignore the tables `glyx' and `locx' */ + /* which are hacked-out versions of `glyf' and `loca' in some PostScript */ /* Type 42 fonts, and will generally be invalid. */ /* */ - static FT_Error - sfnt_dir_check( FT_Stream stream, - FT_ULong offset, - FT_UInt num_tables ) + static FT_Error + sfnt_dir_check( FT_Stream stream, + FT_ULong offset, + FT_UInt num_tables ) { - FT_Error error; - FT_UInt nn, has_head = 0; - const FT_ULong glyx_tag = FT_MAKE_TAG('g','l','y','x'); - const FT_ULong locx_tag = FT_MAKE_TAG('l','o','c','x'); + FT_Error error; + FT_UInt nn, has_head = 0; + + const FT_ULong glyx_tag = FT_MAKE_TAG('g','l','y','x'); + const FT_ULong locx_tag = FT_MAKE_TAG('l','o','c','x'); static const FT_Frame_Field sfnt_dir_entry_fields[] = { @@ -176,11 +175,13 @@ FT_FRAME_END }; + /* if 'num_tables' is 0, read the table count from the file */ if ( num_tables == 0 ) { FT_ULong format_tag; + if ( FT_STREAM_SEEK( offset ) || FT_READ_ULONG ( format_tag ) || FT_READ_USHORT( num_tables ) || @@ -197,17 +198,19 @@ { TT_TableRec table; + if ( FT_STREAM_READ_FIELDS( sfnt_dir_entry_fields, &table ) ) goto Bad_Format; if ( offset + table.Offset + table.Length > stream->size && - table.Tag != glyx_tag && table.Tag != locx_tag ) + table.Tag != glyx_tag && table.Tag != locx_tag ) goto Bad_Format; if ( table.Tag == TTAG_head ) { FT_UInt32 magic; + has_head = 1; if ( table.Length != 0x36 || @@ -232,6 +235,7 @@ goto Exit; } + /*************************************************************************/ /* */ /* */ @@ -263,10 +267,10 @@ /* values of `search_range', `entry_selector', and `range_shift'. */ /* */ FT_LOCAL_DEF( FT_Error ) - TT_Load_SFNT_Header( TT_Face face, - FT_Stream stream, - FT_Long face_index, - SFNT_Header sfnt ) + TT_Load_SFNT_Header( TT_Face face, + FT_Stream stream, + FT_Long face_index, + SFNT_Header sfnt ) { FT_Error error; FT_ULong format_tag, offset; diff --git a/src/sfnt/ttload.h b/src/sfnt/ttload.h index f7981dd9f..ca38f6cba 100644 --- a/src/sfnt/ttload.h +++ b/src/sfnt/ttload.h @@ -41,15 +41,15 @@ FT_BEGIN_HEADER FT_LOCAL( FT_Error ) - TT_Load_SFNT_Header( TT_Face face, - FT_Stream stream, - FT_Long face_index, - SFNT_Header sfnt ); + TT_Load_SFNT_Header( TT_Face face, + FT_Stream stream, + FT_Long face_index, + SFNT_Header sfnt ); FT_LOCAL( FT_Error ) - TT_Load_Directory( TT_Face face, - FT_Stream stream, - SFNT_Header sfnt ); + TT_Load_Directory( TT_Face face, + FT_Stream stream, + SFNT_Header sfnt ); FT_LOCAL( FT_Error ) TT_Load_Any( TT_Face face, diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c index 62ba5775d..d07427d5c 100644 --- a/src/truetype/ttdriver.c +++ b/src/truetype/ttdriver.c @@ -334,112 +334,6 @@ } - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** ****/ - /**** C H A R A C T E R M A P P I N G S ****/ - /**** ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* */ - /* Get_Char_Index */ - /* */ - /* */ - /* Uses a charmap to return a given character code's glyph index. */ - /* */ - /* */ - /* charmap :: A handle to the source charmap object. */ - /* charcode :: The character code. */ - /* */ - /* */ - /* Glyph index. 0 means `undefined character code'. */ - /* */ - static FT_UInt - Get_Char_Index( TT_CharMap charmap, - FT_Long charcode ) - { - FT_Error error; - TT_Face face; - TT_CMapTable cmap; - - - cmap = &charmap->cmap; - face = (TT_Face)charmap->root.face; - - /* Load table if needed */ - if ( !cmap->loaded ) - { - SFNT_Service sfnt = (SFNT_Service)face->sfnt; - - - error = sfnt->load_charmap( face, cmap, face->root.stream ); - if ( error ) - return 0; - - cmap->loaded = TRUE; - } - - if ( cmap->get_index ) - return cmap->get_index( cmap, charcode ); - else - return 0; - } - - - /*************************************************************************/ - /* */ - /* */ - /* Get_Next_Char */ - /* */ - /* */ - /* Uses a charmap to return the next encoded char. */ - /* */ - /* */ - /* charmap :: A handle to the source charmap object. */ - /* charcode :: The character code. */ - /* */ - /* */ - /* Next char code. 0 means `no more encoded characters'. */ - /* */ - static FT_UInt - Get_Next_Char( TT_CharMap charmap, - FT_Long charcode ) - { - FT_Error error; - TT_Face face; - TT_CMapTable cmap; - - - cmap = &charmap->cmap; - face = (TT_Face)charmap->root.face; - - /* Load table if needed */ - if ( !cmap->loaded ) - { - SFNT_Service sfnt = (SFNT_Service)face->sfnt; - - - error = sfnt->load_charmap( face, cmap, face->root.stream ); - if ( error ) - return 0; - - cmap->loaded = TRUE; - } - - if ( cmap->get_next_char ) - return cmap->get_next_char ( cmap, charcode ); - else - return 0; - } - - /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index 25b92124a..cdefc9b5d 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -756,11 +756,11 @@ FT_Bool opened_frame = 0; #ifdef FT_CONFIG_OPTION_INCREMENTAL - struct FT_StreamRec_ inc_stream; + struct FT_StreamRec_ inc_stream; #endif + /* check glyph index */ - glyph_index; if ( glyph_index >= (FT_UInt)face->root.num_glyphs ) { error = TT_Err_Invalid_Glyph_Index; @@ -784,21 +784,27 @@ FT_UShort advance_width = 0; #ifdef FT_CONFIG_OPTION_INCREMENTAL - FT_Bool metrics_found = FALSE; + FT_Bool metrics_found = FALSE; - /* If this is an incrementally loaded font see if there are overriding metrics for this glyph. */ - if (face->root.incremental_interface && face->root.incremental_interface->funcs->get_glyph_metrics) + + /* If this is an incrementally loaded font see if there are */ + /* overriding metrics for this glyph. */ + if ( face->root.incremental_interface && + face->root.incremental_interface->funcs->get_glyph_metrics ) { - FT_Basic_Glyph_Metrics m; - error = face->root.incremental_interface->funcs->get_glyph_metrics(face->root.incremental_interface->object, - glyph_index,FALSE,&m,&metrics_found); - if (error) - goto Exit; - left_bearing = (FT_Short)m.bearing_x; + FT_Basic_Glyph_Metrics m; + + + error = face->root.incremental_interface->funcs->get_glyph_metrics( + face->root.incremental_interface->object, + glyph_index, FALSE, &m, &metrics_found ); + if ( error ) + goto Exit; + left_bearing = (FT_Short)m.bearing_x; advance_width = (FT_UShort)m.advance; } - if (!metrics_found) + if ( !metrics_found ) Get_HMetrics( face, glyph_index, (FT_Bool)!( loader->load_flags & FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ), @@ -806,13 +812,14 @@ &advance_width ); #else + Get_HMetrics( face, glyph_index, (FT_Bool)!( loader->load_flags & FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ), &left_bearing, &advance_width ); -#endif +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ loader->left_bearing = left_bearing; loader->advance = advance_width; @@ -825,28 +832,36 @@ } #ifdef FT_CONFIG_OPTION_INCREMENTAL - /* - Set 'offset' to the start of the glyph program relative to the start of the 'glyf' table, - and 'count' to the length of the glyph program in bytes. - If we are loading glyph data via the incremental interface, set the loader stream to a memory - stream reading the data returned by the interface. - */ - if (face->root.incremental_interface) + /* Set `offset' to the start of the glyph program relative to the */ + /* start of the 'glyf' table, and `count' to the length of the */ + /* glyph program in bytes. */ + /* */ + /* If we are loading glyph data via the incremental interface, set */ + /* the loader stream to a memory stream reading the data returned */ + /* by the interface. */ + + if ( face->root.incremental_interface ) { FT_Data data; - error = face->root.incremental_interface->funcs->get_glyph_data(face->root.incremental_interface->object, - glyph_index,&data); - if (error) + + + error = face->root.incremental_interface->funcs->get_glyph_data( + face->root.incremental_interface->object, + glyph_index, &data ); + if ( error ) goto Exit; + offset = 0; - count = data.length; - memset(&inc_stream,0,sizeof(inc_stream)); - FT_Stream_OpenMemory(&inc_stream,data.pointer,data.length); + count = data.length; + ft_memset( &inc_stream, 0, sizeof ( inc_stream ) ); + FT_Stream_OpenMemory( &inc_stream, data.pointer, data.length ); loader->stream = &inc_stream; } + else -#endif + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ { offset = face->glyph_locations[glyph_index]; @@ -1335,19 +1350,27 @@ FT_Bool metrics_found = FALSE; #ifdef FT_CONFIG_OPTION_INCREMENTAL - /* If this is an incrementally loaded font see if there are overriding metrics for this glyph. */ - if (face->root.incremental_interface && face->root.incremental_interface->funcs->get_glyph_metrics) + + /* If this is an incrementally loaded font see if there are */ + /* overriding metrics for this glyph. */ + if ( face->root.incremental_interface && + face->root.incremental_interface->funcs->get_glyph_metrics ) { - FT_Basic_Glyph_Metrics m; - FT_Error error = - face->root.incremental_interface->funcs->get_glyph_metrics(face->root.incremental_interface->object, - glyph_index,TRUE,&m,&metrics_found); - if (error) + FT_Basic_Glyph_Metrics m; + FT_Error error = + face->root.incremental_interface->funcs->get_glyph_metrics( + face->root.incremental_interface->object, + glyph_index, TRUE, &m, &metrics_found ); + + + if ( error ) return error; - top_bearing = (FT_Short)m.bearing_y; + + top_bearing = (FT_Short)m.bearing_y; advance_height = (FT_UShort)m.advance; } -#endif + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ /* Get the unscaled top bearing and advance height. */ if ( !metrics_found && face->vertical_info && @@ -1568,18 +1591,22 @@ /* seek to the beginning of the glyph table. For Type 42 fonts */ /* the table might be accessed from a Postscript stream or something */ /* else... */ + #ifdef FT_CONFIG_OPTION_INCREMENTAL - /* Don't look for the glyph table if this is an incremental font. */ - if (!face->root.incremental_interface) + + /* Don't look for the glyph table if this is an incremental font. */ + if ( !face->root.incremental_interface ) + #endif - { + + { error = face->goto_table( face, TTAG_glyf, stream, 0 ); if ( error ) { FT_ERROR(( "TT_Load_Glyph: could not access glyph table\n" )); goto Exit; } - } + } FT_MEM_SET( &loader, 0, sizeof ( loader ) ); @@ -1628,11 +1655,14 @@ loader.stream = stream; #ifdef FT_CONFIG_OPTION_INCREMENTAL - if (face->root.incremental_interface) + + if ( face->root.incremental_interface ) loader.glyf_offset = 0; - else + else + #endif - loader.glyf_offset = FT_STREAM_POS(); + + loader.glyf_offset = FT_STREAM_POS(); #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index 710fb2a4e..55f9a35f3 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -198,18 +198,24 @@ if ( face->root.face_flags & FT_FACE_FLAG_SCALABLE ) { + #ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( !face->root.incremental_interface ) error = TT_Load_Locations( face, stream ); if ( !error ) error = TT_Load_CVT ( face, stream ) || TT_Load_Programs ( face, stream ); + #else + if ( !error ) error = TT_Load_Locations( face, stream ) || TT_Load_CVT ( face, stream ) || TT_Load_Programs ( face, stream ); + #endif + } /* initialize standard glyph loading routines */ diff --git a/src/type1/t1gload.c b/src/type1/t1gload.c index 9ae49371e..545a4e336 100644 --- a/src/type1/t1gload.c +++ b/src/type1/t1gload.c @@ -53,50 +53,64 @@ /*************************************************************************/ -FT_LOCAL_DEF(FT_Error) T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder, - FT_UInt glyph_index, - FT_Data* char_string ) + FT_LOCAL_DEF( FT_Error ) + T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder, + FT_UInt glyph_index, + FT_Data* char_string ) { - T1_Face face = (T1_Face)decoder->builder.face; - T1_Font type1 = &face->type1; - FT_Error error = 0; + T1_Face face = (T1_Face)decoder->builder.face; + T1_Font type1 = &face->type1; + FT_Error error = 0; + decoder->font_matrix = type1->font_matrix; decoder->font_offset = type1->font_offset; #ifdef FT_CONFIG_OPTION_INCREMENTAL - /* For incremental fonts get the character data using the callback function. */ - if (face->root.incremental_interface) - error = face->root.incremental_interface->funcs->get_glyph_data(face->root.incremental_interface->object, - glyph_index,char_string); + + /* For incremental fonts get the character data using the */ + /* callback function. */ + if ( face->root.incremental_interface ) + error = face->root.incremental_interface->funcs->get_glyph_data( + face->root.incremental_interface->object, + glyph_index, char_string ); else + #endif /* For ordinary fonts get the character data stored in the face record. */ { char_string->pointer = type1->charstrings[glyph_index]; - char_string->length = type1->charstrings_len[glyph_index]; + char_string->length = type1->charstrings_len[glyph_index]; } - if (!error) - error = decoder->funcs.parse_charstrings(decoder,(FT_Byte*)char_string->pointer,char_string->length); + if ( !error ) + error = decoder->funcs.parse_charstrings( + decoder, (FT_Byte*)char_string->pointer, + char_string->length ); #ifdef FT_CONFIG_OPTION_INCREMENTAL + /* Incremental fonts can optionally override the metrics. */ - if (!error && face->root.incremental_interface && face->root.incremental_interface->funcs->get_glyph_metrics) + if ( !error && face->root.incremental_interface && + face->root.incremental_interface->funcs->get_glyph_metrics ) { - FT_Bool found = FALSE; - FT_Basic_Glyph_Metrics metrics; - error = face->root.incremental_interface->funcs->get_glyph_metrics(face->root.incremental_interface->object, - glyph_index,FALSE,&metrics,&found); - if (found) + FT_Bool found = FALSE; + FT_Basic_Glyph_Metrics metrics; + + + error = face->root.incremental_interface->funcs->get_glyph_metrics( + face->root.incremental_interface->object, + glyph_index, FALSE, &metrics, &found ); + if ( found ) { decoder->builder.left_bearing.x = metrics.bearing_x; decoder->builder.left_bearing.y = metrics.bearing_y; - decoder->builder.advance.x = metrics.advance; - decoder->builder.advance.y = 0; + decoder->builder.advance.x = metrics.advance; + decoder->builder.advance.y = 0; } } + #endif return error; @@ -107,8 +121,10 @@ FT_LOCAL_DEF(FT_Error) T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder, T1_Parse_Glyph( T1_Decoder decoder, FT_UInt glyph_index ) { - FT_Data data; - return T1_Parse_Glyph_And_Get_Char_String(decoder,glyph_index,&data); + FT_Data data; + + + return T1_Parse_Glyph_And_Get_Char_String( decoder, glyph_index, &data ); } @@ -230,7 +246,8 @@ FT_LOCAL_DEF(FT_Error) T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder, decoder.subrs_len = type1->subrs_len; /* now load the unscaled outline */ - error = T1_Parse_Glyph_And_Get_Char_String( &decoder, glyph_index, &char_string ); + error = T1_Parse_Glyph_And_Get_Char_String( &decoder, glyph_index, + &char_string ); if ( error ) goto Exit;