summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* [woff2] Check whether known tag is in array bounds.GSoC-2019-nikhilNikhil Ramakrishnan2019-08-222-2/+13
| | | | | | | | | If table tag is not 0x3f, we expect a value between 0 and 62. If this is not the case, exit with errors. * src/sfnt/sfwoff2/c: Check whether table tag makes sense. * src/sfnt/woff2tags.c: Return 0 if tag is out of bounds.
* [woff2] More formatting and documentation.Nikhil Ramakrishnan2019-08-212-68/+103
| | | | | | | * include/freetype/internal/wofftypes.h, src/sfnt/sfwoff2.c: Implement formatting changes suggested as https://lists.nongnu.org/archive/html/freetype-devel/2019-08/msg00052.html
* * src/sfnt/sfwoff2.c: Improve trace comments.Nikhil Ramakrishnan2019-08-171-101/+54
| | | | Add tracing levels for comments, and more formatting.
* [woff2] Formatting.Nikhil Ramakrishnan2019-08-142-191/+194
| | | | * src/sfnt/sfobjs.c, src/sfnt/sfwoff2.c: Better formatting.
* [woff2] Support hmtx reconstruction when glyf is untransformed.Nikhil Ramakrishnan2019-08-141-4/+89
| | | | | | | | | `reconstruct_hmtx' requires `info->x_mins' and `info->num_glyphs' to reconstruct the hmtx table. In case glyf is not transformed, we call `get_x_mins' which does the necessary work. (get_x_mins): New function. (reconstruct_font): Call get_x_mins.
* [sfnt] Support `face->num_faces' for WOFF2 fonts.Nikhil Ramakrishnan2019-08-053-11/+46
| | | | | | | | | | | | | | | | | | | | Set correct value of `face->num_faces' for WOFF2 fonts. This is being handled separately because we only load the tables for the requested font face in `woff2_open_font' and create a single-face sfnt stream. The full discussion is at: https://lists.gnu.org/archive/html/freetype-devel/2019-08/msg00000.html * src/sfnt/sfobjs.c (sfnt_open_font): Add parameter `woff2_num_faces'. (sfnt_init_face): Introduce var `woff2_num_faces', and change `face->root.num_faces' if `woff2_num_faces' is set. * src/sfnt/sfwoff2.c (woff2_open_font): Validate requested face index and handle negative face indices. * src/sfnt/sfwoff2.h (woff2_open_font): Add parameter `num_faces' to declaration.
* [woff2] Improve memory and error handling.Nikhil Ramakrishnan2019-07-281-23/+61
| | | | | | Free up memory after use, and improve error handling. * src/sfnt/sfwoff2.c: Implement changes.
* Avoid too many calls to `FT_REALLOC'.Nikhil Ramakrishnan2019-07-182-36/+64
| | | | | | | | | | | | | | | | | | | | | | We do this by using `totalSfntSize' as an initial reference, and extending the buffer when required. This reduces rendering time considerably. * include/freetype/internal/wofftypes.h (WOFF2_HeaderRec): Add `totalSfntSize', rename `total_sfnt_size' to `actual_sfnt_size'. * src/sfnt/sfwoff2.c (write_buf): Add parameter `dst_size' to keep track of and update total size of stream. (WRITE_SFNT_BUF, WRITE_SFNT_BUF_AT): Modify macros accordingly. (pad4, store_loca, reconstruct_glyf, reconstruct_hmtx): Update parameters to accept `sfnt_size'. (woff2_open_font): Add variable `sfnt_size'. Use WOFF2 header field `totalSfntSize' as initial reference (if value makes sense) and allocate `totalSfntSize' bytes for the sfnt stream. `write_buf' handles reallocation if and when required. Also resize the stream to `actual_sfnt_size' after reconstruction.
* Reconstruct loca, hmtx and swap out stream.Nikhil Ramakrishnan2019-07-164-74/+376
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add necessary functions to reconstruct loca and hmtx tables (the 2 remaining tables that can have a transform). `woff2_open_font' is now capable of loading a woff2 font face. This code may still need more refining and better memory management. * include/freetype/internal/wofftypes.h (WOFF2_HeaderRec): Add total (final) size of sfnt stream. (WOFF2_InfoRec): Add header checksum value. * src/sfnt/sfobjs.c (sfnt_open_font): Change `face_instance_index' parameter to its pointer so its value can be modified by `woff2_open_font'. * src/sfnt/sfwoff2.c: (WRITE_SFNT_BUF_AT): New macro to write into sfnt buffer at given position. (write_buf): Add parameter `extend_buf' which allows caller to specify whether buffer should be reallocated before copying data. Modify macro `WRITE_SFNT_BUF' accordingly. (pad4): New function to pad buffer to closest multiple of 4. (store_loca): Store loca values (provided by `reconstruct_glyf') to output stream. (reconstruct_glyf): Calculate loca values and store them. (reconstruct_hmtx): Reconstruct transformed hmtx table. (reconstruct_font): Call `reconstruct_hmtx', write table record entries, and calculate table checksums. Also calculate font checksum and update `checksumAdjustment' entry in head table. (woff2_open_font): Open stream for sfnt buffer, swap out input stream and return. * src/sfnt/sfwoff2.h (woff2_open_font): Modify parameter to accept pointer to `face_index'.
* [woff2] Reconstruct transformed `glyf' table.Nikhil Ramakrishnan2019-07-134-49/+914
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reconstruct `glyf' table if it is transformed in the uncompressed table stream. Also add necessary structures, macros and functions. * include/freetype/internal/wofftypes.h (WOFF2_InfoRec, WOFF2_SubstreamRec, WOFF2_PointRec): New structures. * src/sfnt/sfwoff2.c (READ_255USHORT, READ_BASE128): Use `FT_SET_ERROR' to set implicit `error' variable. (WRITE_SHORT): New macro. (N_CONTOUR_STREAM, N_POINTS_STREAM, FLAG_STREAM, GLYPH_STREAM, COMPOSITE_STREAM, BBOX_STREAM, INSTRUCTION_STREAM): New macros to refer to substreams of the transformed `glyf' tables. (Read255UShort, ReadBase128): Return errors set by `FT_READ_XXX' macros. (with_sign, safe_int_addition): New functions to add sign to values based on a flag and perform safe addition respectively. (triplet_decode): Decode variable-length (flag, xCoordinate, yCoordinate) triplet for a simple glyph. See https://www.w3.org/TR/WOFF2/#triplet_decoding (store_points): Store decoded points in the glyph buffer. (compute_bbox): Derive bounding box for a glyph by computing the minimum and maximum x and y coordinates in the outline. (reconstruct_glyf): Main routine to reconstruct transformed `glyf' table. (reconstruct_font): Call `reconstruct_glyf'. * src/sfnt/sfwoff2.h: Add required constants. * src/sfnt/woff2tags.h: Move out constants to `sfwoff2.h'.
* [woff2] Copy un-transformed tables to sfnt stream.Nikhil Ramakrishnan2019-07-062-7/+96
| | | | | | | | | | | | | | | | Copy un-transformed tables to the sfnt stream. * src/sfnt/sfwoff2.c: (WRITE_SFNT_BUF): New macro. (write_buf): New function. Extend memory of `dst' buffer and copy bytes from `src'. (compute_ULong_sum): New function. Calculate checksum of table. (woff2_uncompress): Change `FT_Byte* sfnt' to `FT_Byte** sfnt_bytes'. This has been done because we reallocate memory to `sfnt' multiple times, which may change the pointer value of `sfnt'. This new pointer must be propogated back to the caller. Same reason for using a double pointer in `write_buf'. * src/sfnt/woff2tags.h: Define default max size to prevent overflow.
* [woff2] Create stream for uncompressed buffer.Nikhil Ramakrishnan2019-07-051-8/+141
| | | | | | | | | | Uncompressed buffer is now an `FT_Stream'. Perform basic checks and start iterating over tables. * src/sfnt/sfwoff2.c (stream_close, find_table, read_num_hmetrics): New functions. (reconstruct_font): Modify params and iterate over tables.
* [woff2] Handle TTCs and start reconstructing font.Nikhil Ramakrishnan2019-07-011-14/+63
| | | | | | | | | | | We `handle' TTCs by modifying the `indices' array to point to only those tables that are part of the requested `face_index'. Set and use `num_tables' in `WOFF2_TtcFont'. Start reconstruction of font. * src/sfnt/sfwoff2.c (reconstruct_font): New function.
* [woff2] Get known tags from function.Nikhil Ramakrishnan2019-06-303-70/+79
| | | | | | | | | | | | | | Change `KnownTags' to a function (`woff2_known_tags'). This avoids introducing a global constant array. This function returns the specified index without *any* checks. The caller must ensure that `index' is within array limits. * src/sfnt/sfwoff2.c (woff2_open_font): Change `KnownTags[...]' notation to `woff2_known_tags( ... )'. * src/sfnt/woff2tags.c: Perform changes. * src/sfnt/woff2tags.h: Update definitions.
* * src/sfnt/sfwoff2.c: Minor.Nikhil Ramakrishnan2019-06-301-2/+5
|
* Uncompress Brotli streams and face_index support.Nikhil Ramakrishnan2019-06-303-11/+73
| | | | | | | | | | | | | | | | | | WOFF2 compressed stream is now uncompressed if Brotli is available. This data is stored in a separate buffer (uncompressed_buf) because it does not contain direct table data. Certain tables have transformations applied to them, and they must be reconstructed before we can write those tables to the SFNT stream. `face_index' is now being passed as a parameter to `woff2_open_font'. * src/sfnt/sfobjs.c (sfnt_open_font): Add parameter `face_instance_index'. * src/sfnt/sfwoff2.c (woff2_uncompress): New function. (woff2_open_font): Call `woff2_uncompress'. * src/sfnt/sfwoff2.h (woff2_open_font): Modify declaration.
* * builds/unix/configure.raw: Change argument name to brotli.Nikhil Ramakrishnan2019-06-301-1/+1
|
* Add Brotli dependency and required checks.Nikhil Ramakrishnan2019-06-283-1/+88
| | | | | | | | | | Brotli is required for decompressing WOFF2 font directory streams. The library is thus being added as an optional dependency for FreeType. * builds/unix/configure.raw: Add checks for `libbrotlidec'. * devel/ftoption.h, include/freetype/config/ftoption.h (FT_CONFIG_OPTION_USE_BROTLI): New macro.
* [woff2] Write SFNT Offset table.Nikhil Ramakrishnan2019-06-241-1/+121
|
* * src/sfnt/sfwoff2.c: #undef macros.Nikhil Ramakrishnan2019-06-181-1/+6
|
* [woff2] Read table and collection directory.Nikhil Ramakrishnan2019-06-162-21/+348
| | | | | | | | | | | | * include/freetype/internal/wofftypes.h (WOFF2_TtcFontRec): New structure. (WOFF2_HeaderRec): Add more fields. * src/sfnt/woff2.c (READ_255USHORT, READ_BASE128, ROUND4): New macros. (Read255UShort, CollectionHeaderSize, compute_first_table_offset): New functions. (woff2_open_font): Add functionality to read table directory and collection directory (if present).
* [sfnt] Include `woff2tags.c' for building.Nikhil Ramakrishnan2019-06-162-1/+3
| | | | | | * src/sfnt/rules.mk: Add `woff2tags.c'. * src/sfnt/sfnt.c: Include `woff2tags.c'.
* [sfnt] Add WOFF2 constants.Nikhil Ramakrishnan2019-06-162-0/+134
| | | | | | | | | | | Add constants required for WOFF2, and known table tags as defined in the specification. See https://www.w3.org/TR/WOFF2/#table_dir_format for details. * src/sfnt/woff2tags.c, src/sfnt/woff2tags.h: New files.
* Read WOFF 2 header.Nikhil Ramakrishnan2019-06-166-0/+230
| | | | | | | | | | | | | | | Check for WOFF2 tag, call `woff2_open_font', and implement it to read header according to specification. * include/freetype/internal/fttrace.h: Add `sfwoff2.c'. * src/sfnt/rules.mk: Add `sfwoff2.c'. * src/sfnt/sfnt.c: Include `sfwoff2.c'. * src/sfnt/sfobjs.c: Check for `wOF2' tag and call `woff2_open_font'. * src/sfnt/sfwoff2.c, src/sfnt/sfwoff2.h: New files.
* Add structures for WOFF2.Nikhil Ramakrishnan2019-06-162-0/+68
| | | | | | | | | Add structures and macro for WOFF 2 header and table directory. * include/freetype/internal/wofftypes.h (WOFF2_HeaderRec, WOFF2_TableRec_): New structures. * include/freetype/tttags.h (TTAG_wOF2): New macro.
* [autofit] Disable hinting if no blue zones are available (#56450).Werner Lemberg2019-06-163-7/+64
| | | | | | | | | | | | * src/autofit/afglobal.c (af_face_global_get_metrics): Start again (with dummy hinter module) if no blue zones are present. * src/autofit/aflatin.c (af_latin_metrics_init_blues): Change signature to return error code. If no blue zones are found, update `glyph_styles' array to hold AF_STYLE_NONE_DFLT instead of the current style. (af_latin_metrics_init): Return internal error code if no blue zones are found.
* Towards better VMS support.Werner Lemberg2019-06-165-2/+40
| | | | | | | | | | More to come. * builds/vms/LIBS.OPT_IA64, builds/vms/_LINK.OPT_IA64, builds/vms/vmslib.dat: New files provided by Jouk Jansen <joukj@hrem.nano.tudelft.nl>. * builds/vms/ftconfig.h: Update, also from Jouk.
* * src/autofit/aflatin.c (af_latin_metrics_init_widths): Minor.Werner Lemberg2019-06-132-0/+8
|
* Add memory access macro summary.Werner Lemberg2019-06-131-0/+11
|
* [smooth] Restore the span buffering for direct mode only.Alexei Podtelezhnikov2019-06-132-6/+39
| | | | | | | | | | | | The buffer size FT_MAX_GRAY_SPANS is set to 10 spans, which should be enough to cover the entire scanline for simple glyphs in most cases: each slightly slanted edge needs up to two spans, plus a filling span in-between. This is not new, we used to do it before cb4388783cecc. * src/smooth/ftgrays.c (gray_TWorker): Add `spans' and `num_spans'. (gray_hline, gray_sweep): Implement the span buffering. (gray_raster_render): Use negative `num_spans' to avoid the direct mode.
* * include/freetype/ftmodapi.h (FT_DebugHook_Func): Return error.Alexei Podtelezhnikov2019-06-122-1/+8
| | | | | Fix a warning by adding a return value as in `TT_RunIns', which should not be a compatibility issue.
* Rendering considerations.Alexei Podtelezhnikov2019-06-121-0/+5
|
* * src/truetype/ttobjs.c (tt_check_trickyness_family): Add `const'.Alexei Podtelezhnikov2019-06-112-1/+5
|
* [gzip] Add support for `gzip' encoded header (#9812).Moazin Khatti2019-06-112-1/+8
|
* [type1,type42] Use `const' for string literals.Alexei Podtelezhnikov2019-06-109-53/+52
| | | | | | | | | | | * include/freetype/internal/psaux.h (PS_Table_FuncsRec): Updated. * include/freetype/internal/t1types.h (T1_EncodingRec): Updated. * src/psaux/psobjs.[ch] (ps_table_add): Updated. * src/type1/t1load.c (T1_Open_Face, parse_encoding): Updated. * src/type42/t42objs.c (T42_Open_Face): Updated. * src/type42/t42parse.c (t42_parse_encoding): Updated. * src/cff/cffobjs.c (cff_face_init): Minor.
* [bdf,pcf] Use `const' for string literals.Alexei Podtelezhnikov2019-06-105-135/+145
| | | | | | | | * src/bdf/bdf.h (bdf_property_t): Updated `name'. * src/bdf/bdflib.c (_bdf_list_split,bdf_create_property, _bdf_add_property,_bdf_ato*): Updated. * src/bdf/bdfdrivr.c (bdf_interpret_style): Updated. * src/pcf/pcfread.c (pcf_intrpret_style): Ditto.
* Update CHANGES file.Werner Lemberg2019-06-101-0/+20
|
* * src/base/ftinit.c (FT_Set_Default_Properties): Fix crash.Philip Race2019-06-072-0/+9
| | | | Terminate loop at end of environment.
* Minor.Alexei Podtelezhnikov2019-06-041-1/+0
|
* Solidify VC2005 builds.Alexei Podtelezhnikov2019-05-313-3/+9
| | | | | | * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Explicitly declare `_BitScanReverse' intrinsic. * builds/windows/visualc/freetype.vcproj [Debug]: Disable intrinsics.
* [sfnt] Separate WOFF sources and headers.Nikhil Ramakrishnan2019-05-3011-473/+617
| | | | | | | | | | | | | | | | | | | | | | Move WOFF sources and headers to separate files. * include/freetype/internal/wofftypes.h, src/sfnt/sfwoff.c, src/sfnt/sfwoff.h: New files. * include/freetype/internal/fttrace.h: Register `sfwoff.c'. * include/freetype/internal/internal.h: Define FT_INTERNAL_WOFF_TYPES_H. * include/freetype/internal/sfnt.h: Include FT_INTERNAL_WOFF_TYPES_H. * include/freetype/internal/tttypes.h: Move out WOFF structures. * src/sfnt/rules.mk: Add `sfwoff.c'. * src/sfnt/sfnt.c: Include `sfwoff.c'. * src/sfnt/sfobjs.c: Include `sfwoff.h', move out WOFF sources.
* [base] Fix `make multi'.Werner Lemberg2019-05-302-1/+10
| | | | | | Reported by Nikhil. * src/base/fterrors.c: Include FT_INTERNAL_DEBUG_H.
* [truetype] Fix copy-and-paste error (#56409).Ben Wagner2019-05-292-4/+13
| | | | | * src/truetype/ttgload.c (load_truetype_glyph): Use correct indices into `unrounded' array for phantom points.
* [truetype] Fix 32bit builds (#56404).Werner Lemberg2019-05-292-5/+14
| | | | | | | Patch suggested by Ben Wagner <bungeman@google.com>. * src/truetype/ttgxvar.c (FT_fixedToInt, FT_fixedToFdot6): Remove harmful cast to unsigned type.
* Silence gcc 7's fall-through warnings in `switch' blocks.Werner Lemberg2019-05-296-9/+56
| | | | | | | | | | Instead of an intentionally missing `break' statement there must be a comment line containing `fall through' (and nothing else) right before the next `case' statement. See https://stackoverflow.com/questions/45129741/gcc-7-wimplicit-fallthrough-warnings-and-portable-way-to-clear-them
* * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Improve accuracy.Ben Wagner2019-05-262-5/+6
|
* * src/sfnt/sfobjs.h: Minor.Nikhil Ramakrishnan2019-05-251-1/+1
|
* [truetype] Draw glyphs without deltas in variation font (#56374).Werner Lemberg2019-05-232-4/+15
| | | | | * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Always fill `unrounded' array.
* src/truetype/ttinterp.c: Give order of operations for some instructions.Werner Lemberg2019-05-211-7/+26
|
* * src/truetype/ttinterp.c (opcode_name): Improve mnemonics.Werner Lemberg2019-05-212-163/+199
|