Commit Graph

4529 Commits

Author SHA1 Message Date
Werner Lemberg 2862686996 [truetype] Don't trust `maxp's `maxSizeOfInstructions'.
Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>; see

  http://lists.nongnu.org/archive/html/freetype-devel/2013-08/msg00005.html

for details.

* src/base/ftobjs.c (FT_Load_Glyph): Check size of `fpgm' and `prep'
tables also for setting `autohint'.

* src/truetype/ttgload.c (TT_Load_Simple_Glyph): Use code from
`TT_Process_Composite_Glyph' for handling unreliable values of
`maxSizeOfInstructions'.
2013-11-20 21:06:18 +01:00
Werner Lemberg bc25de66c1 [sfnt] Fix `OS/2' table version 5 support.
We now follow the `official' announcement from Microsoft (on the
OpenType mailing list, which unfortunately hasn't a public archive).

* include/freetype/tttables.h (TT_OS2):
s/usLowerPointSize/usLowerOpticalPointSize/,
s/usUpperPointSize/usUpperOpticalPointSize/.

* src/sfnt/ttload.c (tt_face_load_os2): Update, and set correct
default values.
2013-11-16 07:52:20 +01:00
Werner Lemberg c52b129ccd * builds/unix/ft2unix.h: Remove. No longer necessary.
* builds/unix/install.mk (install): Updated.
2013-11-13 10:06:00 +01:00
Werner Lemberg fae3820764 Simplify header file hierarchy.
This large patch changes the header file directory layout from
`include/freetype/...' to `include/...', effectively removing one
level.  Since the file `ft2build.h' is also located in `include'
(and it stays there even after installation), all FreeType header
files are now in a single directory.

Applications that use (a) `freetype-config' or FreeType's
`pkg-config' file to get the include directory for the compiler, and
(b) the documented way for header inclusion like

  #include <ft2build.h>
  #include FT_FREETYPE_H
  ...

don't need any change to the source code.

* include/freetype/*: Move up to...
* include/*: ... this directory.

* builds/amiga/include/freetype/*: Move up to...
* builds/amiga/include/*: ... this directory.

*/*: Essentially do `s@/freetype/@/@' where appropriate.

* CMakeList.txt: Simplify.
* builds/unix/freetype-config.in, builds/unix/freetype2.in: For
`--cflags', return a single directory.
* builds/unix/install.mk (install): No longer try to remove `cache'
and `internal' subdirectories; instead, remove the `freetype'
subdirectory.
2013-11-13 08:55:46 +01:00
Werner Lemberg ea5c781afa [truetype] Fix last `truetype' commit.
* src/truetype/ttgload.c (tt_get_metrics): Preserve stream position.
Return error value.
(load_truetype_glyph): Updated.
2013-11-12 08:55:26 +01:00
Werner Lemberg 7833328b90 * docs/CMAKE: New dummy file. 2013-11-10 06:26:52 +01:00
Dave Arnold dd21301ef2 [cff] Fix for hints that touch.
* src/cff/cf2hints.c (cf2_hintmap_insertHint): Fix condition for
finding index value of insertion point.
2013-11-08 10:52:51 +01:00
Werner Lemberg 5e225b7c15 [truetype] Fix handling of phantom points in composite glyphs.
Problem reported by Nigel Tao <nigeltao@golang.org>.

This is a follow-up commit to the previous one.

* src/truetype/ttgload.c (load_truetype_glyph): Call
`tt_get_metrics' after loading the glyph header.
2013-11-06 08:41:59 +01:00
Werner Lemberg 7e4b0fbfdd [truetype] Improve emulation of vertical metrics.
This commit also improves the start values of vertical phantom
points.  Kudos to Greg Hitchcock for help.

* src/truetype/ttgload.c (TT_Get_VMetrics): Add parameter to pass
`yMax' value.  Replace code with fixed Microsoft definition.
(tt_get_metrics): Updated.
(TT_LOADER_SET_PP): Add explanation how to initialize phantom
points, taken from both the OpenType specification and private
communication with Greg (which will eventually be added to the
standard).
Fix horizontal position of `pp3' and `pp4'.

* src/truetype/ttgload.h: Updated.

* src/truetype/ttdriver.c (tt_get_advances): Updated.

