Commit Graph

5380 Commits

Author SHA1 Message Date
Werner Lemberg 758587dbdb Don't use macro names that start with `_[A-Z]' [1/3].
Such macro names are reserved for both C and C++.

* src/bdf/bdflib.c: Replace macros of the form `_BDF_XXX' with
`BDF_XXX_'.
2016-01-12 22:20:06 +01:00
Werner Lemberg 2e9d2660b3 Don't use macro names that contain `__' [2/2].
Such macro names are reserved for both C and C++.

* src/cache/*: s/__/_/.
2016-01-12 21:40:53 +01:00
Werner Lemberg 37412ff9f4 Don't use macro names that contain `__' [1/2].
Such macro names are reserved for both C and C++.

*/*: Replace macros of the form `__XXX_H__' with `XXX_H_'.
2016-01-12 21:37:13 +01:00
Jered Gray f53bab9381 [cff] Fix usage of `|' operator.
* src/cff/cf2intrp.c (cf2_interpT2CharString) [cf2_cmdEXTENDEDNMBR,
default]: `|' is not guaranteed to be processed from left to right
by the compiler.  However, the code repeatedly calls
`cf2_buf_readByte' to get the arguments to `|' ...  Fix this.
2016-01-10 12:03:36 +01:00
Werner Lemberg 2e09812c51 [autofit] Make top-to-bottom hinting work in latin auto-hinter.
This improves rendering of scripts like Bengali or Devanagari.

* src/autofit/afhints.c (af_axis_hints_new_edge): Add parameter to
pass top-to-bottom hinting flag.  This makes the function sort edges
in descending vertical position.

* src/autofit/afhints.c: Updated.

* src/autofit/aflatin.c (af_latin_hints_compute_edges,
af_latin_hint_edges): Use `top_to_bottom_hinting' flag.

* src/autofit/afcjk.c (af_cjk_hints_compute_edges),
src/autofit/aflatin2.c (af_latin2_hints_compute_edges): Updated.
2015-12-25 08:05:30 +01:00
Werner Lemberg 172db3254c [autofit] Add hinting direction to `AF_ScriptClassRec'.
Still unused.

* src/autofit/afglobal.c (SCRIPT): Handle hinting direction.

* src/autofit/aftypes.h (AF_ScriptClassRec): Add
`top_to_bottom_hinting' field.
(AF_HINTING_BOTTOM_TO_TOP, AF_HINTING_TOP_TO_BOTTOM): New macros.
(AF_DEFINE_SCRIPT_CLASS): Updated.
2015-12-24 08:17:51 +01:00
Werner Lemberg b0de5a82f1 [autofit] Start implementing hinting direction (up/down, down/up).
Right now, it does nothing.

* src/autofit/afscript.h: Add another parameter to `SCRIPT',
specifying hinting direction.

* src/autofit/afglobal.c, scr/autofit/afglobal.h,
src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/afshaper.c,
src/autofit/aftypes.h: Extend `SCRIPT' definitions.
2015-12-23 23:25:03 +01:00
Werner Lemberg 9c1a2b0439 * src/type1/t1load.c (parse_subrs): Fix memory leak (#46744). 2015-12-22 12:05:46 +01:00
Werner Lemberg 7ce6c43c3e [base] Make hash interface symmetric.
Use `num' and `str' infixes everywhere.

* src/base/fthash.c (ft_hash_init): Renamed to...
(hash_init): ... This.
(ft_hash_str_init, ft_hash_num_init): New functions.
(ft_hash_free): Renamed to...
(ft_hash_str_free): ... This.

* include/freetype/internal/fthash.h: Updated.

