Commit Graph

3038 Commits

Author SHA1 Message Date
Werner Lemberg ccfc4b4c4e [autofit] Introduce neutral blue zones to the latin module.
Such blue zones match either the top or the bottom of a contour.  We
need them for scripts where accent-like elements directly touch the
base character (for example, some vowel signs in Devanagari, cf.
U+0913 or U+0914).

* src/autofit/afblue.hin (AF_BLUE_PROPERTY_LATIN_NEUTRAL): New
property.

* src/autofit/afblue.h: Regenerated.

* src/autofit/aflatin.h (AF_LATIN_IS_NEUTRAL_BLUE): New macro.
(AF_LATIN_BLUE_NEUTRAL): New enumeration value.

* src/autofit/aflatin.c (af_latin_metrics_init_blues,
af_latin_hints_compute_blue_edges): Handle neutral blue zones.
2014-04-28 21:13:14 +02:00
Werner Lemberg abb3fcac85 * src/autofit/hbshim.c: Partially revert commit from 2014-04-17.
Using input glyph coverage data is simply wrong.

Problem reported by Nikolaus Waxweiler <madigens@gmail.com> and
Mantas Mikulėnas <grawity@gmail.com>.
2014-04-25 22:13:32 +02:00
Werner Lemberg f193637f63 * src/raster/ftraster.c (Vertical_Sweep_Span): Use drop-out mode.
This spot has been missed while introducing support for various
drop-out modes years ago (including no drop-out mode, which this
commit fixes).

Problem reported by Patrick Thomas <pthomas505@gmail.com>.
2014-04-23 08:22:33 +02:00
Werner Lemberg d9b4470e39 * src/sfnt/pngshim.c (error_callback): s/longjmp/ft_longjmp/. 2014-04-22 07:33:07 +02:00
Werner Lemberg 98e510ee94 [autofit] Fix Savannah bug #42148.
The adaptation of the cjk auto-hinter module to blue stringsets in
2013-08-25 had three severe bugs.  Mea culpa.

1. Contrary to the latin auto-hinter, characters for reference and
   overshoot values of a blue zone are specified separately.  Due to
   the screwed-up change it didn't work at all.

2. A boolean comparison was erroneously replaced with a cast,
   causing invalid results with the `^' operator later on.  The
   visual artifact caused by this problem is the topic of the bug
   report.

3. Two flag values were inverted, causing incorrect assignment of
   reference and overshoot values.

* src/autofit/afblue.dat: Fix CJK bluestrings, introducing a new
syntax to have both reference and overshoot characters in a single
string.  This is error #1.
Add extensive comments.

* src/autofit/afblue.hin (AF_BLUE_PROPERTY_CJK_FILL): Removed, no
longer used.
(AF_BLUE_PROPERTY_CJK_TOP, AF_BLUE_PROPERTY_CJK_HORIZ): Fix values.
This is error #3.

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

* src/autofit/afcjk.c (af_cjk_metrics_init_blues): Correct error #1.
Use character `|' to separate characters for reference and overshoot
values.
Improve tracing messages, synchronizing them with the latin
auto-hinter.
(af_cjk_hints_compute_blue_edges): Fix value of `is_top_right_blue'.
This is error #2.
(af_cjk_align_linked_edge): Add tracing message.

* src/autofit/afcjk.h (AF_CJK_IS_FILLED_BLUE): Removed, no longer
used.
2014-04-20 22:11:27 +02:00
Werner Lemberg 8c7fb78b16 [autofit] More coverage fixes for complex scripts.
* src/autofit/hbshim.c (af_get_coverage): Merge input glyph coverage
of GSUB lookups into output coverage.  Otherwise, ligatures are not
handled properly.
Don't check blue zone characters for default coverage.
2014-04-17 15:53:25 +02:00
Werner Lemberg bbd8313b5d Make `FT_Get_SubGlyph_Info' actually work.
* src/base/ftobjs.c (FT_Get_SubGlyph_Info): Return FT_Err_Ok
if there is no error.
2014-04-17 01:24:36 +02:00
Werner Lemberg 181fd071ee [afblue.pl]: Minor improvements.
* src/tools/afblue.pl: Allow whitespace before comments.
Ignore whitespace in strings.
2014-04-15 16:47:05 +02:00
Werner Lemberg 8b1f2a6cda [autofit] Improve coverage handling.
* src/autofit/hbshim.c (af_get_coverage): Don't exclude glyphs
appearing in the GPOS table if we are processing the default
coverage.
2014-04-14 07:58:19 +02:00
David Weber 7630787a6a [smooth] Fix stand-alone compilation.
* src/smooth/ftgrays.c (FT_BEGIN_STMNT, FT_END_STMNT): Define.
2014-04-13 15:41:13 +02:00
Werner Lemberg 8a94b1efd6 [autofit] Redesign the recognition algorithm of strong points.
In particular, local extrema without horizontal or vertical segments
are better recognized:

  + A                + D
   \                /
    \              /
     \            /
      \          /
       \        + C
        \    /
       B +/