* docs/CHANGES: Updated.
2013-11-06 07:14:49 +01:00
Werner Lemberg b1d97810c9 Improve comment. 2013-11-06 06:52:13 +01:00
Werner Lemberg 29bca65dda Improve documentation of `FT_Load_Sfnt_Table'. 2013-11-05 23:46:25 +01:00
Werner Lemberg 507405369b * builds/windows/vc2010/freetype.vcxproj: s/v110/v100/.
PlatformToolSet version 110 is for VC2012.

Problem reported (with solution) by Dave Arnold <darnold@adobe.com>.
2013-11-05 23:19:18 +01:00
Werner Lemberg c606428693 [truetype] Correctly reset point tags for glyph components.
Problem reported by Nigel Tao <nigeltao@golang.org>.

* src/truetype/ttgload.c (TT_Process_Composite_Glyph): Fix loop.
2013-11-05 13:29:15 +01:00
Werner Lemberg e4db812790 Typos. 2013-11-03 20:29:37 +01:00
Werner Lemberg 7d449436e6 [truetype] Fix GETINFO opcode handling of subpixel hinting bits.
* src/truetype/ttinterp.c (Ins_GETINFO): Don't request bit 6 set to
get info on subpixel hinting.

* docs/CHANGES: Updated.
2013-11-02 11:36:37 +01:00
Werner Lemberg 35b0818986 Fix Savannah bug #40451.
Simply apply the patch from the bug report.

* builds/unix/ftconfig.in, builds/vms/ftconfig.h,
include/freetype/config/ftconfig.h: The used #pragma directives only
work with gcc versions 4.6 and higher.
2013-11-02 08:28:41 +01:00
Werner Lemberg afa0d59ee5 * docs/CHANGES: Updated. 2013-11-01 22:27:27 +01:00
Werner Lemberg ebf52d6a90 [truetype] Minor code refactoring.
Two benefits: The allocated FDEF (and IDEF) array gets slightly
smaller, and the `ttdebug' demo program has access to function
numbers without additional costs.

Fortunately, no changes to FontForge are necessary – this is the
only external TrueType debugger I know of, but others may exist and
should check the code accordingly.

* src/truetype/ttinterp.h (TT_CallRec): Replace `Cur_Restart' and
`Cur_End' with a pointer to the corresponding `TT_DefRecord'
structure.

* src/truetype/ttinterp.c (DO_JROT, DO_JMPR, DO_JROF, Ins_ENDF,
Ins_CALL, Ins_LOOPCALL, Ins_UNKNOWN, TT_RunIns <Invalid_Opcode>):
Updated.
2013-11-01 13:26:28 +01:00
Werner Lemberg e921bdebde Comment fix. 2013-11-01 12:41:27 +01:00
Werner Lemberg 0c61c096b8 Comment fixes. 2013-10-28 05:09:21 +01:00
Werner Lemberg ee5105107b [sfnt] Implement support for `OS/2' table version 5.
See

  http://typedrawers.com/discussion/470/new-microsoft-size-specific-design-selection-mechanism

for the announcement.

* include/freetype/tttables.h (TT_OS2): Add fields
`usLowerPointSize' and `usUpperPointSize'.  Since FreeType returns
this structure only as a pointer through `FT_Get_Sfnt_Table', there
shouldn't be any ABI problems.

* src/sfnt/ttload.c (tt_face_load_os2): Implement it.

* docs/CHANGES: Updated.
2013-10-27 07:25:35 +01:00
Werner Lemberg 994a859831 * README.git, docs/CHANGES, docs/INSTALL: Updated. 2013-10-24 08:50:34 +02:00
John Cary a0e4a73fd4 Provide cmake support.
* CMakeLists.txt: New file.
2013-10-24 08:49:08 +02:00
Dave Arnold 4cfa8fc5be Comment on no-stem-darkening & darkening-parameters 2013-10-23 21:31:00 +02:00
Kenneth Miller 4d87ac8a7f Provide support for x64 builds in Visual C++ project files.
* src/builds/win32: Renamed to...
* src/builds/windows: This.

* src/builds/windows/vc2010/*: Updated to handle x64 target.

* src/builds/windows/*.mk, docs/INSTALL.GNU: s/win32/windows/ where
appropriate.
2013-10-23 20:10:56 +02:00
Werner Lemberg 1eb06e67a0 Minor doc improvement. 2013-10-22 10:42:38 +02:00
Werner Lemberg db9159c471 Add md5 URL. 2013-10-22 10:27:50 +02:00
Werner Lemberg 604838d5ba * src/base/md5.c, src/base/md5.h: Updated to recent version.
* src/base/ftobjs.c: Updated; `md5.c' no longer uses `free'.
2013-10-22 01:10:10 +02:00
Werner Lemberg 75efc2d0bd [autofit] s/SMALL_TOP/X_HEIGHT/.
* src/autofit/afblue.dat: Updated.

* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.

* src/autofit/aflatin.c, src/autofit/aflatin.h,
src/autofit/atlatin2.c: Updated.
2013-10-19 21:46:03 +02:00
Werner Lemberg 34efe05ce0 * src/autofit/afblue.dat: s/MINOR/DESCENDER/.
* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
2013-10-19 21:14:40 +02:00
Werner Lemberg a5f22a9ed2 [autofit] Add description strings to script entries.
Currently, this is unused.

* src/autofit/afscript.h: Do it.
* src/autofit/afglobal.c, src/autofit/afpic.c,
src/autofit/aftypes.h: Updated.
2013-10-17 11:08:25 +02:00
Werner Lemberg 955f6a86a3 [autofit] Improve tracing message for extra light flag.
* src/autofit/aflatin.c (af_latin_metrics_scale_dim): Do it.
2013-10-16 19:47:57 +02:00
Chongyu Zhu 41632b58ef [arm] Fix thumb2 inline assembly under LLVM.
When using `ADD' with an immediate operand, the instruction is
actually `ADD Rd, Rn, #<imm12>', that is, the maximum of the
immediate operand cannot exceed 4095.  It will fail to compile with
LLVM.

However, in GCC, due to some legacy compatibility considerations,
`ADD.W' will be automatically emitted when the immediate operand is
larger than 4095.

* builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
(FT_MulFix_arm) [__GNUC__]: Support clang compiler.

* src/truetype/ttinterp.c (TT_MulFix14_arm) [__GNUC__]: Ditto.
2013-10-15 11:40:34 +02:00
Werner Lemberg b6695243b7 [autofit] Improve tracing of `latin' hinter.
* src/autofit/aflatin.c (af_latin_metrics_init_blues): Report blue
zone types.
(af_latin_metrics_scale_dim): Report scaling changes due to x height
alignment.
Report scaled stroke width and blue zone values.
2013-10-12 10:33:04 +02:00
Werner Lemberg 2c56f2ab90 Improve last ChangeLog entry. 2013-10-07 22:01:00 +02:00
Dave Arnold e845a85ea5 * src/cff/cf2font.c (cf2_computeDarkening): Avoid division by zero. 2013-10-03 23:04:29 +02:00
Werner Lemberg 1a39944fa0 Updated CHANGES file. 2013-10-03 06:16:50 +02:00
Darrell Bellert 01af71d42f * src/sfnt/ttload.c (tt_face_load_pclt): Fix `pclt_fields'. 2013-10-02 22:04:07 +02:00
Dave Arnold 0b33045285 * src/cff/cf2font.c (cf2_computeDarkening): Initialize darkenAmount.
This line was lost in commit 89ca1fd6 (from 2013-06-25).  The effect
is to use a previous darkening amount when producing an unhinted,
unscaled outline.  This can cause autohint samples in ftgrid and
ftview to be based on darkened CFF outlines instead of unhinted,
undarkened ones.
2013-10-02 11:04:06 +02:00
Dave Arnold 3a2cb0f881 Fix Savannah bug #39295.
The bug was caused by switching to the initial hintmap (the one in
effect when `moveto' executes) just before drawing the final element
in the charstring.  This ensured that the path was closed (in both
Character Space and Device Space).  But if the final element was a
curve and if the final hintmap was different enough from the initial
one, then the curve was visibly distorted.

The first part of the fix is to draw the final curve using the final
hintmap as specified by the charstring.  This corrects the
distortion but does not ensure closing in Device Space.  It may
require the rasterizer to automatically generate an extra closing
line.  Depending on the hintmap differences, this line could be from
zero to a couple pixels in length.

The second part of the fix covers the case where the charstring
subpath is closed with an explicit line.  We now modify that line's
end point to avoid the distortion.

Some glyphs in the bug report font (TexGyreHeros-Regular) that show
the change are:

  25ppem    S (98)
  24ppem    eight (52)
  25.5ppem  p (85)

Curves at the *end* of a subpath are no longer distorted.  However,
some of these glyphs have bad hint substitutions in the middle of a
subpath, and these are not affected.