* src/bdf/bdflib.c, src/type1/t1load.c, src/type1/t1objs.c: Updated.
2015-12-22 05:39:58 +01:00
Werner Lemberg 60d13bd432 [type1] Avoid shift of negative numbers (#46732).
* src/type1/t1load.c (parse_subrs): Do it.
2015-12-21 17:27:17 +01:00
Werner Lemberg bd4b8976a3 [type1, psaux] Handle large values of num_subrs correctly (#46692).
We now use a hash to map from subr indices to array elements holding
the subroutines, if necessary.

* include/freetype/internal/t1types.h: Include FT_INTERNAL_HASH_H.
(T1_FontRec): Add `subrs_hash' field.

* include/freetype/internal/psaux.h: Include FT_INTERNAL_HASH_H.
(T1_DecoderRec): Add `subrs_hash' field.

* src/type1/t1load.h (T1_LoaderRec): Add `subrs_hash' field.

* src/type1/t1driver.c: Include FT_INTERNAL_HASH_H.
(t1_ps_get_font_value) [PS_DICT_SUBR]: Look up hash if necessary.

* src/type1/t1load.c: Include FT_INTERNAL_HASH_H.
(parse_subrs): Use hash for subr indices that exceed the allocated
number of subr slots.
(t1_init_loader): Remove unnecessary code.
(t1_done_loader, T1_Open_Face): Updated.

* src/type1/t1gload.c (T1_Compute_Max_Advance, T1_Get_Advances,
T1_Load_Glyph): Updated.

* src/type1/t1objs.c (T1_Face_Done): Updated.

* src/psaux/t1decode.c: Include FT_INTERNAL_HASH_H.
(t1_decoder_parse_charstrings) [op_callsubr]: Look up hash if
necessary.

* src/cid/cidgload.c (cid_load_glyph): Updated.
2015-12-20 19:36:04 +01:00
Werner Lemberg 1caf629eef [base] Thinko: Remove free function pointer.
We don't copy keys or values while hashing.

* include/freetype/internal/fthash.h (FT_Hash_FreeFunc): Removed.
(FT_HashRec): Remove `free' field.

* src/base/fthash.c (hash_str_free): Removed.
(ft_hash_init, ft_hash_free): Updated.
2015-12-20 19:00:35 +01:00
Werner Lemberg 76e79ec9a5 [base, bdf] Don't expose `FT_Hashnode' in hash functions.
* src/base/fthash.c (hash_lookup, ft_hash_str_lookup,
ft_hash_num_lookup): Return pointer to `size_t' instead of
`FT_Hashnode'.

* include/freetype/internal/fthash.h: Updated.

* src/bdf/bdflib.c (bdf_get_property, _bdf_add_property,
bdf_get_font_property): Updated.
2015-12-20 09:03:15 +01:00
Werner Lemberg ad306eaa5e [base, bdf] Add number hashing.
* src/base/fthash.c (hash_num_lookup, hash_num_compare): New
functions.
(ft_hash_init): Add argument to select between number and string
hashing.
(ft_hash_num_insert, ft_hash_num_lookup): New functions.

* include/freetype/internal/fthash.h: Updated.

* src/bdf/bdflib.c (_bdf_parse_start): Updated.
2015-12-20 08:33:21 +01:00
Werner Lemberg 1b7549ccc7 [base] Introduce hash lookup, compare, and free function pointers.
* include/freetype/internal/fthash.c (FT_Hash_LookupFunc,
FT_Hash_CompareFunc, FT_Hash_FreeFunc): New typedefs.
(FT_HashRec): Add `lookup', `compare', and `free' fields.

* src/base/fthash.c (hash_str_lookup, hash_str_compare,
hash_str_free): New functions.
(ft_hash_init): Set function pointers.
(hash_bucket, ft_hash_free): Use them.
2015-12-20 08:00:33 +01:00
Werner Lemberg 609546c4b8 [base, bdf] Use a union as a hash key.
We want to support both an integer and a string key later on.

* include/freetype/internal/fthash.h (FT_Hashkey): New union.
(FT_HashnodeRec): Updated.
(ft_hash_insert, ft_hash_lookup): Renamed to ...
(ft_hash_str_insert, ft_hash_str_lookup): ... this.

* src/base/fthash.c (hash_bucket): Updated.
(ft_hash_insert, ft_hash_lookup): Renamed to ...
(hash_insert, hash_lookup): ... this.
(ft_hash_str_insert, ft_hash_str_lookup): New wrapper functions.

* src/bdf/bdflib.c: Updated.
2015-12-20 07:17:29 +01:00
Werner Lemberg 762b23281d Minor clean-ups. 2015-12-20 06:39:38 +01:00
Werner Lemberg 313435657d [bdf] Use new hash functions.
* src/bdf/bdf.h: Include FT_INTERNAL_HASH_H.
(hashnode, hashtable): Removed.
(bdf_font_t): Use `FT_HashRec' type for `proptbl'.

* src/bdf/bdflib.c: Remove all hash functions.
Update code for new hash structure and function names.
2015-12-19 17:02:13 +01:00
Werner Lemberg c98a40f99d [bdf, base] Lift hash functions from bdf driver to base module.
* src/base/fthash.c, include/freetype/internal/fthash.h: New files,
containing (massaged) code from `bdflib.c' and `bdf.h'.

* include/freetype/internal/internal.h (FT_INTERNAL_HASH_H): New
macro.

* src/base/ftbase.c: Include `fthash.c'.

* src/base/Jamfile (_sources): Add `fthash'.

* src/base/rules.mk (BASE_SRC): Add `fthash.c'.

* docs/LICENSE.TXT: Updated.
2015-12-19 16:59:40 +01:00
Werner Lemberg 1f80c8152b Whitespace. 2015-12-16 08:22:42 +01:00
Werner Lemberg 02451c7917 [autofit] Add blue-zone support for Bengali script.
This essentially moves the Bengali script from the `Indic' hinter to
the `Latin' hinter.

* src/autofit/afblue.dat: Add blue zone data for Bengali.

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

* src/autofit/afscript.h: Add Bengali standard characters and move
data out of AF_CONFIG_OPTION_INDIC block.

* src/autofit/afranges.c: Move Bengali data out of
AF_CONFIG_OPTION_INDIC block.

* src/autofit/afstyles.h: Update Bengali data; in particular, use
AF_WRITING_SYSTEM_LATIN.
2015-12-15 17:53:46 +01:00
Ben Wagner a512b0fe7a [bdf] Remove dead code (#46625).
The BDF specification only allows decimal numbers, no octal or
hexidecimal decoding is needed.

* src/bdf/bdflib.c (_bdf_atoul, _bdf_atol, _bdf_atous,
_bdf_atos): Remove unused code and parameters.
Update all callers.
(odigits): Remove.
2015-12-14 09:19:52 +01:00
Werner Lemberg 4099281f6e [base] Fix calls to `FT_Stream_Seek'.
* src/base/ftobjs.c (Mac_Read_sfnt_Resource, FT_Open_Face): Set
`error'.
2015-12-14 07:51:25 +01:00
Werner Lemberg 0063649d54 Whitespace, `.mailmap' update. 2015-12-14 07:02:56 +01:00
Ben Wagner f0cc1738e2 [base] Check error when seeking to data supplied offset (#46635).
* src/base/ftobjs.c (open_face_PS_from_sfnt_stream):
`ft_lookup_PS_in_sfnt_stream' returns offset and and length from
user supplied data.  Use of this these values must be checked.
2015-12-14 07:00:41 +01:00
Werner Lemberg d8f9a453b2 [autofit] Add support for Myanmar script.
* src/autofit/afblue.dat: Add blue zone data for Myanmar.

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

* src/autofit/afscript.h: Add Myanmar standard characters.

* src/autofit/afranges.c: Add Myanmar data.

* src/autofit/afstyles.h: Add Myanmar data.
2015-12-13 15:54:17 +01:00
Werner Lemberg 868d5a0eaf * src/autofit/aflatin.c (af_latin_metrics_init_blues): Minor. 2015-12-12 07:28:22 +01:00
Werner Lemberg 79a42ad283 * src/autofit/afscript.h: Avoid potential crash. 2015-12-12 07:27:14 +01:00
Werner Lemberg 4fe3b55d0b [autofit] Restore OpenType feature check.
This was removed while rewriting the HarfBuzz interface.

* src/autofit/afglobal.h (AF_FaceGlobalsRec): Add `hb_buf' field to
hold internal HarfBuzz buffer, needed for feature comparison.

* src/autofit/afglobal.c (af_face_globals_new,
af_face_globals_free): Initialize and destroy `hb_buf'.

* src/autofit/afshaper.c (af_shaper_get_cluster): Compare character
(cluster) with and without applied feature.

* src/autofit/aflatin.c (af_latin_metrics_init_blues): Fix tracing
message.
2015-12-11 08:08:48 +01:00
Werner Lemberg 3c3d7c212e Another typo. 2015-12-10 11:54:41 +01:00
Werner Lemberg 93fdf4eb89 Formatting. 2015-12-10 11:52:08 +01:00
Werner Lemberg bbe84ed972 [autofit] Remove redundant code.
* src/autofit/aflatin.c (af_latin_metrics_init_widths): Do it.
2015-12-10 09:33:41 +01:00
Werner Lemberg 5330e3de15 [autofit] Minor. 2015-12-10 08:32:58 +01:00
Werner Lemberg dd305f31f0 [autofit] Thinko.
* src/autofit/aflatin.c (af_latin_metrics_init_blues): Don't count
empty blue zones (bug introduced 2015-12-06).
2015-12-09 21:00:33 +01:00
Werner Lemberg 0164d934b6 [autofit] Introduce subscript top blue zones.
This feature is mainly for Khmer: The idea is to avoid a clash
between the top of subscript glyphs and the bottom of normal
baseline glyphs.

This only works for character clusters mapped to multiple glyphs.

* src/autofit/afblue.dat: Add subscript top blue zone for Khmer.

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

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

* src/autofit/aflatin.h (AF_LATIN_IS_SUB_TOP_BLUE,
AF_LATIN_BLUE_SUB_TOP): New macros.

* src/autofit/aflatin.c (af_latin_metrics_init_blues): Handle new
blue zone property.
Update tracing messages.
(af_latin_metrics_scale_dim): Handle new blue zone property.
(af_latin_hints_compute_blue_edges): Updated.
2015-12-09 20:04:18 +01:00
Werner Lemberg f02e1df7ac [autofit] Fix tracing message.
* src/autofit/aflatin.c (af_latin_metrics_scale_dim): Display
inactive blue zones also.
2015-12-09 14:45:30 +01:00
Werner Lemberg c13526e6af * src/autofit/afblue.dat: Add more Khmer clusters.
Some fonts have incorrect ligatures; we need more samples to get a
good mean value.

* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
2015-12-08 09:48:50 +01:00
Werner Lemberg b38ca3cbeb [autofit] Typos.
* src/autofit/afshaper.c (af_shaper_buf_create, af_shaper_get_elem)
[!FT_CONFIG_OPTION_USE_HARFBUZZ]: Make it compile.
2015-12-06 19:48:31 +01:00
Werner Lemberg facb79abdc [autofit] Add support for Khmer script.
We split Khmer into two auto-hinter scripts: `Khmer' (`khmr') and
`Khmer symbols' (`khms', U+19E0-U+19FF).

* src/autofit/afblue.dat: Add blue zone data for Khmer.

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

* src/autofit/afscript.h: Add Khmer standard characters.

* src/autofit/afranges.c: Add Khmer data.

* src/autofit/afstyles.h: Add Khmer data.
2015-12-06 19:34:59 +01:00
Werner Lemberg 24aa9c665e [autofit] Rewrite HarfBuzz interface to support character clusters.
Scripts like Khmer have blue zones that can't be directly
represented by Unicode characters.  Instead, it is necessary to let
HarfBuzz convert character clusters into proper glyph representation
forms, then deriving the blue zone information from the resulting
glyphs.

* src/autofit/hbshim.c, src/autofit/hbshim.h: Replaced by...
* src/autofit/afshaper.c, src/autofit/afshaper.h: ... these two new
files, providing a new API to access HarfBuzz.

The new API manages a HarfBuzz buffer with `af_shaper_buf_create'
and `af_shaper_buf_destroy'.  The buffer receives a UTF8 encoded
string with function `af_shaper_get_cluster', and the resulting
glyph data (indices, advance widths, vertical offsets) can be
iteratively accessed with function `af_shaper_get_elem'.

* src/autofit/afcjk.c (af_cjk_metrics_init_widths,
af_cjk_metrics_init_blues, af_cjk_metrics_check_digits): Updated.

* src/autofit/aflatin.c (af_latin_metrics_init_widths,
af_latin_metrics_init_blues, af_latin_metrics_check_digits):
Updated.

* include/freetype/internal/fttrace.h: s/afharfbuzz/afshaper/.

* src/autofit/afglobal.c: s/hbshim.h/afshaper.h/.
(af_face_globals_compute_style_coverage): Updated.

* src/autofit/afglocal.h: s/hbshim.h/afshaper.h/.

* src/autofit/autofit.c: s/hbshim.c/afshaper.c/.

* src/autofit/Jamfile, src/autofit/rules.mk (AUTOF_DRV_SRC):
Updated.
2015-12-06 18:52:41 +01:00
Werner Lemberg de5999411a [autofit] Prepare forthcoming changes.
This makes it easier to control the commits.

* src/autofit/aflatin.c (af_latin_metrics_init_blues): Add dummy
loop.  No functional change.
2015-12-06 18:18:02 +01:00
Werner Lemberg f45c0bf963 [autofit] Use string of standard characters.
This is more flexible; additionally, it would allow character
clusters.

* src/autofit/aftypes.h (SCRIPT, AF_DEFINE_SCRIPT_CLASS): Updated.
(AF_ScriptClassRec): Replace `standard_char[123]' with
`standard_charstring'.

* src/autofit/afscript.h: Replace last three character arguments
of the `SCRIPT' calls with a string parameter, holding the standard
characters (in UTF-8 encoding) separated with spaces.

* src/autofit/afglobal.c, src/autofit/afglobal.h,
src/autofit/afpic.c, src/autofit/afranges.c, src/autofit/hbshim.c
(SCRIPT): Updated.

* src/autofit/afcjk.c (af_cjk_metrics_init_widths),
src/autofit/aflatin.c (af_latin_metrics_init_widths): Updated.
2015-12-06 09:58:18 +01:00
Werner Lemberg a8a54c3060 * src/autofit/afblue.dat: Separate blue zone characters with spaces.
Another preparation for character cluster support.

* src/autofit/afblue.c, src/autofit.afblue.h: Regenerated.
2015-12-05 13:26:44 +01:00
Werner Lemberg 453722db8e * src/tools/afblue.pl (convert_ascii_chars): Don't ignore spaces.
Instead, reduce multiple spaces to a single one.  We need this later
for supporting character clusters in `afblue.dat'.
2015-12-05 13:20:30 +01:00
Werner Lemberg f7e6d51a75 * src/autofit/afblue.hin (GET_UTF8_CHAR): Use `do...while(0)'.
* src/autofit/afblue.h: Regenerated.
2015-12-05 13:08:45 +01:00
Werner Lemberg 53696f03ce * src/autofit/afwarp.c: s/INT_MIN/FT_INT_MIN/. 2015-12-05 07:44:16 +01:00
Werner Lemberg a415473820 * builds/unix/install.mk (install): Remove stale `ft2build.h'. 2015-12-03 07:49:46 +01:00
Alexei Podtelezhnikov 1b740a0076 Minor rearrangement. 2015-12-02 00:30:57 -05:00
Werner Lemberg 5b05bc6638 [type1] Avoid dangling pointer (#46572).
* src/type1/t1afm.c (T1_Read_Metrics): Properly reset
`face->afm_data'.
2015-12-01 12:09:02 +01:00
Alexei Podtelezhnikov f8c2057789 * include/freetype/ftlcdfil.h: Documentation tweak. 2015-11-28 22:43:33 -05:00