If the distances AB and CD are large, point B wasn't previously
detected as an extremum since the `ft_corner_is_flat' function
`swallowed' BC regardless of its direction, tagging point B as weak.
The next iteration started at B and made `ft_corner_is_flat' swallow
point C, tagging it as weak also, et voilà.

To improve that, another pass gets now performed before calling
`ft_corner_is_flat' to improve the `topology' of an outline: A
sequence of non-horizontal or non-vertical vectors that point into
the same quadrant are handled as a single, large vector.

Additionally, distances of near points are now accumulated, which
makes the auto-hinter handle them as if they were prepended to the
next non-near vector.

This generally improves the auto-hinter's rendering results.

* src/autofit/afhints.c (af_glyph_hints_reload): Implement it.

* src/autofit/afhints.h (AF_FLAGS): Remove no longer used flag
`AF_FLAG_NEAR'.
2014-04-12 20:44:33 +02:00
Werner Lemberg 71f53e122b [autofit] Improve scoring algorithm for identifying stems.
Problem reported by Karsten Lücke <karsten.luecke@kltf.de>.

The new algorithm takes care of the width of stems: If the distance
between two segments is larger than the largest stem width, the
demerits quickly increase for larger distances.  This improves
hinting of slanted fonts (especially if the inner parts of serifs
have non-horizontal `shoulders'), avoiding false stem links.

* src/autofit/aflatin.c (af_latin_hints_link_segments): Use largest
stem width (if available) to compute better demerits for distances
between stems.
(af_latin_hints_detect_features): Pass stem width array and array
size.
(af_latin_metrics_init_widths): Updated to use original algorithm.
(af_latin_hints_apply): Updated to use new algorithm.

* src/autofit/aflatin.h: Updated.
* src/autofit/afcjk.c: Updated.
2014-04-05 16:27:19 +02:00
Werner Lemberg f8555b5d8c Don't require `gzip' module for `sfnt'.
Reported by Preet <prismatic.project@gmail.com>.

* src/sfnt/sfobjs.c (woff_open_font): Guard use of
FT_Gzip_Uncompress with FT_CONFIG_OPTION_USE_ZLIB.
2014-04-03 05:45:38 +02:00
Werner Lemberg f41070fef0 Fix Savannah bug #38235.
Work around a bug in pkg-config version 0.28 and earlier: If a
variable value gets surrounded by doublequotes (in particular values
for the `prefix' variable), the prefix override mechanism fails.

* builds/unix/freetype2.in: Don't use doublequotes.
* builds/unix/unix-def.in (freetype.pc): Escape spaces in directory
names with backslashes.
2014-03-27 17:38:23 +01:00
Werner Lemberg ab76d970e7 Fix Savannah bug #41946.
Based on a patch from Marek Kašík <mkasik@redhat.com>.

* builds/unix/configure.raw (LIBS_CONFIG): Remove.
* builds/unix/freetype-config.in (libs): Hard-code value.
* builds/unix/unix-def.in: Updated.
2014-03-24 19:45:03 +01:00
Werner Lemberg d515992587 Another revert for the change from 2014-03-18.
Problem reported by Nikolaus Waxweiler <madigens@gmail.com>.