The patch has been tested with a set of 106 fonts that shipped with
Adobe Creative Suite 4, together with 756 Open Source CFF fonts from
Google Fonts.  There are 1.5 million glyphs, of which some 20k are
changed with the fix.  A sampling of a few hundred of these changes
have been examined more closely, and the changes look good (or at
least acceptable).

* src/cff/cf2hints.h (CF2_GlyphPathRec): New element `pathIsClosing'
to indicate that we synthesize a closepath line.

* src/cff/cf2hints.c (cf2_glyphpath_init): Updated.
(cf2_glyphpath_pushPrevElem): If closing, use first hint map (for
`lineto' operator) and adjust hint zone.
For synthesized closing lines, use end point in first hint zone.
(cf2_glyphpath_lineTo): Take care of synthesized closing lines.  In
particular, shift the detection of zero-length lines from character
space to device space.
(cf2_glyphpath_closeOpenPath): Remove assertion.
Updated.
2013-09-29 16:17:02 +02:00
Werner Lemberg 4f9760e752 [autofit] Remove outdated comment. 2013-09-25 23:32:25 +02:00
Werner Lemberg b75a8b8817 * src/autofit/aflatin.c (af_{grek,cyrl}_uniranges): Fix arrays. 2013-09-25 09:46:36 +02:00
Werner Lemberg 964317e8db Minor. 2013-09-25 09:22:40 +02:00
suzuki toshiya ac0f4454f7 [bdf, pcf] Refuse non-zero face_index.
Suggested by Akira Tagoh, see

  http://lists.gnu.org/archive/html/freetype/2013-09/msg00030.html

* src/bdf/bdfdrivr.c (BDF_Face_Init): Return Invalid_Argument error
when the font could be opened but non-zero face_index is given.
* src/pcf/pcfdrivr.c (PCF_Face_Init): Ditto.

* src/type42/t42objs.c (T42_Face_Init): Remove unrequired FT_UNUSED
macro for face_index because it is validated in later.
2013-09-25 10:57:17 +09:00
Werner Lemberg 4de7787f22 Fix Savannah bug #40090.
* src/autofit/afcjk.c (af_cjk_metrics_scale): Revert commit
306f8c5d (from 2013-08-25) affecting this function.
2013-09-23 22:10:08 +02:00
Werner Lemberg 5a4c5a5b23 [autofit] Disunify Cyrillic and Greek handling from Latin.
* src/autofit/afscript.h: Add Cyrillic and Greek.

* src/autofit/afblue.dat (AF_BLUE_STRINGSET_GREK,
AF_BLUE_STRINGSET_CYRL): Add blue zones for Greek and Cyrillic.
(AF_BLUE_STRINGSET_LATN): Fix typo.
* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.

* src/autofit/aflatin.c (af_grek_uniranges, af_cyrl_uniranges): New
arrays.
(af_grek_script_class, af_cyrl_script_class): New scripts.
* src/autofit/aflatin.h: Updated.
2013-09-22 22:37:26 +02:00
Werner Lemberg 2cca96694f * docs/CHANGES: Updated. 2013-09-20 07:23:34 +02:00
Behdad Esfahbod 31e726d939 Fix vertical size of emboldened glyphs.
Cf. https://bugzilla.gnome.org/show_bug.cgi?id=686709

* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Adjust `horiBearingY'
also.
2013-09-20 07:20:53 +02:00
Alexei Podtelezhnikov 52381c14e3 * include/freetype/ftoutln.h: Correct FT_Outline_Get_Orientation
algorithm description.
2013-09-11 23:25:56 -04:00
Werner Lemberg 3f542498b2 [autofit] Improve Hebrew rendering.
This change introduces a new blue zone property
`AF_BLUE_PROPERTY_LATIN_LONG' to make the auto-hinter ignore short
top segments.

* src/autofit/afblue.dat: Fix Hebrew blue strings.
Use AF_BLUE_PROPERTY_LATIN_LONG for AF_BLUE_STRING_HEBREW_TOP.

* src/autofit/afblue.hin (AF_BLUE_PROPERTY_LATIN_LONG): New macro.

* src/autofit/afblue.c, src/autofit/afblue.h: Updated.

* src/autofit/aflatin.c (af_latin_metrics_init_blues): Handle
`AF_LATIN_IS_LONG_BLUE'.

* src/autofit/aflatin.h (AF_LATIN_IS_LONG_BLUE): New macro.
2013-09-11 23:08:31 +02:00