* src/base/ftcalc.c (FT_MulFix): Ensure that an `FT_MulFix' symbol
gets always exported.
2014-03-22 06:20:54 +01:00
Werner Lemberg f0c471a495 CMakeLists.txt: Another fix for include directories.
Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
2014-03-20 07:13:12 +01:00
Werner Lemberg 606c74f6d6 CMakeLists.txt: Fix include directories.
Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
2014-03-19 23:46:42 +01:00
Werner Lemberg cc7cf2c3d0 Partially revert last commit.
Found by Alexei.

* src/autofit/aflatin.c (af_latin_metrics_init_blues): Initializing
those variables is plain wrong, since we are in a loop.
2014-03-19 07:35:35 +01:00
Sean McBride 87628724a9 Fix clang warnings.
* src/autofit/aflatin.c (af_latin_metrics_init_blues): Initialize
some variables.

* src/base/ftcalc.c (FT_MulFix): Only use code if
`FT_MULFIX_INLINED' is not defined.

* src/bdf/bdfdrivr.c (bdf_cmap_class), src/cache/ftcbasic.c
(ftc_basic_image_family_class, ftc_basic_image_cache_class,
ftc_basic_sbit_family_class, ftc_basic_sbit_cache_class),
src/cache/ftccmap.c (ftc_cmap_cache_class), src/cache/ftcmanag.c
(ftc_size_list_class, ftc_face_list_class), src/pcf/pcfdrivr.c
(pcf_cmap_class), src/pfr/pfrdrivr.c (pfr_metrics_service_rec): Make
function static.

* src/type1/t1driver.c (t1_ps_get_font_value): Remove redundant
code.
2014-03-18 08:39:35 +01:00
Werner Lemberg 23367ff97f Fix Savannah bug #41869.
This works around a problem with HarfBuzz (<= 0.9.26), which doesn't
validate glyph indices returned by
`hb_ot_layout_lookup_collect_glyphs'.

* src/autofit/hbshim.c (af_get_coverage): Guard `idx'.

* docs/CHANGES: Updated.
2014-03-17 07:33:14 +01:00
Werner Lemberg 0318168ea8 * builds/unix/configure.raw: Don't show error messages of `which'. 2014-03-14 08:06:06 +01:00
Alan Coopersmith ed372b712f Fix cppcheck 1.64 warning.
* src/autofit/afglobal.c (af_face_globals_new): Catch NULL pointer
dereference in case of error.
2014-03-09 06:14:12 +01:00
Werner Lemberg 1a69dc7c16 * src/sfnt/ttcmap.c (tt_face_build_cmaps): Remove clang warning. 2014-03-09 06:06:58 +01:00
Werner Lemberg ec8853cd18 * Version 2.5.3 released.
=========================

Tag sources with `VER-2-5-3'.

* docs/VERSION.DLL: Update documentation and bump version number to
2.5.3.

* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualc/index.html,
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.5.2/2.5.3/, s/252/253/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.

* builds/unix/configure.raw (version_info): Set to 17:2:11.
* CMakeLists.txt (VERSION_PATCH): Set to 3.
* docs/CHANGES: Updated.
2014-03-06 19:13:45 +01:00
Werner Lemberg 055653668f Fixes for compilation with C++.
* src/autofit/hbshim.c (scripts): Change type to `hb_script_t'.
(af_get_coverage): Updated.
(COVERAGE): Add cast.
2014-03-06 18:56:58 +01:00
Sean McBride b24e8d3356 Remove more clang analyzer warnings.
* src/bdf/bdflib.c (_bdf_readstream), src/truetype/ttgload.c
(TT_Load_Glyph): Remove dead stores.
2014-03-06 14:54:22 +01:00
Werner Lemberg a32758f27c * builds/unix/configure.raw: Simplify. 2014-03-05 08:02:46 +01:00
suzuki toshiya 382f3ef103 Fix a bug in configure in library dependency setting
* builds/unix/configure.raw: Use `x"${xxx}" != xno' style.
2014-03-05 10:20:16 +09:00
Werner Lemberg f48f7dc84b Minor fix for `make devel'.
* builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Don't use
pkg-config for bzip2 since not all GNU/Linux distributions have
`bzip2.pc' (and the header file `bzlib.h' is located in /usr/include
normally).
2014-03-04 04:40:07 +01:00
Werner Lemberg 7ac76b50da Fix several clang static analyzer dead store warnings.
* src/autofit/afhints.c (af_glyph_hints_reload,
af_glyph_hints_align_weak_points): Remove unnecessary assignments.

* src/bdf/bdflib.c (bdf_font_load): Ditto.

* src/pshinter/pshalgo.c (psh_glyph_compute_extrema,
psh_glyph_interpolate_other_points): Ditto.

* src/type1/t1load.c (T1_Set_MM_Blend): Ditto.
2014-03-04 04:29:17 +01:00
Werner Lemberg 93ebcbd0ac Rewrite library option handling in `configure'; improve `freetype-config'.
o Introduce `auto' value for `--with-XXX' library options; this is
  now the default.

o First use `pkg-config' for library detection, then fall back to
  other tests.

* builds/unix/configure.raw (--with-zlib, --with-bzip2, --with-png,
--with-harfbuzz): Rewrite.
Use new `xxx_reqpriv', `xxx_libpriv', and `xxx_libstaticconf'
variables to collect data for `freetype2.pc' and `freetype-config'.
(FT2_EXTRA_LIBS): Renamed to ...
(ft2_extra_libs): This since it gets no longer substituted.
(REQUIRES_PRIVATE, LIBS_PRIVATE, LIBS_CONFIG, LIBSSTATIC_CONFIG):
New output variables, replacing `XXX_PKG' and `LIBXXX'.
Add notice at the end of `configure' showing the library
configuration.

* builds/unix/freetype-config.in (--static): New command line
option.
(libs): Updated.
(staticlibs): New variable, to be used if `--static' is given.
* builds/doc/freetype-config.1: Document `--static'.

* builds/unix/freetype2.in, builds/unix/unix-def.in: Updated.
2014-03-03 07:13:45 +01:00
Werner Lemberg e962a914fd Avoid `long long' warnings with older gcc compilers.
Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.

* builds/unix/configure.raw: Don't use gcc's `-pedantic' flag for
versions < 4.6.  This is especially needed for Max OS X since this
OS runs a gcc variant (or emulation) based on version 4.2.1.
2014-03-01 21:00:02 +01:00
Werner Lemberg 6030a9f755 * docs/INSTALL.CROSS: Revised and updated. 2014-03-01 14:01:12 +01:00
Werner Lemberg 646db05dfd Make `make clean' remove `freetype2.pc'.
This is a generated file at build time, not configure time.

* builds/unix/unix-def.in (DISTCLEAN): Move `freetype2.pc' to ...
(CLEAN): This variable.
2014-03-01 12:48:07 +01:00
Werner Lemberg 00c79ed968 Use pkg-config for detecting libpng and libbz2 also.
* builds/unix/configure.raw (HAVE_PKG): New variable.
Search for libbz2 using `pkg-config'; s/BZ2/BZIP2/.
Search for libpng using `pkg-config'.
Fix definition of `LIBHARFBUZZ' variable.
* builds/unix/freetype-config.in ($libs): Updated.
* builds/unix/freetype2.in: Add `URL' field.
Update `Requires.private' and `Libs.private'.
* builds/unix/unix-def.in: Updated.
2014-03-01 12:32:20 +01:00
Werner Lemberg 86026a47b3 Add configure support for HarfBuzz.
* builds/unix/pkg.m4: New file.
* builds/unix/configure.raw: Search for libharfbuzz using
`pkg-config'.
Add `--without-harfbuzz' option.
* builds/unix/freetype-config.in, builds/unix/freetype2.in,
builds/unix/unix-def.in (freetype-config, freetype2.pc): Handle
HarfBuzz.

* docs/INSTALL.UNIX: Document interdependency of Freetype with
HarfBuzz.
2014-03-01 06:57:19 +01:00
Alexei Podtelezhnikov 6adda68a75 Math simplifications.
* src/cf2blues.c (cf2_blues_init): Use `FT_MulDiv'.
* src/cf2ft.c (cf2_getScaleAndHintFlag): Use simple division.
2014-02-28 09:25:57 +01:00
Dave Arnold 135c3faebb Fix Savannah bug #41697, part 2.
* src/cff/cf2ft.c (cf2_initLocalRegionBuffer,
cf2_initGlobalRegionBuffer): It is possible for a charstring to call
a subroutine if no subroutines exist.  This is an error but should
not trigger an assert.  Split the assert to account for this.
2014-02-28 07:45:07 +01:00
Dave Arnold 0eae6eb064 Fix Savannah bug #41697, part 1.
* src/cff/cf2hints.c (cf2_hintmap_build): Return when `hintMask' is
invalid.  In this case, it is not safe to use the length of
`hStemHintArray'; the exception has already been recorded in
`hintMask'.
2014-02-28 07:45:07 +01:00
Werner Lemberg a2b5f66bf5 [sfnt] Fix Savannah bug #41696.
* src/sfnt/ttcmap.c (tt_cmap0_validate, tt_cmap2_validate,
tt_cmap4_validate, tt_cmap14_validate): Fix limit tests.
2014-02-26 19:50:18 +01:00
Werner Lemberg eee4ff8d5a [winfnt] Fix Savannah bug #41694.
* src/winfonts/winfnt.c (FNT_Load_Glyph): Check glyph offset.
2014-02-26 18:12:36 +01:00
Werner Lemberg 08c628d128 [cff] Fix Savannah bug #41693.
* src/cff/cffload.c (CFF_Load_FD_Select): Reject empty array.
2014-02-26 14:18:03 +01:00
Werner Lemberg 9a56764037 [bdf] Fix Savannah bug #41692.
bdflib puts data from the input stream into a buffer in chunks of
1024 bytes.  The data itself gets then parsed line by line, simply
increasing the current pointer into the buffer; if the search for
the final newline character exceeds the buffer size, more data gets
read.

However, in case the current line's end is very near to the buffer
end, and the keyword to compare with is longer than the current
line's length, an out-of-bounds read might happen since `memcmp'
doesn't stop properly at the string end.

* src/bdf/bdflib.c: s/ft_memcmp/ft_strncmp/ to make comparisons
stop at string ends.
2014-02-26 13:08:07 +01:00
Werner Lemberg 6b290fd21c Fix Savannah bug #32902.
Patch taken from

  https://code.google.com/p/sumatrapdf/source/browse/trunk/ext/_patches/freetype2.patch?spec=svn8620&r=8620#87

with slight modifications.

* src/type1/t1parse.c (T1_Get_Private_Dict): Add heuristic test to
handle fonts that incorrectly use \r at the beginning of an eexec
block.
2014-02-19 09:31:24 +01:00
Simon Bünzli df14e6c0b9 Fix Savannah bug #41590.
* src/type1/t1load.c (parse_encoding): Protect against invalid
number.
2014-02-19 09:31:23 +01:00
suzuki toshiya cc9a0c26af fix commit comment. 2014-02-17 16:43:54 +09:00
suzuki toshiya 91c7a97b9b [autofit] Fix `make multi' compilation.
* src/hbshim.c: Include `afglobal.h' and `aftypes.h'.
2014-02-17 16:38:31 +09:00
Dave Arnold 89a94d4212 [cff] Optimize by using `FT_MulDiv'.
Suggested by Alexei.

* src/cff/cf2font.c (cf2_computeDarkening): Do it.
2014-02-12 23:45:47 +01:00
Werner Lemberg 85ee27ae93 Fix Savannah bug #41465.
* builds/unix/unix-def.in (CLEAN): Add `freetype-config'.
(DISTCLEAN): Remove `freetype-config'.
2014-02-12 23:27:41 +01:00